Linux常用基本命令
Linux常用命令
基本操作命令
命令补全
值得特别提醒的是假如我们输入了一个命令例如cd /etc/但是忘记下面要打开什么文件,这时候我们加入两个tab键cd /etc/[tab][tab]就能够显示当前目录下所有目录,然后输入我们想要进入的目录。如果你能够确定当前目录下只有一个文件或目录cd /etc/[tab],加一个tab键会直接替换为下一级目录,因为shell能够确定你的下一级目录或者文件是什么(因为只有这一个目录或文件)。
通配符
ls -l /home/lem/s* # 查看带有s的目录下所有文件
cp /home/lem/share/* /usr/ # 复制share目录下所有文件到/usr目录下
man查看操作手册命令
man -k . # 查看命令关键词
查看支持的shell以及每个用户登录的基础shell类型
# 查看支持的shell类型
cat /etc/shells
# 查看用户登录的shell类型
cat /etc/passwd
cat /etc/shadows
wall广播命令
wall "nihao" # 向当前服务器广播所有登录的用户广播信息
gcc编程命令
ar-archieve创建链接库命令
ar适用于处理静态库文件.a
ar -rcs libserver server.o # 链接库链接的是.o文件,不是可执行文件,建立静态库文件(无法动态修改),可以将其放在/usr/local/lib下,
# 放到标准目录下就可以通过gcc -lserver直接引用,这样想来-lpthread就是这样一个文件
ar -t <filename> # 查看文件中有什么
-r # 有同名文件存在即更新
-c # 不需要反馈信息
-s # 要在.a文件开头建立索引
gcc命令
gcc -o server server.c -I. -L/my_lib -lserver # 告诉编译器你放在哪里了,指明头文件在当前目录下使用.
gcc -c reactor.c -o reactor.o # 编译
gcc -c webserver.c -o webserver.o # 编译
gcc reactor.o webserver.o -o oserver # 链接
环境变量命令
环境变量分级
/etc/profile # 系统级环境变量
.bash_profile # 用户登录级shell变量,图形界面时加载
.bashrc # 非登录级别shell变量
# 如果时SSH登录,ssh root@ip加载bash_profile, ssh root@ip 'command'加载.bashrc
export设置环境变量
export Local_Path=/home/lem/share
set观察环境变量与所有变量
set
set -x # 开启调试模式
set +x # 关闭调试模式
unset取消设置环境变量
unset 可以用于取消shell写入的变量,shell脚本的变量的生命周期在脚本执行完毕后结束。
unset Local_Path
env命令用于查看设置的环境变量
env # 显示所有环境变量
env -u lem # 显示单一用户的环境变量
网络资源请求命令
wget资源获取命令
支持从网络上下载数据,支持http/https协议,也可以通过代理服务器下载。
wget [URL]
wget -o file.zip https://www.samples.com
wget --user=[username] --password=[password] [URL] # 使用账号密码
wget --proxy [proxy_server:port] [URL] # 使用代理
wget --no-check-certificate [URL] # 不检查SSL证书
curl传输数据命令
支持多种传输方式:HTTP,HTTPS,FTPS,TELNET,代理等,用于下载和请求数据,也可用于测试或与服务器交互。
curl [option] [URL]
curl https://www.samples.com -o file.zip # 下载文件
curl -X GET [URL] # 发送GET请求
curl -k [URL] # -k允许连接https网站时不进行ssl验证
curl -\# [URL] # 显示进度条
-I # 只显示http响应头,不显示响应体
-X # 指定restful接口
-H # 指定请求头,例如-H "Accept: application/vnd.docker.distribution.manifest.v2+json",vnd为MIME类型的特定自定义格式
-O # 下载文件到本地,并使用相同的名字
-v # 显示流程信息
curl --unix-socket /var/run/docker.sock -X GET "http://localhost/v2/_catalog" # 通过unix-socket连接的好处

sshpass命令
sshpass 传递命令
sshpass -p 'password' ssh user@ip '命令'
sshpass -p 'password' ssh ip '命令' # 不指定用户的话,默认为root用户
sshpass -p 'password' ssh -o StrictHostKeyChecking=no ip # 不检查密钥
ssh命令
ssh ip # 连接ip
openssl加密命令
openssl可以用来生成ssl密钥,用于加密
openssl [command] [command_opts] [command_args]
# 产生ras密钥对
openssl list -cipher-commands # 列出加密命令
# 产生ras密钥对钥对,-o指定私钥文件的保存位置,密钥长度为2048位私钥
openssl genrsa -output private.key 2048
# 创建证书签名请求
openssl req -new -key private.key -out crs.csr
# 如果不想要按部就班输入国家等信息,可以通过以下两种方式避免按步输入
# 方法一:通过-subj指定输入的对象
openssl req -new -key private.key -out csr.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrganization/OU=MyUnit/CN=example.com"
req # 生成证书签名请求
-new # 指定生成新的csr
-key # 指定私钥
-out # 指定csr文件的保存路径
-subj # 指定对象
# 方法二:使用配置文件方式
# csr.conf,csr文件的长度由主题信息和密钥信息长度决定
[dn]
C = CN
ST = Beijing
L = Beijing
O = MyOrganization
OU = MyUnit
CN = example.com
openssl req -new -key private.key -out csr.csr -config csr.conf
# 查看csr的文本
openssl req -in csr.csr -text
# 生成自签名证书,x.509是一种国际标准X.509,证书通常以.pem和.crt结尾
openssl x509 -req -days 365 -in csr.csr -signkey private.key -out certificate.crt
-in # 指定csr证书签名请求
-signkey # 指定签名key
-out # 输出证书
# 查看证书文本
openssl x509 -in certificate.crt -text -noout
-noout # 指定不输出证书二进制内容
# 使用digest算法:常用的包括,md5, sha256等
openssl digest -md4 [filename]
openssl list -1 -digest-commands # 列出摘要命令
openssl list -1 -public-key-algorithms # 列出公key算法
设备管理命令
mknod命令
mknod用于创建字符设备和块设备
mknod [选项]... 名称 类型 [major minor]
b # 块设备
c # 字符设备
p # 创建FIFO文件-命名管道
-m # 设置权限
-Z # 设置安全上下文
mknod /dev/mydev c 1 3 #创建一个字符设备mydev 主设备号为1,副设备号为3
文件操作命令
tree命令
tree # 查看当前文件夹下所有文件和文件夹的目录树
ln命令link(添加软链接)
ln [option] TARGET LINK_NAME
-f # 移除已经存在的目标文件
-s # 生成符号链接代替硬链接
chmod修改文件权限命令
chmod 777 <filename> # 777,分别是u,g,o的权限位
-r 4
-w 2
-x 1
# 复合模式
u # 所有者(user)
g # 所属组(group)
o # 其他用户(others)
a #所有用户(all,即 uga)
# 操作符
+ # 添加权限
- # 删除权限
= # 设置权限
cp复制命令
cp -f example.txt example_copy.txt #
vim文件编辑命令
vim /etc/apt/source.list # 用vim软件打开镜像源
-i # insert mode , press esc to exit
:wq # command mode , save and quit
q # command mode, quit
/text # 文本匹配命令
G # 直接跳转到末尾
gg # 直接跳转到开头
945gg # 直接跳转945行
v # 进入v模式
mkdir创建目录命令
mkdir share # 创建dir
-p # 如果父目录不存在,就创建父目录
mkdir -m 750 share # 创建目录并设定权限,等于mkdir+chmod
rmdir移除目录命令
rmdir share # 移除dir
ls列出命令

ls -l # 列出文件和目录的详细信息
ls -R # 列出所有文件
ls -a # 列出隐藏文件
mv移动文件命令
mv example.txt /lem/ # 移动目录下
mv oldname newname # 重命名
rm移除文件命令
rm example.txt # 移除文件
rm -rf dir # 移除dir目录下所有目录和文件
scp安全复制协议传输文件命令
其实还是SSH协议
scp -r local_dir root@hostip:path
-v # 显示详细信息
-P # 指定ssh的端口,默认是22
-i # 指定私钥
find查找命令
find . -name "*.txt" # 查找当前目录下所有符合.txt后缀的文件
-type [bcdpflsd] # 查找类型,文件,目录,符号链接
b # 块设备
c # 字符设备
f # 普通文件
d # 目录
l # 符号链接
p # 命名管道
s # 套接字文件
-size +1M # 指定查找大于1MB的文件
-perm /u+x # 按照文件权限搜索
-prune # 跳过目录
-maxdepth 1 # 限制搜索最大深度
-print0 # 以空字符分隔输出
find . -name a.log -exec ls {} # {}代表占位符,接受所有文件,与xargs相比是,单独执行文件,效率差
find . -name "*.log"
file查看文件类型
file -i name.txt # 查看MIME格式(其实就是网页类型)
-b # 仅显示类型,不显示文件名

dd数据复制命令
dd即是data dump数据复制功能,能够完成文件复制,并转变成相应的格式
dd [operand]...
dd option
# 可以有以下选项
if # input file输入文件
of # output file输出文件
bs # block块大小
conv # 指定转换格式
count # 块数量
dd if=input.bin of=output.bin conv=swab # 转变格式
dd if=/dev of=./t.img bs=4M count=1024 # 将/dev目录的内容输出为镜像,块大小为4M,有1024个块
# 填充0到磁盘
dd if=/dev/zero of=/dev/sdX bs=4M
# 以0填充特定文件
dd if=/dev/zero of=./mt.imgt bs=4M count=1 # 此条会生成1个4M大小的mt.img文件

文本操作命令
tee命令用于从标准输入读然后写到标准输出和文件中
# T型指令
echo "Hello, World!" | tee filename.txt # 显示输出并且将输出写入到文件中
echo "Hello, World!" | tee -a filename.txt > /dev/null # 不显示输出将输出写入到文件中
echo "Hello, world!" > name.txt # 直接较标准输出定向到name.txt文件中,不打印输出
ls -l | tee -a filename.txt # 列出信息追加写入到文件中
cat阅读文件命令
复制文件到标准输出
cat /etc/apt/source.list # 查看文件内容只读,由第一行开始显示
-A # 显示所有字符,包括末尾的文本结尾标志$
-n # 显示所有的行号
-b # 只给非空行进行编号
-E # 显示每一行结尾的$
-s # 压缩空行
-T # 显示Tab以^I
# <<代表,将输入流定位到文件或者命令,EOF代表遇到EOF结束,>代表从头开始写, >>代表追加写入
cat <<EOF > a.txt
nice
shdiah
shdia
sadihhi
sdds
name
EOF
阅读文件命令
tail -n 10 b.txt # 只查看末尾10行
head -n 10 b.txt # 只查看头10行
more b.txt # 一页一页看内容,通过enter浏览
cat /proc/version
cut截断字符串命令
who | cut -d ' ' -f 1 # 只显示第一个被空格分隔的字符,无法处理连续空格
-c 1- # 指定显示第1个字符后的所有字符
-d # 指定分隔符,默认分隔符为tab
-f 1 # 提取第1列,以分隔符指定的,
-f 1,3 # 提取第1列和3列
-f 1-3 # 提取1-3列
sort排序命令
sort -r # -r 反向排序大小
-n # 只对数值进行排序
-k 1.5 # 对第一个字段进行
-u # 去除重复行
-z # zero-terminiated,行分隔符是空字符,不是换行符
-t # 指定分隔符,-t , 使用逗号作为分隔符
wc单词计数命令
wc -l # 列出行
-w # 列出英文单词字数
-m # 列出字符数
tr转义和删除字符命令
tr '[a-z]' '[A-Z]' # 替换所有小写字母为大写字母
-d ' ' # 删除空格
-s # 取代重复的字符
grep抓取文本命令
值得注意的是,这个会遍历所有文本进行匹配,所以效率较低,而sed是逐行处理的
-o # 只显示匹配字段
-P # 使用perl正则表达式
-r # recursive递归搜索
-n # 显示行号line-number
-v # 方向搜索invert-match
-A # 表示after
-C # 表示context
-c # 显示匹配的计数,不会显示内容
--color=never # 关闭颜色输出
grep -rn "new" /data # 捕捉/data目录下所有new的关键字
grep -A1 "new" a.txt # 捕捉new之后的一行(包括new这行)
grep -B1 "new" a.txt # 捕捉new之前的一行(包括new这行)
grep -C3 "new" a.txt # 显示new的前后两行,包括new这行
awk命令
awk # 字符匹配
awk 'pattern { action }' input_file # 基本语法
awk '{print $1 " " $2}' a.txt # 打印文本的第一列和第二列
awk '$1 > 10 {print $1}' a.txt # 打印第一行字段大于10的所有字段
ps -ef | grep 1 | awk '{print $1}' # 打印获取到的输出
docker images | grep no| awk -F ',' '{print $2}' # 以逗号为分隔符打印字符
awk 'NR=1 {print}' # 显示第一行, NR number of record 当前记录的行号
awk '{print NF-1}' # 显示倒数第二行,NF number of fields
sed(stream editor)流编辑命令
sed [options] 'command' input_file # 基本语法
-i # 应用改变
-e # 执行多条命令
p # 打印模式空间的内容到标准输出
g # 将保持空间的内容复制到模式空间
= # =显示行号
-n # no-auto-print不自动输出每一行
sed '1,10s/old/new/g' a.txt # 打印a.txt中的old为new, 不会真正替换, s代表替换;g代表全局,否则只替换第一个匹配的词,1,10代表替换1-10行
sed -i 's/old/new/g' a.txt # 才会替换文本中的old为new
sed -n '/new/p' a.txt # 打印有new的行
sed -i '/new/d' a.txt # 删除有new的行
sed -i 'iold' a.txt # 在第一行插入old, 不加-i不会真正插入
sed -i '1aold' a.txt # 在第一行追加插入old
sed -i -e 's/old/new/g' -e 's/new/new1/g' a.txt # 执行多条替换命令
sed '/old/d; /new/d' file.txt # 打印所有不包含new和old的文本, 支持正则匹配
sed -i 's/7.200.200.20\/24/90.90.102.95\/23/g' a.txt
sed -i '191i \ print(\"nihao\")\n' a.py
sed -i '193d \ mt = as' a.py'
sed -i "$Ip" # 此时会替换IP为对应字符串
sed -i '/old/i new' new.py # 在new.py的old一行前插入
sed -i 's/old/&at/g' new.py # 在new.py的old后追加at,字段会由old变为oldat
sed -i 's/old/# &/g' new.py # 在new.py的old前追加#,字段会由old变为# old
sed -i '6r new.txt' old.txt # 将new.txt内中的内容读到old.txt第6行之后
sed -i "/sandbox_image/ s%${str1}%${str2}%g" /etc/containerd/config.toml # 地址模式只对这一块字符串进行操作
sed -i "/sandbox_image/{-2, +2}s%${str1}%${str2}%g}" /etc/containerd/config.toml
sed -i '/old/{N;s/ntx/new/}' a.txt # 对old匹配行包括下一行进行匹配,将ntx替换为new
sed -i '/old/p;s/ntx/new' # 这是两条命令,后面的匹配命令会对全文进行匹配
xargs命令
xargs默认从标准输入读取数据,将读入的数据传递给特定命令
-0 # 输入项以空字符(null)分隔,不是换行符和空格
-I # 指定一个占位符,用于在命令中替换输入项
-n # 指定传递给命令的参数量
-P # 指定并行运行的进程数
-p # 执行前提示用户确认
-a # 指定从文件中读取
-s # 指定xargs的最大命令长度,防止命令过长
-t # 执行前打印命令
cat xs.txt | xargs rm # 按照xs.txt中的文件列表删除文件
cat a.txt | xargs echo # 显示文本内容
# 上一条命令等价于
xargs -a a.txt -I {} echo {}
xargs echo < cat a.txt # 这种方式与前一种方式相同
cat a.txt | xargs -n 1 echo # 每次传递1个参数进行打印
cat a.txt | xargs -n 2 -P 2 echo # 指定P进程数2
ls | grep flame | xargs -I {} mv {} {}.bak # 将所有文件移动为备份文件
磁盘管理命令
du命令
du -sh * # 以K,M,G为单位显示文件大小
-c # 统计所有文件容量
df命令
df -h # 显示挂在的磁盘
df -l # 排除网络文件系统
-i # 显示inodes
-a # 显示全部伪、复制的、不可访问的文件系统
可以查看cgroup文件系统

用户管理
pam.d修改root密码
修改密码时,可能会遇到限制更改以前设置过的密码
/etc/pam.d/system_auth
/etc/pam.d/passwd_auth
# 更改remeber=5
id命令
id lem # 查看lem用户的用户id、用户组id、用户组

useradd命令
useradd -m boom # -m根用户下创建一个新用户并添加主目录
visudo # 查看超级用户权限
usermod -aG sudo boom # 将boom用户加入到sudo用户组, redhat下面是加入到%wheel
cat /etc/group | grep sudo # 查看sudo用户组有什么用户
echo $SHELL
usermod -s /bin/bash boom # 将默认为boom生成的sh改为/bash/sh,sh是没有上下键,tab这些的
groups boom # 查看用户boom所在组
cat group | grep sudo > /home/lem/name.txt
# 开启root用户登录权限
sudo vim /etc/ssh/sshd_config # 修改ssh连接配置
# 文件中添加这一行
PermitRootLogin yes # 许可root用户登录
sudo service ssh restart # 重启ssh服务
who命令
who # 查看当前登录用户数
whoami # 查看当前用户名
whatis gcc # 查看gcc是什么
whereis gcc # 查看gcc路径
系统资源监控命令
lsb_release命令
显示特定lsb(linux standard base)和发布信息
lsb_release -a # 显示系统版本
lsb_release -v # 显示当前系统支持的lsb模块版本
-r # 显示发布版本信息
-c # 显示代号名字
-d # 显示发布描述信息,例如Description:Ubuntu 20.04.6 LTS
-i # 显示发布ID,如ubuntu

hostnamectl命令
hostnamectl # 显示系统信息或者可以cat /etc/os-release
hostnamectl master1 # 主机名改为master1
htop命令
htop # 显示硬件资源占用率
top命令
top命令主要用于显示进程资源情况,top默认显示最大只有512个字符
top # 监控资源,与htop命令类似,但是htop高亮比较好
-b # 开启批处理模式 ,可以输出到文件或者发送到别的程序
-d # 指定延迟时间,例如d1延迟1s后输出
-E # 指定GB,MB,KB显示等g|m|k
-H # 显示所有线程
-n # 显示刷新几次
-o # 指定以哪些字段排序
-u # 只展示用户进程
-w # 指定输出宽度,最大支持512
-1 # 显示所有CPU信息
-c # 显示程序名mode
top -b -d1 -n1 -1
iotop命令
iotop用于监控磁盘资源,默认只显示活跃的进程,-a显示所有
iotop
-p <pid> # 只显示特定进程的
-o # 只显示有活动的进程,累积显示
ls系列查看系统资源信息

lspci命令
lspci命令用于查看pci信息

其中00:00.0按照bus:device.function,分别代表bus号,设备号,功能号,后一个字段如host bridge指明设备类型,然后是设备名称,最后是版本号revXX
lspci -v # 显示更详细的信息
-vv # 可以显示更详细的信息
-vvv # 可以显示更加丰富的debug信息


lspci -t -v
-t参数用来查看PCI信息以树结构的方式

-[0000:00]-+-00.0第一个0000代表bus域号,单机系统中,默认为0000,第二个00代表总线号,第3个00代表设备号,第4个0代表功能号
lsmod
lsmod用于查看linux内核加载的模块
lsmod # 显示当前加载到内核的模块
lsmod -a # 显示所有模块,包括未使用的
lsmod -t # 以树结构显示模块
lsmod -o # 显示模块详细信息
modprobe <module-name> # 加载模块
modprobe -r <module-name> # 移除模块
insmod
rmmod

lscpu
lscpu # 能够显示系统字节序
lscpu --extend --all #

lsof
lsof # list open files
-p <pid> # 按进程列出打开的文件
-c <command> # 按命令列出打开的文件
-i # 列出所有网络连接
-i <protocol> # 按协议列出网络连接
-i :<port> # 按端口号列出网络连接
lsof <file> # 查看所有打开file的进程

lscpu # 能够显示系统字节序
lsmem # 列出内存信息
lspci # 列出PCI接口信息,可以用来查看是否有GPU等设备
lsns # 查看命名空间以及当前用户进程ID, 会显示以下六种文件
- cgroup # cgroup根目录
- pid # 进程ID
- user # 用户和用户组
- uts # 主机名与网络信息名
- ipc # 进程间通信资源,系统VIPC对象和POSIX消息队列
- mnt # mount文件系统挂载点
- net # network网络设备,ip地址、IP路由表、/proc/net目录,端口号
lsns -l 4026531835 # 查看特定命名空间的进程
lsns --output-all # 列出系统所有命名空间所有信息包括NETNSID网络子系统命名空间ID,NSFS文件系统挂载点(通常用于网络子系统)以及文件路径
lsb_release -a # 查看ubuntu系统发行版本命令
lsblk # 显示块设备(硬盘)
lslogins # 显示系统中的用户
可以看出当前用户的命名空间是在5312进程下的命名空间。5321进程就是用户lem的进程ID,5312的父进程就是1号进程,就是root进程。

u系列命令

uname -a # 查看系统版本
ulimit -a # 获取或者设置用户限制信息包括栈的尺寸,管道大小等
ulimit -n # 查看当前最大用户文件描述符数量限制
ulimit -n 1024 # 设置最大文件描述符数量为1024
uset $http_proxy # 取消设置环境变量
umount # 取消挂载文件系统
mount # 查看挂在的文件系统

ps系列命令

pstree # 显示进程树信息
pstree -ps # 显示特定的进程以及其子进程进程树信息
ps -aux # 显示进程的一个快照
ps -ef
-a:显示所有终端的进程。
-u:以用户友好的方式显示进程信息,包括用户列、CPU 和内存使用率等。
-x:显示没有控制终端的进程
-e: 显示所有进程
-f: 以完整格式显示
ps -eo pid,ppid,comm # o指定特殊格式,e所有进程
ps -u $USER -o pid,ppid,comm # 显示当前用户的进程,以及进程ID

cpuinfo查看cpu信息
# 真是深刻体会到了什么是一切即文件
cat /proc/cpuinfo # 查看cpu信息
cat /proc/filesystems # 查看文件系统
cat /proc/meminfo # 查看内存信息
cat /proc/interrupts # 查看中断信息
systemctl控制服务命令
systemctl status firewalld # 查看服务状态
systemctl start firewalld # 启动服务
systemctl stop firewalld # 关闭服务
systemctl list-units # 列出当前启动的服务
systemctl -l # 与list类似
systemctl list-machines # 列出本地容器和主机,k8s也是一种host
systemctl list-jobs # 列出job
systemctl list-sockets # 列出当前内存中的通信socket
systemctl list-timers # 列出内存中的计时器
journalctl日志管理和监控命令
journalctl -u kubelet # 显示kubelet单元的日志信息
journalctl -n 10 -u kubelet # 显示kubelet单元的10行日志,相比于systemctl status显示的日志更多
ipmcset管理IPMI接口命令
ipmcset通常用于管理IPMI的工具,IMPI接口用于远程访问管理服务器的硬件,包括查看硬件状态、配置网络参数、管理用户权限等。ipm control set
-t # 指定类型,例如user为用户管理
-d # 指定设备,例如interface为用户接口
-v # 指定Vlaue
# 设置用户接口类型;分别设定用户lem可以登录的ibmc接口类型为:Web, SNMP, IPMI,SSH, SFTP,Local。
iBMC:/-> ipmcset -t user -d interface -v lem enabled 1 2 3 4 5 7
# 配置RAID
ipmcset -t storage -d createld -v 1 -rl r0 -pd 0
# 服务器上电
ipmcset -d powerstate -v 1
# 服务器下电
ipmcset -d powerstate -v 0
# 重启服务器
ipmcset -d frucontrol -v 0
# ipmc启动SOL连接(serial over LAN), -v指定串口, mode指定SOL会话模式,共享模式:0,独占模式1
ipmcset -t sol -d activate -v <option> <mode>
ipmcget命令
ipmcget -d serialdir # 查看串口信息
free显示内存和交换区使用命令
free -h # 以k,M,G为单位显示内存使用情况
dmidecode查看dmi设备解码命令
dmi为desktop manager interface,收集和管理计算机系统信息的接口
dmidecode # 查看dmi设备管理接口信息
dmidecode -t memory # 解码内存信息
dmidecode -t cache # 解码缓存信息
dmesg查看内核信息命令
打印或控制内核的环形缓冲区,默认展示内核环形缓冲区中的所有信息,可以用来查看进程OOM
dmesg --clear # 清楚缓冲区
dmesg -D --console-off # 控制台信息打印关闭
dmesg -E # 控制台信息打印开启
dmesg -C # 清除内核信息
-k # 打印内核消息
-w # follow的意思
-T # 打印人类可读的时间戳
Killed process 57636 (python3.10) total-vm:102681144kB, anon-rss:62998680kB, file-rss:115876kB, shmem-rss:49160kB # 物理内存占用60G,虚拟内存占用100G
# vm代表virtrual memory虚拟内存大小, rss代表resident set size表示常驻内存集合,即是物理内存占用
free内存资源监控命令
free命令用于监控内存资源变化,其中nbuffer和cache;buffer用于临时存放磁盘IO操作数据的内存区域;cache临时存放最近访问过的文件和数据。
free
-h # 以人类可读的格式显示
-w # 获得更多的输出,会将cache和buffer分开显示
-s 1 # 每1s打印一次
-c 10 # 共打印10次
-t # 显示总和
-l # 显示高和低的内存使用情况
进程管理命令
kill杀死进程命令
kill -9 PID # 强制终止进程
kill -L # 列出所有信号
kill -l 9 # 翻译9为信号名字sig name
pkill命令
pkill -9 python # 杀死所有python进程
pstree -p 100 | grep -oE '[0-9]+' | xargs kill
- 父进程终止后子进程的行为
- 子进程继续运行:默认情况下,当父进程被终止时,其子进程不会自动终止。子进程会继续运行,直到它们完成任务或收到其他终止信号。
- 子进程变成孤儿进程:如果父进程被终止,子进程会变成孤儿进程。这些孤儿进程会被系统中的初始化进程(PID 1,通常是init或systemd)接管。
- 子进程可能变成僵尸进程:如果子进程已经完成(退出),但父进程尚未读取子进程的状态信息,子进程会变成僵尸进程。僵尸进程无法被终止,因为它们已经“死亡”,但它们的条目仍然保留在进程表中,直到父进程读取它们的状态信息。
pgrep命令
pgrep -p 1 # 列出1号进程的子进程
exit命令
exit $? # 如果未指定退出码,可以使用上一条指令的退出码进行退出,并返回一个退出码
&后台运行符号
&后台运行符号会使作业后台运行,jobs可以查看所有后台运行的作业,但是此时当进行下一条命令时,会导致进程stopped,在后台暂停运行;如果要使退出时不影响进程,就可能要使用nohup命令执行,取消处理挂起信号SIGSTOP。
ls &
ls # 会导致stopped,SIGSTOP信号
nohup防挂死命令
nohup ls & # 会使其它的命令退出不会影响进程,但是此时可以强制杀死进程
软件包管理命令
apt命令
# 更改镜像源文件/etc/apt/sources.list
apt-get update // 更新软件包
apt-get upgrade // 升级现有包
apt-get install gcc // 安装gcc包
apt-cache madison <package-name> # 以表格形式显示软件包的可用版本
dpkg命令
dpkg -i xxx.deb
yum命令
# 更改配置文件
yum -y update
yum -y upgrade
vim /etc/yum.repos.d # 修改yum配置源
tar命令
-t # 列出归档中的文件,但不解压
-l # 归档中如果包含链接,显示这些链接的详细信息
-f # 指定归档中的文件
-z # 指明处理的是gzip压缩的归档文件,如.gz
-x # 指明解压缩
-v # 显示详细信息
tar -cf install.tar install # 压缩install目录到install.tar中
tar -ltf install.tar # 查看归档中的内容
tar -xf xxx.tar # 解压tar文件
tar -C share -zxvf xxx.tar.gz # -C解压到特定目录
tar -ltf install.tar.gz # 列出tar包
tar -zxvf install.tar.gz # 解压.gz包
xz命令
xz -d xxx.tar.xz # 解压xz文件
tar xJf xxx.tar.xz # 也可以
zip命令
unzip xxx.zip -d [目标目录]
zip -r xxx.zip /path/files
网络管理命令
ping命令
ping命令的原理是通过ICMP协议
ping 192.168.122.122 // ping这个地址来查看是否连通
ping -h // 查看可选参数
netstat查看网络连接命令
netstat <option> | grep <service> // 常用-anop
-a:显示所有活动连接和监听端口。
-l:显示侦听状态的服务。
-n:直接使用IP地址,而不是尝试确定符号主机、端口或用户名。
-o:显示每个连接的进程标识符(PID)和进程名称。这需要管理员权限。
-p:显示进程ID和名称(需要有足够的权限)。
-r:显示路由表。
-t:显示TCP表。
-u:显示UDP表。
-i:显示网络接口的统计信息。
-s:显示每个协议的统计信息
nestat -anop | grep 2000 // example
ss查看套接字信息命令
ss通常用于大量连接时更加好用
ss
-t # 指定tcp
-a # 所有协议
-p # 显示进程
-o # 显示计时器信息
-s # 显示所有连接使用率
-l # 只显示监听状态的
-n # 接使用IP地址,而不是尝试确定符号主机、端口或用户名。
ss -tulnp # 查看进程
ifconfig命令
ifconfig # 显示网卡信息
ifconfig eth0 down # 关闭网卡 ifup eth0
ifconfig eth0 up # 开启网卡 ifdown eth0
netplan命令
vim /etc/netplan/xxx.yaml # 更改网卡配置文件,netplan会从这里启动
sudo netplan apply # 更新网卡配置,重新启动网卡
值得注意的是,centos类的系统下,可以直接在/etc/networks-script目录下找到每个网卡的文件,如果是ubuntu系统参考上面的命令netplan
ip命令
用于替换更老的ifconfig
ip -a # 查看所有网卡信息包括激活的和未激活的
ip link show up # 查看激活的网卡
ip link set eth0 down # 关闭eth0网卡
ip link set eth0 name enp6s0 # 更改网卡名字
ip addr add 192.168.102.101/24 dev eth0 # 添加ip地址以及掩码
ip route default via 192.168.0.1 # 添加网关
ip link delete eth0 # 删除网卡
NetworkManager命令
nmtui # 以ui界面配置网络接口
nmap命令
nmap(network mapper)命令用于
nmap -sn 192.168.122.1/24 # 探测主机
nmap -p 22 192.168.122.1 # 扫描对应的端口是否开放
-sS # SYN扫描发送SYB数据包,不完成三次握手,适合绕过防火墙
-sT # tcp连接完成三次握手,适合无防火墙
-sU # udp扫描
-sn # 只进行ping扫描,不进行端口扫描
-p # 指定端口范围扫描,-p 1-1000
-T # 设置扫描速度
-v # 增加详细输出
nc网络扫描命令
nc(network cat)命令,用于网络探测
nc [option] host port
# nc -zvw3 192.168.122.1 22 查看是否能ssh连接对应主机
-l # 监听
-p # 指定本地端口
-u # 使用UDP,默认TCP
-z # 扫描模式,连完就关
-v/-vv # 更详细的输出
-n # 不做DNS解析
-w # 超时时间
-k # 持续监听,允许多连接
-N # 读到EOF终止连接
iperf网络性能测试命令
iperf性能测试命令,用于测试网络带块,吞吐量,时延、抖动等性能指标
测试项:带宽测试、时延测试、抖动测试、丢包率测试、多线程测试、UDP和TCP测试
iperf -s # -s 启动服务器模式
iperf -c <server_ip> # -c链接服务器ip
# TCP测试
-t <time> # 指定测试时间
-i <time> # 间隔时间
-p <port> # 服务端口
-J # JSON格式输出
-P <num> # 指定线程数
-w <num> # 设定窗口大小
# UDP测试
-u # udp模式
-b <bandwidth> # 设定UDP发送带宽,-b 100M
-l <length> # 设定UDP长度
pip源配置
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
pip config set install.trusted-host mirrors.aliyun.com
git 配置
git config --global user.email "xxx@163.com"
git config --global user.name "lxxx"
动态库管理
nm命令
列出目标文件(可执行文件, 对象文件或库文件)的符号
nm [选项] [文件名]
-a # 显示所有符号
-a :显示所有符号,包括默认不显示的符号。
-C :显示符号的 C++ 名称修饰(demangle)。
-D :只显示动态符号。
-g :只显示全局符号。
-n :按地址排序输出符号。
-o :在每个符号前加上文件名。
-p :不按地址或名称排序。
-r :按地址逆序排序。
-S :显示每个符号的大小。
-t :指定地址的格式( o表示八进制,x表示十六进制,d 表示十进制)。
-u :只显示未定义的符号。
-A :在每个符号前加上文件名(与-o 类似)。

strings命令
strings命令,用于从二进制文件、对象文件、可执行文件或其他文件中提取可打印的字符串
strings [选项] [文件名]
-a :扫描整个文件,而不是只扫描可加载的段。这是默认行为,但可以显式指定。
-t :在每个字符串前打印其偏移量。可以指定偏移量的格式:
-t d :十进制格式。 -t x :十六进制格式(默认)。 -t o :八进制格式。
-n :指定最小字符串长度,默认值为 4 个字符。
-f :在每个字符串前打印其来源文件名。
-e :指定字符编码,常见的有: -e s :ASCII(默认)。 -e S :UTF-16 大端。 -e l :UTF-16 小端。 -e b :UTF-32 大端。 -e L :UTF-32 小端。
-o :与-t o 相同,以八进制格式打印偏移量(已废弃)。
-w :在每个字符串前打印其来源文件名和偏移量。
strings kheaders.ko
ldd命令
ldd打印共享对象依赖
ldd

ldd -v

ldconfig命令
ldconfig管理动态链接库命令
-v 或 --verbose :显示正在扫描的目录及搜索到的动态链接库,以及所创建的连接的名字。
-n :仅扫描命令行指定的目录,不扫描默认目录,也不扫描配置文件所列的目录。
-N :不重建缓存文件/etc/ld.so.cache。
-X :不更新文件的连接。
-f <conf> :指定动态链接库的配置文件为<conf> ,系统默认为/etc/ld.so.conf。
-C <cache> :指定生成的缓存文件为<cache>,系统默认为/etc/ld.so.cache。
-r <root> :改变应用程序的根目录为<root>。
-l :进入专家模式手工设置连接。
-p 或--print-cache:打印出当前缓存文件所保存的所有共享库的名字。
-c <format>或--format=<format> :指定缓存文件所使用的格式,可选值为ld (老格式)、 new (新格式)和compat(兼容格式,默认值)。
-V :打印出ldconfig的版本信息,然后退出。
-? 或--help或--usage :打印帮助信息,然后退出.
modprobe管理linux内核命令
modprobe <module> # 加载module模块
modprobe -r <module> # 卸载module模块
modinfo <module> # 查看模块信息
modinfo nf_conntrack # 查看nf_conntrack网络连接模块
insmod插入模块命令
insmod *.ko # 插入模块
rmmod移除模块命令
rmmod [module_name] # 移除模块
lsmod列出模块命令
lsmod #列出加载的内核模块
lsattr命令
lsattr命令用于显示文件的扩展属性。这些属性是文件系统层面的设置,与文件的权限(如读、写、执行)不同。
lsattr /path/to/file
-a :显示所有文件和目录,包括隐藏文件。
-d :当指定目录时,仅显示目录本身的属性,而不是目录中的文件。
-R :递归显示目录中的所有文件和子目录的属性
chattr命令
chattr命令用于修改文件的扩展属性。你可以通过添加或删除特定的属性来控制文件的行为。
chattr +i /path/to/file
+ :添加指定的属性。
- :删除指定的属性。
= :设置指定的属性,同时移除其他所有属性。
系统调试
strace系统追踪
追踪系统调用和信号
strace -p <pid> # 跟踪进程显示调用栈
strace <command> # 跟踪命令显示调用栈
-e open,write # 跟踪open,write系统调用
-t <command> # 显示每个系统调用的时间戳
-T <command> # 显示持续时间
-f <command> # 跟踪进程及其所有子进程的系统调用

浙公网安备 33010602011771号