管道/环境变量/常用命令
管道
结构就像下面的代码:
<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
包