Linux 运维必须掌握150个命令讲解自我总结版本

发布时间 2023-04-11 23:35:16作者: 云端码农

Linux 运维必须掌握150个命令讲解

https://wangchujiang.com/linux-command/

apt-get linux 命令 在线中⽂⼿册 (51yip.com)

explainshell.com - find(1) - search for files in a directory hierarchy

1.线上查询及帮助命令( 3 个)

man help Infos  

  1. ⽂件和⽬录操作命令( 19 个)

ls cd cp find mkdir mv rm touch file tree

ls #仅列出当前目录可见文件

ls -l #列出当前目录可见文件详细信息

ls -hl #列出详细信息并以可读大小显示文件大小

ls -al #列出所有文件【包含隐藏】的详细信息

ls --human-readable --size -l -S --classity # 按照文件大小排序

du -sh * | sort -h # 同上

1、-a:--all的缩写,显示所有的文件,包括隐藏文件(以.开头的文件)。

2、-A:--几乎全部的缩写,显示所有的文件,包括隐藏文件,但不包括表示当前目录.和上级目录..这两个文件。

cd #进入用户主目录

cd ../.. #返回上两级目录

cd !$ #把上个命令的参数作为cd参数使用

cd - #切换到上个目录的工作说明

cd $(OLDPWD) #命令会直接切换到上个目录

 

cp

cp -r dir destdir [拷贝目录加r 文件则不用]

find

#语法

find(选项)(参数)

#选项

-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;

-atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;

-cmin<分钟>:查找在指定时间之时被更改过的文件或目录;

-ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;

-depth:从指定目录下最深层的子目录开始查找;

-empty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;

-exec<执行指令>:假设find指令的回传值为True,就执行该指令;

-maxdepth<目录层级>:设置最大目录层级;

-mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;

-mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;

-perm<权限数值>:查找符合指定的权限数值的文件或目录;

-size<文件大小>:查找符合指定的文件大小的文件;

-type<文件类型>:只寻找符合指定的文件类型的文件;

```

#查看权限是644文件

find ./ -type f -perm 644

#删除指定inode编号的文件(改名字等)

[root@180-143 test]# touch 'test test$@#$$'

[root@180-143 test]# ls -li

总用量 0

33580451 -rw-r--r-- 1 root root 0 2月 15 14:14 test test$@#$$

[root@180-143 test]# find ./ -inum 33580451

./test test$@#$$

[root@180-143 test]# find ./ -inum 33580451 | xargs -i rm -rf {}

xargs 将前一参数传递到后面进行操作

```

UNIX/Linux文件系统每个文件都有三种时间戳:

访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。

修改时间 (-mtime/天,-mmin/分钟):文件最后一次修改时间。

变化时间 (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

#查看7天以前的日志以log结尾 find . -type f -mtime -7 -name "*.log"``

#统计代码行数  find . -name "*.java"|xargs cat|grep -v ^$|wc -l # 代码行数统计, 排除空行

 

mkdir

mkdir -p dir (递归创建)需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理

mv old new 移动或者重命名

rm

rm file   rm -rf file 递归强制删除非空文件夹

### `touch `

touch file

touch test_{1..100} 创建100个文件

`file`

file * #查看当前目录下的所有文件类型

[root@localhost ~]# file install.log

install.log: UTF-8 Unicode text

[root@localhost ~]# file -b install.log <== 不显示文件名称

UTF-8 Unicode text

[root@localhost ~]# file -i install.log <== 显示MIME类别。

install.log: text/plain; charset=utf-8

[root@localhost ~]# file -b -i install.log

text/plain; charset=utf-8

```

 

 

 

`tree` 用树形状表示列出当前结构

如果当前linux使用命令tree无效,需要安装tree插件,命令如下:

“yum install tree -y ”

tree -L 2 #-L n 只显示 n 层目录 (n 为数字)

tree -t #-t 用文件和目录的更改时间排序

tree -r #-r 以相反次序排列

tree -F #-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号

tree -f #在每个文件或目录之前,显示完整的相对路径名称 [root@localhost ~]# tree -d #只显示目录

tree -a #显示所有文件和目录

#列出目录/private/ 第一级文件名

tree /private/ -L 1

/private/

├── etc

├── tftpboot

├── tmp

└── var

```

了解 basename dirname shell脚本使用较多

 

### chattr     > 用来改变文件属性

#用chattr命令防止系统中某个关键文件被修改:

chattr +i /etc/fstab

chattr -i /etc/fstab 解除相关属性

#让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:

chattr +a /data1/user_act.log

 

 

### lsattr

> 查看文件的第二扩展文件系统属性

[root@180-143 test]# touch test

[root@180-143 test]# chattr +i test

[root@180-143 test]# lsattr test

----i----------- test

```

 

### md5sum

#生成一个文件insert.sql的md5值:

[root@180-143 test]# md5sum insert.sql

d41d8cd98f00b204e9800998ecf8427e insert.sql

md5sum insert.sql > insert.md5 生成md5加密检验和

md5sum -c insert.md5 检验文件是否一致

` ``

  1. 查看文件及内容处理命令( 19 个)

 

### `vi` `vim`

 

**vi命令** 是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。

 

vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用vi编辑器就必须熟练掌握着两种模式的切换。默认情况下,打开vi编辑器后自动进入命令模式。从编辑模式切换到命令模式使用“esc”键,从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键。

 

vi编辑器提供了丰富的内置命令,有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入。常用内置命令如下:

 

```

 

Esc:从编辑模式切换到命令模式;

ZZ:命令模式下保存当前文件所做的修改后退出vi;

:行号:光标跳转到指定行的行首;

:$:光标跳转到最后一行的行首;

x或X:删除一个字符,x删除光标后的,而X删除光标前的;

D:删除从当前光标到光标所在行尾的全部字符;

dd:删除光标行正行内容;

ndd:删除当前行及其后n-1行;

nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;

p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;

P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;

/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;

?字符串:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;

a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;

a:在当前字符后添加文本;

A:在行末添加文本;

i:在当前字符前插入文本;

I:在行首插入文本;

o:在当前行后面插入一空行;

O:在当前行前面插入一空行;

gg: 跳转到第一行

Shift+G: 跳转到最后一行

:wq:在命令模式下,执行存盘退出操作;

:w:在命令模式下,执行存盘操作;

:w!:在命令模式下,执行强制存盘操作;

:q:在命令模式下,执行退出vi操作;

:q!:在命令模式下,执行强制退出vi操作;

:e文件名:在命令模式下,打开并编辑指定名称的文件;

:n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;

:f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;

:set number:在命令模式下,用于在最左端显示行号;

:set nonumber:在命令模式下,用于在最左端不显示行号;

### `cat`

cat -n test #开头显示行号

[root@180-143 test]# cat 1.txt

1

2

3

 

#多行文本追加

cat > 1.txt <<EOF

1

2

3

EOF

 

cat > xx.conf <<EOF

name=zz

age=18

 

EOF

``

### `more`

more 1.txt 以多页的形式去看

 

### `head` 显示文件的开头部分

# 查看历史文件的前6行:

head -n 6 ~/.bash_history

head /etc/passwd #默认显示开头10行

head -10 /etc/passwd #显示开头的10行

head -q -n -10 显示除最后10行以外的所有内容

cat /etc/passwd | head -n 2 | tail -n 1 #只显示第二行的内容

### `tail` 在屏幕上显示指定文件的末尾若干行

 

tail file #(显示文件file的最后10行)

tail -n +20 file #(显示文件file的内容,从第20行至文件末尾)

tail -c 10 file #(显示文件file的最后10个字节)

 

tail -25 mail.log # 显示 mail.log 最后的 25 行

tail -f mail.log # 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止

tail -F mail.log # 等同于--follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪

 

 

### `cut`

#语法

cut(选项)(参数)

#选项

-b:仅显示行中指定直接范围的内容;

-c:仅显示行中指定范围的字符;

-d:指定字段的分隔符,默认的字段分隔符为“TAB”;

-f:显示指定字段的内容;

-n:与“-b”选项连用,不分割多字节字符;

--complement:补足被选择的字节、字符或字段;

--out-delimiter= 字段分隔符:指定输出内容是的字段分割符;

--help:显示指令的帮助信息;

--version:显示指令的版本信息。

 

 

例如有一个学生报表信息,包含 No、Name、Mark、Percent:

 

```shell

[root@localhost text]# cat test.txt

No Name Mark Percent

01 tom 69 91

02 jack 71 87

03 alex 68 98

 

[root@localhost text]# cut -f 1 test.txt

No

01

02

03

[root@localhost text]# cut -f2,3 test.txt

Name Mark

tom 69

jack 71

alex 68

```

### `sort `

 

```

[root@180-143 test]# netstat -ant | awk '{print $NF}' | sort | uniq -c| sort -nrk 1

74 ESTABLISHED

25 LISTEN

1 TIME_WAIT

1 State

1 established)

1 CLOSE_WAIT

netstat -ant 查找整个网络中{-a所有}所有{-n以数字方式输出}{-t tcp}tcp,并且以数字输出

[root@180-143 test]# seq 100 | sort -nr | head -n 10

100

99

98

97

96

95

94

93

92

91

```

 

 

 

### `uniq` 显示或忽略重复的行。

 

语法:

uniq [OPTION]... [INPUT [OUTPUT]]

-c, --count 在每行开头增加重复次数。

[root@180-143 test]# cat test

1 2 3

1 2 3

[root@180-143 test]# uniq test

1 2 3

```

### `wc`

 

统计文件的字节数、字数、行数

 

> 语法

 

```

wc(选项)(参数)

wc [选项]... [文件]...

wc [选项]... --files0-from=F

 

```

[root@180-143 test]# cat test

1 2 3

1 2 3

[root@180-143 test]# cat -n test

1 1 2 3

2 1 2 3

[root@180-143 test]# wc -l test

2 test

```

### `grep` `egrep`   强大的文本搜索工具

**grep** (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤/搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。

> 选项

-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。

-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。

-o # 只输出文件中匹配到的部分。

-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。

-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。

-i --ignore-case # 忽略字符大小写的差别。

 

 

> 正则表达式

^ # 锚定行的开始 如:'^grep'匹配所有以grep开头的行。

$ # 锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。

. # 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。

* # 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。

.* # 一起用代表任意字符。

[] # 匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。

[^] # 匹配一个不在指定范围内的字符,如:'[^A-Z]rep' 匹配不包含 A-Z 中的字母开头,紧跟 rep 的行

\(..\) # 标记匹配字符,如'\(love\)',love被标记为1。

\< # 锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。

\> # 锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

x\{m\} # 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。

x\{m,\} # 重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。

x\{m,n\} # 重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。

\w # 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。

\W # \w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b # 单词锁定符,如: '\bgrep\b'只匹配grep。

```

 

#### grep命令常见用法

 

在文件中搜索一个单词,命令会返回一个包含 **“match_pattern”** 的文本行:

 

```shell

grep match_pattern file_name

grep "match_pattern" file_name

```

在多个文件中查找:

grep "match_pattern" file_1 file_2 file_3 ...

 

输出除之外的所有行 **-v** 选项:

grep -v "match_pattern" file_name

 

标记匹配颜色 **--color=auto** 选项:

grep "match_pattern" file_name --color=auto

 

使用正则表达式 **-E** 选项:

grep -E "[1-9]+"

# 或

egrep "[1-9]+"

