Pipes, Environment Variables, and Common Commands
July 27, 2022 · 13 min read
If you have any questions, feel free to comment below. Click the block can copy the code.
And if you think it's helpful to you, just click on the ads which can support this site. Thanks!
管道类似于文件重定向,可以将前一个命令的stdout重定向到下一个命令的stdin。
- 管道命令仅处理
stdout,会忽略stderr(标准错误)。 - 管道右边的命令必须能接受
stdin。 - 多个管道命令可以串联。
与文件重定向的区别 #
- 文件重定向左边为命令,右边为文件。
- 管道左右两边均为命令,左边有
stdout,右边有stdin。
举例 #
统计当前目录下所有 python 文件的总行数。
# `xargs` 将 stdin ** 转化为 cat 命令的参数 **,统计文件内容的总行数
# 转换类似为 cat xxx.py yyy.py ...
# wc 统计 -l 所有内容的总行数
find . -name '*.py' | xargs cat | wc -l
# 统计文件的总个数 这里cat就是cat的前面find的py文件名称
find . -name '*.py' | cat | wc -l
# 统计每个文件的行数
find . -name '*.py' | xargs wc -l
环境变量 #
概念 #
Linux系统中会用很多环境变量来记录配置信息。
环境变量类似于全局变量,可以被各个进程访问到。我们可以通过修改环境变量来方便地修改系统配置。
查看 #
列出当前环境下的所有环境变量:
env # 显示当前用户的变量
set # 显示当前shell的变量,包括当前用户的变量;
export # 显示当前导出成用户变量的shell变量
输出某个环境变量的值:
# 和输出一个变量类似
echo $PATH
修改 #
环境变量的定义、修改、删除操作可以参考shell变量。
# 只会在当前bash中有效,新开bash无效
export HOME=/home/homework
为了将对环境变量的修改应用到未来所有环境下,可以将修改命令放到~/.bashrc文件中。 修改完~/.bashrc文件后,记得执行source ~/.bashrc,来将修改应用到当前的bash环境下。
为何将修改命令放到
~/.bashrc,就可以确保修改会影响未来所有的环境呢?
- 每次启动
bash,都会先执行~/.bashrc。- 每次
ssh登陆远程服务器,都会启动一个bash命令行给我们。- 每次
tmux新开一个pane,都会启动一个bash命令行给我们。- 所以未来所有新开的环境都会加载我们修改的内容。
常见环境变量 #
HOME:用户的家目录。PATH:可执行文件(命令)的存储路径(所有的命令存到了哪些地址 )。路径与路径之间用:分隔。当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行。下列所有存储路径的环境变量,均采用从左到右的优先顺序。(短路原则:当输入某个命令的时候 os 遍历 PATH 中 all 路径直至第一个匹配的命令为止) 例如:将 march-server 变成命令
vim ~/.bashrc
# PATH 取出之前的 PATH 内容,将 pwd 接到之前 PATH 的后面
export PATH=newpath:$PATH
source ~/.bashrc
LD_LIBRARY_PATH:用于指定动态链接库(.so 文件)的路径,其内容是以冒号分隔的路径列表。如果是空的,系统会优先找几个特定的系统目录。C_INCLUDE_PATH:C 语言的头文件路径,内容是以冒号分隔的路径列表。若为空,则会存在一些默认的地方,例如/usr/include等。CPLUS_INCLUDE_PATH:CPP 的头文件路径,内容是以冒号分隔的路径列表。同上,一般g++编译时会到这些地方寻找头文件。PYTHONPATH:Python 导入包的路径,内容是以冒号分隔的路径列表。python 执行的时候就会去PYTHONPATH中寻找包。JAVA_HOME:jdk 的安装目录。CLASSPATH:存放 Java 导入类的路径,内容是以冒号分隔的路径列表。
常用命令 #
系统状况 #
top:查看所有进程的信息(Linux的任务管理器)- 打开后,输入
M:按使用内存排序 - 打开后,输入
P:按使用CPU排序 - 打开后,输入
q:退出
- 打开后,输入
df -h:查看硬盘使用情况free -h:查看内存使用情况du -sh:查看当前目录占用的硬盘空间du -ch:详细地看当前目录下每一个文件占硬盘空间的大小ps aux:查看所有进程(一般是用于查某个进程的,例如ps aux | grep match-server)kill -9 pid:杀死编号为pid的进程- 传递某个具体的信号:
kill -s SIGTERM pid
- 传递某个具体的信号:
netstat -nt:查看所有网络连接w:列出当前登陆的用户ping www.baidu.com:检查是否连网
文件权限 #
chmod:修改文件权限chmod +x xxx:给xxx添加可执行权限chmod -x xxx:去掉xxx的可执行权限chmod 777 xxx:将xxx的权限改成777chmod 777 xxx -R:递归修改整个文件夹的权限
文件检索 #
find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py文件grep xxx:从stdin中读入若干行数据,如果某行中包含xxx,则输出该行;否则忽略该行。wc:统计行数、单词数、字节数- 既可以从
stdin中直接读入内容;也可以在命令行参数中传入文件名列表;也可以统计一个文件夹下的多个文件,分别显示行数,单词书,字节数 wc -l:统计行数wc -w:统计单词数wc -c:统计字节数
- 既可以从
tree:展示当前目录的文件结构tree /path/to/directory/:展示某个目录的文件结构tree -a:展示隐藏文件
ag xxx:搜索当前目录下的所有文件,检索xxx字符串cut:分割一行内容- 从
stdin中读入多行数据 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个字符
- 从
sort:将每行内容按字典序排序- 可以从
stdin中读取多行数据 - 可以从命令行参数中读取文件名列表
- 可以从
xargs:将stdin中的数据用空格或回车分割成命令行参数find . -name '*.py' | xargs cat | wc -l:统计当前目录下所有python文件的总行数
查看文件内容 #
more:浏览文件内容- 回车:下一行
- 空格:下一页
b:上一页q:退出
less:与more类似,功能更全- 回车:下一行
y:上一行Page Down:下一页Page Up:上一页q:退出
head -3 xxx:展示xxx的前3行内容- 同时支持从
stdin读入内容
- 同时支持从
tail -3 xxx:展示xxx末尾3行内容- 同时支持从
stdin读入内容
- 同时支持从
用户相关 #
history:展示当前用户的历史操作(显示1000 条)。内容存放在~/.bash_history中(保留最近 2000 条,在当前 pane 关闭后才会写入文件中)
工具 #
md5sum:计算md5哈希值- 可以从
stdin读入内容 - 也可以在命令行参数中传入文件名列表;
- 可以从
time command:统计command命令的执行时间ipython3:交互式python3环境。可以当做计算器,或者批量管理文件。! echo "Hello World":!表示执行shell脚本
watch -n 0.1 command:每0.1秒执行一次command命令tar:压缩文件tar -zcvf xxx.tar.gz /path/to/file/*:压缩tar -zxvf xxx.tar.gz:解压缩
diff xxx yyy:查找文件xxx与yyy的不同点
安装软件 #
sudo command:以root身份执行command命令apt-get install xxx:安装软件pip install xxx --user --upgrade:安装python包
查看 CPU 的信息:
cat /proc/cpuinfo
Related readings
If you want to follow my updates, or have a coffee chat with me, feel free to connect with me: