Linux CMD

[TOC]

ref: 常用工作命令-shixx

快捷键

1
2
3
4
5
打开一个terminal
ctrl+alt+t

在terminal中打开多个标签
ctrl+shift+t

apt

1
2
# apt 命令打印软件包下载地址 -o Debug::Acquire::http=true
apt-get -o Debug::Acquire::http=true install nginx

进程相关

ps (kill)

1
2
ps -ef | grep train.py | grep lianzha | grep -v grep | awk '{print "kill -9 "$2}' | sh
ps -ef | grep torch | grep -v grep | awk '{print "kill -9 "$2}' | sh

watch

1
watch -n 0.5  nvidia-smi

网络端口

netstat

netstat 查看端口占用语法格式:

1
2
3
4
5
6
7
netstat -tunlp | grep 端口号

-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名

shell

1
2
3
4
5
6
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
1
2
3
4
5
6
if 判断式
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
else
执行第三段內容程式
fi

find del

1
2
3
4
5
6
7
8
9
10
11
rm log/*
# -bash: /bin/rm: Argument list too long
find . -name '*' | xargs rm

find /Volumes/WD/data/data/sg3d/server -type d |grep .svn | xargs rm -rf

# exe文件查找
find . -name '*.exe' -type f -print -exec rm -rf {} \;

# 一天前的文件,都删掉
find -mtime +1 -exec rm -rf {} \;

find del loop(每隔24小时,删除(最近改动日期超过10天的)文件)

1
2
3
4
5
6
7
echo "init---auto loop-"
echo time

while true; do
find -name '*.log' -mtime +10 -exec rm {} \;
sleep 24h
done

大文件查找

1
2
3
4
5
6
7
8
9
# 查找文件,格式化输出
find / -type f -printf "%s\t%p\n" | sort -n | tail -1

#显示大于100MiB
find / -size +100M -ls
# 查找一个区间大小的(比如 100MiB 和 200MiB )之间的文件:
find / -size +100M -size -200M -ls
#查找某个目录最大的5个文件:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

shell echo date

在crontab 定时事件中, 执行过的脚本记录事件

在sh 文件中

1
2
3
4
echo $(date)
echo $(date "+%Y-%m-%d %H:%M:%S")

即可输出执行的事件, 同时记录到log中

执行结果

1
Sat Jun 23 15:41:31 CST 2018
1
2
# 赋值
cur_dateTime="`date +%Y-%m-%d,%H:%m:%s`"

shell 中的sleep命令

在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时)
sleep 1 睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时

shell 参数传递

1
2
3
4
5
6
7
8
9
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
1
2
3
4
5
6
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

awk

1
$echo "123456789" | awk '{print substr($0, 5, 2)}'

sed

1
2
3
4
sed -n '100,200p' filename 

“;” --> "\n"
sed -i "s/;/\\n/g" test.txt

rename

1
2
3
4
5
6
7
8
9
10
11
# Perl 版本 Ubuntu()

$ rename -v "s/txt/log/g" 1.txt 2.txt
1.txt renamed as 1.log
2.txt renamed as 2.log

rename "s//.html//.php/" * # 把.html 后缀的改成 .php后缀
rename "s/$//.txt/" * # 把所有的文件名都以txt结尾
rename "s//.txt//" * # 把所有以.txt结尾的文件名的.txt删掉
rename 's/^/googluck/' * #统一在所有文件名前添加某个字符串
rename -v "s/amsr-vector-fs-/01_amsr-vector-fs-/" amsr-vector-fs-*

tail

history

1
2
3
history
# delete line 9
history -d 9

https://www.baeldung.com/linux/delete-commands-history

压缩工具

tar

1
2
3
4
5
tar -cvf ***.tar Floder
tar -xvf ***.tar

tar -czvf my_folder.tar.gz my_folder
tar -xzcf my_folder.tar.gz

zip/unzip

1
2
# 将/root/mcw_test/这个目录下所有文件和文件夹打包为当前目录下的 mcw.zip:
zip -q -r mcw.zip /root/mcw_test
1
2
3
4
unzip test.zip              #->将test.zip解压到当前文件下
unzip -n test.zip -d /tmp #->将test.zip解压到/tmp目录下,并且不要覆盖已有文件
unzip -v test.zip #->查看test.zip内容,但不解压
unzip -o test.zip -d tmp/ #->将test.zip解压到/tmp目录下,并且覆盖已有文件

zip 分券解压

1
2
3
4
5
6
7
8
9
10
11
12
13
#先压缩成完整zip:
zip -r a.zip ./somethings ;
#再分割成分卷:
zip -s 4g a.zip --out b.zip ,单位可以是m、g、t等
-----------------------------

# 1 分卷合并成完整zip(三个方法)
1.1 cat archivename.z* > archivename.zip
1.2 zip -F b.zip --out a.zip
2.3 zip -s 0 b.zip --out a.zip

# 2 (-q 不显示任何信息)
unzip -q archivename.zip -d ./dir

screen

1
2
3
4
5
6
screen -S XX
screen -ls
screen -r XX
screen -d xx

screen -X -S sxx quit
1
conda config --set auto_activate_base false

lsof

`lsof`命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(`TCP、UDP`)。找回/恢复删除的文件。是十分方便的系统监视工具,因为`lsof`命令需要访问核心内存和各种文件,所以需要root`用户`执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
lsof (选项)

lsof -i:端口号

选项:
-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程(协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息

lsof输出各列信息的意义如下:

  • COMMAND:进程的名称
  • PID:进程标识符
  • PPID:父进程标识符(需要指定-R参数)
  • USER:进程所有者
  • PGID:进程所属组
  • FD:文件描述符,应用程序通过文件描述符识别该文件。
  • TYPE: [DIR, REG, unknown,]

获取端口对应的进程ID=>pid

1
lsof -i:8080
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
lsof abc.txt 显示开启文件abc.txt的进程
lsof -c abc 显示abc进程现在打开的文件
lsof -c -p 1234 列出进程号为1234的进程所打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -i 用以显示符合条件的进程情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4地址
service --> /etc/service中的 service name (可以不止一个)
port --> 端口号 (可以不止一个)

硬件相关

存储

1
2
3
lsblk      # 磁盘分区查看(tree)
fdisk -l # 更详细的磁盘分区
df -h # 各个磁盘的空间

cpu

1
2
3
4
5
6
7
8
lscpu
#Architecture: x86_64
#CPU op-mode(s): 32-bit, 64-bit
#Byte Order: Little Endian
#Address sizes: 36 bits physical, 48 bits virtual
#CPU(s): 4

# Model name: Intel(R) Celeron(R) CPU J1900 @ 1.99GHz

显卡

1
lspci -t -v

网卡

1
2
3
4
5
6
lspci | grep -i eth

ifconfig


ip link show

端口占用

1
2
3
4
5
6
7
8
# 使用netstat命令:
netstat -tuln | grep <端口号>

# 使用lsof命令:
lsof -i :<端口号>

# 使用ss命令:
ss -tuln | grep <端口号>

USB

1
lsusb -t # (-t 拓扑显示)

User管理

1
2
# 
sudo usermod -aG groupname username

内存

1
2
3
dmidecode -t memory
dmidecode -t 17
# Physical Memory Array