命令行的艺术
本文最后更新于:2025年6月25日 上午
基础
- 学习 Bash 的基础知识
- 阅读
man bash
或者tldr bash
- 一些别的shell:zsh、fish
- 了解bash内置命令
- 阅读
- 文本编辑器
- 使用vim、EMACS在终端编辑文本
- 文档
- man
- tldr
- apropos
- 使用help获取帮助信息
- 输入输出重定向
- 使用 > 和 < 来重定向输出和输入
- 使用 | 来重定向管道
- > 会覆盖了输出文件而 >> 是在文件末添加
- 标准输出 stdout
- 标准错误 stderr
- bash任务管理工具
- &:将任务放在后台执行
- ctrl+c:终止程序
- ctrl+z:挂起程序(配合fg、bg命令使用)
- ctrl+d:终止输入/退出终端
- ctrl-l:清屏
- jobs
- ssh 进行远程命令行登录
- 无密码认证登录
- eval $(ssh-agent)
- ssh-add ~/.ssh/私钥
- 在config文件中可以指定一些选项,比如TCPKeepAlive=yes,ServerAliveInterval=15等
- 无密码认证登录
- 文件管理工具
- ls -l每一列的意义
- 查看文件内容
- less
- tail
- head
- 硬链接与软连接
- chown改变文件的所有者/组、chmod改变权限
du -hs *
获取磁盘使用情况概述,s表示single dictionary,h表示human-readable form- du:disk usage
- df:disk filesystem
- 基本的网络管理工具
- ip
- ifconfig
- 版本控制系统
- git
- 正则表达式
- grep
- egrep
- 熟悉上面命令的-i,-o,-v,-A,-B 和 -C参数
- 包管理工具
- 学会使用 apt-get,yum,dnf 或 pacman来查找和安装软件包
- pip 来安装基于 Python 的命令行工具
日常使用
- Tab 键实现自动补全参数
- ctrl-r 搜索命令行历史记录
- 按下 Enter 键会执行当前匹配的命令
- 按下右方向键会将匹配项放入当前行中,不会直接执行,以便做出修改
- 命令修改
- ctrl-w 删除你键入的最后一个单词
- ctrl-u 可以删除行内光标所在位置之前的内容
- alt-b 和 alt-f 可以以单词为单位移动光标
- ctrl-a 可以将光标移至行首
- ctrl-e 可以将光标移至行尾
- ctrl-k 可以删除光标至行尾的所有内容
- ctrl-l 可以清屏
- 键入 man readline 可以查看 Bash 中的默认快捷键
- pstree -p 以一种优雅的方式展示进程树
- 回到前一个工作路径:cd -
- Alt . :上一个命令
- 使用 pgrep 和 pkill 根据名字查找进程或发送信号
- 了解发往进程的信号的种类
- man 7 signal
- disown 可以使一个后台进程持续运行,这样关闭shell的时候进程就不会被终止
- w查看登录用户和已经运行时间
- uptime查看已经运行时间
- 使用 alias 来创建常用命令的快捷形式
- diff:逐行比较文件
- man unicode,man utf-8,man latin1,man ascii有助于了解通用的编码信息
- mosh
- ssh的替代
- 使用 UDP 协议
- 将 web 服务器上当前目录下所有的文件(以及子目录)暴露给你所处网络的所有用户,使用:python -m http.server 7777 (使用端口 7777 和 Python 3)
- su username切换为别的用户,su - username会使得切换后的环境与该用户登录后的环境相同
文件和数据处理
- 在当前目录下通过文件名查找一个文件,使用类似于这样的命令:find . -iname ‘something‘
- 在所有路径下通过文件名查找文件,使用 locate something (但注意到 updatedb 可能没有对最近新建的文件建立索引,所以你可能无法定位到这些未被索引的文件)
- ag是一个find的替代品
- 使用pandoc进行Markdown,HTML,以及所有文档格式之间的转换
- wc可以统计行数、字符数、单词数量、字节数(分别对应:l、m、w、c)
- paste可以将文件的多行合并为一行,并且指定分隔符(delimiter)
- join将两个文件中,指定栏位内容相同的行连接起来
- cut裁减命令或者文件输出,比如
who | cut -c 1-10
将who的输出的每一行的第一个到第十个字符全部输出,其余忽略 - tee 将标准输入复制到文件甚至标准输出,例如 ls -al | tee file.txt
- repren或者rename可以批量重命名文件
- diff比较文件/文件夹的改变
- 对于二进制文件,strings(包括 grep 等工具)可以帮助在二进制文件中查找特定比特
- 对于二进制文件,使用 hd,hexdump 或者 xxd 使其以十六进制显示,使用 bvi,hexedit 或者 biew 来进行二进制编辑
- iconv更改文本编码
系统调试
- curl可以用于系统调试(-I选项可以仅仅输出document info),也可以尝试github上的开源项目httpie
- htop获取cpu、硬盘的使用状态
- netstat和ss可以查看网络细节
- mtr用来跟踪路由、确定网络问题
- strace和lstrace可以跟踪调试一个程序
- ldd可以检查共享库
- /proc目录下有重要信息的文件:/proc/cpuinfo,/proc/meminfo,/proc/cmdline,/proc/xxx/cwd,/proc/xxx/exe,/proc/xxx/fd/,/proc/xxx/smaps(这里的 xxx 表示进程的 id 或 pid)
- 查看系统信息:
uname -a
、lsb_release -a
、neofetch
参考
命令行的艺术
http://gls.show/p/6aa1f673/