查看当前的终端设备:tty
显示当前使用的shell: echo ${SHELL}
显示当前系统使用的所有shell: cat /etc/shells
- sh:Steve Bourne 首个重要的标准Unix Shell
- bash:Bourne-Again Shell,GPL,CentOS 和 Ubuntu 默认使用
- csh:c shell , C 语言风格
- ksh :Korn Shell, AIX 默认 shell
- zsh: MacOS默认shell
-
设置主机名(主机名不要使用下划线 、点)
- 临时:hostname NAME
- 永久:hostnamectl set-hostname NAME
-
显示命令提示符格式:echo $PS1
#改命令提示符 root@centos8 ~]# echo 'PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\ [\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"' > /etc/profile.d/env.sh
区别指定的命令是内部或外部命令: type COMMAND
刷新磁盘 echo "- - -" > /sys/class/scsi_host/$HOST/scan ($HOST换实数)
-
管理内部命令: enable
- enable cmd 启用内部命令
- enable –n cmd 禁用内部命令
- enable –n 查看所有禁用的内部命令
查看外部命令路径:which -a |--skip-alias
-
Hash缓存表:
- hash 显示hash缓存
- hash -l 显示hash缓存,可作为输入使用
- hash -p path name 将命令全路径path起别名为name
- hash -t name 打印缓存中name的路径
- hash -d name 清除name缓存
- hash -r 清除缓存
- 命令别名: alias
- alias NAME='VALUE'
- 撤消别名:unalias
- unalias [-a] name [name ...]
- 命令别名: alias
-
日期和时间
-
date 显示和设置(-s)系统时间
#date +%F
2021-05-19#date +%T
17:25:22 -
clock,hwclock: 显示硬件时钟
- -s, --hctosys 以硬件时钟为准,校正系统时钟
- -w, --systohc 以系统 时钟为准,校正硬件时钟
-
显示日历:cal [–y]
[16:47:36 root@centos8 ~]#cal 9 1752 September 1752 Su Mo Tu We Th Fr Sa 1 2 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
-
管理时区:timedatactl
- timedatactl list-timezones 列出支持时区
- timedatactl set-timezones Asia/Shanghai 修改时区
-
用户登录信息
- whoami: 显示当前登录有效用户
- who: 系统当前所有的登录会话
- w: 系统当前所有的登录会话及所做的操作
-
关机和重启
关机: halt 或 powerof
重启:reboot
-
关机或重启:shutdown [OPTION]... [TIME] [MESSAGE]
-r: reboot
-h: halt
-c:cancel
TIME:无指定,默认相当于+1(CentOS7) now: 立刻,相当于+0 +#: 相对时间表示法,几分钟之后;例如 +3 hh:mm: 绝对时间表示
-
实现会话管理:screen
- 创建新screen会话 screen –S [SESSION]
- 加入screen会话 screen –x [SESSION]
- 退出并关闭screen会话 exit
- 剥离当前screen会话 Ctrl+a,d
- 显示所有已经打开的screen会话 screen -ls
- 恢复某screen会话 screen -r [SESSION]
-
命令行历史:history
history [-c] [-d offset] [n] history -anrw [filename] history -ps arg [arg...]
- -c: 清空命令历史
- -d offset: 删除历史中指定的第offset个命令
- -n: 显示最近的n条历史
- -a: 追加本次会话新执行的命令历史列表至历史文件
- -r: 读历史文件附加到历史列表
- -w: 保存历史列表到指定的历史文件
- -n: 读历史文件中未读过的行到历史列表
- -p: 展开历史参数成多行,但不存在历史列表中
- -s: 展开历史参数成一行,附加在历史列表后
-
调用命令行历史
- 重复前一个命令使用上方向键,并回车执行
- 按 !! 并回车执行
- 输入 !-1 并回车执行
- 按 Ctrl+p 并回车执行
- !n 执行history命令输出对应序号n的命令
- !-n 执行history历史中倒数第n个命令
- !string 重复前一个以“string”开头的命令
- !?string 重复前一个包含string的命令
- !string:p 仅打印命令历史,而不执行
-
显示命令的简短描述: whatis:
刚安装后不可立即使用,需要制作数据库(CentOS 7 版本以后 mandb ,CentOS 6 版本之前 makewhatis)
-
提供命令帮助: man
man [章节] keyword
查看cpu:lscpu
查看硬盘: lsblk
查看内存:free -m
查看发行版本: cat /etc/os-release 或 lsb_release -a
查看内核版本: uname -a
查看进程树: pstree -p
查看按16进制内容: hexdump -C 文件
-
登陆提示:
- 登陆前:/etc/issue
- 登陆后: /etc/motd
-
pwd命令: printing working directory
- -P 显示真实物理路径
- -L 显示链接路径(默认)
- PWD:当前目录路径
- OLDPWD:上一次目录路径
列出目录内容:ls
ls [options] [files_or_dirs]
- -a(-A) 包含隐藏文件
- -l 显示额外的信息
- -R 目录递归
- -ld 目录和符号链接信息
- -1 文件分行显示
- -S 按从大到小排序
- -t 按mtime(内容修改时间)排序
- -u 配合-t选项,显示并按atime(访问时间)从新到旧排序
- -U 按目录存放顺序显示
- -X 按文件后缀排序
- -F 按类型加后缀显示
- -r 倒序
-
查看文件状态 stat
- access time 访问时间,atime,读取文件内容
- modify time 修改时间,mtime,改变文件内容(数据)
- change time 改变时间,ctime,元数据发生改变
-
确定文件类型: file
file [options] ...
- -b 列出文件辨识结果时,不显示文件名称
- -f filelist 列出文件filelist中文件名的文件类型
- -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
- -L 查看对应软链接对应文件的文件类型
将windows10上文本默认的编码转换成UTF-8:
iconv -f gb2312 win.txt -o win2.txt
将windows的文本格式转换成Linux的文本格式:
dos2unix windows.txt
-
创建空文件和刷新时间:touch
touch [OPTION]... FILE...
- -a 仅改变 atime和ctime
- -m 仅改变 mtime和ctime
- -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
- -c 如果文件不存在,则不予创建
-
复制文件和目录:cp
cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
- -i 覆盖前提示
- -n 不覆盖,注意两者顺序
- -r, -R 递归复制目录及内部的所有内容
- -a 归档,相当于-dR --preserv=all
- -d --no-dereference --preserv=links 不复制原文件,只复制链接名
- --preserv[=ATTR_LIST]
- mode: 权限
- ownership: 属主属组
- timestamp: stat时间
- links
- xattr
- context
- all
- -p 等同--preserv=mode,ownership,timestamp
- -v --verbose 详情
- -f --force
- -u --update 只复制源比目标更加新的文件或目标不存在的文件
- -b 目标存在,覆盖前先备份,形式为 filename~
- --backup=numbered 目标存在,覆盖前先备份加数字后缀
-
移动和重命名文件:mv
mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
- -i 交互式
- -f 强制
- -b 目标存在,覆盖前先备份
-
rename 批量修改文件名
rename [options] <expression> <replacement> <file>...
#为所有的conf文件加上.bak后缀: rename 'conf' 'conf.bak' f* #去掉所有的bak后缀: rename '.bak' '' *.bak
-
显示目录树 tree
- -d: 只显示目录
- -L level:指定显示的层级数目
- -P pattern: 只显示由指定wild-card pattern匹配到的路径
-
创建目录mkdir
- -p: 存在于不报错,且可自动创建所需的各目录
- -v: 显示详细信息
- -m MODE: 创建目录时直接指定权限
删除空目录 rmdir
-
链接 ln
filename [linkname ]
硬链接特点
- 创建硬链接会增加额外的记录项以引用文件
- 对应于同一文件系统上一个物理文件
- 每个目录引用相同的inode号
- 创建时链接数递增
- 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文 件被删除
- 不能跨越驱动器或分区
- 不支持对目录创建硬链接
软链接特点
- 一个符号链接的内容是它引用文件的名称
- 可以对目录创建软链接
- 可以跨分区的文件实现
- 引用b同的inode号
- 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的 引用计数
- 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
-
标准输出和错误重新定向: >
1> 或 > 把STDOUT重定向到文件
>| 强制覆盖
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
>> 追加标准输出重定向至文件
-
2>> 追加标准错误重定向至文件
cat /dev/null > /data/file.logsh
-
转换和删除字符: tr
tr [OPTION]... SET1 [SET2]
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
#该命令会把/etc/issue中的小写字符都转换成大写字符 tr ‘a-z’ ‘A-Z’< /etc/issue #删除fstab文件中的所有abc中任意字符 tr –d abc < /etc/fstab #转换windows文本到linux文本 tr -d '\r' < windows.txt > windows2.txt
-
标准输入重定向: <
[root@centos8 ~]#echo 2^3 > bc.log [root@centos8 ~]#cat bc.log 2^3 [root@centos8 ~]#bc < bc.log 8
-
多行重定向: <<
mail -s "Please Call" admin@magedu.com <<EOF > Hi Wang > > Please give me a call when you get in. We may need > to do some maintenance on server1. > > Details when you're on-site > Zhang
管道:
命令1 | 命令2 | 命令3 | …
```shell
# 标准和错误输出都传递
[root@centos8 ~]#ls /data /xxx 2>&1 | tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXX': NO SUCH FILE OR DIRECTORY
/DATA:
ALL.LOG
F1.TXT
PASSWD.LOG
STERR.LOG
STOUT.LOG
TEST.LOG
TOUCH.LOG
# 从文件读取内容改密码(非交互式)
[root@centos8 ~]#cat p.txt | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
# 从字符串读取内容改密码
[root@centos8 ~]#echo magedu | passwd --stdin wang
Changing password for user wang.
passwd: all authentication tokens updated successfully.
#取消完成提示
[root@centos8 ~]#echo magedu | passwd --stdin wang &> /dev/null
```
-
重定向到多个目标:tee
命令1 | tee [-a ] 文件名 | 命令2
[root@centos8 ~]#cat <<EOF | tee /etc/motd > welcome to magedu > happy new year > EOF welcome to magedu happy new year
-
生成序列:seq (-s指定分隔符)
#生成1-100并相加 [root@centos8 ~]#seq -s + 1 100 |bc 5050
-
用户管理命令
- useradd
useradd [options] LOGIN
- -u UID
- -o 配合-u 选项,不检查UID的唯一性
- -g GID 指明用户所属基本组,可为组名,也可以GID
- -c "COMMENT“ 用户的注释信息
- -d HOME_DIR 以指定的路径(不存在)为家目录
- -s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
- -G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
- -N 不创建私用组做主组,使用users组做主组
- -r 创建系统用户 CentOS 6之前: ID<500,CentOS 7以后: ID<1000
- -m 创建家目录,用于系统用户
- -M 不创建家目录,用于非系统用户
- usermod
usermod [OPTION] LOGIN
- userdel
userdel [OPTION]... Login
- -f, --force 强制
- -r, --remove 删除用户家目录和邮箱
- groupadd
- -g GID 指明GID号;[GID_MIN, GID_MAX]
- -r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000
- groupmod
- groupdel
- useradd
-
查看用户相关的ID信息 id
id [OPTION]... [USER]
- -u: 显示UID
- -g: 显示GID
- -G: 显示用户所属的组的ID
- -n: 显示名称,需配合ugG使用
-
设置密码 passwd
passwd [OPTIONS] UserName
- -d:删除指定用户密码
- -l:锁定指定用户
- u:解锁指定用户
- -e:强制用户下次登录修改密码
- -f:强制操作
- -n mindays:指定最短使用期限
- -x maxdays:最大使用期限
- -w warndays:提前多少天开始警告
- -i inactivedays:非活动期限
- --stdin:从标准输入接收用户密码
-
修改用户密码策略
chage [OPTION]... LOGIN
-d LAST_DAY
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE 密码过期后的宽限期
-E --expiredate EXPIRE_DATE 用户的有效期
-
换个身份执行命令:su [-] UserName -c 'COMMAND'
[wang@centos8 ~]$su - root -c "getent shadow"
设置文件的所有者chown
```
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
```
- OWNER 只修改所有者
- OWNER:GROUP 同时修改所有者和属组
- :GROUP 只修改属组,冒号也可用 . 替换
- -R: 递归
- --reference=RFILE 参考指定的的属性,来修改
- 设置文件的属组信息chgrp
```
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
```
- 修改文件权限chmod
```
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... MODE[,MODE]... FILE...
#参考RFILE文件的权限,将FILE的修改为同RFILE
chmod [OPTION]... --reference=RFILE FILE...
```
> MODE:
>
> 修改一类用户的所有权限 u= g= o= ug= a= u=,g=
>
> 修改一类用户某位或某些位权限 u+ u- g+ g- o+ o- a+ a- +
-
新建文件和目录的默认权限 umask
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶 数不变
-
新建目录的默认权限: 777-umask
#查看umask umask #模式方式显示 umask –S #输出可被调用 umask –p
-
特殊权限 Sticky 位
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件 sticky 设置在文件上无意义
chmod o+t DIR... chmod 1xxx DIR chmod o-t DIR...
权限位映射 SUID: user,占据属主的执行权限位 s:属主拥有x权限 S:属主没有x权限 SGID: group,占据属组的执行权限位 s: group拥有x权限 S:group没有x权限 Sticky: other,占据other的执行权限位 t:other拥有x权限 T:other没有x权限
-
设定文件特殊属性 chattr
设置文件的特殊属性,可以访问root 用户误操作删除或修改文件
不能删除,改名,更改
chattr +i
只能追加内容
chattr +a
显示特定属性
lsattr
-
ACL相关命令
setfacl 设置ACL权限
getfacl 可查看设置的ACL权限
-
mask 权限,只影响除所有者和other的之外的人和组的最大权限,需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
[root@centos8 data]#setfacl -m u:wang:- f1.txt [root@centos8 data]#ll total 4 -rw-r--r--+ 1 root root 709 Dec 18 14:37 f1.txt [root@centos8 data]#getfacl f1.txt # file: f1.txt # owner: root # group: root user::rw- user:wang:--- group::r-- mask::r-- other::r--
-
查看非文本内容
#16进制方式查看设备 [root@ruipeng ~]# hexdump -C -n 512 /dev/vda1 00000000 58 46 53 42 00 00 10 00 00 00 00 00 00 ef fe fb |XFSB............| ....... * 00000200 #od 即 dump files in octal and other formats [root@ruipeng ~]# echo {a..z}|tr -d ' '|od -t x1z 0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 >abcdefghijklmnop< 0000020 71 72 73 74 75 76 77 78 79 7a 0a >qrstuvwxyz.< 0000033
-
分页查看工具: more less
-
more [OPTIONS...] FILE...
- -d: 显示翻页及退出提示
- less 也可以实现分页查看文件或STDIN输出
-
-
显示文本前或后行内容 head tail
-
head [OPTION]... [FILE]...
-c # 指定获取前#字节
-n # 指定获取前#行
-
tail [OPTION]... [FILE]...
-c # 指定获取后#字节
-n # 指定获取后#行
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新建同名文 件,将无法继续跟踪文件
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件
-
-
按列抽取文本: cut
cut [OPTION]... [FILE]...
- -d DELIMITER: 指明分隔符,默认tab
- -f FILEDS:
-
: 第#个字段,例如:3
-
,#[,#]:离散的多个字段,例如:1,3,6
-
-#:连续的多个字段, 例如:1-6 混合使用:1-3,7
-
- -c 按字符切割
- --output-delimiter=STRING指定输出分隔符
-
paste 合并多个文件同行号的列到一行
paste 合并多个文件同行号的列到一行
-d 分隔符:指定分隔符,默认用TAB
-
-s : 所有行合成一行显示
[root@centos8 ~]#paste -d":" alpha.log seq.log a:1 b:2 c:3 d:4 e:5 f: g: h: [root@centos8 ~]#paste -s seq.log 1 2 3 4 5 [root@centos8 ~]#paste -s alpha.log a b c d e f g h [root@centos8 ~]#paste -s alpha.log seq.log a b c d e f g h 1 2 3 4 5
-
文本数据统计:wc
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数 -
m 只计数字符总数
-
-L 显示文件中最长行的长度
wc story.txt 39 237 1901 story.txt 行数 单词数 字节数 [root@centos8 ~]#wc -l title.txt 3 title.txt [root@centos8 ~]#cat title.txt | wc -l 3
-
文本排序sort
sort [options] file(s)
-r 执行反方向(由上至下)整理
-R 随机排序 -n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c符号做为字段界定符
-
-k # 选项按照使用c字符分隔的 # 列来整理能够使用多次
#按用户id从大到小排序 [root@ruipeng data]# cut -d: -f1,3 passwd |sort -t: -k2 -nr nobody:65534 admin:1000 systemd-coredump:999 polkitd:998 ...... root:0 #统计访问量(ip要去重) cut -d" " -f1 access_log|sort -u|wc -l
去重(连续)uniq
uniq [OPTION]... [FILE]...
- -c: 显示每行重复出现的次数
- -d: 仅显示重复过的行
- -u: 仅显示不曾重复的行
```sh
#统计日志访问最高的前三IP
[root@centos8 data]#cut -d" " -f1 access_log |sort |uniq -c|sort -nr |head -3
4870 172.20.116.228
3429 172.20.116.208
2834 172.20.0.222
```
-
比较文件 diff
patch 复制在其它文件中进行的改变(要谨慎使用)
[root@centos8 ~]#diff -u f1.txt f2.txt --- f1.txt 2019-12-13 21:31:30.892775671 +0800 +++ f2.txt 2019-12-13 22:00:14.373677728 +0800 @@ -1,4 +1,5 @@ -mage -zhang +magedu +zhang sir wang xu +shi #通过diff结果找回文件 -b选项来自动备份改变了的文件.orig [root@centos8 ~]#diff -u f1.txt f2.txt > f.patch [root@centos8 ~]#rm -f f2.txt [root@centos8 ~]#patch -b f1.txt f.patch patching file f1.txt
-
查看二进制文件的不同 cpm
[root@centos8 ~]#cmp /bin/dir /bin/ls /bin/dir /bin/ls differ: byte 737, line 2 [root@centos8 ~]#hexdump -s 730 -Cn 7 /bin/dir 000002da 00 00 47 4e 55 00 b0 |..GNU..| 000002e1 [root@centos8 ~]#hexdump -s 730 -Cn 7 /bin/ls 000002da 00 00 47 4e 55 00 93 |..GNU..| 000002e1
-
grep 对文本的(正则表达式)行基于模式进行过滤
grep [OPTIONS] PATTERN [FILE...]
--color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 相当于fgrep,不支持正则表达式
-f file 根据模式文件处理(从文件读取re)
-r 递归目录,但不处理软链接
-
-R 递归目录,但处理软链接
#分区最高利用率 [root@ruipeng ~]# df | grep '^/dev' |tr -s ' ' %|cut -d% -f5|sort -n 5 #查看当前连接次数最多的ip [root@centos8 ~]#ss -nt | grep "^ESTAB" |tr -s ' ' : |cut -d: -f6|sort |uniq -c|sort -nr|head -n3 3 10.0.0.1 1 172.16.4.100 1 172.16.31.188 #去除注释和空行 grep -v "^#\|^$" /etc/profile grep -Ev "^(#|$)" /etc/profile egrep -v "^(#|$)" /etc/profile #过滤ifconfig的IP地址 [root@ruipeng ~]# ifconfig | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' 172.26.19.212 255.255.192.0 172.26.63.255 127.0.0.1 255.0.0.0 #显示查找该结果及前后三行 [root@ruipeng data]# grep -nC3 games passwd 8-halt:x:7:0:halt:/sbin:/sbin/halt 9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10-operator:x:11:0:operator:/root:/sbin/nologin 11:games:x:12:100:games:/usr/games:/sbin/nologin 12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 13-nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin 14-dbus:x:81:81:System message bus:/:/sbin/nologin #按单词过滤 [root@ruipeng data]# grep -w bin passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync admin:x:1000:1000::/home/admin:/bin/bash
-
locate 非实时查找(数据库查找):
locate [OPTION]... [PATTERN]...
locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 索引的构建是在系统较为空闲时自动进行(周期性任务),执行
updatedb
可以更新数据库 索引构建过程需要遍历整个根文件系统,很消耗资源-i 不区分大小写的搜索
-n N 只列举前N个匹配项目
-
-r 使用基本正则表达式
#搜索名称或路径中包含“conf”的文件 locate conf #使用Regex来搜索以“.conf”结尾的文件 locate -r '\.conf$'
-
find 实时查找工具,通过遍历指定路径完成文件查找
find [OPTION]... [查找路径] [查找条件] [处理动作]
- -maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
- -mindepth level 最小搜索目录深度
- -depth -d 每个目录先处理目录内的文件,再处理目录本身(深度相反)
- -name "文件名称":支持使用glob,如:*, ?, [], [^]
- -iname "文件名称":不区分字母大小写
- -inum n 按inode号查找
- -samefile name 相同inode号的文件
- -links n 链接数为n的文件
- -regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名
- 根据属主、属组查找 -user USERNAME:查找属主为指定用户(UID)的文件 -group GRPNAME: 查找属组为指定组(GID)的文件 -uid UserID:查找属主为指定的UID号的文件 -gid GroupID:查找属组为指定的GID号的文件 -nouser:查找没有属主的文件 -nogroup:查找没有属组的文件
- 组合条件 与:-a 或:-o 非:-not !
- -path 排除目录
- -type TYPE 根据文件类型查找
- f: 普通文件
- d: 目录文件
- l: 符号链接文件
- s:套接字文件
- b: 块设备文件
- c: 字符设备文件
- p: 管道文件
[root@centos8 data]#find -regex ".*\.txt$" ./script40/b.txt ./f1.txt #查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件 find /etc -path '/etc/sane.d' -a -prune -o -name "*.conf" #查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件 find /etc \( -path "/etc/sane.d" -o -path "/etc/fonts" \) -a -prune -o -name "*.conf
- 根据时间戳 以“天”为单位
- -atime [+|-]# #: [#,#+1) +#: [#+1,∞] -#: [0,#)
- -mtime
- -ctime
- 以“分钟”为单位 : -amin -mmin -cmin
-
参数替换 xargs
find | xargs COMMAND
[root@ruipeng data]# find -name "*.sh" | xargs ls -Sl -rw-r--r-- 1 root root 876 Jun 1 22:58 ./test.sh -rw-r--r-- 1 root root 0 Jun 7 22:50 ./10.sh -rw-r--r-- 1 root root 0 Jun 7 22:50 ./110.sh -rw-r--r-- 1 root root 0 Jun 7 22:50 ./11.sh ..... #竖向显示 [root@ruipeng data]# echo {1..10} |xargs -n1 1 2 3 4 5 6 7 8 9 10 #并发执行多个进程 [root@ruipeng data]# seq 100 |xargs -i -P10 wget -P /data http://10.0.0.8/{}.html --2021-06-07 22:54:17-- http://10.0.0.8/4.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/2.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/3.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/5.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/1.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/6.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/7.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/8.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/9.html Connecting to 10.0.0.8:80... --2021-06-07 22:54:17-- http://10.0.0.8/10.html
-
压缩解压缩
-
compress和uncompress
compress Options [file ...]
- -d 解压缩,相当于uncompress
- -c 结果输出至标准输出,不删除原文件
- -v 显示详情
-
gzip和gunzip
gzip [OPTION]... FILE ...
-d 解压缩,相当于gunzip
-c 结果输出至标准输出,保留原文件不改变
-
-# 指定压缩比,#取值为1-9,值越大压缩比越大
cat messages | gzip > m.gz
:内容压缩zcat file.gz 不显式解压缩的前提下查看文本文件内容
bzip2和bunzip2(非系统自带)
bzip2 [OPTION]... FILE ...
-k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-
-# 1-9,压缩比,默认为9
bunzip2 file.bz2 解压缩
bzcat file.bz2 不显式解压缩的前提下查看文本文件内容
-
xz和unxz
xz [OPTION]... FILE ...
-k keep, 保留原文件
-d 解压缩
-c 结果输出至标准输出,保留原文件不改变
-# 压缩比,取值1-9,默认为6
unxz file.xz 解压缩
xzcat file.xz 不显式解压缩的前提下查看文本文件内容
-
zip和unzip
#打包并压缩 zip –r /backup/sysconfig.zip /etc/sysconfig/ #默认解压缩至当前目录 unzip /backup/sysconfig.zip #解压缩至指定目录 unzip /backup/sysconfig.zip -d /tmp cat /var/log/messages | zip messages - unzip -p message.gz > message #-p 表示管道
-
打包和解包 tar 磁带归档(Tape ARchive),常用于备份
tar -cpvf /PATH/FILE.tar FILE...
(1) 创建归档,保留权限
tar -cpvf /PATH/FILE.tar FILE...
(2) 追加文件至归档: 注:不支持对压缩文件追加
tar -rf /PATH/FILE.tar FILE...
(3) 查看归档文件中的文件列表
tar -t -f /PATH/FILE.tar
(4) 展开归档
tar xf /PATH/FILE.tar tar xf /PATH/FILE.tar -C /PATH/
(5) 结合压缩工具实现:
- -z 相当于gzip压缩工具
- -j 相当于bzip2压缩工具
- -J 相当于xz压缩工具
[root@centos8 ~]#tar zcvf etc.tar.gz /etc/ [root@centos8 ~]#tar jcvf etc.tar.bz2 /etc/ [root@centos8 ~]#tar Jcvf etc.tar.xz /etc/
--exclude 排除文件
tar zcvf /root/a.tgz --exclude=/app/host1 --exclude=/app/host2 /app
- -T 选项指定输入文件
- -X 选项指定包含要排除的文件列表
注意:在指定排除目录的时候,目录的话结尾不能带/否则将会排除失败。比如--exclude=tomcat/logs如果写成--exclude=tomcat/logs/,则打包的时候还是会打进去。
-
-
sed 即 stream EDitor,行编辑器
sed [option]... 'script;script;...' inputfile...
- -n 不输出模式空间内容到屏幕,即不自动打印
- -e 多点编辑
- -f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
- -r, -E 使用扩展正则表达式
- -i.bak 备份文件并原处编辑
- script格式:
'地址命令'
地址:
1. 不给地址:对全文进行处理 2. 单地址: #:指定的行,$:最后一行 /pattern/:被此处模式所能够匹配到的每一行 3. 地址范围: #,# #,+# /pat1/,/pat2/ #,/pat/ 4. 步进:~ 1~2 奇数行 2~2 偶数行
命令:
p 打印当前模式空间内容,追加到默认输出之后 d 删除模式空间匹配的行,并立即启用下一轮循环 a [\\]text 在指定行后面追加文本,支持使用\n实现多行追加 i [\\]text 在行前面插入文本 c [\\]text 替换行为单行或多行文本 w /path/file 保存模式匹配的行至指定文件 r /path/file 读取指定文件的文本至模式空间中匹配到的行后 = 为模式空间中的行打印行号 ! 模式空间中匹配行取反处理 s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s### 替换修饰符: g 行内全局替换 p 显示替换成功的行 w /PATH/FILE 将替换成功的行保存至文件中
-
awk 格式化文本输出
awk [options] 'program' var=value file…
awk [options] -f programfile var=value file…
program通常是被放在单引号中,并可以由BEGIN语句块、模式匹配的通用语句块、END语句块组成
- -F “分隔符” 指明输入时用到的字段分隔符
- -v var=value 变量赋值
[root@centos8 ~]#awk '{print "hello,awk"}' [root@centos8 ~]#awk -F: '{print "wang"}' /etc/passwd [root@centos8 ~]#awk -F: '{print}' /etc/passwd [root@centos8 ~]#awk -F: '{print 0}' /etc/passwd [root@centos8 ~]#awk -F: '{print1,3}' /etc/passwd [root@centos8 ~]#awk -F: '{print1"\t"3}' /etc/passwd [root@centos8 ~]#grep "^UUID" /etc/fstab |awk {'print2,3'} / xfs /boot ext4 /data xfs swap swap [root@centos8 ~]#awk '{print1}' access_log |sort |uniq -c|sort -nr|head 4870 172.20.116.228 3429 172.20.116.208 2834 172.20.0.222 2613 172.20.112.14 2267 172.20.0.227 2262 172.20.116.179 2259 172.20.65.65 1565 172.20.0.76 1482 172.20.0.200 1110 172.20.28.145 [root@centos8 ~]#df | awk -F"[[:space:]]+|%" '{print 5}' Use 0 0 1 0 5 1 92 1 [root@centos8 ~]#df | grep "^/dev/sd" | awk -F"[[:space:]]+|%" '{print5}' 5 1 92 [root@centos8 ~]#df | awk -F"[[:space:]]+|%" '/^\/dev\/sd/{print $5}' 5 1 92
awk内置变量
FS:输入字段分隔符,默认为空白字符,功能相当于 -F
#user uid shell [root@localhost ~]# awk -F: '{print $1,$3,$7}' /etc/passwd #user:uid [root@localhost ~]# awk -v FS=":" '{print $1FS$3}' /etc/passwd
OFS:输出字段分隔符,默认为空白字符
[root@localhost ~]# awk -v FS=':' -v OFS='#' '{print $1,$3,$7}' /etc/passwd
RS:输入记录分隔符,指定输入时的换行符
awk -v RS=' ' '{print }' /etc/passwd
ORS:输出记录分隔符,输出时用指定符号代替换行符[root@localhost ~]# awk -v RS=' ' -v ORS='--' '{print $0}' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP--User:/var/ftp:/sbin/nologin nobody:x:65534:65534:Kernel--Overflow--User:/:/sbin/nologin sshd:x:74:74:Privilege-separated--SSH:/var/empty/sshd:/sbin/nologin unbound:x:999:993:Unbound--DNS--resolver:/etc/unbound:/sbin/nologin polkitd:x:998:992:User--for--polkitd:/:/sbin/nologin ……
NF:字段数量
[root@localhost ~]# awk '{print NF}' /etc/fstab 0 1 2 10 1 9 12 1 11 6 1 6 6 6
NR:记录编号
[root@localhost ~]# awk -F: '{print NR}' /etc/passwd 1 2 3 4 5 6 7 8 9 10 11 ……
FNR:多个文件分别计数,记录号
[root@localhost ~]# awk '{print FNR}' /etc/fstab /etc/inittab 1 2 3 …… 14 1 2 3 4 …… 12 [root@ruipeng ~]# awk '{print FNR,$0}' /etc/issue /etc/redhat-release 1 \S 2 Kernel \r on an \m 3 1 CentOS Linux release 8.2.2004 (Core)
FILENAME:当前文件名
[root@ruipeng ~]# awk '{print FNR,FILENAME,$0}' /etc/issue /etc/redhat-release 1 /etc/issue \S 2 /etc/issue Kernel \r on an \m 3 /etc/issue 1 /etc/redhat-release CentOS Linux release 8.2.2004 (Core)
自定义变量(区分字符大小写),在program中直接定义
- -v var=value
[root@ruipeng ~]# awk -v test='hello gawk' '{print test}' /etc/fstab hello gawk hello gawk hello gawk ……
-
split分割一个文件为多个文件
#分割大的 tar 文件为多份小文件 split -b Size –d tar-file-name prefix-name split -b 1M mybackup.tgz mybackup-parts #切换成的多个小分文件使用数字后缀 split -b 1M –d mybackup.tgz mybackup-parts
#合并 cat mybackup-parts* > mybackup.tar.gz
-
包管理器rpm
rpm {-i|--install} [install-options] PACKAGE_FILE…
- -v: verbose
- -vv:更详细
- -h: 以#显示程序包管理执行进度
- [install-options]
- --test: 测试安装,但不真正执行安装,即dry run模式
- --nodeps:忽略依赖关系
- --replacepkgs | replacefiles
- --nosignature: 不检查来源合法性
- --nodigest:不检查包完整性
- --noscripts:不执行程序包脚本
- %pre: 安装前脚本 --nopre
- %post: 安装后脚本 --nopost
- %preun: 卸载前脚本 --nopreun
- %postun: 卸载后脚本 --nopostun