shell常用命令与工具

人生必须的知识就是引人向光明方面的明灯。这篇文章主要讲述shell常用命令与工具相关的知识,希望能为你提供帮助。
1.
cat
-b 显示非空行行号-n 显示所有行行号
-T 显示 tab,用^I 表示
-E 显示以$结尾



2.
tac 功能:连接文件和倒序打印文件
常用选项:
示例:
倒序打印每一行:


[root@study ~]# tac file1
i j 2
g h 3
e f 3
c d 2
a b 1
[root@study ~]# cat file1
a b 1
c d 2
e f 3
g h 3
i j 2

3.
rev 功能:反向打印每一行
常用选项:
示例:



[root@study ~]# echo abc|rev
cba

?
4.
wc 功能:统计文件行数、字节、字符数
常用选项:
-c 打印文件字节数,一个英文字母 1 字节,一个汉字占 2-4 字节(根据编码)
-m 打印文件字符数,一个汉字占 2 个字符
-l 打印多少行
-L 打印最长行的长度,也可以统计字符串长度


5.
cp 功能:复制文件或目录
常用选项:
-a 归档    在保留原文件属性的前提下复制文件
-b 目标文件存在创建备份,备份文件是文件名跟~
-f 强制复制文件或目录
-r 递归复制目录-p 保留原有文件或目录属性-i 覆盖文件之前先询问用户
-u 当源文件比目的文件修改时间新时才复制
-v 显示复制信息


6.
dirname 功能:去除路径的最后一个名字


7.
basename 功能:打印路径的最后一个名字
常用选项:
-a 支持多个参数
-s 删除后面的后缀

[root@study ~]# basename /usr/bin/sort
sort
[root@study ~]# basename ~/a.sh .sh
a
[root@study ~]# basename -s .sh ~/a.sh
a
[root@study ~]# basename -a ~/a.sh ~/a.txt
a.sh
a.txt






8.
du 功能:估算文件磁盘空间使用
常用选项:
-h 易读格式显示(
K,M,G)
-b 单位 bytes 显示
-k 单位 KB 显示
-m 单位 MB 显示
-s 只显示总大小
--max-depth=< 目录层数> ,超过层数的目录忽略
--exclude=file 排除文件或目录
--time 显示大小和创建时间
9.
cut 功能:选取文件的每一行数据
常用选项:
-b 选中第几个字符
-c 选中多少个字符
-d 指定分隔符分字段,默认是空格
-f 显示选中字段


[root@study ~]# echo abc|cut -b 2
b
[root@study ~]# echo abcdef|cut -c 1-3
abc
[root@study ~]# echo a:b:c|cut -d: -f2
b

10.
tr 功能:替换或删除字符
【shell常用命令与工具】格式:Usage: tr [OPTION]... SET1 [SET2]
常用选项:
-c 替换 SET1 没有 SET2 的字符
-d 删除 SET1 中字符
-s 压缩 SET1 中重复的字符
-t 将 SET1 用 SET2 转换,默认
示例:

替换 SET1 没有 SET2 的字符:
# echo "aaabbbccc" | tr -c c 1
111111ccc
去重字符:
# echo "aaacccddd" | tr -s [a-z]
acd
删除字符:
# echo "aaabbbccc" | tr -d bbb
aaaccc
删除换行符:# echo -e "a\\nb\\nc" | tr -d \\n
abc
替换字符:
# echo "aaabbbccc" | tr [a-z] [A-Z]
AAABBBCCC

11.
功能:显示文件或文件的系统状态常用选项:
-Z 显示 selinux 安全上下文
-f 显示文件系统状态
-c 指定格式输出内容
-t 以简洁的形式打印
示例:

[root@study ~]# stat -f file1
文件:"file1"
ID:80300000000 文件名长度:255类型:xfs
块大小:4096基本块大小:4096
块:总计:4453888空闲:4053569可用:4053569
Inodes: 总计:8912896空闲:8855504
[root@study ~]# stat -t file1
file1 30 8 81a4 0 0 803 33646138 1 0 0 1644411476 1644411472 1644411472 0 4096 unconfined_u:object_r:admin_home_t:s0
[root@study ~]# stat -c %y file1
2022-02-09 20:57:52.656976939 +0800

12.
seq 功能:打印序列化数字
常用选项:
-f 使用 printf 样式格式
-s 指定换行符,默认是\\n
-w 等宽,用 0 填充
示例:

数字序列:
# seq 3
1
2
3
带 0 的数字序列:
# seq -w 03
01
02
03
范围数字序列:
# seq 2 5
2
3
4
5
步长序列:# seq 1 2 5 # 2 是步长
1
3
5
以冒号分隔序列:
# seq -s "+" 5
1+2+3+4+5
等宽并在数字前面加字符串:
# seq -f "str%02g" 3 # %g 是默认数字位数,02 是数字不足 2 位时用 0 填充。
str01
str02
str03

13.
shuf 功能:生成随机序列
常用选项:
-i 输出数字范围
-o 结果写入文件
示例:
输出范围随机数:

[root@study ~]# seq 5|shuf
1
5
3
4
2
[root@study ~]# shuf -i 5-10
5
10
6
8
7
9

14.
sort 功能:排序文本,默认对整列有效
常用选项:
-f 忽略字母大小写
-M 根据月份比较,比如 JAN、DEC
-h 根据易读的单位大小比较,比如 2K、1G
-g 按照常规数值排序
-n 根据字符串数值比较
-r 倒序排序
-k 位置 1,位置 2 根据关键字排序,在从第位置 1 开始,位置 2 结束-t 指定分隔符
-u 去重重复行
-o 将结果写入文件
示例:

随机数字排序:
# seq 5 |shuf |sort
随机字母排序:
# printf "%c\\n" a..f |shuf |sort
倒序排序:
# seq 5 |shuf |sort -r
分隔后的字段排序:
# cat /etc/passwd |sort -t : -k 3 -n
去重重复行:
# echo -e "1\\n1\\n2\\n3\\n3" |sort -u
大小单位排序:
# du -h |sort -k 1 -h -r
分隔后第一个字段的第二个字符排序:
# echo -e "fa:1\\neb:2\\ncc:3" |sort -t : -k 1.2
tab 作为分隔符:
# sort -t $"\\t"
file 文件内容:
zhangsan 6 100
lisi 8 80
wangwu 7 90
zhaoliu 9 70
对 file 文件的第二列正序排序,再次基础再对第三列倒序排序(多列排序): # sort -k 2,2 -n -k 3,3 -nr file
# sort -k 2 -n -k 3 -nr file
zhaoliu 9 70
lisi 8 80
wangwu 7 90
zhangsan 6 100
对两个文件同时排序:
# sort file1 file2

15.
uniq 功能:去除重复行,只会统计相邻的
常用选项:
-c 打印出现的次数
-d 只打印重复行
-u 只打印不重复行
-D 只打印重复行,并且把所有重复行打印出来
-f N 比较时跳过前 N 列
-i 忽略大小写
-s N 比较时跳过前 N 个字符
-w N 对每行第 N 个字符以后内容不做比较示例:

测试文本如下:
# cat file
abc
cde
xyz
cde
xyz
abd
去重复行:
# sort file |uniq
abc
abd
cde
xyz
打印每行重复次数:
# sort file |uniq -c
1 abc
1 abd
2 cde
2 xyz
打印不重复行:
# sort file |uniq -u
abc
abd
打印重复行:
# sort file |uniq -d
cde
xyz
打印重复行并统计出现次数:
# sort file |uniq -d -c
2 cde
2 xyz
根据前几个字符去重:
# sort file |uniq -w 2
abc
cde
xyz

16.
tee 功能:从标准输入读取写到标准输出和文件
常用选项:
-a 追加到文件
示例:

# echo 123 |tee -a a.log

17.
join 功能:连接两个文件
常用选项:
-i 忽略大小写
-o 按照指定文件栏位显示
-t 使用字符作为输入和输出字段分隔符
示例:

# cat file1
1 a 2 b 3 c # cat file2
1 x 2 y 3 z
将两个文件相同字段合并一列: # join file1 file2
1 a x 2 b y 3 c z
打印 file1 第二列和 file2 第二列:
# join -o 1.2 2.2 file1 file2
a x b y c z # join -t : -o 1.1 2.1 /etc/passwd /etc/shadow
user1:user1
……

18.
paste 功能:合并文件
常用选项:
-d 指定分隔符,默认是 tab 键分隔
-s 将文件内容平行合并,默认 tab 键分隔
示例:

