timerring

Pipes, Environment Variables, and Common Commands

July 27, 2022 · 13 min read
Cheatsheet
VPS | Linux
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。

  1. 管道命令仅处理 stdout,会忽略 stderr (标准错误)。
  2. 管道右边的命令必须能接受stdin。
  3. 多个管道命令可以串联。

与文件重定向的区别 #

  • 文件重定向左边为命令,右边为文件。
  • 管道左右两边均为命令,左边有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 命令行给我们。
  • 所以未来所有新开的环境都会加载我们修改的内容。

常见环境变量 #

  1. HOME:用户的家目录。
  2. PATH:可执行文件(命令)的存储路径(所有的命令存到了哪些地址 )。路径与路径之间用 : 分隔。当某个可执行文件同时出现在多个路径中时,会选择从左到右数第一个路径中的执行。下列所有存储路径的环境变量,均采用从左到右的优先顺序。(短路原则:当输入某个命令的时候 os 遍历 PATH 中 all 路径直至第一个匹配的命令为止) 例如:将 march-server 变成命令
vim ~/.bashrc  
# PATH 取出之前的 PATH 内容,将 pwd 接到之前 PATH 的后面  
export PATH=newpath:$PATH
source ~/.bashrc
  1. LD_LIBRARY_PATH:用于指定动态链接库(.so 文件)的路径,其内容是以冒号分隔的路径列表。如果是空的,系统会优先找几个特定的系统目录。
  2. C_INCLUDE_PATH:C 语言的头文件路径,内容是以冒号分隔的路径列表。若为空,则会存在一些默认的地方,例如 /usr/include 等。
  3. CPLUS_INCLUDE_PATH:CPP 的头文件路径,内容是以冒号分隔的路径列表。同上,一般 g++ 编译时会到这些地方寻找头文件。
  4. PYTHONPATH:Python 导入包的路径,内容是以冒号分隔的路径列表。python 执行的时候就会去 PYTHONPATH 中寻找包。
  5. JAVA_HOME:jdk 的安装目录。
  6. CLASSPATH:存放 Java 导入类的路径,内容是以冒号分隔的路径列表。

常用命令 #

系统状况 #

  1. top:查看所有进程的信息(Linux的任务管理器)
    • 打开后,输入M:按使用内存排序
    • 打开后,输入P:按使用CPU排序
    • 打开后,输入q:退出
  2. df -h:查看硬盘使用情况
  3. free -h:查看内存使用情况
  4. du -sh:查看当前目录占用的硬盘空间
  5. du -ch:详细地看当前目录下每一个文件占硬盘空间的大小
  6. ps aux:查看所有进程(一般是用于查某个进程的,例如 ps aux | grep match-server)
  7. kill -9 pid:杀死编号为pid的进程
    • 传递某个具体的信号:kill -s SIGTERM pid
  8. netstat -nt:查看所有网络连接
  9. w:列出当前登陆的用户
  10. ping www.baidu.com:检查是否连网

文件权限 #

  1. chmod:修改文件权限
    • chmod +x xxx:给xxx添加可执行权限
    • chmod -x xxx:去掉xxx的可执行权限
    • chmod 777 xxx:将xxx的权限改成777
    • chmod 777 xxx -R:递归修改整个文件夹的权限

文件检索 #

  1. find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py文件
  2. grep xxx:从stdin中读入若干行数据,如果某行中包含xxx,则输出该行;否则忽略该行。
  3. wc:统计行数、单词数、字节数
    • 既可以从 stdin 中直接读入内容;也可以在命令行参数中传入文件名列表;也可以统计一个文件夹下的多个文件,分别显示行数,单词书,字节数
    • wc -l:统计行数
    • wc -w:统计单词数
    • wc -c:统计字节数
  4. tree:展示当前目录的文件结构
    • tree /path/to/directory/:展示某个目录的文件结构
    • tree -a:展示隐藏文件
  5. ag xxx:搜索当前目录下的所有文件,检索xxx字符串
  6. 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个字符
  7. sort:将每行内容按字典序排序
    • 可以从stdin中读取多行数据
    • 可以从命令行参数中读取文件名列表
  8. xargs:将stdin中的数据用空格或回车分割成命令行参数
    • find . -name '*.py' | xargs cat | wc -l:统计当前目录下所有python文件的总行数

查看文件内容 #

  1. more:浏览文件内容
    • 回车:下一行
    • 空格:下一页
    • b:上一页
    • q:退出
  2. less:与more类似,功能更全
    • 回车:下一行
    • y:上一行
    • Page Down:下一页
    • Page Up:上一页
    • q:退出
  3. head -3 xxx:展示xxx的前3行内容
    • 同时支持从stdin读入内容
  4. tail -3 xxx:展示xxx末尾3行内容
    • 同时支持从stdin读入内容

用户相关 #

  1. history:展示当前用户的历史操作(显示1000 条)。内容存放在 ~/.bash_history 中(保留最近 2000 条,在当前 pane 关闭后才会写入文件中)

工具 #

  1. md5sum:计算md5哈希值
    • 可以从stdin读入内容
    • 也可以在命令行参数中传入文件名列表;
  2. time command:统计command命令的执行时间
  3. ipython3:交互式python3环境。可以当做计算器,或者批量管理文件。
    • ! echo "Hello World":!表示执行shell脚本
  4. watch -n 0.1 command:每0.1秒执行一次command命令
  5. tar:压缩文件
    • tar -zcvf xxx.tar.gz /path/to/file/*:压缩
    • tar -zxvf xxx.tar.gz:解压缩
  6. diff xxx yyy:查找文件xxx与yyy的不同点

安装软件 #

  1. sudo command:以root身份执行command命令
  2. apt-get install xxx:安装软件
  3. pip install xxx --user --upgrade:安装python包

查看 CPU 的信息:

cat /proc/cpuinfo

Related readings


<< prev | Tmux Common... Continue strolling Nginx... | next >>

If you want to follow my updates, or have a coffee chat with me, feel free to connect with me: