命令集合

7/11/2023 linux命令

# 工具命令

# 统计目录下文件个数
ls | wc -l

# 对当前目录下的文件名进行排序   sort: -u 去除重复行   -r 降序 -o 重定向
ls | sort 
ls | sort | head -2
# sort -r number.txt > number.txt  这种方式无效
sort -r number.txt -o number.txt

# linux 中 对字符串进行编码
echo -n 'hello, world!' | base64        
echo -n 'aGVsbG8sIHdvcmxkIQ==' | base64 --decode
echo -n 'hello, world!' | openssl md5
echo -n 'hello, world!' | openssl sha256

# 读取当前目录下文件名
ls | while read line
do
	echo "said: $line"
done

# cat 创建文件
cat <<EOF > hello.txt
>hello, world!
>EOF


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 系统命令

# 杀死指定进程名的进程
pkill -f boot:backend:hello

# 查看系统发行版
lsb_release -a

# java 启动进程并给进程命名
nohup java -jar hello.jar boot:backend:hello 1 > /dev/null 2>error.out &
# 暂停进程
ctrl + z
# 查看暂停的进程编号
jobs 
# 后台运行 暂停的进程编号
bg [num]

# 系统时间同步
yum -y install ntpdate
ntpdate cn.pool.ntp.org


#centos修改为静态ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.0.202         #ip地址
NETMASK=255.255.255.0    #掩码
GATEWAY=192.168.0.1         #网关
DNS1=192.168.0.1                 #域名服务器1
DNS2=8.8.8.8                          #域名服务器1

nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器

#重启网卡相关命令
ifconfig eth0 down/up
systemctl restart network
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# top

参数介绍

PID         进程id
USER        进程所有者
PR          进程优先级
NI          nice值。负值表示高优先级,正值表示低优先级
VIRT        进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES         进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR         共享内存大小,单位kb
S           进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程,N表示该进程优先
值是负数。
%CPU        上次更新到现在的CPU时间占用百分比
%MEM        进程使用的物理内存百分比
TIME+       进程使用的CPU时间总计,单位1/100秒
COMMAND     进程名称(命令名/命令行)
1
2
3
4
5
6
7
8
9
10
11
12
13

交互命令

<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
1
2
3
4
5
6
7
8
9

# 文件、磁盘相关

# which 
# 查找类型:二进制文件;
# 检索范围:PATH环境变量里面指定的路径中查找;
which mkdir

# whereis
# 查找类型:二进制文件,man帮助文件,及源代码文件;
# 检索范围:/usr目录
whereis gcc

# find
# 查找类型:所有文件;
# 检索范围:指定路径;
# -type d: 查找目录; -type f: 查找普通文件; -type l: 查找软链接文件;
find / -type d -name log


# 按照日期排序列出文件目录
ls -lrt

# 查看centos版本
cat /etc/redhat-release


# 查看命令是否存在
type wget

# 查看盘块 大小
df -h   
# 查看文件夹 占用大小
du -sh *

# 查看文件类型
file flannel-v0.19.0-linux-amd64.tar.gz

# 文件上传命令
rz -bey
# 文件下载命令
sz fi-support.jar

# 查看文件有多少行
wc -l filename

# 比较2个文件
diff -u 1.txt 2.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

# 日志相关

# 显示日志从第4行开始
cat error.log | sed -n '4,$p'

# 查询  etcd  进程的pid
ps -ef | grep etcd | grep -v grep | awk '{print $2}'

# grep 命令排除日志中包含asd、zxc、qwe的记录
cat error.log | grep -v "asd\|zxc\|qwe"

# 查看指定时间段日志      note: 开始时间和结束时间必须都存在, 否则将查询不到结果或者查询有误
sed -n '/2022-08-28 00:00/,/2022-08-28 01:00/p' error.log
sed -n '/2019-10-24 21*/,/2019-10-24 22*/p' error.log

# 生成128bit位的 随机数,格式化用16进制输出, 以2个字节为一组(默认以4个字节为一组)
head -c 16 /dev/urandom | od -An -tx2 | tr -d ' '
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 解压命令

# 压缩文件
tar -czvf  压缩后的文件名 需要压缩的文件列表...
tar -zcvf kube-controller-manager.kubeconfig.tar.gz kube-controller-manager.kubeconfig

# 解压缩文件
tar  xzvf 压缩文件名 -C 指定目录

#Gzip 算法被设计用来压缩单个文件。 以 .tar.gz 结尾的文件,是使用 gzip 压缩的 .tar 归档文件。
# 解压文件 
gzip -d file.gz
#  保留原来的gz压缩文件
gzip -dc outcome.map.gz > a.map
# 压缩文件
gzip a.txt

# zip压缩
zip -r fi-v2.zip fi-normal/ fi-xs-normal/
# 解压
unzip fi-v2.zip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 引号区别

Linux中单引号被称为强Strong引号,而双引号被称为弱Weak引号。

# 1. 展开遍历
word=Wild
echo "$word"   # Wild
echo '$word'   # $word

# 2. 展开命令
echo "`ls /home`"  # /bin  /usr ...
echo '`ls /home`'  # `ls /home`       `命令`  <====>  $(命令)

# 3. 引号嵌套
echo "'`ls /home`'"   # '/bin /usr ...'
echo '"`ls /home`"'   # "`ls /home`"

# 4. 转义字符
echo "这件衣服售价\$100"   # 这件衣服售价$100
echo "这件衣服售价$100"    # 这件衣服售价00
echo '这件衣服售价$100'    # 这件衣服售价$100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# cron表达式

