管道 |
管道简介
管道可以连接多条命令,并将前一个命令的标准输出 stdout 作为下一个命令的标准输入 stdin。当我们可以把一个任务分解成多条命令的时候,管道操作非常常用。
注意:
- 管道命令仅处理标准输出
stdout,忽略错误stderr - 管道右边的命令必须能够接收标准输入
stdin,才能将当前命令的标准输出传给它。
管道命令与文件重定向类似,最主要的区别:
- 文件重定向左边是命令,右边是文件,将左边命令的标准输出输出到文件中。
- 管道左右两遍都是命令,且左边要有
stdout右边要能够接收stdout。 - 管道可以接多条命令,
ps -aux | grep "java",而文件重定向将左边一条命令的输出重定向到指定的文件。
示例
1、统计当前目录下所有 python 文件总行数
1 | find . -name "*.py" | xargs cat | wc -l |
find:查找当前目录下所有后缀名是.py的文件xargs:将find的输出结果作为参数传给cat命令,即查看这些.py文件的内容wc:统计所有文件内容的总行数,最后输出
2、统计当前目录下所有 python 文件个数
1 | find . -name "*.py" | wc -l |
环境变量
环境变量简介
和 Windows 系统一样,Linux 系统中也有很多环境变量用来记录配置信息,环境变量类似于全局变量,可以被所有的进程访问到,通过修改环境变量可以很方便地修改系统配置。
查看环境变量
有三个命令可以列出当前系统中的环境变量,输出会有区别:
1 | env # 显示当前用户的环境变量 |
输出某个环境变量的值,shell 语法 $ 取值
echo $PATH
修改环境变量
比如修改当前系统的家目录 home/acs 修改为 home/acs/homework,可以使用 export 命令导出环境变量
1 | export HOME=home/asc/homework |
然后执行 cd 到家目录,此时发现家目录已经变成了 home/acs/homework。
但重新打开 Terminal 的时候发现刚才的配置消失了,因为在命令行中执行修改后,只会在当前会话中生效,新建会话后会重新执行 bash 终端配置文件 .bashrc,而刚才的配置不在配置文件中,所以自然就失效了。
所以想要我们的配置永久生效,我们可以直接修改 .bashrc 文件,然后执行 source .bashrc 刷新配置让其马上生效。
常见环境变量
HOME:用户家目录PATH:存放系统中可执行文件(命令)的路径,每个路径之间用:隔开,当某个命令同时在多个路径中出现时,会选择从左往右第一个出现的路径中的命令执行(短路原则)。下列所有存储路径的环境变量,均采用从左到右的优先顺序。C_INCLUDE_PATH:C 语言的头文件路径,内容是以冒号分隔的路径列表。CPLUS_INCLUDE_PATH:CPP的头文件路径,内容是以冒号分隔的路径列表。PYTHONPATH:Python导入包的路径,内容是以冒号分隔的路径列表。JAVA_HOME:JDK 的安装目录。CLASSPATH:存放 Java 导入类的路径,内容是以冒号分隔的路径列表。
小技巧:可以将自己的可执行文件(命令)的存放路径放到 PATH 环境变量中,然后 source .bashrc 刷新配置,然后就可以在终端中的任何地方像执行 ls 一样直接执行我们的命令,非常 cool。
比如是可执行脚本文件,不能加
.sh后缀名,否则添加环境变量后不能识别。
常用命令
查看系统状态
1、top:查看系统所有进程的信息
- 输入
M按内存使用率从大到小排序 - 输入
P按 CPU 使用率从大到小排序 - 输入
q退出top
2、df -h:查看硬盘使用情况,人性化展示 (h - humanity,我猜的 hh)
3、free -h:查看内存使用情况
4、du:统计占用硬盘空间
du -sh:统计当前目录占用的硬盘空间du -ch:统计当前目录下所有文件和文件夹占用的空间
5、ps aux:查看所有进程
- 通常配合
| grep 进程名查找某个进程,找到进程号 pid kill -9 pid杀掉这个进程
6、kill -9 pid:杀掉进程号为 pid 的进程
-9对应的信号是SIGKILL传递某个具体的信号:
kill -s SIGTERM pid
7、netstat -nt:查看所有网络连接
8、w:列出当前登录的用户
9、ping www.xxx.com:检查是否与某个网站联通
10、history:查看输入的历史命令,内容存放在 ~/.bash_history 只会保存最近的 2000 条,显示 1000 条。
文件权限
首先要知道 Linux 下一切皆文件,目录也是文件哦。
Linux 文件权限,总共有 10 位
1:表示文件类型,可以是文件、目录、链接2-4:表示当前用户对该文件所拥有的权限5-7:表示当前用户组对该文件所拥有的权限8-10:表示其他用户对该文件所拥有的权限
其中 rwx 分别表示可读可写可执行
chmod:change mode 修改文件权限
1、通过 + - 权限字母设置文件权限
chmod +x filename:给filename添加可执行权限chmod -x filename:去掉filename的可执行权限- 同理,可读可写权限
-r -w修改一样的。
2、通过三组数字设置文件权限
chmod 777 filename:将filename的权限设置为777,777 表示可读可写可执行。chmod 777 filename -R:递归修改整个文件夹的权限。
文件检索
1、find directory -name '*.py' :搜索指定目录下所有 .py 文件,并将其路径输出出来
2、grep xxx:从 stdin 中多行内容,如果某行中包含要搜索的内容 xxx,则输入该行,否则忽略改行。
grep命令一般配合其他命令一起使用,通过管道处理上一个命令的输出结果。比如:输出当前目录下所有
.py文件中包含hello的行。1
find . -name "*.py" | xargs cat | grep 'hello'
3、wc:统计行数、单词数和字节数
- 可以从标准输入
stdin中读入内容,也可以从指定文件中读入内容,也可以从命令行中传入文件参数列表 wc -l:统计总行数wc -w:统计总单词数wc -c:统计总字节数
4、tree / tree .:树形展示当前目录的文件结构
tree dirctory:展示指定目录的文件结构tree -a:可以展示隐藏文件tree -h:可以展示每个文件的大小
5、ag xxx:常用,搜索当前目录下的所有文件,检索 xxx 字符,输出所有包含 xxx 的行并且显示其对应的文件。
6、cut:分割一行内容
可以从标准输入中读取多行数据
举例:
`echo PATH | cut -d ':' -f 3,5`:输出 PATH 用:分割后第 3、5 列数据 `echo $PATH | cut -d ':' -f 3-5`:输出 PATH 用:分割后第3-5列数据 `echo $PATH | cut -c 3,5`:输出 PATH 的第 3、5 个字符 `echo $PATH | cut -c 3-5`:输出 PATH 的第 3-5个字符
7、sort:将每行内容按字典序排序
- 可以从stdin中读取多行数据
- 可以从命令行参数中读取文件名列表
- 举例:
cat xxx.txt | sort,将文件内容按每行字典序排序输出
8、xargs:将 stdin 中的数据用空格或回车分割成命令行参数
经典例子:统计当前目录下所有 python 文件的总行数
1 | find . -name '*.py' | xargs cat | wc -l |
查看文件内容
1、more:从前往后输出一页内容,回车下一行、空格下一页、b 上一页、q 退出查看
2、less:和 more 类似,回车下一行,y 上一行,Page Down 下一页,Page Up 上一页,q 退出,比 more 功能更多。
3、head -3 xxx:展示 xxx 的前 3 行内容
- 支持
stdin读入内容
4、tail -3 xxx:展示 xxx 末尾 3 行内容,一般用于查看最新的日志。
- 支持
stdin读入内容
工具
1、md5sum:计算文件 md5 哈希值
- 可以从
stdin读入内容,按Ctrl + d结束,同时输出 md5 哈希值
2、time comand:统计 command 命令的执行时间
3、ipython3:一个 python 交换环境,可以用做计算器哈哈。
! echo "hello":!表示执行 shell 脚本
4、watch -n -1 command:每 1s 执行一次命令
5、tar:压缩解压缩
tar -zcvf xxx.tar.gz yyy:将目录yyy压缩成xxx.tar.gz,c - compsetar -zxvf xxx.tar.gz -C yyy:可以将xxx.tar.gz解压到指定目录,x - extract
6、diff xxx yyy:查找文件 xxx 与 yyy 的差异
软件安装
1、sudo command:以 root 身份执行命令
2、apt-get install xxx:安装软件,需要 sudo 提权
3、pip install xxx --user --upgrade:安装 python 包
作业代码
homework_0
1 | # [1] |
homework_1
1 | # [1] |
homework_2
1 | # [1] |
homework_3
1 | find . -name "*.py" | xargs rm -r |
homework_4
1 | # 使用 cut 命令按空格 ' ' 切分 |
homework_5
1 | cat scores.txt | cut -d ' ' -f 1 | sort > names.txt |
homework_6
1 | head -5 scores.txt > top.txt |
homework_7
1 | md5sum scores.txt | cut -d ' ' -f 1 > ans.txt |
homework_8
1 | # [1] |
homework_9
1 | # 使用 ipython3 做运算将结果重定向到 ans.txt 文件中 |

