Linux命令备忘录

大小写转换

# 大写转小写
cat file.txt | tr A-Z a-z > newfile.txt
# 小写转大写
cat file.txt | tr a-z A-Z > newfile.txt

文本去重

# 统计重复次数
cat file.txt | sort | uniq -c
# uniq 参数:
uniq -c: 统计次数
uniq -i: 不区分大小写

获取最新文件的文件名

ls -lthr /data/bwfish/ | tail -n 1 | awk '{print $9}'

命令后台执行

# 挂载命令后台执行,关闭当前shell任务停止
command &
# 挂载命令后台执行,关闭当前shell任务依然运行,会将信息输出到nohup.out
nohup command &
# 将信息输出到指定文件中
nohup command >> main.log 2>&1 & # 等效写法:nohup command &> main.log &
# 不记录输出信息
nohup python main.py &> /dev/null &

# 查看后台执行的命令
jobs -l

screen创建新窗口

# 状态:
# Attached:表示当前screen正在作为主终端使用,为活跃状态
# Detached:表示当前screen正在后台使用,为非激发状态。

# 查看已经存在的screen终端
screen -ls

# 直接输入screen回车,即可新建一个虚拟终端,但是这样的名称太乱(以Linux的hostname命名)
screen

# 创建一个叫Hello的虚拟终端
screen -S Hello

# 使用-R创建Hello
screen -R Hello

# 三种创建方法比较:
# 使用-R创建,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen
# 使用-S创建和直接输入screen创建的虚拟终端,不会检录之前创建的screen(也就是会创建同名的screen)

# 将当前screen终端放在后台运行
先按ctrl+a,再按d
# 结束当前screen终端会话
先按ctrl+a,再按k。或者在当前screen终端输入exit
# 在主终端内,使用命令释放
# 使用-R/-r/-S均可
screen -R [pid/Name] -X quit
# 在虚拟终端内,输入Ctril+a将等待接受预先设置的绑定键,这个时候可以输入对应的一些命令,来操作虚拟终端,如:
# d:保存会话,后台运行改虚拟终端
# k:关闭对话,等同输入:exit
# c:新建一个虚拟终端
# ?:显示所有绑定键盘

# 重新回到终端
# 使用-R或者-r命令即可
screen -r [pid/name]

ln创建软链接

# 为/usr/lib目录创建一个lib64的软链接
sudo ln -s /usr/lib /lib64

nmcli管理wifi

# 扫描可用wifi
sudo nmcli dev wifi
# 连接指定wifi
sudo nmcli dev wifi connect "MERCURY_5G_71F8" password "test5.0g"
# 查看配置过的wifi信息
sudo nmcli con
# 删除连接过的wifi
sudo nmcli con del MERCURY_71F8
# 切换到连接过的其他wifi
sudo nmcli con up uuid 05fd480b-d5ed-4598-afed-000db85ec45f
sudo nmcli con up MERCURY_5G_71F8
# 指定设备名称来断开连接
sudo nmcli device disconnect wlp2s0

tshark抓包

# 显示所有可用设备
sudo tshark -D
# 对指定设备进行抓包,并写入指定文件,在抓包过程中显示详细信息
sudo tshark -i wlx08ea40feabc0 -w test.pcap -V
# 解析pcap包,展示所有详细信息
sudo tshark -r test.pcap -V
# 以json格式展示pcap文件内容
sudo tshark -r test.pcap -T json -V
# 以txt格式保存pcap文件内容
sudo tshark -r test.pcap -T text -V > test.txt
# 设置条件,过滤pcap包中的信息
sudo tshark -r test.pcap -T fields -e ip.src -e ip.dst | grep 192.168.1.103

tcpdump抓包

sudo tcpdump -i wlan0 -s0 -w test.pcap

u盘格式化

# 列出磁盘
sudo fdisk -l

# 手工挂载u盘,这里-t vfat 是指的fat的格式,/dev/sdb指的是U盘,/mnt/usb是挂载的地方
mount -t vfat /dev/sdb /mnt/usb

# 卸载u盘
umount /mnt/usb

# 将u盘格式化为fat32格式
sudo mkfs.vfat -F 32 /dev/sdb

# 格式化为ext4分区
sudo mkfs.ext4 /dev/sdb

# 格式化为ext3分区
sudo mkfs.ext3 /dev/sdb

# 格式化为ext2分区
sudo mkfs.ext2 /dev/sdb

curl

# 下载
curl -O http://xxx.com/yy.sh

tar

# -v:解压时列出详细
# -f:指定文件
# -x:提取文件
# -t:列出所有文件
# -c:创建一个压缩文件

# 解压文件
tar -xvf xxx.tar.xz(or xxx.tar.gz or xxx.tar.bz2)

# 查看压缩包里的内容,不解压
tar -tvf xxx.tar.xz

# 归档一个文件夹
tar -cf xxx.tar files/

iptables

# -t:指定表,filter(默认表)、nat、mangle、raw、security
# -j:指定符合规则时执行的动作,DNAT、ACCEPT、MASQUERADE
# -A:添加一条规则到规则链
# -D:删除规则链上的一个规则
# -L:列出规则链中的规则
# -p:指定协议
# --dport:指定端口
# -d:指定目的ip
# -s:指定源ip
# -n:以数字形式显示ip地址
# --line-numbers:显示出行号

# 端口转发,对80端口的请求转发到指定地址
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination $ip:$port

# 删除一条规则
iptables -t nat -D PREROUTING -p udp --dport 53 -j DNAT --to-destination $ip:$port

# 列出nat表中PREROUTING规则链中的所有规则,ip地址以数字形式显示,显示出每条规则的行号
iptables -t nat -L PREROUTING -n --line-numbers