命令行的艺术

本文最后更新于: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 -alsb_release -a、neofetch

参考


命令行的艺术
http://gls.show/p/6aa1f673/
作者
郭佳明
发布于
1970年1月1日
许可协议