工作中常用的Linux命令(持续完善中)
# 查看当前目录占用的磁盘总大小
(venv) hashqueue@hashqueue-virtual-machine:~/PycharmProjects$ du -d 0 -h
31G .
1
2
2
# shell中使用Expect处理用户交互
Expect主要应用于自动化交互式操作场景,可以将ssh、ftp、scp等需人工交互的操作写在一个脚本上使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。
# 安装expect
hashqueue@hashqueue-virtual-machine:~/PycharmProjects/my_project$ apt install expect -y
# 编写expect脚本
hashqueue@hashqueue-virtual-machine:~/PycharmProjects/my_project$ cat test1.sh
#!/bin/bash
set -e
# $1 -> 执行任务创建的任务项执行结果的ID
# $2 -> SDK文件在服务器上的路径
expect -c "
set timeout 300
# 登录服务器执行Linux命令后退出
spawn ssh hashqueue@192.168.1.2 -p 12306 \"mkdir -p /home/hashqueue/sdks/task_item_result_$1\"
expect {
\"*yes/no*\" {send \"yes\r\"}
\"*password*\" {send \"123456\r\"}
}
expect eof
# 从本地上传文件到服务器
spawn scp -P 12306 -r $2 hashqueue@192.168.1.2:/home/hashqueue/sdks/task_item_result_$1
expect {
\"*yes/no*\" {send \"yes\r\"}
\"*password*\" {send \"123456\r\"}
}
expect eof"
echo 'action done.'
# 执行脚本
hashqueue@hashqueue-virtual-machine:~/PycharmProjects/my_project$ bash test1.sh
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
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
# 查看Android设备的CPU架构
G:\HUAWEI> adb shell getprop ro.product.cpu.abi
arm64-v8a
1
2
2
# 查找指定目录下所有文件的文件名称中不包含_nv21字符串的文件
find ./REE_dataset -type f ! -iname "*_nv21*"
1
# 批量删除目录下所有以.jpg结尾的文件
find ./India58_9036_yuv/ -type f -iname "*.jpg" | xargs -i sudo rm -rf {}
1
# 两个目录结构类似的目录合并
hashqueue@CN3114002100W:~$ tree aaa/
aaa/
├── bbb
│ ├── ccc
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── 3.jpg
│ └── eee
└── ddd
└── d1.jpg
4 directories, 4 files
hashqueue@CN3114002100W:~$ tree ddd/
ddd/
├── bbb
│ ├── ccc
│ │ ├── 1.png
│ │ ├── 2.png
│ │ └── 3.png
│ └── eee
│ └── e1.jpg
└── ddd
└── d1.png
4 directories, 5 files
hashqueue@CN3114002100W:~$ cp -rf ddd/* aaa/
hashqueue@CN3114002100W:~$ tree aaa/
aaa/
├── bbb
│ ├── ccc
│ │ ├── 1.jpg
│ │ ├── 1.png
│ │ ├── 2.jpg
│ │ ├── 2.png
│ │ ├── 3.jpg
│ │ └── 3.png
│ └── eee
│ └── e1.jpg
└── ddd
├── d1.jpg
└── d1.png
4 directories, 9 files
hashqueue@CN3114002100W:~$ tree ddd/
ddd/
├── bbb
│ ├── ccc
│ │ ├── 1.png
│ │ ├── 2.png
│ │ └── 3.png
│ └── eee
│ └── e1.jpg
└── ddd
└── d1.png
4 directories, 5 files
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
46
47
48
49
50
51
52
53
54
55
56
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
46
47
48
49
50
51
52
53
54
55
56
# FFmpeg yuv -> jpg && jpg -> yuv
# yuv -> jpg
ffmpeg -f image2 -vcodec rawvideo -s 640x480 -pix_fmt nv21 -i 20090108-00-22-52_rgb.yuv out.jpg
# jpg -> yuv
ffmpeg -s 640x480 -pix_fmt rgb24 -i out.jpg -pix_fmt nv21 out.yuv
1
2
3
4
2
3
4
# 通过文件绝对路径list使用adb pull Android设备里的文件
head -n 200 ../frr_wrong_pics_list.txt | xargs -i adb pull {} ./pictures
1
# 在当前文件夹下递归查找以'.yml'结尾的文件
w@w-Vulcan-Series:~$ find . -iname '*.yml'
./.github/workflows/deploy.yml
./docker-compose.yml
1
2
3
2
3
# 查看某个服务所占用的端口号
# 先用ps查看服务的进程ID
w@w-Vulcan-Series:~$ ps -elf | grep mysqld | grep -v grep
4 S mysql 123627 1 0 80 0 - 515026 - 23:47 ? 00:00:02 /usr/sbin/mysqld
# 再用netstat根据服务的进程ID(123627)查看该服务占用的端口号
w@w-Vulcan-Series:~$ sudo netstat -anlp | grep 123627
tcp6 0 0 :::33060 :::* LISTEN 123627/mysqld
tcp6 0 0 :::3306 :::* LISTEN 123627/mysqld
unix 2 [ ACC ] STREAM LISTENING 1474043 123627/mysqld /var/run/mysqld/mysqlx.sock
unix 2 [ ACC ] STREAM LISTENING 1474046 123627/mysqld /var/run/mysqld/mysqld.sock
unix 2 [ ] DGRAM 1469175 123627/mysqld
# 示例2
w@w-Vulcan-Series:~$ ps -elf | grep python3 | grep -v grep
4 S root 883 1 0 80 0 - 8740 - 11:17 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
4 S root 1186 1 0 80 0 - 28391 - 11:17 ? 00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
0 S w 121529 121359 0 80 0 - 25923 poll_s 23:33 pts/2 00:00:00 python3 -m http.server
w@w-Vulcan-Series:~$ sudo netstat -anlp | grep 121529
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 121529/python3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看某个进程ID下的线程ID
$ ps -elf | grep python3
4 S root 785 1 0 80 0 - 8741 - 15:53 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
4 S root 1023 1 0 80 0 - 28388 - 15:53 ? 00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
0 S w 8922 7622 0 80 0 - 42072 futex_ 16:34 pts/2 00:00:00 python3 hello_thread.py
0 S w 8972 7647 0 80 0 - 3026 pipe_w 16:34 pts/3 00:00:00 grep --color=auto python3
$ ps -T -p 8922
PID SPID TTY TIME CMD
8922 8922 pts/2 00:00:00 python3
8922 8923 pts/2 00:00:00 python3
8922 8924 pts/2 00:00:00 python3
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# ssh登录
ssh 用户名@服务器ip/服务器绑定的域名
1
# 查看Linux系统网卡和网络相关参数(可用于查看本机ip)
- ip (opens new window)命令
ip a
1 - ifconfig (opens new window)命令
ifconfig
1
# last 列出当前和曾经登入服务器的用户信息
默认读取的是/var/log/wtmp文件的信息。输出的内容包括:用户名、终端位置、登录源信息、开始时间、结束时间、持续时间。注意最后一行输出的是wtmp文件起始记录的时间。
last
1
# lastb 列出失败尝试的登录信息
和last命令功能完全相同,只不过它默认读取的是/var/log/btmp文件的信息。
lastb
1
# 不在vim/vi编辑模式下批量替换字符串
sed -i 's/old_str/new_str/g' filename
如:sed -i 's/browser_sug_request_traffic/browser_sug/g' browser_sug_slave11.py
1
2
2
# 抽取xaa.csv文件第51行~100行的内容输出重定向到一个新文件xb.csv中
sed -n '51,100p' xaa.csv > xb.csv
1
# 统计一个文件中某个字符串的个数
grep -o 'keyword' my_file.txt | wc -l
1
# 后台执行文件split分割任务
nohup split -l 228000 browser_sug_request_traffic b &
1
# 实时查看CPU avg_load
sar -q 1 #1表示1s
1
# 使用&
将任务提交到后台执行
/home/work/.pyenv/shims/python3 spark_pressure_test01.py 1000 3600 &
1
# 过滤grep
且统计python3
的进程个数
ps -elf | grep 'python3' | grep -v grep | wc -l
1
# vim编辑模式下批量替换字符串
:%s/old_str/new_str/g
1
# 查看端口号被占用情况
1.ss -nltp | grep 端口号/服务关键字
2. netstat -tunlp | grep 端口号
(若提示:command not found: netstat 则需要先安装`net-tools`,`Ubuntu`下通过`sudo apt-get install net-tools`来安装)
3. lsof -i:端口号
1
2
3
4
2
3
4
# linux查看公网ip
curl cip.cc
1
# 查看Linux的CPU相关信息
查看 CPU 的型号
# Ubuntu下 ➜ ~ cat /proc/cpuinfo | grep 'model name' | sort | uniq model name : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz # CentOS服务器下 [root@aliyun ~]# cat /proc/cpuinfo | grep 'model name' | sort | uniq model name : Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
1
2
3
4
5
6查看CPU颗数:实际Server中插槽上的CPU个数, 物理cpu数量,可以数不重复的 physical id个数。查看 CPU 颗数
[root@aliyun ~]# cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l 1
1
2查看 CPU 核数:一颗CPU上面能处理数据的芯片组的数量。
➜ ~ cat /proc/cpuinfo |grep "cores"|uniq|awk '{print $4}' 4
1
2逻辑CPU颗数:一般情况,我们认为一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥CPU的性能,逻辑 CPU 核数
逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启超线程)。
top命令查询出来的就是逻辑CPU的数量。
➜ ~ cat /proc/cpuinfo |grep "processor"|wc -l 8
1
2
编辑 (opens new window)
上次更新: 2023/01/04, 02:34:17
- 01
- Python实现对字符串的加解密02-25
- 02
- Python3对大文件中指定字符进行排序再写入到新的文件10-24
- 03
- Ubuntu下配置adb环境连接Android设备进行调试08-17