管道/环境变量/常用命令
管道
结构就像下面的代码:
<command1> | <command2> | <command3> | <command4> | ...
管道类似文件重定向,可以将前一个命令的stdout重定向的下一个命令的stdin,就是将上一个命令的stdout作为下一个命令的stdin,可以将多个命令组合起来使用。
要点
- 管道命令仅处理
stdout,会忽略stderr。 - 管道右边的命令必须能接受
stdin。 - 多个管道命令可以串联。
与文件重定向的区别
- 文件重定向的左边是命令,右边是文件
- 管道的左右两边都是命令,左边有
stdout,右边有stdin - 一个管道是可以处理很多条命令的
示例
统计当前目录下所有python文件的总行数
find . -name '*.py' | xargs cat | wc -l
第一条命令find . -name '*py'是找到当前目录下的所有python文件,并将文件名作为stdout输出
第二条命令xargs cat是将find 的输出的结果作为stdin,并将其作为参数传给cat命令,分别查看这些.py文件的内容
第三条命令wc -l就是统计所有文件内容的总行数
环境变量
概念
Linux系统中会用很多环境变量来记录配置信息。
环境变量类似于全局变量,可以被各个进程访问到。我们可以通过修改环境变量来方便地修改系统配置。
查看环境变量
env # 显示当前用户的环境变量
set # 显示当前 shell 的环境变量,包含当前用户的环境变量
export # 显示当前导出成用户变量的 shell 变量
输出某个环境变量的值
echo $PATH #用shell语法,符号$对变量进行取值操作

修改环境变量
比如说,我们要将当前系统的家目录home/acs修改成home/acs/homework,可以用export命令将HOME变量导出来,再修改
export HOME=home/acs/homework
但是当我们重新打开Terminal的时候发现HOME变量又变成原来的了,这是因为,每次打开Terminal,启动bash,ssh远程链接服务器,用tmux 打开一个pane, 他们都会重新执行bash的终端配置文件~/.bashrc,而刚才的配置并不存在于这个文件中,因此就失效了。
为了让修改持久化,可以直接修改配置文件~/.bashrc,然后执行命令source ~/.bashrc,那么对环境变量的修改就会持久化了。
常见环境变量
HOME:用户的家目录。PATH:可执行文件(命令)的存储路径。路径与路径之间用:分隔。当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行。下列所有存储路径的环境变量,均采用从左到右的优先顺序。LD_LIBRARY_PATH:用于指定动态链接库(.so文件)的路径,其内容是以冒号分隔的路径列表。C_INCLUDE_PATH:C语言的头文件路径,内容是以冒号分隔的路径列表。CPLUS_INCLUDE_PATH:CPP的头文件路径,内容是以冒号分隔的路径列表。PYTHONPATH:Python导入包的路径,内容是以冒号分隔的路径列表。JAVA_HOME:jdk的安装目录。CLASSPATH:存放Java导入类的路径,内容是以冒号分隔的路径列表。
我们可以将自己写的可执行程序的地址写进PATH环境变量中去,并且执行source ~/.bashsrc进行持久化,然后就可以在任何目录下通过输入可执行程序的名称,像执行ls命令一样执行自己定义的可执行程序
常用命令
系统情况
top:查看所有进程的信息(Linux的任务管理器),类似windows的任务管理器- 打开后,输入
M:按使用内存,从大到小排序 - 打开后,输入
P:按使用CPU,从大到小排序 - 打开后,输入
q:退出
- 打开后,输入
df -h:查看硬盘使用情况free -h:查看内存使用情况du -sh:查看当前目录占用的硬盘空间ps aux:查看所有进程kill -9 pid:杀死编号为pid的进程- 传递某个具体的信号:
kill -s SIGTERM pid
- 传递某个具体的信号:
netstat -nt:查看所有网络连接w:列出当前登陆的用户ping www.baidu.com:检查是否连网,如果一直有数据更新,说明可以联网
文件权限
Linux 文件权限,总共有 10 位
1:表示文件类型,可以是文件、目录、链接2-4:表示当前用户对该文件所拥有的权限5-7:表示当前用户组对该文件所拥有的权限8-10:表示其他用户对该文件所拥有的权限
其中 rwx 分别表示可读可写可执行
chmod:修改文件权限
chmod +x xxx:给xxx添加可执行权限chmod -x xxx:去掉xxx的可执行权限chmod 777 xxx:将xxx的权限改成777,777 表示可读可写可执行chmod 777 xxx -R:递归修改整个文件夹的权限
文件检索
-
find directory -name '*.py':搜索指定目录下所有.py文件- 也可以直接
find -name '*.py':搜索当前目录中的所有.py文件
- 也可以直接
-
grep xxx:从stdin中读入若干行内容,如果某行中包含要搜索的内容xxx,则输入该行,并且对xxx标记,否则忽略该行。-
grep命令一般配合其他命令一起使用,通过管道处理上一个命令的输出结果。 -
比如:输出当前目录下所有
.py文件中包含hello的行。
-
find . -name "*.py" | xargs cat | grep 'hello'
-
wc:统计行数、单词数和字节数-
可以从标准输入
stdin中读入内容,也可以从指定文件中读入内容,也可以从命令行中传入文件参数列表 -
wc -l:统计总行数 -
wc -w:统计总单词数 -
wc -c:统计总字节数
-
-
tree/tree .:树形展示当前目录的文件结构-
tree dirctory:展示指定目录的文件结构 -
tree -a:可以展示隐藏文件 -
tree -h:可以展示每个文件的大小
-
-
ag xxx:常用,搜索当前目录下的所有文件,检索xxx字符,输出所有包含xxx的行并且显示其对应的文件,比grep命令多了字符串对应的文件和位置 -
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 文件的总行数
find . -name '*.py' | xargs cat | wc -l
查看文件内容
-
more:从前往后输出一页内容,Enter下一行、Space下一页、b上一页、q退出查看 -
less:和more类似,Enter下一行,y上一行,Page Down下一页,Page Up上一页,q退出,比more功能更多。 -
head -3 xxx:展示xxx的前 3 行内容- 支持
stdin读入内容
- 支持
-
tail -3 xxx:展示xxx末尾 3 行内容,一般用于查看最新的日志。-
支持
stdin读入内容history | tail -3 # 查看最新的三个操作命令上面的四个命令和
cat操作是一样的。
-
-
history:展示当前用户的历史操作,内容存放在~/.bash_history中
工具
-
md5sum:计算文件 md5 哈希值(相当于数据的“指纹”,这是唯一的,不能逆解)- 可以从
stdin读入内容,按Ctrl + d结束,同时输出 md5 哈希值
- 可以从
-
time command:统计command命令的执行时间 -
ipython3:一个 python 交换环境,可以用做计算器。(使用python语法进行计算)! echo "hello":!表示执行 shell 脚本
-
watch -n 0.1 command:每0.1s 执行一次命令 -
tar:压缩解压缩-
tar -zcvf xxx.tar.gz yyy:将目录yyy压缩成xxx.tar.gz,c - compress -
tar -zxvf xxx.tar.gz -C yyy:可以将xxx.tar.gz解压到指定目录,x - extract -
tar -zxvf xxx.tar.gz:将xxx.tar.gz解压到当前目录
-
-
diff xxx yyy:查找文件xxx与yyy的差异
软件安装
-
sudo command:以root身份执行命令 -
apt-get install xxx:安装软件 -
pip install xxx --user --upgrade:安装python包
813

被折叠的 条评论
为什么被折叠?



