0%

Linux常用命令

linux下常用的一下命令

工作中我们会经常遇到各种各样的问题,遇到我们解决不了的我们会查找相关的资料,下面就是我平时工作中遇到的一些场景,记录的一些关于linux下操作的相关命令,希望对大家有用,会不定时更新~

nmcli 命令

1
2
3
4
5
6
7
# 查看连接状态
nmcli connection show

# 查看网络设备,包括物理网卡和虚拟网卡。
# 通过nmcli device 查看当前的网卡设备,其中CONNECTION 中有内容的是代表当前网卡处于活跃状态
nmcli device
nmcli dev

firewalld防火墙

1
2
3
4
5
6
7
8
9
10
11
firewall-cmd --zone=public --add-port=4400-4600/udp --permanent(指定端口范围为4400-4600通过防火墙)
其中:
--zone # 作用域
--add-port=80/tcp # 添加端口,格式为:端口/通讯协议
--permanent # 永久生效

firewall-cmd --zone=public --remove-port=80/tcp --permanent(关闭指定端口)

firewall-cmd --zone=public --list-ports(查看通过的端口)

firewall-cmd --state # 查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

iptables

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
1、iptables -L
# 查看iptables规则
# 查看filter表的iptables规则,包括所有的链。filter表包含INPUT、OUTPUT、FORWARD三个规则链。
# 说明:-L是--list的简写,作用是列出规则。

2、iptables -L [-t 表名]
# 只查看某个表的中的规则。
# 说明:表名一共有三个:filter,nat,mangle,如果没有指定表名,则默认查看filter表的规则列表(就相当于第一条命令)。
# 举例:iptables -L -t filter

3、iptables -L [-t 表名] [链名]
# 这里多了个链名,就是规则链的名称。
# 说明:iptables一共有INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING五个规则链。
# 举例:iptables -L INPUT
# 注意:链名必须大写。在Linux系统上,命令的大小写很敏感。

4、iptables -n -L
# 说明:以数字形式显示规则。如果没有-n,规则中可能会出现anywhere,有了-n,它会变成0.0.0.0/0

5、iptables -nv -L
# 说明:你也可以使用“iptables -L -nv”来查看,这个列表看起来更详细,对技术人员更友好,呵呵。
# 如果想删除iptables规则我们可以如下操作
# 删除之前添加的规则(iptables -A INPUT -s 192.168.1.5 -j DROP):
iptables -D INPUT -s 192.168.1.5 -j DROP

# 有时候要删除的规则太长,删除时要写一大串,既浪费时间又容易写错,这时我们可以
#先使用–line-number找出该条规则的行号,再通过行号删除规则。
iptables -nL --line-number

# 删除第二行规则
iptables -D INPUT 2

[1] https://blog.csdn.net/chengxuyuanyonghu/article/details/51897666

find 查找命令

1
2
3
4
5
6
# find命令的结果作为输出执行子命令
find / -name test.cpp -exec ls -l {} \;

{} 代表的是find找到的内容,find的结果会被放置到{}位置中。
-exec 一直到\;是关键字,代表的是find额外的动作开始(-exec)到结束(;\)。
因为在bash环境下’;‘符号是有特殊意义的,因此用反斜杠'\\'来跳脱。

tcpreplay 命令

1
2
3
4
# 先安装"epel-release"的软件包
yum install epel-release
# 安装tcpreplay软件包
yum install tcpreplay

ps命令

1
2
3
4
5
# 查看进程线程情况
ps -eLf

# 查看所有进程情况
ps aux

tar 压缩、解压命令

1
2
3
4
5
6
7
# 压缩
tar -zcvf /tmp/etc.tar.gz /etc # 将/etc下的所有文件及目录打包到/etc,并使用gz压缩 ,-v 参数显示详情
tar -cvf /home/abc.tar /home/abc # 只打包,不压缩
tar -zcvf /home/abc.tar.gz /home/abc # 打包,并用gzip压缩

# 解压
tar -zxvf /tmp/etc.tar.gz # -v 参数显示详情

systemctl 命令

1
2
3
4
5
# 需要锁定该服务时执行
systemctl mask firewalld

# 实现取消服务的锁定
systemctl unmask firewalld

systemd 服务

1
2
3
4
5
6
7
8
9
# systemd 添加使用环境变量的方法
Environment="One=1" "Two=2"
Environment="Three=3"

# 使用文件file的方式
EnvironmentFile=/usr/local/env_test/load.conf
file内容如下:
MY_ENV="helloworld"
GLOBAL_ENV="nihaoshijie"

[1] https://www.jibing57.com/2022/10/09/environment-varilables-in-systemd-service/

路由配置相关

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
# 添加IPV6地址
ip -6 addr add <ipv6address>/<prefixlength> dev <interface>
ip -6 addr add 2001:0db8:0:f101::1/64 dev eth0

ifconfig <interface> inet6 add <ipv6address>/<prefixlength>
ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64

# 添加默认路由
ip -6 route add <ipv6network>/<prefixlength> via <ipv6address>
ip -6 route add default via 2001:0db8:0:f101::1

route -A inet6 add <ipv6network>/<prefixlength> gw
route -A inet6 add default gw 2001:0db8:0:f101::1

# 查看路由
ip -6 route show
route -A 'inet6'
route -6

#windows查看路由表
route print

# 查看邻居缓存
ip -6 neighbor show

# windows查看邻居缓存
netsh interface ipv6 show neighbors

# 查看smtp服务器
ping smtp.sohu.com
ping smtp.qq.com

更新内核命令

1
2
# 更新内核
yum update kernel -y

大文件重定向有效信息

1
2
# 重定向dmesg.txt关键字Call Trace的前后2000行到nn.txt:
grep -C 2000 ‘Call Trace’ dmesg.txt >nn.txt

Shell递归删除指定字符串文件或者目录

1
2
3
4
# 文件
find . -name "*.rej" | xargs rm -rf
# 目录
find . -type d -name "*.rej" | xargs rm -rf

文件夹建立软链接(用绝对地址)

1
2
ln -s 源地址 目的地址   # 比如我把linux文件系统rootfs_dir软链接到/home/jyg/目录下
ln -s /opt/linux/rootfs_dir /home/jyg/rootfs_dir # 就可以了

大数据报文件分割

1
2
3
4
5
# window 文件分割
windows下 d:>wireshark>editcap -C 1000000(文件大小) 待分割文件路径 新文件名称

# linux 文件分割
linux 可使用split命令

ps查看进程存活时间

1
2
# 查看进程的存活时间
ps -eo pid,lstart,etime|grep pid

CPU相关

1
2
3
4
5
6
7
8
9
10
11
# 查看物理CPU的个数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l

# 查看逻辑CPU的个数
cat /proc/cpuinfo |grep "processor"|wc -l

# 查看CPU是几核
cat /proc/cpuinfo |grep "cores"|uniq

# 查看CPU的主频
cat /proc/cpuinfo |grep MHz|uniq

watch 实时监控

1
2
3
4
5
# 每一秒输出系统的平均负载
watch -n 1 'cat /proc/loadavg'

# 每秒输出变化
watch -n 1 -d 'pstree|grep http'

rpm 命令

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 查看.rpm包依赖
rpm -qpR [package]
# 查看已安装的rpm包依赖
rpm -qR centos-release # R参数的意思就是requires就是依赖哪些软件包
# 查看未安装的rpm包依赖
rpm -qpR centos-release

yum deplist centos-release

# 安装.rpm 包时,如果缺少依赖,报错信息中会打印出缺少的依赖
rpm -ivh [package]

# 查看已经安装的数据包
rpm -qa|grep gdb

# 查询软件包被哪个软件包依赖
rpm -e --test centos-release # 通过--test进行测试删除,查看是否有依赖关系,如果有会阻止删除
错误:依赖检测失败: rpcbind 被 (已安裝) quota -1:4.01-17.el7.x86_64 需要


# 查看某个内置的宏定义
rpmbuild --showrc|grep buildroot
# 构建rpm包
rpmbuild -ba SPEC/starpath.spec
# 查看宏定义
rpm --eval "%{_bindir}"

# 查看rpm的相关信息
rpm -qpi starpath-1.0.0-121.el8.x86_64.rpm
rpminfo starpath-1.0.0-121.el8.x86_64.rpm

# 查看changlog日志(rpm包需要存在)
rpm -qpi starpath-1.0.0-121.el8.x86_64.rpm --changelog|more

# 解压rpm包
rpm2cpio xxx.rpm | cpio -div

# 查看rpm安装包安装的时候执行的脚本内容
rpm --scripts -qp ./nginx-1.12.2-2.el7.x86_64.rpm

# 列出一个rpm包安装的文件
rpm -ql ./nginx-1.12.2-2.el7.x86_64.rpm

# 列出某一个文件属于哪个rpm包
# rpm -qf 文件的绝对路径
[hadoop@localhost ~]$ rpm -qf /usr/lib
filesystem-3.2-25.el7.x86_64

# rpm 安装
rpm -ivh rpm包全名
-i(install) # 安装
-v(verbose) # 显示详细信息
-h(hash) # 显示进度

--test # 测试安装,但是真正执行安装,即 dry run 模式
--nodeps # 忽略依赖关系
--replacepkgs # 其他已安装的rpm包的文件,与当前需要安装的 rpm 文件冲突时,则覆盖文件并进行安装。
--nosignature # 不检查来源合法性
--nodigest # 不检查包完整性
--noscripts # 不执行程序包脚本
%pre:安装前脚本; --nopre
%post:安装后脚本; --nopost
%preun:卸载前脚本; --nopreun

rpm包如果制作不当,可能在卸载时产生各种问题导致无法正常卸载。
error: %preun()scriptlet failed,exit status 1
表示rpm的 %preun段部分的脚本执行有问题,返回码为1,此时rpm卸载动作会中止,如果想要强制卸载,可以用选项参数
rpm -e xxx--nopreun
类似的,%postun %pre %post等这些段落中的脚本也可能出现问题,相对应的可以用 -nopostun -nopre -nopost 这些选项来忽略错误,让安装或卸载继续执行。
另外,-noscripts 相当于-nopre-nopost-nopreun-nopostun。即跳过这4个段落里所有的脚本执行。
当出现error::specifies multiple packages错误时,说明因为rpm安装或制作不当,出现了两个不同版本的同名软件,此时卸载无
法正常执行,如果需要把这两个都卸载,则用-allmatches选项即可。

# 查询包的依赖关系
https://pkgs.org/

[1] https://blog.51cto.com/chouketsu/1569607

Linux 删除乱码文件

1
2
3
4
5
# 查看文件索引节点
ls -il

# 删除对应的索引节点
find -inum 203179434 -exec rm {} -rf \

mount 挂载文件系统

1
2
# 把根目录文件系统设为可读写
mount -n -o remount,rw /

ftp 命令

1
2
3
4
5
6
7
8
# 使用binary的方式来传输文件
binary

# 查看本地目录local change director
lcd

# 上传命令
mput D:\User\Desktop\Desktop\*

CPU 相关

1
2
3
# 设置某个进程运行在某个cpu上
taskset -p pid
taskset -pc 0 pid

udvadm 命令

1
2
# 查找指定设备的属性信息
udevadm info --query=all --name=/dev/sdb

ldconfig 命令

1
2
3
4
5
6
7
8
9
# 管理及查看本机装载的库文件
ldconfig 加载库文件
/sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系

# 配置文件
/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

# 缓存文件
/etc/ld.so.cache

nm 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
nm 命令用于列出共享库或可执行文件中的符号信息,包括函数、变量等。符号前面的字母标识了符号的类型,T 和 t 是两种可能的符号类型。

T 符号:

T 符号通常代表全局符号,是全局可见的函数或变量。
这些符号在编译时被定义,可以在程序内的任何地方访问。
一般来说,T 符号表示公共的函数或变量。
t 符号:

t 符号通常代表局部符号,只在定义它们的编译单元(通常是源代码文件)中可见。
这些符号通常是静态函数或变量,只能在定义它们的编译单元内访问。
t 符号通常是局部的、内部使用的函数或变量,不对外可见。
总之,T 符号表示全局可见的符号,可以被其他编译单元或程序访问,而 t 符号表示局部符号,只能在定义它们的编译单元内可见。符号的可见性和范围由编译器和链接器处理,nm 命令的输出用于显示这些符号的信息,以便进行调试和分析。
小主,路过打个赏再走呗~