shell 实用命令和技巧
1、找出当前系统CPU、内存使用量较高的进程
ps -aux | sort -rnk 3 | head -20 (3 换 4,为内存)
2、killall -0 和 kill -0的区别
kill [信号代码] 进程ID
注:信号代码可以省略;我们常用的信号代码是 -9 ,表示强制终止。
# kill -9 22761
与kill命令不同的是,killall 命令可以根据进程名称来杀死进程。kill 命令 则先需要找到进程的id。
#yum install -y psmisc(安装killall) # pgrep -l magic_Linux 2 13020 magic_Linux01 3 22761 magic_Linux02 4 25279 magic_Linux03 5 27694 magic_Linux04 # killall magic_Linux02
3、xshell技巧
a、alt+shift+n 新建窗口
b、设置鼠标左键选中,邮件粘贴

c、新建窗口“+”消失快捷键恢复:
Ctrl+Shif+T

4、sort常用选项
-t,指定排序时所用的分隔符;-k,指定比较的列数,常与-t参数结合使用
sort -nt ":" -k 2 file1 apple:10:2.5 orange:20:3.4 banana:30:5.5 pear:90:2.3
-r 以倒序(相反的顺序)输出排序结果
-u --unique,去掉重复的行输出排序结果,功能类似于uniq功能
-f 将小写字母当作大写字母对内容进行排序
-n --numeric-sort 根据字符串数值比较
sort file1 file2 排序两个文件的内容 sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) sort file1 file2 | uniq -u 删除交集,留下其他的行 sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件
-h --human-numeric-sort 使用易读性数字(例如: 2K 1G)
du -d1 -h soft-packages/* | sort -h 18M soft-packages/node_exporter.tar.gz 124M soft-packages/go1.16.8.linux-amd64.tar.gz 175M soft-packages/NVIDIA-Linux-x86_64-455.45.01.run 314M soft-packages/NVIDIA-Linux-x86_64-510.60.02.run 344M soft-packages/NVIDIA-Linux-x86_64-515.48.07.run 551M soft-packages/dcgm-exporter.tar 585M soft-packages/harbor-offline-installer-v2.4.1.tgz
sort -V 按照版本号进行排序
是Unix或Linux系统中的一个命令行选项,用于按照版本号进行排序。这个选项将每个输入行当做一个版本字符串,并按照这个版本字符串进行排序。
-V 选项会将数字、字母和其他字符识别为独立的字段,并按照这些字段的顺序进行比较。这使得它特别适合于对那些包含数字、特殊字符和字母的字符串进行排序,比如软件版本号。
5、显示运行 3 级别开启的服务:
ls /etc/rc3.d/S* |cut -c 15- (从中了解到cut的用途,截取数据
6、杀掉80端口相关的进程
lsof -i :80|grep -v “ID”|awk ‘{print “kill -9”,$2}’|sh
7、显示目录层级关系
find . * tree ls -Rl
8、windows和mac互传文件(前提是两者网段相同互通)
mac
python3 -m http.server
window(用pyhton也可以)
装一个fileserver
fileserver.exe -port 端口 -path 路径
9、sudo -i 和 su - root
su是superuser的前面两字母。 su root=su su root和su一样:表示与root建立一个链接,通过root执行命令,其实就是进程的有效用户ID变成了root,unix校验进程的权限都是校验的有效用户ID,进程的实际用户ID还是当前登录系统的用户,主目录也还是当前登录系统的用户的主目录。 su - root需要密码
sudo -i 不需要密码 sudo -i表示以root身份登录,进程的实际用户ID和有效用户ID都变成了root,主目录也切换为root的主目录。
10、非交互式修改密码
echo "password" | passwd testuser --stdin > /dev/null 2>&1 echo testuser:password|chpasswd
chpasswd
批量更新用户口令的工具
先创建用户密码对应文件,格式为username:password,如abc:abc123,必须以这种格式来书写,并且不能有空行,保存成文本文件user.txt,然后执行chpasswd命令
chpasswd < user.txt
11、linux终端中启动 Visual Studio Code
# code .
12、ncdu
一个可以替代du命令的工具,ncdu命令是对传统du命令功能上的增强,不需要像du那样输入大量的命令,就可以计算文件及目录大小并可以按照大小或文件名进行排序。它是基于ncurses库开发的,因此还支持很多丰富的交互式命令。
Ncdu还提供了许多操作文件和文件夹的选项-导航,排序甚至删除: 上键或k : 用于向上移动光标 下键或j : 用于向下移动光标 右键或l : 打开所选目录 < 或者 h : 这将打开父目录 n - 按名称排序(再次按降序排列) s - 按文件大小排序(再次按降序排列) d - 删除所选文件或目录 g - 显示百分比和/或图表 t - 排序时在文件之前切换dirs c - 切换子项目计数的显示 b - 当前目录中的Spawn shell i - 显示有关所选项目的信息 r - 刷新/重新计算当前目录 q - 退出ncdu
13、格式化输出:column
cat dd.txt | column -t
column -s 选项指定分隔符来分割(同时去掉分隔符)
# cat testcolumn Jackie | 18 | male Helen | 20 | female Daniel Liu | 23 | male # cat testcolumn | column -s '|' -t Jackie 18 male Helen 20 female Daniel Liu 23 male
pr命令:可以将大文件分割成多个页面进行打印,并在每个页面上加上标题
-# 输出指定的列数。
-t 忽略页眉和页脚
-T 忽略页眉和页脚,去除所有分页记号
# find /usr/bin/ -executable -type f | pr -T -4 | column -t /usr/bin/cp /usr/bin/nl /usr/bin/chcon /usr/bin/which /usr/bin/gzip /usr/bin/tzselect /usr/bin/sleep /usr/bin/diff3 /usr/bin/alias /usr/bin/nohup /usr/bin/chgrp /usr/bin/hostname
14、查看各文件夹大小 ls -lSh
du -h --max-depth=1|sort -nr ls -lSh (-r 逆序排) 总用量 279M -rwxr-xr-x 1 op_admin op_admin 181M 2月 8 12:35 jdk-8u151-linux-x64.tar.gz -rw-r--r-- 1 op_admin op_admin 76M 2月 8 12:22 nacos-server-2.0.0-BETA.tar.gz -rwxr-xr-x 1 op_admin op_admin 13M 1月 18 10:39 ~ -rw-rw-r-- 1 op_admin op_admin 9.9M 3月 30 2016 cfssl_linux-amd64 drwxr-xr-x 13 op_admin op_admin 282 2月 4 19:00 seaweedfs drwxr-xr-x. 11 op_admin op_admin 203 1月 15 16:51 workspace -rw-rw-r-- 1 op_admin op_admin 149 12月 4 14:22 ts.sh
按时间递归逆序查看某个目录的文件,汉数混合有奇效(比如第1组)
ls -Rrt
递归列出当前目录下的所有文件(包括隐藏文件)的绝对路径
find $PWD | xargs ls -ld
15、自动回答任何命令yes or no
yes | apt-get update。
16、wget 发送post请求
wget --post-data "item1=value1&item2=value2" url
示例:
wget --post-data "username=sg&password=123&content=%e6%b1%89%e5%ad%97&encode=utf8" http://m.sjn.com.cn/api/send/index.php
17、sz下载文件乱码
sz -be -y filename
-a, –ascii
-b, –binary 用binary的方式上传下载,不解释字符为 ascii
-e, –escape 强制escape 所有控制字符,比如 Ctrl+x,DEL 等
-ary –o-sync
-a 表示使用ascii码格式传输文件,如果是Dos格式的文件,会转换为unix格式
-r 使用 Crash recovery mode. 即文件传输中断会重传
-y 表示文件已存在的时候会覆盖
–o-sync 采用同步写模式,以处理从缓存写到磁盘时中断丢失的情况
18、glances(htop的升级版)
安装
centos: $ yum install -y glances debian: $ sudo apt-add-repository ppa:arnaud-hartmann/glances-stable $ sudo apt-get update $ sudo apt-get install glances

快捷键
h : 显示帮助信息 q : 离开程序退出 c :按照 CPU 实时负载对系统进程进行排序 m :按照内存使用状况对系统进程排序 i:按照 I/O 使用状况对系统进程排序 p: 按照进程名称排序 d : 显示磁盘读写状况 w : 删除日志文件 l :显示日志 s: 显示传感器信息 f : 显示系统信息 1 :轮流显示每个 CPU 内核的使用情况(次选项仅仅使用在多核 CPU 系统
选项
-b:显示网络连接速度 Byte/ 秒 -B @IP|host :绑定服务器端 IP 地址或者主机名称 -c @IP|host:连接 glances 服务器端 -d:关闭磁盘 I/O 模块 -e:显示传感器温度 -f file:设置输出文件(格式是 HTML 或者 CSV) -m:关闭挂载的磁盘模块 -n:关闭网络模块 -p PORT:设置运行端口默认是 61209 -P password:设置客户端 / 服务器密码 -s:设置 glances 运行模式为服务器 -t sec:设置屏幕刷新的时间间隔,单位为秒,默认值为 2 秒,数值许可范围:1~32767 -h : 显示帮助信息
19、隐私错误

解决:鼠标移动到当前页面任一空白处,键盘敲击thisisunsafe即可
20、查找顶级目录
# find ./ -type d
./
./a
./a/a1
./a/a2
./b
./c
./c/c1
./c/c1/c2
./c/c1/c2/c3
# find ./ -type d | awk -F'/' '{print NF-1" "$0}' | sort | tail -1 | awk -F "/" '{print $NF}'
c3
释意:NF-1:以/为分割符,从第一个/号左边开始数,比实际的层数多1,所以需要减1
21、内存插法(双活)
遇到不熟悉的服务器固件升级、内存插法去对应的官网下载指导手册和包
华硕服务器主板:

内存条插法推荐方式:(16 MImms表示16根内存条)

22、ntsysv命令查看服务自启动
23、生成大文件
dd if
dd if=/dev/zero of=rumenz.img bs=2G count=1
使用 truncate 命令缩小文件
truncate -s 1G rumenz.img
fallocate 创建大文件的速度是最快的
创建一个3g大文件
fallocate -l 3G ru.img
24、cat 查看文件内容不换行
cat __init__.py import pymysql pymysql.install_as_MySQLdb()root@arm:~/dockerfile/zjz_BBS/app01#
执行
unalias cat
25、tldr 工具
tldr(Too Long; Didn’t Read)是一个社区开源的命令行实用工具,旨在为各种命令提供简明的使用说明
安装
sudo apt update sudo apt install nodejs npm sudo npm install -g tldr
使用
[root@node1 ~]# tldr find
find
在指定目录树下递归查找文件或目录。
更多信息:https://manned.org/find.
- 通过扩展名查找文件:
find 指定目录 -name '*.ext'
- 查找匹配多个路径或名称模式的文件:
find 指定目录 -path '**/path/**/*.ext' -or -name '*pattern*'
- 查找匹配指定名称的目录,不区分大小写:
find 指定目录 -type d -iname '*lib*'
- 查找匹配指定模式的文件,排除特定路径:
find 指定目录 -name '*.py' -not -path '*/site-packages/*'
- 查找符合指定大小范围的文件,将递归深度限制为 "1":
find 指定目录 -maxdepth 1 -size +500k -size -10M
- 对每个文件运行命令(在命令中使用 {} 代表当前文件):
find 指定目录 -name '*.ext' -exec wc -l {} \;
- 查找最近 7 天修改的文件:
find 指定目录 -daystart -mtime -7
- 查找空(0 字节)的文件并删除:
find 指定目录 -type f -empty -delete
26、 普通用户加sudo后权限依旧不足的问题
# 没结果 sudo grep -h "wd:" /proc/*/fdinfo/* 2>/dev/null | wc -l # 有结果 sudo sh -c 'grep -h "wd:" /proc/*/fdinfo/* 2>/dev/null' | wc -l
sudo 作用范围不同
| 命令结构 | sudo 作用在哪? |
|---|---|
sudo grep ... |
仅作用于 grep 命令 |
sudo sh -c '...' |
整个 '...' 在 sh 中执行,并以 root 身份运行整个命令行 |
* 通配符(glob)的扩展时机不同
-
在第一条命令中:
这里的
/proc/*/fdinfo/*是 由当前用户的 shell 展开 的。因此普通用户可能没有权限读取/proc/*/fdinfo/*中的大多数路径(尤其是其他用户或系统进程的)。 -
在第二条命令中:
此时通配符
*是在sh中展开的,而整个sh是在sudo之下运行的,即以root权限展开。这就意味着:-
glob展开使用的是 root 的权限。 -
grep 命令也以 root 权限运行。
-
因此可以读取所有
/proc里的 fdinfo 文件。
-
27、 read 内置命令
read 常用于从标准输入(通常是终端)或文件描述符中读取一行数据,并将其赋值给一个或多个变量。它是实现用户交互的重要工具。
常用选项:
-p prompt |
显示提示信息
|
-s |
静默模式(不显示输入)
|
-t timeout |
设置等待输入的时间(秒)
|
-n nchars |
读取指定数量的字符
|
-d delimiter |
指定结束符,默认是换行符
|
-a array |
将输入拆分为数组
|
-r |
原始输入,不转义反斜杠
|
注意高级用法 -a 的使用
IFS='.' read -r -a octets <<< "$ip"
for octet in "${octets[@]}"; do
if (( octet < 0 || octet > 255 )); then
log "Error: TARGET_IP '$ip' is not a valid IPv4 address."
return 1
fi
done

浙公网安备 33010602011771号