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> # 终止相关进程