linux常用命令
请见linux常用命令.md 版本,此html版本不更新了。
学习了一段时间的linux之后,开始着手基本命令的学习,这里主要记录一些学习过程中重要的知识点供以后查阅。
1、系统资源监控命令
1)文件系统查看命令df
df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令和程序占用的空间 (最常见的是文件已经被删除,但是程序并没有释放空间)
2)统计目录或文件大小du
du命令是面向文件的,只会计算文件和目录占用的空间:
1 | du -sh * | sort -nr |
如:查看tomcat目录下占用空间最大的前6的目录(du -h |sort -hr|head -n 6 不包括文件)、文件(du -ha|sort -hr |head -n 6 包括目录):
3)查看进程命令ps
1 2 3 4 5 6 7 8 9 | [publisher@shfttppfbdb ~]$ ps -ef| grep sync publish+ 15990 1 97 Jun30 ? 33-12:38:36 python3.6 -u sync_bmcapp_newversion.py publish+ 40899 1 99 Jun29 ? 34-16:32:24 python3.6 -u sync_hxapp_newversion.py publish+ 129897 129351 0 15:16 pts /1 00:00:00 grep --color=auto sync [publisher@shfttppfbdb ~]$ ps -ef| grep sync | awk $ '{print $2}' 15990 40899 129914 [publisher@shfttppfbdb ~]$ |
grep -v grep:从输出结果来看,可以过滤掉查找进程的自身这条命令。(grep -v 是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的行)
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 | #!/bin/sh app_name= "manage" #应用名 app_path= "/app/Assistant" #应用位置 pid= '' #应用运行的pid MAX_TIMEOUT=10 #最大等待次数 #重启方法 function stop(){ echo "开始停止${app_name}" pid=` ps aux| grep ${app_name}| grep - v grep | awk '{print $2}' ` #获取jar包运行的pid echo $pid if [ -z $pid ] ; then #如果pid的长度为空,说明没有在运行 echo "${app_name}未运行,直接启动" else echo "${app_name}正在运行中,进程号:" ${pid} kill -15 $pid fi #等待60S进行强杀 for ((i=0;i<$MAX_TIMEOUT;i++)) do pid=` ps aux| grep ${app_name}| grep - v grep | awk '{print $2}' ` if [ -z $pid ]; then break else echo "${app_name}停止中..." fi sleep 6 done if [ -z $pid ] ; then echo "${app_name}已停止" else kill -9 $pid echo "${app_name}已停止" fi } stop |
4)
2、编辑命令vi
1)命令行模式 (command mode/一般模式)
任何时候,不管用户处于何种模式,只要按一下“ESC”键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。
在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
如:G跳到文本末尾,gg跳到文本开头
2)文本输入模式 (input mode/编辑模式)
在命令模式下输入插入命令i(insert)、附加命令a (append)、打开命令o(open)、修改命令c(change)、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按"ESC"键即可。
如,i,a,o,c等命令
3)末行模式 (last line mode/指令列命令模式)
末行模式也称ex转义模式。
Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。
如:(shift+:键,进入此模式)q!强制退出,wq保存退出等命令。
4)Vim 字符串替换
查找和替换是任意一款文本编辑器的一组常见和必备功能。下面就来讲解 Vim 中的字符串替换功能。
Vim 使用以下命令结构实现替换功能。
:<range> s/<search_string>/<replace_string>/<modifier>
- range - 定义执行“查找和替换”函数的范围,有两个不同的值
- % - 对整个文件执行
- < start _line > < end_line > - 在一组特定的行上面执行操作
- search_string - 需要替换的字符串
- replace_string - 替换旧字符串的新字符串
- modifier - 确定替换行为,有几个不同的值
- g - 全局替换
- gc - 在每次更换之前要求确认
- gn - 忽略替换功能并突出显示查找结果。
例如,在 PackageList.txt 文件里用 Python3
字符串替换所有 python
字符串。
:%s/python/Python3/g
接下来,我们来试试范围这一个域。其实,我们在前面的例子里,已经使用了 %
范围(对整个文件范围)。
如果我们不想在整个文件范围进行查找替换,如果我们只想在某几个特定行进行这种操作,需要怎么做?我们可以采用类似于以下命令格式:
:200,250 s/python/Python3/g
执行完以上操作,Vim 会将第 200 行开始并在第 250 行结束的所有 python
替换为 Python3
。
此功能不仅限于一个词,还可以完成对多个关键词的替换。它的命令格式如下:
:%s/<search_term_1>\|<search_term_2>\|<search_term_3>/<replace_string>/g
比如,让我们想要将文本中所有 python
和 py
更改为 Python3
。
:%s/python\|py/Python3/g
区分大小写
本文前面提到的所有替换操作都是区分大小写的。例如,Python
,python
,PYTHON
等都是不同的。
如果你要忽略大小写,可以在搜索字符串后面加上一个 \c
,如下:
/<search_term>\c
:%s/<search_term>\c/<replace_term>/g
3、常用命令
1)排序命令sort
在linux的使用过程中,总是避免不了排序问题。比如,topN问题。linux提供了sort排序命令,支持常用的排序功能。
sort命令支持很多参数,常用参数如下:
2)文件搜索命令-grep、find、locate、whereis与which
(1)字符串搜索命令-grep
1 2 3 4 | # 查找指定字符串string grep 'string' filename #若需要在文件夹下所有文件查找 grep 'string' dirPath/* |
补充:若目录下含有多级子目录,则用 grep -r "string" ./
在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配。
(2)文件搜索命令find
1 2 3 4 | #搜索文件 find [搜索范围] [搜索条件] find / -name install .log #避免大范围搜索,会非常消耗系统资源 |
在系统中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #查找10天前修改的文件 find . -mtime +10 #atime 文件访问时间 #ctime 改变文件属性 #mtime 修改文件内容 #查找文件大小是25KB的文件 find . -size 25k #查找i节点是262422的文件 find . -inum 262422 #查找/etc目录下,大于20KB且小于50KB的文件 find /etc -size +20KB -a -size -50KB # -a and 逻辑与,两个条件都满足 #-o or 逻辑或,两个条件满足一个即可 #查找/etc目录下,大于20KB且小于50KB的文件,并显示详细信息 find /etc -size +20k -a -size -50k - exec ls -lh {}\; #-exec/-ok命令{}\; 对搜索结果执行操作 |
注:通配符:
* | 匹配任意内容 |
? | 匹配任意一个字符 |
[] | 匹配任意一个中括号内的字符 |
(3)命令搜索命令whereis与which
1 2 | #搜索命令所在路径及帮助文档所在位置 whereis 命令名 |
-b:只查找可执行文件
-m:只查找帮助文件
(4)文件搜索命令locate
1 2 | #在后台数据库中按文件名搜索,搜索速度更快 locate 文件名 |
/var/lib/mlocate :locate命令所搜索的后台数据库
updatedb:更新数据库
3)利用 scp、rsync、rz传输文件
前提条件:
服务器要开启写入权限;
本地和服务器都要安装有 scp 包;
如何传输:
(1) 从服务器上下载文件;
1 | scp username@servername:远程目录/文件名 本地目录 |
例:scp root@192.168.0.101:/var/www/test.txt .
(把 192.168.0.101 上的 /var/www/test.txt 文件下载到本地目录 /var/www/local_dir)
(2)从服务器上下载目录;
1 | scp -r username@servername:远程目录 本地目录 |
例:scp -r root@192.168.0.101:/var/www/test .
(把 192.168.0.101 上的 /var/www/test 目录下载到本地目录 /var/www)
(3)上传本地文件到目标服务器;
1 | scp /本地目录/文件名 username@servername:远程目录 |
例:scp /var/www/test.txt root@192.168.0.101:/var/www/
(把本地目录 /var/www/ 下的 test.txt 文件上传到 192.168.0.101 的 /var/www/ 目录中)
(4)上传本地目录到目标服务器;
1 | scp -r 本地目录 username@servername:远程目录 |
例:scp -r /var/www/local_dir root@192.168.0.101:/var/www/
(把本地目录 /var/www/local_dir 上传到服务器的 /var/www/ 目录)
(5)rsync从远程获取目录(可以加参数排除复制某些目录);
1 2 3 4 5 | rsync -azh - ssh --exclude 'l_temp' --exclude 'l_tmp/claimImageList' weblogic@10.3.20.65: /t/system_temp /t/system_temp #排除复制l_temp 和l_tmp/claimImageList #目录结构 #/t/system_temp #/t/system_temp/l_temp #/t/system_temp/l_tmp/claimImageList |
(6)使用rz从本地电脑传输文件
(7)使用sftp传输
1 2 3 4 5 | sftp username@ip put [本地文件的地址] [服务器上文件存储的位置] get [服务器上文件存储的位置] [本地要存储的位置] #当前本地的目录就是登陆时的目录 |
4)chown 改变用户和所属组命令
将test.php 文件的所属用户设置成zhuo,所属用户组设置成zhuogroup
1 | chown zhuo:zhuogroup test .php |
将testfiel 及其内部文件所属用户设置成zhuo,所属用户组设置成zhuoroup
1 | chown -R zhuo:zhuogroup testfile |
5)groupadd/useradd命令为系统添加mysql 组和用户
1 2 | groupadd mysql useradd -u 544 -d /home/mysql -g mysql -m mysql |
6)linux下打文件分割命令split
1 2 3 | split -b 1024M bkce_src-5.1.28. tar .gz bkce_ cat bkce_* >bkce_src-5.1.28. tar .gz md5sum bkce_src-5.1.28. tar .gz |
7)挂载命令mount
(1)查询与自动挂载
1 2 3 4 | #查询系统中已经挂载的设备 mount #依据配置文件/etc/fstab的内容,自动挂载 mount -a |
(2)挂载命令格式
1 | mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点 |
-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
-o特殊选项:可以指定挂载的额外选项
(3)卸载命令
1 | unmount 设备文件名或挂载点 |
8)echo输出命令
echo [选项] [输出内容]
选项:-e:支持反斜线控制字符转换
(1)设置显示颜色
1 2 | #\e[1开启 、\e[0关闭 echo -e "\e[1;33m test \e[0m" |
9)expect命令
expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了expect就是一套用来实现自动交互功能的软件需要自行安装。
1 | yum install -y expect |
expect基础
在使用expect时,基本上都是和以下四个命令打交道:
命令 作用
spawn 启动新的进程
expect 从进程接收字符串
send 用于向进程发送字符串
interact 允许用户交互
spawn命令用来启动新的进程,spawn后的expect和send命令都是和使用spawn启动的新进程进行交互。
expect通常用来等待一个进程的反馈,我们根据进程的反馈,再使用send命令发送对应的交互命令。
send命令接收一个字符串参数,并将该参数发送到进程。
interact命令用的其实不是很多,一般情况下使用spawn、expect和send和命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。
https://blog.csdn.net/givenchy_yzl/article/details/118079170
10)openssl加解密
tar -zcf - host.conf | openssl des3 -salt -k ZYProduct@2022 | dd of=host.des dd if=host.des | openssl des3 -d -k "ZYProduct@2022" | tar zxf -
11)eval命令
eval是一个内置的Linux命令,用于将指定的参数作为shell命令执行。它将参数组合成一个字符串,并将其作为输入提供给shell,然后在当前的shell环境中执行生成的命令。
语法:eval [argument]
4、linux用户管理
1)基本说明
(1)linux用户类型
(2)linux用户
5、linux文件管理
1)基本说明
(1)linux文件类型