```

 

只输出文件中匹配到的部分 **-o** 选项:

echo this is a test line. | grep -o -E "[a-z]+\."

line.

 

echo this is a test line. | egrep -o "[a-z]+\."

line.

```

 

统计文件或者文本中包含匹配字符串的行数 **-c** 选项:

grep -c "text" file_name

```

 

#### grep递归搜索文件

在多级目录中对文本进行递归搜索:  grep "text" . -r -n        # .表示当前目录。

忽略匹配样式中的字符大小写:   echo "hello world" | grep -i "HELLO"

### `tr` 一定程度类似于sed

 

> 将字符进行替换压缩和删除

> 选项

-d或——delete:删除所有属于第一字符集的字符;

 

将输入字符由大写转换为小写:

echo "HELLO WORLD" | tr 'A-Z' 'a-z'

hello world

 

'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。

使用tr删除字符:

echo "hello 123 world 456" | tr -d '0-9'

hello world

 

 

### `vimdiff` 文件对比      vimdiff 1.txt 2.txt dp同步文件

 

### `dos2unix`

将DOS格式文本文件转换成Unix格式

最简单的用法就是dos2unix直接跟上文件名:    dos2unix file

 

diff

 

## 4.文件压缩及解压缩命令( 4 个)

`tar`

unzip gzip zip

 

## 5.信息显示命令( 12 个)

 

`uname` `hostname` `uptime` `stat` `du` `df` `top` `date` `free`

uname -a 查看系统内核版本信息和内核时间

hostname 主机名 hostname -I 显示看网卡的ip地址 hostname -I | awk '{print$1}'

ifconfig ens32 | awk 'NR==2{print $2}' 同上

uptime 1,现在的时间 2系统开机运转到现在的时间 3连线的使用者的数量 4最近1,5,15分钟的负载量 top分析,结合cpu的数量

stat 用于显示文件的详细信息 stat +文件

du 显示每个文件和目录的磁盘使用空间 du -sh ./* 显示当前目录所有文件的大小

df 显示磁盘的相关信息 df -h/df -i 查看系统的Inode 一个文件的组成原理通过Inode组成

Inode满了删除空文件即可 find ./ -type f -empty | xargs rm -rf

find ./ -type f size -1c 找到小于一个字节的

top 显示或者管理执行中的命令

free 显示内存使用情况 shared 当前已经废弃不用的 buff/cache 写缓冲/读缓存

 

dmesg cal

 

## 6.搜索文件命令( 4 个)

 

### `which`   查找并显示给定命令的绝对路径

**which命令** 用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

[root@localhost ~]# which pwd

/bin/pwd

[root@localhost ~]# which adduser

/usr/sbin/adduser

 

find

### `whereis`           查找二进制程序、代码等相关文件路径

[root@180-143 test]# whereis pwd

pwd: /usr/bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz /usr

```

locate

 

## 7.用户管理命令( 10 个)

`useradd` `userdel ` `passwd` `id` `su ` `visudo` `sudo`

usermod groupadd chage

## 8.基础网络操作命令( 10 个)

`ifconfig`          `netstat`

`ping ` icmp arp 地址解析协议 内网通信基于arp协议进行广播

`route``telnet``nc``ssh``scp``wget`

​ ifup ifdown

## 9.深入网络操作命令( 6 个)

`nslookup` `dig` 两个命令类似 解析DNS的 nslookup +域名

1修改 DNS配置 DNS将域名解析为IP地址

 

[root@localhost ~]# cat /etc/resolv.conf DNS的配资

# Generated by NetworkManager

nameserver 223.5.5.5

nameserver 223.6.6.6 这两个是阿里的DNS

nameserver 114.114.114.114 腾讯的DNS

strace -e open,connet,socket nslookup www.badui.com

