Command-Line Interface

约 1347 字大约 4 分钟

2019-08-14

本篇仅收集记录 常用的命令行,及在具体场景中的使用,并不对它们进行详细介绍。

拷贝

拷贝一个文件

file.txt 拷贝到 documents/ 目录下

cp file.txt documents/

拷贝一个目录

music/ 整个目录拷贝到 media/ 目录下

cp -a music media/
# 或者写成
cp -a music/ media/music/

创建文件副本

file.txt 创建副本 file.bak.txt

cp file.txt file.bak.txt
# 或者写成
cp file{,.bak}.txt

创建目录副本

music/ 创建副本

cp -a music/ media/
# 如果 media 目录不存在
cp -a music media/

移动

移动文件

file.txt 移动到 documents/ 目录下

mv file.txt documents/
# 不要忽略 document 后面的 `/`,不然会被当成重命名文件

重命名文件

file.txt 重命名为 readme.md

mv file.txt readme.md

移动目录

将 目录 music/ 移动到 media/ 目录下

mv music media/
# 或者写成
mv music/ media/music

重命名目录

将 目录 music/ 重命名为 media/

mv music/ media/

合并目录文件

images/ 目录合并到 images2/ 目录中

# -a 相当于 -rlptgoD , 表示归档,同名文件会被覆盖
rsync -a images/ images2/

创建

创建文件

创建 file.txt

touch file.txt # 如果文件存在,则更新它的权限和修改时间
# 或者使用
> file.txt  # 如果文件存在,则会清空文件内容

创建目录

创建 music/ 目录

mkdir music
# 创建一连串的文件夹
mkdir -p media/music/rock

查看信息

文件和目录大小

du -sh node_modules/

文件信息

stat -x file # MacOS
stat file    # Linux

文件内容

查看文件内容

cat file.txt
# 如果文件太大,可以使用 `less` 来一次查看一页内容
less file.txt

目录文件

查看目录中的文件

ls folder
# -l: 以列表格式显示. -a: 显示包括隐藏文件的所有文件. -la 结合以上两个选项.
ls -la folder
# -r: 倒序显示. -t: 按修改时间排序. -h: 以易读的格式显示大小.
ls -alrth folder

显示目录下所有文件和子目录的文件树

tree folder  # Linux
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' # MacOS
# 也可以在 MacOS 上使用 `brew install tree` 安装 `tree` 命令行工具

打开文件

使用默认程序打开文件

xdg-open file # Linux
open file     # MacOS
start file    # Windows

在任意程序中打开文件

open -a appName file

删除

删除一个文件

删除 file.txt

rm file.txt

删除一个目录

删除 music/ 目录

rm -r music

解压缩

压缩整个目录

将 目录 music/ 压缩到 archive.zip

zip -r archive.zip music

解压文件

archive.zip 解压

unzip archive.zip

速览压缩文件

速览压缩包中的文件

zipinfo archive.zip
# 或者
unzip -l archive.zip

搜索

找出陈旧文件

找出所有最近一次修改在 5 天之前的文件

find folder -mtime +5

检索文件内容

grep -i "music" file.txt

grep 能在文件中检索特定内容,一些常见的配套命令行参数:

  • -i:大小写敏感
  • -A/-B/-C <N>:顺带显示前后文,-A表示后面 N 行,-B表示前面 N 行,-C表示前后各 N 行
  • -E:使用正则表达式来匹配
  • -v:反选(输出不匹配的行)
  • -l:只输出能匹配到内容的文件名
  • -F:不要将检索内容视为正则表达式
  • -r:递归匹配目录下所有文件的内容
  • -o:只输出匹配上了的部分(而不是整行)
  • -a:也对二进制文件进行检索,而不是忽略它们!

强制退出程序

killall program_name

网络

服务器响应

curl -i https://pengzhanbo.cn

检查域名/地址连接

检查域名或者地址某端口是否能够连接

nc -vz pengzhanbo.cn 443
nc -vz 1.1.1.1 443

域名DNS配置

dig pengzhanbo.cn

域名所有人和注册信息

whois pengzhanbo.cn

热键

  • Ctrl + A 跳转到你当前编辑的命令行行首
  • Ctrl + E 跳转到你当前编辑的命令行行尾
  • Ctrl + L 清屏,和 clear 指令类似
  • Ctrl + U 清除行中光标之前的内容(在行尾时即清除整行)
  • Ctrl + H 和退格一样
  • Ctrl + R 能让你搜索之前使用过的命令行记录
  • Ctrl + C 强制停止当前的程序
  • Ctrl + D 退出当前 shell (壳层/命令行界面)
  • Ctrl + Z 将当下运行的程序挂起,使用 fg 来恢复运行
  • Ctrl + W 删除光标前的一个词
  • Ctrl + K 清除行中光标之后的内容
  • Ctrl + T 交换光标前两个字符
  • Esc + T 交换光标前两个词
  • Alt + F 将光标移至行内下一个词处
  • Alt + B 将光标移至行内上一个词处
  • Tab 自动补全文件/目录的名称

MacOS

!!                            # 再一次执行上一条指令
sudo !!                       # 以管理员身份执行上一条指令
!<word>                       # 加上特定命令行前缀再执行上一条指令
!<word>:p                     # 显示上一条指令加上前缀,但不要执行
<space>command                # 执行指令,但不要存到历史记录中
echo "ls -l" | at midnight    # 在特定时间执行指令
caffeinate -u -t 3600         # 接下来一小时内阻止你的mac休眠
ls -lhs                       # 将目录中文件按大小排序显示
qlmanage -p <file>            # 从命令行调用"速览"
top -o vsize                  # 查看是什么拖慢了你的mac