shell常用命令与工具

Posted 喝茶等下班

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

功能:替换或删除字符

格式: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 显示文件系统类型



以上是关于shell常用命令与工具的主要内容,如果未能解决你的问题,请参考以下文章

第十一章 Shell常用命令与工具

常用shell命令和vi编辑器

sed && awk工具 及一些常用的shell脚本

Shell 文本处理工具

超实用的adb与adb shell常用命令汇总

Linux Shell 文本处理工具