```

`traceroute` 跟踪路由 显示数据包到主机的路径 traceroute +域名

 

`mtr` 跟踪路由 采用smp协议,比较快 会显示丢包率,会把平均延迟,写入 都会展示

 

`tcpdump`

tcpdump -i{网络} any{任何} not arp and not port 22 -nn

过滤掉arp协议和端口不是22的数据

tcpdump -i{网络} any{任何} not arp and not port 22 -w dns.capa

抓取上述数据

 

`nmap` 网络探测和安全审核 安全使用偏多 直接安装nmap即可 nmap +域名/地址

 

`lsof `可 nmap +域名/地址 是一个列出当前系统打开文件的工具

lsof | egrep nginx lsof | egrep nginx | egrep log

lsof -i:端口 查询当前端口网络连接

lsof /usr/sbin/httpd 找出谁在使用某个文件

lsof -i tcp 列出所有tcp网络连接

 

 

## 10.有关磁盘与文件系统的命令( 10 几个)

`mount` `umount`

`df ` 显示磁盘相关信息 监控脚本

`du` 显示每个文件和目录的磁盘使用空间

fdisk resize2fs

 

fsck dd dumpe2fs dump parted

mkfs partprobe e2fsck mkswap swapon sync

mount

 

## 11.关机和查看系统信息的命令( 3 个

shutdown halt init

 

## 12.系统管理相关命令( 8 个)

`uptime` `top` `free` `vmstat` `mpstat` `iostat`

 

sar(sysstats) chkconfig

vmstat 1 10 1代表一秒 10代表10次

mpstat 显示多个cpu的状态

iostat 监视系统输入输出设备和cpu的使用状况

目录默认755 file 644 文件默认 visudo 复制粘贴给予其他用户超级权限

## 13.系统安全相关命令( 10 个)

`chmod` `chown` `sudo`

chattr lsattr passwd

chgrp chage su umask

 

## 14.查看系统用户登陆信息的命令( 7 个)

`whoami` `who` `w ` `last`

w 显示当前登录系统的用户信息

last -n 15

last -n 10 zhangsan 输出10条zhangsan 的登录信息

lastlog users finger

## 15.其它( 19 个)

` echo` `rpm` `yum ` ``date` ` ` `clear` `history ` `nohup`

`watch` xargs {bc expr 计算} time

 

​ printf alias unalias

​ nc exec export unset type

 

rpm -ivh 安装包 安装包,并显示详细信息

rpm -ql 文件名 列出程序中有哪些软件

rpm -e 安装包 移除安装包

date +%F 显示当前时间 date +%F-%T

监控系统对时间数据非常敏感

history -d 删除 vim ~.bash_history 实际写入文件位置

nohup 将程序以忽略挂起信号的方式运行起来

echo "nameXnameXnameXname" | xargs -dX -n2

name name

name name -d定义分隔符 -n定义多行输出

统计给定命令所花费的总时间time nslookup www.baidu.com

## 16.系统性能监视高级命令(12 个)

​ 内存:top free vmstat mpstat iostat sar

​ CPU:top vmstat mpstat iostat sar

​ I/O:vmstat mpstat iostat sar

​ 进程:ipcs ipcrm- lstrace

​ 负载:uptime

 

## 17.关机/重启/注销命令( 7)

​ 关机重启:shutdown init halt poweroff reboot

​ 注销退出:logout exit ctl+d ——>快捷键(生产常用)

 

## 18.进程管理:( 16 个)

kill,killall,pkill:杀掉进程

 

Runing 僵尸 不可中断D 终止模式 挂起

ps:查看进程

pstree:显示进程状态树

crontab:设置定时

 

 

bg:后台运行

fg:挂起程序

jobs:显示后台程序

pgrep:查找匹配条件的进程

 

strace:跟踪一个进程的系统调用

vmstat:报告虚拟内存统计信息

## 19.非常危险的系统命令( 5 个):

mv rm fdisk parted dd

## 20.linux 系统四位剑客( 3 个)

`grep egrep` `sed` `awk` `find`

grep( egrep) sed awk