Terminal for Mac 使用指南

2024-03-17 王汪旺
Mac 命令行 技术

Mac 终端前置知识

常见符号和概念

~​符号:在终端中,~​符号代表当前用户的主目录。例如,如果你的用户名是username​,那么~​就等同于/Users/username​。使用~​可以快速引用主目录,而无需输入完整的路径。你还可以通过指定用户名来引用其他用户的主目录:

  cd ~  # 切换到主目录
  cd ~username  # 切换到指定用户名的主目录

vim​:vim​是一个功能强大的文本编辑器,广泛用于编程和文本编辑。它具有多种模式,包括普通模式、插入模式和命令模式。

  • 普通模式:默认模式,允许使用命令移动光标、删除、复制、粘贴等。

  • h​:向左移动光标

  • j​:向下移动光标
  • k​:向上移动光标
  • l​:向右移动光标
  • dd​:删除当前行
  • yy​:复制当前行
  • p​:粘贴
  • 插入模式:可以输入文本。按i​进入,按Esc​返回普通模式。
  • 命令模式:执行保存、退出等命令。按:​进入命令模式,输入命令:

  • :w​:保存文件

  • :q​:退出vim
  • :wq​:保存并退出
  • :q!​:强制退出,不保存更改
  • :%s/old/new/g​:替换文件中的所有old​为new

常用终端快捷键

Ctrl + A​:移动光标到行首。

Ctrl + E​:移动光标到行尾。

Ctrl + U​:删除从光标位置到行首的所有内容。

Ctrl + K​:删除从光标位置到行尾的所有内容。

Ctrl + C​:终止当前运行的命令。

Ctrl + Z​:将当前运行的命令挂起,可以使用fg​命令恢复。

Up​和Down​箭头:浏览命令历史。

Ctrl + L​:清屏(与clear​命令效果相同)。

Ctrl + D​:退出终端(如果没有其他程序正在运行)。

Ctrl + R​:反向搜索命令历史。

文件和目录操作

创建文件:使用touch​命令可以创建一个空文件。例如,touch file.txt​会创建一个名为file.txt​的空文件。

  touch file.txt

创建目录:使用mkdir​命令可以创建一个新目录。例如,mkdir newdir​会创建一个名为newdir​的新目录。

  mkdir newdir

复制文件:使用cp​命令可以复制文件。例如,cp file.txt newfile.txt​会将file.txt​复制为newfile.txt​。

  cp file.txt newfile.txt

移动文件:使用mv​命令可以移动文件或重命名文件。例如,mv file.txt newdir/​会将file.txt​移动到newdir​目录下;mv file.txt newfile.txt​会将file.txt​重命名为newfile.txt​。

  mv file.txt newdir/
  mv file.txt newfile.txt

查看文件内容:使用cat​命令可以查看文件内容。例如,cat file.txt​会显示file.txt​文件的内容。

  cat file.txt

分页查看文件内容:使用less​命令可以分页查看文件内容。例如,less file.txt​会分页显示file.txt​文件的内容,你可以使用Page Up​和Page Down​键来滚动查看。

  less file.txt

删除文件或目录:使用rm​命令删除文件。删除目录时,若目录不为空,使用-r​选项:

  rm file.txt  # 删除文件
  rm -r mydir  # 删除目录及其中的所有文件
  rm -ri mydir  # 删除目录时逐一确认

权限管理

查看文件权限:使用ls -l​命令可以查看文件和目录的权限。例如,ls -l​会显示当前目录下所有文件和目录的详细信息,包括权限、所有者、所属组等。

  ls -l

修改文件权限:使用chmod​命令可以修改文件的权限。例如,chmod 644 file.txt​会将file.txt​的权限设置为-rw-r--r--​,即所有者有读写权限,组内成员和其他用户有读权限。

  chmod 644 file.txt
  chmod 755 file.sh  # 给脚本文件赋予执行权限

修改文件所有者:使用chown​命令可以修改文件的所有者。例如,chown username file.txt​会将file.txt​的所有者改为username​。

  chown username file.txt

管道和重定向

管道:使用|​符号可以将一个命令的输出作为另一个命令的输入。例如,ls -l | grep "file.txt"​会列出当前目录下的所有文件和目录,并通过grep​命令过滤出包含file.txt​的行。

  ls -l | grep "file.txt"

重定向:使用>​符号可以将命令的输出重定向到文件中。例如,echo "Hello, world!" > file.txt​会将Hello, world!​写入file.txt​文件中,如果文件已存在则覆盖。

  echo "Hello, world!" > file.txt

追加重定向:使用>>​符号可以将命令的输出追加到文件中。例如,echo "Hello, world!" >> file.txt​会将Hello, world!​追加到file.txt​文件的末尾。

  echo "Hello, world!" >> file.txt

tee命令:将命令输出同时显示在终端并保存到文件中。

  echo "Hello, world!" | tee file.txt

基础命令

say:将文本转换为语音输出。例如,say "Hello, world!"​会朗读出“Hello, world!”这句话。

  say "Hello, world!"

echo:在终端输出文本。例如,echo "Hello, world!"​会在终端显示“Hello, world!”。

  echo "Hello, world!"

pwd:打印当前工作目录的完整路径。例如,pwd​可能会输出/Users/username/Documents​。

  pwd

cd:改变当前工作目录。例如,cd /Users/username/Documents​会将当前目录切换到/Users/username/Documents​。

  cd /Users/username/Documents

ls:列出当前目录下的文件和文件夹。例如,ls​会显示当前目录下的所有文件和文件夹。

  ls

clear:清空终端屏幕。例如,clear​会将终端屏幕上的内容全部清除。

  clear

vim:一个功能强大的文本编辑器。例如,vim file.txt​会打开名为file.txt​的文件进行编辑。

  vim file.txt

进阶命令

man:显示命令的手册页,提供命令的详细使用说明。例如,man ls​会显示ls​命令的手册页。

   man ls

caffeinate:防止系统进入睡眠状态。例如,caffeinate -i​会阻止系统进入睡眠状态,直到命令被终止。

   caffeinate -i

killall:终止指定名称的所有进程。例如,killall Safari​会终止所有名为Safari​的进程。

   killall Safari

textutil:用于转换和处理文本文件。例如,textutil -convert html file.rtf​会将file.rtf​文件转换为 HTML 格式。

   textutil -convert html file.rtf

diskutil:用于磁盘管理,如格式化、分区、挂载、卸载磁盘等。例如,diskutil list​会列出所有磁盘和分区的信息;diskutil eraseDisk​可以格式化磁盘;diskutil mount​可以挂载磁盘。

  • 查看所有磁盘和分区的信息:

bash diskutil list # 显示所有磁盘和分区信息 * 格式化磁盘(例如格式化磁盘disk2​为Mac OS扩展(日志式)格式):

bash diskutil eraseDisk JHFS+ "Macintosh HD" /dev/disk2 # 格式化磁盘disk2为JHFS+格式,并命名为Macintosh HD * 挂载磁盘:

bash diskutil mount /dev/disk2 # 挂载磁盘disk2 * 卸载磁盘:

bash diskutil unmount /dev/disk2 # 卸载磁盘disk2


进阶命令

find:用于在目录中查找文件或目录,支持根据多种条件进行搜索。例如,查找当前目录及子目录中所有扩展名为.txt​的文件:

   find . -name "*.txt"  # 在当前目录及子目录中查找所有.txt文件

grep:用于搜索文件内容中匹配的文本,并返回匹配行。常与管道结合使用。例如,查找当前目录下所有txt​文件中包含“hello”字样的行:

   grep "hello" *.txt  # 查找当前目录下所有.txt文件中包含"hello"的行

top:实时显示系统资源使用情况,类似于任务管理器。在终端运行时,它会显示当前系统进程和CPU、内存等信息。

   top

df:显示磁盘空间的使用情况。它会列出所有挂载的文件系统及其空间使用情况。例如,查看所有挂载文件系统的空间使用情况:

   df -h  # 以人类可读的格式显示磁盘使用情况

du:显示指定文件或目录的磁盘使用情况。例如,查看mydir​目录的磁盘使用情况:

   du -sh mydir  # 显示mydir目录的总大小

alias:用于创建命令别名,简化常用命令的输入。例如,将ls -l​命令别名为ll​:

   alias ll="ls -l"

history:显示命令历史。例如,history​可以列出之前执行过的命令。你可以通过指定编号来执行历史命令,例如,!100​将执行编号为100的命令。

   history  # 显示命令历史
   !100  # 执行历史命令100

scp:用于在本地和远程机器之间安全地复制文件。它是通过SSH协议进行文件传输的。例如,将本地文件file.txt​复制到远程服务器的/home/user/​目录:

   scp file.txt username@hostname:/home/user/

rsync:用于同步文件和目录,支持增量同步和远程同步。例如,使用rsync​将本地文件夹同步到远程服务器:

   rsync -avz mydir/ username@hostname:/path/to/destination/

实用技巧

快速查看文件内容的头部和尾部

  • 使用head​命令查看文件的前10行:

bash head file.txt # 查看文件的前10行 * 使用tail​命令查看文件的最后10行,-f​选项可以实时查看文件增长(适用于查看日志文件):

bash tail -f /var/log/system.log # 实时查看系统日志文件

查看文件类型:使用file​命令可以查看文件的类型。例如:

  file file.txt  # 显示file.txt文件的类型

创建快捷方式(符号链接) :使用ln -s​命令创建符号链接。例如,创建一个指向/path/to/target​的快捷方式link_name​:

  ln -s /path/to/target link_name  # 创建符号链接

定时执行命令(cron作业) :使用crontab​命令安排定时任务。编辑crontab​文件:

  crontab -e  # 编辑定时任务

一个典型的cron​任务可以是每小时执行一次脚本:

  0 * * * * /path/to/script.sh  # 每小时执行一次脚本

获取帮助:除了man​命令,还可以使用--help​选项来查看命令的帮助信息。例如:

  ls --help  # 显示ls命令的帮助信息

背景任务:在终端中运行命令时,可以将命令放入后台运行,这样终端就不会被占用。例如:

  long_running_command &  # 将命令放入后台运行

你可以使用jobs​查看后台任务,使用fg​命令恢复任务到前台。


脚本与自动化

Shell脚本:在macOS上,你可以使用Shell脚本自动化任务。脚本通常以.sh​为扩展名,使用#!/bin/bash​作为文件的开头。一个简单的Shell脚本示例:

  #!/bin/bash
  echo "Hello, World!"
  cd /path/to/directory
  ls -l

保存并使其可执行:

  chmod +x script.sh
  ./script.sh  # 执行脚本

环境变量:可以在终端中设置环境变量,这对于定制终端行为非常有用。例如,设置EDITOR​环境变量为vim​:

  export EDITOR=vim  # 设置默认编辑器为vim

你可以将环境变量放入~/.bash_profile​或~/.zshrc​文件中,以便每次打开终端时自动加载。


常见问题与排错

命令未找到:如果终端显示命令未找到,首先检查是否拼写错误。如果确认命令存在但无法找到,可能是由于路径没有包含该命令的安装位置。使用echo $PATH​检查当前的环境变量。

权限问题:如果执行某些操作时遇到权限问题(例如删除文件),可以使用sudo​命令以管理员权限运行:

  sudo rm file.txt  # 使用管理员权限删除文件

文件锁定或无法删除:如果文件或目录被锁定或正在使用,可能需要先结束相关进程。使用lsof​(列出打开的文件)来查找并关闭文件:

  lsof | grep file.txt  # 查找正在使用file.txt的进程
  kill -9 <PID>  # 终止相关进程