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
- ⽂件和⽬录操作命令( 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 检验文件是否一致
` ``
- 查看文件及内容处理命令( 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
标签:150,grep,运维,文件,命令,file,Linux,test,root From: https://www.cnblogs.com/ddxlljiang/p/17308183.html