参考博客 (opens new window)

基本格式: 秒(0-59) 分(0-59) 时(0-23) 天(0-31) 月(0-11) [周(1-7) 年(1970-2099)]

特殊说明:

  • 周1-7, 其中1是星期天, 2是星期一,类推;
  • 元素可以是: 具体值(2)连续区间(7-11), 间隔时间(0/5)[从0开始,每5个单位执行一次]列表(1,3,5), * 通配符()**

# linux三剑客

awk

#查看第二行到第四行的数据
netstat -nltp | awk 'NR == 2, NR == 4'

#查看第二行和第四行的数据
netstat -nltp | awk 'NR == 2; NR == 4'

#输出第4列和最后一列的数据
netstat -nltp | awk '{print $4,$NF}'

#指定分隔符
awk -F ':' '{print $NF}'

#查询第一列以tcp6 开头的行
netstat -nltp | awk '$1~/^tcp6/{print}'


#组合
netstat -nltp | awk 'NR == 3, NR == 5 {print $4}' | awk -F ':' '{print $NF}' 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

sed

#在第一行插入一条记录 (从第一个有效字符开始插入,空格忽略)
sed -i '1i hello,world' state

#在第一行删除一条记录
sed -i '1d hello,world' state

#在以 tcp6 开头 行 添加 hello, 以 tcp6 结尾的行 添加 bye,tcp6
netstat -nltp | sed -e '/^tcp6/i hello, tcp6' -e '/tcp6$/a bye, tcp6'

# 修改以tcp6开头的行, 替换为 tcp8
sed "s/^tcp6/tcp8/g" state 
cat redis.conf | sed '/^port/s/6379/7001/g'

cat redis.conf | sed '/^daemon/d'

cat redis.conf | sed 's/6379/1&/'

#在匹配行之后插入 China
sed ‘/2004/a\China’ mysed.txt
#在匹配行之前插入 China
sed ‘/2004/i\China’ mysed.txt



# 按照时间逆序列出距今 排名 前三之外的所有 文件
ls error.log*.log | sort -r | sed -n '4,$p'

-i 是写入磁盘的意思
-e 是多个条件并行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

grep

# 查找 0.0.0.0 的行
netstat -nltp | grep "0.0.0.0"

# 查找 0.0.0.0 下3行
netstat -nltp | grep -a3 '0.0.0.0'

# 查找 0.0.0.0 上3行
netstat -nltp | grep -b3 '0.0.0.0'

# 查找 0.0.0.0 上、下3行
netstat -nltp | grep -c3 '0.0.0.0'
1
2
3
4
5
6
7
8
9
10
11

# 固定ip

# 固定ip
vi etc/sysconfig/network-scripts/ifcfg-ens33

ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.101
NETMASK=255.255.255.0
GATEWAY=192.168.1.102
DNS1=114.114.114.114
DNS2=8.8.8.8
systemctl restart network
1
2
3
4
5
6
7
8
9
10
11

# 集群管理

# rsync

rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。利用rsync算法(差分编码)以减少数据的传输。

rsync算法:并不是每一次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。 除此之外,rsync可拷贝、显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。

# 目录同步  前期得启动后台程序 或者 指定了 私钥文件
rsync -rvl /etc/hosts root@192.168.1.6:/etc/hosts

# 目录同步 指定私钥文件
rsync -rvl /etc/hosts root@192.168.1.130:/etc/hosts  -e "ssh -i /root/.ssh/id_rsa -p 22"
1
2
3
4
5

# xargs

假设aaa.txt 文件内容如下:

aRpT3RFC7kb2FM9Xxmq5fvq8hsLurTrYR239nNz4
E309EX8jIkJ9T/jGyh8VzRA4Q8mI6VDOjzZCDaUq
5NkoXNMuEDijxbijlg7b33bptdD/2jNGNgJhEBGY
IqD9Q3wmUtEqSwWumijh4YQ0bgtfSmb1Ra/ncreN
1
2
3
4

如果执行 cat aaa.txt | echo -n, 将不会有任何数据打印出来

原因:从管道收到的数据为 数据流, 不能被 管道后的命令 解析为参数

解决办法: cat aaa.txt | xargs echo -n

xargs 将 管道 或 stdin 转换成命令行参数, 能够被 其他命令解析

# xargs 默认的参数分隔符为换行,将多行数据转换为一行参数
cat aaa.txt | xargs
aRpT3RFC7kb2FM9Xxmq5fvq8hsLurTrYR239nNz4 E309EX8jIkJ9T/jGyh8VzRA4Q8mI6VDOjzZCDaUq 5NkoXNMuEDijxbijlg7b33bptdD/2jNGNgJhEBGY IqD9Q3wmUtEqSwWumijh4YQ0bgtfSmb1Ra/ncreN

# 将多行数据转换 以2 列为一组的参数
cat aaa.txt | xargs -n2
aRpT3RFC7kb2FM9Xxmq5fvq8hsLurTrYR239nNz4 E309EX8jIkJ9T/jGyh8VzRA4Q8mI6VDOjzZCDaUq 
5NkoXNMuEDijxbijlg7b33bptdD/2jNGNgJhEBGY IqD9Q3wmUtEqSwWumijh4YQ0bgtfSmb1Ra/ncreN

# 使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉
# 挨个复制 当前目录下的 jpg文件 到 /data/images目录中
ls *.jpg | xargs -n1 -I {} cp {} /data/images
1
2
3
4
5
6
7
8
9
10
11
12

# 参考

https://linux265.com/course/linux-commands.html