本文主要介绍了Linux系统中的文件操作、权限管理和进程控制三大核心功能模块。在文件操作方面重点讲解了通配符匹配、文件查找命令、文本搜索工具grep的使用技巧在权限管理部分详细说明了chmod、chown、chgrp等命令修改文件权限的方法在进程控制模块系统性地介绍了ps、top等进程查看命令以及前后台进程切换、终止进程等操作。文章还特别讲解了Linux系统中重要的重定向和管道技术包括标准输入输出错误的重定向方法以及管道符号|在多命令协作中的实际应用场景。目录一、文件与目录操作进阶1、通配符2、查找文件 which3、文本关键字搜索 -grap 命令3.3 grep 命令常用参数4、文本内容统计WC5、查看目录使用空间du6、文件链接二、文件权限管理1、Linux 的文件访问权限2、 三种访问权限3、 对一个文件来说访问它的用户分为三种​编辑4 、 改变文件访问权限 chmod 命令5、 改变文件所有者和所属组 chown 命令6、 改变文件所属组 chgrp命令三、重定向、管道与进程1、什么是进程2、ps 命令查看进程3、查看系统进程动态 -top3、后台运行进程4、进程前、后台切换5、终止进程6、查看系统监听端口 ——netstat7、查看系统监听端口——lsof6、标准输入、输出、错误7、重定向 —— 标准输出8、重定向 —— 标准错误9、重定向 —— 标准输入10、管道11、管道的一些用法一、文件与目录操作进阶1、通配符模式匹配对象g*文件名以 “ g ” 开头的文件 —— ls g*b*.txt以 “ b ” 开头中间有零个或任意多个字符并以 “ .txt ” 结尾的文件 —— ls b*.txtData???以 “ Data ” 开头其后紧接着3个字符的文件 —— ls Data?????[abc]*文件名以 a b c 开头的文件 —— ls [abc] *2、查找文件 whichwhich 命令which 命令式查找某个命令的完整路径也就是说它是用来查找可执行文件的which 命令的原理是在当前登陆用户的 PATH 环境变量记录的路径中进行查找which 命令使用例子which mkdir查找 grep 命令的二进制文件路径which cp、which vi 、which head、which tail、find 命令find 命令会在指定目录及子目录下查找符合条件的特定文件。当我们忘了文件的位置可以使用该命令。命令格式find 目录名 条件常见条件-name 指定要被寻找的文件或目录名称可用通配符-type x 以文件类型作为寻找条件。文件类型 x 如下d —— 目录directoryf —— 文件file例如find /temp -name abcfind /temp -name abc* -type f3、文本关键字搜索 -grap 命令3.1 grep 命令一种强大的文本搜索工具并把匹配的行打印出来啥时候用查看日志查看命令输出grep experience file 或 grep experience file找出file文件中含exprience 的句子大小写敏感支持正则表达式搜索文本3.2 grep 命令 —— 例子grep test d*通配符显示所有以 d 开头的文件哪种包含 test 的行grep test aa bb cc多个文件显示在 aabbcc 文件中匹配 test 的行grep root -r /var/log目录中递归搜索在 /var/log 所有子目录文件中搜索包含字符串 root的行grep ^test /var/log/scp.log正则表达式在 scp.log 中搜索以字符串 test 开头的行^a搜索行首内容以 a 文本开头的行grep -n ^a 1.txtb$搜索行尾内容以 b 文本结尾的行grep -n b$ 1.txt[ Ss ] igna [ Ll ]匹配 [ ] 中的任意一个字符搜寻匹配单词为SignaL、Signal、signaL、signal的行grep -n [ Ss ] igna [ Ll ] 1.txt3.3 grep 命令常用参数-c 只输出匹配的行 例如grep -c SPOOLING file-i 不区分大小写例如grep -i SPOOLING file-n 显示匹配行及行数例如grep -n SPOOLING file-v 显示不包含匹配的文本的所有行相当于取反 例如grep -v SPOOLING file-F 指明 pattern 非正则表达式 例如grep -F ^SPOOLING file4、文本内容统计WCwc -l /home/user/home/file统计 /home/user/home/file 文件有多少行wc -c /home/user/home/file统计 /home/user/home/file 文件有多少字节5、查看目录使用空间dudu 命令是查看文件和目录的磁盘使用空间df 命令是查看文件系统使用空间的例如[rootlocalhost home]# du -sh /home18M /home[rootlocalhost ~]# du -sh /home/user/home/file12K /home/user/home/filedu -ah /home显示 home 目录下的每一个目录的使用情况[rootlocalhost ~]# df -ahFilesystem Size Used Avail Use% Mounted on​/dev/sda2 18G 2.5G 15G 15% /​proc 0 0 0 - /proc​sysfs 0 0 0 - /sys​devpts 0 0 0 - /dev/pts​tmpfs 931M 224K 931M 1% /dev/shm​/dev/sda1 283M 39M 229M 15% /boot​none 0 0 0 - /proc/sys/fs/binfmt_misc​vmware-vmblock 0 0 0 - /var/run/vmblock-fuse​gvfs-fuse-daemon 0 0 0 - /root/.gvfs​/dev/sr0 56M 56M 0 100% /media/VMware Tools-a‌显示‌所有文件系统‌包括那些通常被忽略的虚拟文件系统如/proc、/sys、tmpfs等。‌-h‌以‌人类可读的方式‌显示磁盘空间大小即使用 KB、MB、GB 等单位自动缩放基于 1024 进制。-s 仅显示‌总计信息‌summary不列出每个子文件系统或挂载点的详细信息6、文件链接为什么需要链接巨大的文件、目录、复制占空间不能移动那个位置也有用和复制的区别文件在磁盘中只有一份数据节省磁盘空间创建链接文件 ln -s pig pig-soft-s‌表示创建‌软链接pig 源文件或目录生成的软链接文件名。执行该命令后系统会在当前目录下创建一个名为pig-soft的软链接指向名为pig的文件或目录若‌源文件被删除‌软链接将失效显示为“断链”通常在终端中以红色显示。访问软链接时系统自动转发到源文件内容# 创建测试文件 echo 我是猪猪文件 pig # 创建软链接 ln -s pig pig-soft # 查看结果 ls -l pig-soft # 输出lrwxrwxrwx 1 user group 3 Apr 26 12:34 pig-soft - pig # 读取软链接内容 cat pig-soft # 输出我是猪猪文件 # 删除源文件后测试 rm pig cat pig-soft # 报错No such file or directory二、文件权限管理1、Linux 的文件访问权限文件必有一个所属用户和一个所属的组不同类型的用户有不同的访问权限-开头为文件 d开头为目录2、 三种访问权限读(read)、写(Write)、执行(excute)3、 对一个文件来说访问它的用户分为三种4 、 改变文件访问权限 chmod 命令谁可以改变文件访问权限Root 和 Ownerchmod [who] [op] [permission] file...例如chmod ux file1who 像表示用户类型它的内容为以下一项或多项u拥有者user —— ownerg与拥有着同一组的用户groupo其他人othera所有人allop 像表示动作表示要加上 permission 指定的权限-表示要取消 permission 指定的权限permission项为存取权限它的内容为以下一项或多项r表示可读w表示可写x表示可执行chmod 命令举例chmod ugw file拥有着和同组用户对 file 文件可写chmod a-x abc.txt所有人对 abc.txt 文件不可执行chmod urwx myfile 1拥有者对 myfile 可读、可写、可执行第二种写法chmod urwx myfilechmod urwx,grx,or myfile第三种写法chmod 755 myfile等价于chmod urwx,grx,orx myfile5、 改变文件所有者和所属组 chown 命令谁可以使用 chown 改变文件所有者和所属组只有 root 可以owner 都不行chown [选项]...[所有者] [:[组]] 文件...例如chown jack test1 把文件 test1 的所有者变更为用户 jackchown jack:jack test1把文件 test1 的所有者变更为用户 jack所属组变为jack6、 改变文件所属组 chgrp命令谁可以使用 chgrp 改变文件所有者和所属组root 和 owner只能改变到owner所在的组例如chgrp [选项]... [组] 文件...例如chgrp jack test1把文件test1 的所属者变更为 jackchgrp-Rjack dir1把目录dir1 以及下面所有的子目录和文件的所属做变更为 jack三、重定向、管道与进程1、什么是进程程序和进程的概念程序软件用代码决定程序的行为存在存储介质里面比如硬盘。就好像菜谱上的一道做菜方法比如怎么炖土豆烧鸡程序运行起来就是操作系统把存储介质上的可执行文件加载到内存里面运行这个运行的程序叫做进程。就好像厨师根据菜谱正在做菜的过程2、ps 命令查看进程不带任何参数同一个用户同一个终端-ef 参数e 表示所有 every process 显示所有进程f 表示 full-format 输出完整格式 尤其是 PPID 和 command内容ps -ef用于以完整格式全格式列出系统中所有进程的信息 包含‌父进程 ID(PPID)‌便于分析进程启动关系与层级树 。输出字段通常包括 UID、PID、PPID、C、STIME、TTY、TIME、CMD适合追踪进程来源ps -ef | heal -10显示前10行ps -aux‌显示用户格式进程信息包含‌CPU 与内存占用率‌%CPU、%MEM便于监控系统资源消耗 。输出字段通常包括 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME、COMMAND适合查找高负载进程-e显示所有进程而不仅限于当前用户。-f显示完整的进程信息包括父进程ID、CPU使用情况、内存占用等。-u显示特定用户的进程信息。ps -aux | grep mysql 查找目标进程 PID关心的是进程号3、查看系统进程动态 -top说明top命令用于实时动态查看系统进程相关信息交互操作快捷键M根据内存的大小降序显示进程信息P根据CPU使用率大小降序显示信息q退出 top 命令 或者按ctrlc也可以退出3、后台运行进程前台进程和后台进程Shell 里正在执行的和用户进行交互的进程叫前台进程举例 psls 分别为前后台进程时间短有的命令执行时间长比如备份程序可以在后台执行加 示例 vi abc.txt 后台运行意味着不从标准输入读入字符后台运行的进程我们叫后台进程或者后台任务4、进程前、后台切换列出后台进程 jobs示例执行 vim abc.txtfg num 将后台进程调到前台Ctrl Z 可挂起进程注意 jobs 显示的状态是 stoppedbg 可让进程在后台执行5、终止进程进程的两种终止方式自行终止任务执行完成比如 ps用户让其退出比如shell exit异常退出比如 程序里有除以 0 的代码用户手动杀死进程 —— kill PID请求进程正常退出允许其执行清理操作如关闭文件、释放资源等。进程可以捕获并处理该信号也可以选择忽略但默认行为是终止kill -9 PID—— 该命令表示强制关闭对应的进程只能是 owener 和 root 才能杀死进程6、查看系统监听端口 ——netstat说明netstat 可以查看当前系统网络状态及对应软件使用的端口-a 显示所有已打开的端口-p显示对应的进程ID-n用数字显示对应的端口-t显示所有tcp协议端口-u显示所有udp协议端口注意netstat 一般会配合管道符命令 grep 来查看特定进程的端口信息例如netstat -anptu | grep mysql通过名称查找端口和进程号**netstat -anptu | grep 3306通过端口查找名称和进程号7、查看系统监听端口——lsof命令格式lsof -i说明lsof list open files是一个列出当前系统打开文件的工具可以查看系统中正在使用端口的详细信息lsof -i如果不给出条件则默认显示所有进程打开的所有lsof -i:3306列出使用端口3306的进程信息提示在Linux中启动软件时会出现因为端口被占用而无法启动的情况这个时候就需要我们用lsof -i 命令查看安装软件要使用的端口是否被占用6、标准输入、输出、错误stdin、stdout、stderr用户通过终端与 shell 交互进程从stdin 读取用户输入从stdout 、stderr 输出信息指向同一个设备文件 —— 终端7、重定向 —— 标准输出有的时候不想输出到终端上命令结果要处理可以将显示在终端的内容通过重定向添加或追加到另一个文件中使用 shell 的一个功能重定向ps -ef out (命令名 文件名 )该命令的作用是将ps -ef的输出重定向到名为out的文件中而不是显示在终端上。例子 ls -l /usr/bin ls-output.txt追加而不是覆盖用 不会覆盖文件中原有的内容会覆盖8、重定向 —— 标准错误stdin文件描述符号为0stdout文件描述符号为1stderr文件描述符号为2同时重定向 stdout 和 stderr 到同一个文件Command both 21命令名 文件名 21ps -ef out 21ls -l /usr/bin ls-output.txt 21 或 ls -l /usr/bin ls-out.txt这两个命令都是把 stdout和stderr 重定向到同一个文件 ls-output.txt注意次序从左到右反过来不行 command 21 both同时重定向 stdout 、sttderr 到不同文件command out 2errps -ef output.txt 2 error.txt把ps -ef命令的输出重定向到output.txt文件同时将错误信息重定向到error.txt文件9、重定向 —— 标准输入有时需要从文件里面读取内容而不是终端设备cat /path/to/your/file‌输入重定向操作符‌表示将右侧文件的内容作为cat的输入/path/to/your/file要读取的文件路径需替换为实际路径10、管道管道示意图将前面的 ps -ef 命令的 stdout本来是输出到终端设备的重定向到一个临时管道设备里面同时将后一个命令 grep 1182 的 stdin 重定向到这个临时的管道设备经常需要一个命令的输出的内容给另一个命令作为输入的内容进行处理ps -ef 和 grep python 从ps -ef的输出中筛选出包含字符串python的行 可以分为两步第一步ps -ef tmp.out第二步grep python tmp.out使用管道更方便 | 管道ps -ef | grep pythonls -l /usr/bin morels /usr/bin | grep ^au11、管道的一些用法让 stdout 和 stderr 同时重定向到管道python both.py 21 | grep err过滤出所有包含err的输出行 运行名为both.py的Python脚本连续使用管道ps -ef | grep python | grep -v grep-v 表示反向匹配invert match即排除包含grep的行。这一步是为了‌排除grep命令自身‌ 因为grep python也会出现在进程列表中如果不排除会干扰结果 ‌