# seq 1 3 > file1
# seq 4 6 > file2
两个文件合并:
# paste file1 file2
1 4
2 53 6
两个文件合并,+号分隔:
# paste -d "+" file1 file2
1+4
2+5
3+6
文件内容平行显示:
# paste -s file1 file2
1 2 3
4 5 6

19.
head 功能:输出文件的前几行
常用选项:
-c 打印前多少 K,M
-n 打印前多少行

[root@study ~]# ll -h /etc/httpd/conf/httpd.conf
-rw-r--r--. 1 root root 12K 2月8 21:09 /etc/httpd/conf/httpd.conf
[root@study ~]# head -c 1K /etc/httpd/conf/httpd.conf
#
# This is the main Apache HTTP server configuration file.It contains the
# configuration directives that give the server its instructions.
# See < URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# < URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.Theyre here only as hints or reminders.If you are unsure
# consult the online docs. You have been warned.
#
# Configuration and logfile names: If the filenames you specify for many
# of the servers control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path.If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so log/access_log
# with ServerRoot set to /www will be interpreted by the
# server as /www/log/access_log, where as /log/access_log will be
# interpreted as /log/access_log.

#
# ServerRoot:[root@study ~]# head -c 1k /etc/httpd/conf/httpd.conf
head: 无法打开"/etc/httpd/ck" 读取数据: 没有那个文件或目录
==> /etc/httpd/conf/httpd.conf < ==
#[root@study ~]# head -c ^Cetc/httpd/conf/httpd.conf
[root@study ~]# head -c 1k /etc/httpd/conf/httpd.conf
#
# This is the main Apache HTTP server configuration file.It contains the
# configuration directives that give the server its instructions.
# See < URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# < URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.Theyre here only as hints or reminders.If you are unsure
# consult the online docs. You have been warned.
#
# Configuration and logfile names: If the filenames you specify for many
# of the servers control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path.If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so log/access_log
# with ServerRoot set to /www will be interpreted by the
# server as /www/log/access_log, where as /log/access_log will be
# interpreted as /log/access_log.

#
# ServerRoot:[root@study ~]#

20.
tail 功能:输出文件的后几行
常用选项:
-c 打印后多少 K,M
-f 实时读文件,随着文件输出附加输出
-n 输出最后几行
--pid 与-f 一起使用,表示 pid 死掉后结束
-s 与-f 一起使用,表示休眠多少秒输出



21.
nl 功能:打印文件行号
常用选项:
-b < a|t> 指定行号显示方式,a 表示所有行都打印行号,b 表示空行不显示行号,默认是 a
-n < ln|rn|rz> 行号显示方法,ln 左对齐,rn 右对齐,rz 右边显示,左边空白用 0 填充。
-w 行号栏位在左边占用的宽度
示例:

打印行号,空行不显示:
# nl a.txt左对齐打印行号:
# nl -n ln a.txt
行号右移动五个空格:
# nl -w 5 a.txt

22.
nohup 功能:运行程序,忽略挂起信号
示例:

后台运行程序,终端关闭不影响:
# nohup bash test.sh & > test.log &

23.
uname 功能:输出系统信息
常用选项:
-a 输出以下所有信息
-s 输出内核名称
-n 输出主机名
-r 输出内核发行版
-v 输出内核版本
-m 输出主机的硬件架构名称
-p 输出处理器类型或"unknown"
-i 输出硬件平台或"unknown
-o 输出操作系统名称


24.
sshpass
功能:非交互 SSH 登录(需要安装)
常用选项:-f 从文件中获取密码
-d 用文件描述符数字获取密码
-p 指定 SSH 密码
-e 密码作为环境变量传递,变量名是 SSHPASS

示例:

注:必须先用ssh登录过,不用再输入yes那个之后才可以使用此命令,可能意思就是需要knowhost文件有记录吧
免交互 SSH 登录:
# sshpass -p 123456 ssh root@192.168.1.10
免交互传输文件:
# sshpass -p 123456 scp a.txt 192.168.1.10:/root
密码传入系统变量:
# SSHPASS=123456 rsync -avz /etc/hosts -e "sshpass -e ssh" root@192.168.1.221:/opt

25.
df 功能:查看文件系统的磁盘空间使用情况
常用选项:
-a 包含虚拟文件系统
-h 可易读单位显示
-i 显示 inode 信息而非块使用量
-k 1K 块的数量
-t 只显示指定文件系统为指定类型的信息
-T 显示文件系统类型






    推荐阅读