6、linux文本操作
1)awk
样式扫描和处理语言,用于文本处理。
2)grep
3)sed
7、其他常用功能
1)不知道分类,可以解决ssh远程登录shell问题
1 2 3 4 5 | ssh -tt weblogic@10.3.20.22 << EOF sh $proddomaindir /stopappserver1 .sh sh $proddomaindir /startappserver1 .sh exit EOF |
or
1 | ssh weblogic@127.0.0.1 "rm -rf /tsys/applications/nginx/log/*" |
2)服务器上近一分钟文件变动监控
1 2 3 4 5 6 7 | #!/bin/bash if [ -e "/tsys/applications//web" ]; then for i in ` find /tsys/applications//web - type f -cmin 1 ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz" ` do echo ` date +%F%t%T` " " $i >> /tsys/applications/showChangeFile .log; done fi |
3)文件防篡改监控
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/bash original_publish_dir= '/tsys/applications//web' current_publish_dir= '/tsys/applications//web' original_MD5= 'original_MD5.txt' current_MD5= 'current_MD5.txt' if [ "$1" == "original" ]; then cd /tsys/applications && rm -rf ./$original_MD5 find $original_publish_dir - type f ! -name "*.rdb*" ! -name "*.zip*" ! -name "*.xls*" ! -name "*.rar*" ! -name "*.txt*" ! -name "*.pdf*" ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz" - exec md5sum {} \;| sort > /tsys/applications/ $original_MD5 fi if [ "$1" == "current" ]; then cd /tpsys/applications && rm -rf ./$current_MD5 find $current_publish_dir - type f ! -name "*.rdb*" ! -name "*.zip*" ! -name "*.xls*" ! -name "*.rar*" ! -name "*.txt*" ! -name "*.pdf*" ! -name "*.log*" ! -name "*.out*" ! -name "*.err*" ! -name "*.ser" ! -name "*.tar.gz" - exec md5sum {} \;| sort > /tsys/applications/ $current_MD5 backcode=` diff -q $original_MD5 $current_MD5 | awk '{print $1}' ` fi if [ "$backcode" != "" -a "$1" == "current" ]; then echo ` date +%F%t%T` " " ` diff $original_MD5 $current_MD5 | awk '{print $3}' | xargs ` > /tsys/applications/showDiffFile .log fi |
4)
参考:
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨小小打赏一下吧,如果囊中羞涩,不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?