管道
管道符号就是 一个杠 |
考虑这样一个需求:有很多个命令需要依次执行,并且前一个命令的结果就是后一个命令的参数.
实现这个需求,就可以用到管道.
管道可以将前一个命令的 stdout
重定向到下一个命令的 stdin
使用时注意:
1. 管道命令仅处理stdout
,会忽略stderr
.
2. 管道右边的命令必须能接受stdin
.
3. 多个管道命令可以串联.
4. 管道两边的均为命令,而重定向的左边为命令,右边为文件.
测试如下:
环境变量
Linux系统中会用很多环境变量来记录配置信息。
环境变量类似于全局变量,可以被各个进程访问到。我们可以通过修改环境变量来方便地修改系统配置。
查看环境变量
env # 显示当前用户的变量
set # 显示当前shell的变量,包括当前用户的变量;
export # 将某个用户变量定义成全局变量,在 shell 语法有讲
可以用 echo $PATH
来输出某个环境变量的值
环境变量的定义,修改,删除在 shell 语法讲过,也就是将一个变量变成全局变量,以及将一个全局变量变成一个局部变量
但是用 export
定义的环境变量只会在当前 bash
的修改只会针对当前 bash
起作用,关闭 bash
重启后就失效了
持久化修改
- 将修改命令放到
~/.bashrc
文件中,记得放在下面,因为这个 .bashrc 文件是从上到下执行的,我们在下面定义的修改会覆盖上面的定义 - 执行
source ~/.bashrc
为什么会生效?
每次启动 bash
, 都会先执行 ~/.bashrc
文件,这就加载我们的修改
每次 ssh 登录服务器, 都会启动一个 bash 命令行
每次 tmux 新开一个 pane, 也会启动一个 bash 命令行
常见的环境变量
HOME
:用户的家目录.PATH
:可执行文件(命令)的存储路径.路径与路径之间用:分隔.当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行.下列所有存储路径的环境变量,均采用从左到右的优先顺序.LD_LIBRARY_PATH
:用于指定动态链接库(.so文件)的路径,其内容是以冒号分隔的路径列表.C_INCLUDE_PATH
:C语言的头文件路径,内容是以冒号分隔的路径列表.CPLUS_INCLUDE_PATH
:CPP的头文件路径,内容是以冒号分隔的路径列表.PYTHONPATH
:Python导入包的路径,内容是以冒号分隔的路径列表.JAVA_HOME
:jdk的安装目录.CLASSPATH
:存放Java导入类的路径,内容是以冒号分隔的路径列表.
关于 PATH
当用户输入一个命令之后, 系统就会去 PATH
也就是可执行文件的存储路径中去找 第一个与命令相匹配的路径.
这样的话,我们可以将存放我们自己写的命令行的目录放到 PATH 中,像输入命令一样,输入我们自己的程序.
具体的就是 我们每次做作业用到的 homework
落实到具体应用中就是 知道这个概念,具体咋改可以等具体用到了在面向google 或者面向 chatgpt
常用命令
这里还是以实用主义为主,收录常用的命令,其他的用到了再说
系统状况
top
:查看所有进程的信息(Linux的任务管理器)
打开后,输入M: 按使用内存排序
打开后,输入P: 按使用CPU排序
打开后,输入q: 退出
df -h
:查看硬盘使用情况
free -h
:查看内存使用情况
du -sh
:查看当前目录占用的硬盘空间
du -sh
显示当前目录的总大小,如果要显示当前目录下所有文件和子目录的大小,可以用du -sh ./*
5. ps aux
:查看所有进程
这个命令一般是和下面的配置使用,找到进程之后配合杀死
6. kill -9 pid
:杀死编号为pid的进程
还可以用 kill -s SIGTERM pid
,二者的区别在于:
SIGTERM
(Unix 信号 15)是一个“礼貌”的 Unix 信号,默认情况下会终止进程,但可以被进程处理或忽略.这使进程有机会在关闭之前完成基本操作或执行清理。目的是不管它是否成功结束,都要,死进程,但是给它一个机会先清理进程.
```SIGKILL```(Unix 信号 9)是一个“残酷”的 Unix 信号,它会立即终止进程.无法处理或忽略 SIGKILL,因此进程没有机会进行清理。SIGKILL 应该被 Unix/Linux 用户用作最后的手段,因为它可能导致错误和数据损坏.
netstat -nt
:查看所有网络连接
w
:列出当前登陆的用户
ping www.baidu.com
:检查是否连网
文件权限
查看文件权限
使用 ls -l
一共有 10位,
第一个位 代表文件类型:d
是文件夹,l
是连接文件,-
是普通文件
后面的是权限,r
是读取,w
是写入,x
是执行,
3个为1段,
第一段代表的是建立这个文件的用户权限,
第二段为建立这个文件的用户所属组的权限,
第三段为其他用户的权限,哪个为空,则没有这个权限.
更改文件权限
用 chmod
+ 代表增加权限 - 表示去掉权限
chmod +w xxx:给xxx添加可写权限
chmod -r xxx:去掉xxx的可读权限
chmod 777 xxx:将xxx的权限改成777
chmod 777 xxx -R:递归修改整个文件夹的权限
权限有 3种,3位的2进制数可以表示 0-7,
777 就可以看成 111 111 111
1表示有这个权限 0 表示没有这个权限
文件检索
-
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
:分割一行内容,可以读取标准输入,也可以读取文件内容.
常用参数:
-d
使用自定义的分隔符,
-f
显示输出分割的哪一个部分 3,5表示输出 第3列数据和第5列数据.
-c
以字符为单位进行分割
sort
:将每行内容按字典序排序,配合find
使用
可以从stdin
中读取多行数据, 输入ctrl+d
表示结束输入
可以从命令行参数中读取文件名列表
xargs
:将stdin
中的数据用空格或回车分割成命令行参数, 配置管道使用.
因为有的命令不接受stdin
或者是stdin
和文件参数的效果不一致
find . -name '*.py' | xargs cat | wc -l
:统计当前目录下所有python文件的总行数
查看文件内容
more
:浏览文件内容 与cat
不同,more
只输出一部分内容
回车:下一行
空格:下一页
b:上一页
q:退出less
:与more类似,功能更全
回车:下一行
y:上一行
Page Down:下一页
Page Up:上一页
q:退出head -3 xxx
:展示xxx的前3行内容
同时支持从stdin读入内容,可以搭配管道使用tail -3 xxx
:展示xxx末尾3行内容
同时支持从stdin读入内容
用户相关
history
:展示当前用户的历史操作.内容存放在~/.bash_history中
在关闭 bash 之后,才会把本次的历史操作记录持久化到文件中
工具
-
md5sum
:计算md5哈希值
可以从stdin读入内容,也可以在命令行参数中传入文件名列表;
-
time command
:统计command命令的执行时间
3.ipython3
:交互式python3环境。可以当做计算器,或者批量管理文件。
! echo "Hello World"
:在前面加上!
可以在 ipython3 中执行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的不同点
返回的结果如下:
diff
描述两个文件不同的方式是告诉我们怎么样改变第一个文件之后与第二个文件匹配
结果解释:
4,5c4,5
表示第一个文件的第[4,5]行,闭区间,需要做出改变(change) 才能与第二个文件的[4,5]行相匹配
中间的字母还可以是 (a=add,c=change,d=delete)
带 < 的部分表示第一个文件的第[4,5]行的内容,
而带> 的部分表示右边文件的第[4,5]行的内容,
中间的 — 则是两个文件内容的分隔符号.
安装软件
sudo command
:以root身份执行command命令apt-get install xxx
:安装软件pip install xxx --user --upgrade
:安装python包