Skip to main content

Terminal

Terminals

也称为命令行或控制台,使我们能够在计算机上完成和自动化任务,而无需图形用户界面。终端起源于 1950 年代到 1960 年代左右,从那时起就一直是所有操作系统的重要组成部分——从台式机到隐藏在云中的服务器,再到像 Raspberry PI Zero 这样的微型计算机,甚至手机。在大多数情况下,终端、命令行意味着同一件事。

面试中命令行通常特指类Unix系统,如Linux、macOS、Ubuntu等,这些系统与生产环境保持一致。

如果你是 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 :推荐使用 WSL(Windows Subsystem for Linux)?

WSL 安装

# 安装wsl
wsl --install

# 查看可用的Linux发行版列表
wsl --list --online

# 安装指定的Linux发行版
wsl --install -d <distro-name>
# 示例:wsl --install -d Ubuntu-24.04

# 列出已安装的发行版的名称、运行状态、wsl版本
wsl -l -v

# 设置默认发行版(配置后输入wsl命令即可进入)
wsl --set-default <distro-name>

如果你不属于以上系统,推荐购买云服务器并选择Linux系统配置,然后使用SSH连接到服务器。

网道 bash 教程是开源的 bash 文档,教科书式的篇章划分能帮助学习者系统的了解终端命令。

tldr是社区维护的命令行工具帮助页面合集,支持在线查询终端命令,有不同平台选择,支持不同语言显示

基本语法

命令格式

组成部分格式示例说明
基本格式command [ arg1 ... [ argN ]]ls -lcommand是命令,后面跟参数
短参数-参数ls -l便于手动输入
长参数--参数名ls --list用在脚本中,可读性更好
多行命令命令 \ 续行内容echo foo \ bar使用反斜杠连接多行

命令分隔与组合

符号功能示例说明
;命令分隔符clear; ls顺序执行多个命令,不管前一个是否成功
&&逻辑与Command1 && Command2第一个命令成功后才执行第二个
||逻辑或Command1 || Command2第一个命令失败后才执行第二个

空格处理规则

情况处理方式示例说明
参数分隔用空格或Tab分隔echo foo barfoo和bar被认为是两个参数
多余空格自动忽略echo foo bar多个空格会被忽略为一个
路径含空格使用引号保护"C:\Program Files"防止路径被错误分割

type命令

用法命令示例输出说明
基本用法type 命令名echo is a shell builtin判断命令类型
查看所有定义type -a 命令名显示所有可能的定义一个命令可能有多种实现
返回类型type -t 命令名filebuiltinalias返回命令的具体类型

命令类型说明

类型英文说明示例
别名alias用户自定义的命令别名ll 通常是 ls -l 的别名
关键词keywordShell的保留关键字ifforwhile
函数function用户定义的Shell函数自定义函数
内置命令builtinShell内置的命令echocdpwd
外部文件file独立的可执行文件/bin/ls/usr/bin/grep

快捷键

常用快捷键

快捷键功能使用场景
Ctrl + L清除屏幕并将当前行移到页面顶部清理屏幕内容
Ctrl + C中止当前正在执行的命令停止运行中的程序
Shift + PageUp向上滚动查看历史输出
Shift + PageDown向下滚动查看历史输出
Ctrl + U从光标位置删除到行首快速删除命令开头部分
Ctrl + K从光标位置删除到行尾快速删除命令结尾部分
Ctrl + W删除光标位置前一个单词删除单个单词
Ctrl + D关闭 Shell 会话退出终端
浏览已执行命令的历史记录重复使用历史命令

自动补全功能

操作按键功能示例
命令补全Tab自动补全命令名输入 tou + Tab → touch
路径补全Tab自动补全文件路径输入部分路径 + Tab
显示选项Tab + Tab显示所有可能的补全选项当有多个匹配项时

文件增删改查

基本文件操作

操作类型命令示例说明
显示当前路径pwdpwd显示当前工作目录的完整路径
复制文件cp old.txt new.txtcp readme.txt backup.txt复制文件

CP命令参数详解

参数功能使用场景
-a将文件的特性一起复制完整复制文件属性
-p连同文件的属性一起复制,而非使用默认方式,与-a相似常用于备份
-i若目标文件已经存在时,在覆盖时会先询问操作的进行防止意外覆盖重要文件
-r递归持续复制用于目录的复制行为
-u目标文件与源文件有差异时才会复制增量备份

文件编辑

操作按键/命令说明
打开文件编辑vim 文件路径使用vim编辑器打开文件
进入编辑模式a在当前光标位置进入插入模式
退出编辑模式Esc回到命令模式
保存并退出:wq! + Enter强制保存并退出vim

文件权限详解

权限基础概念

Linux文件权限使用三位数字表示,每位数字代表不同用户组的权限:

  • 第一位:文件所有者(owner)的权限
  • 第二位:同组用户(group)的权限
  • 第三位:其他用户(others)的权限

权限数字含义

数字二进制权限组合说明
0000---无任何权限
1001--x仅执行权限
2010-w-仅写入权限
3011-wx写入+执行权限
4100r--仅读取权限
5101r-x读取+执行权限
6110rw-读取+写入权限
7111rwx读取+写入+执行权限(完全权限)

常用权限组合示例

权限码权限分布适用场景说明
644rw-r--r--普通文件所有者可读写,其他人只读
755rwxr-xr-x可执行文件/目录所有者完全权限,其他人可读可执行
777rwxrwxrwx临时文件所有人完全权限(不安全,少用)
600rw-------私密文件仅所有者可读写,其他人无权限
700rwx------私密目录仅所有者有完全权限
664rw-rw-r--共享文档所有者和组可读写,其他人只读

权限修改命令详解

命令格式示例说明
chmod 数字 文件chmod 644 file.txt使用数字设置权限
chmod u+rwx 文件chmod u+rwx script.sh给所有者添加读写执行权限
chmod g-w 文件chmod g-w file.txt移除组用户的写权限
chmod o=r 文件chmod o=r file.txt设置其他用户只有读权限
chmod -R 755 目录chmod -R 755 /var/www递归设置目录及其内容权限

符号说明

符号含义使用示例
uuser(所有者)chmod u+x file
ggroup(组)chmod g+w file
oothers(其他人)chmod o-r file
aall(所有人)chmod a+x file
+添加权限chmod +x file
-移除权限chmod -w file
=设置权限chmod u=rwx file

查看文件权限

命令示例输出说明
ls -l 文件名-rw-r--r-- 1 user group 1024 Dec 15 10:30 file.txt查看单个文件权限
ls -la列出所有文件(包括隐藏文件)的详细权限信息查看目录下所有文件权限
stat 文件名显示文件的详细状态信息,包括权限的八进制表示获取更详细的权限信息

权限输出解读示例

ls -l 输出 -rw-r--r-- 1 user group 1024 Dec 15 10:30 file.txt 为例:

部分含义解释
-文件类型-表示普通文件,d表示目录,l表示链接
rw-所有者权限可读可写,不可执行
r--组权限仅可读
r--其他人权限仅可读
user文件所有者用户名
group文件所属组组名

安全建议

权限设置安全级别建议使用场景
644安全普通文档、配置文件
755安全脚本、程序、目录
600/700高安全密钥文件、私人目录
666/777不安全仅在临时测试时使用,生产环境禁用
权限安全提醒
  • 避免使用777权限:所有用户都有完全权限,存在安全隐患
  • 私密文件使用600权限:如SSH密钥、密码文件等
  • 脚本文件使用755权限:确保可以执行,但不给其他用户写权限
  • 定期检查关键文件权限:确保系统安全

系统信息

功能命令说明常用参数
查看进程top实时显示系统进程和资源使用情况交互式界面,q退出
安装软件包dpkg -i 包名安装deb格式的软件包dpkg -i code_1.83.0-1696349969_arm64.deb
更新软件源apt-get update更新软件包列表通常在安装新软件前执行
查看磁盘空间df -h显示文件系统磁盘空间使用情况-h 以人类可读格式显示
系统运行时间uptime显示系统运行时长及平均负载显示当前时间、运行时长、用户数、负载
系统重启sudo reboot重新启动系统需要管理员权限

环境变量

环境变量就像"电子便利贴",电脑可以在上面记录一些重要信息(比如你的名字、文件路径等),任何程序都可以查看这些便利贴。

不同系统环境变量操作对比

特性Windows (PowerShell)Linux/Mac (Bash)说明
进程可见(临时)变量$env:VAR = "值"export VAR="值"其他程序可以通过os.getenv等方法访问
仅Shell可见(临时)变量$VAR = "值"VAR="值"其他程序看不到,关闭窗口后消失
纯数字设置$env:AGE = 30export AGE=30数字也以字符串形式存储
永久生效方法系统属性 → 环境变量写入 ~/.bashrc~/.zshrc重启后仍然生效
值含空格时必须加引号必须加引号避免空格引发歧义
特殊字符处理需引号保护需引号保护保护特殊字符不被解释
本质数据类型始终是字符串始终是字符串环境变量本质都是字符串

PowerShell特殊示例

# 启动两个微信登录界面(Windows路径含空格示例)
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe

端口管理

操作类型命令示例说明
查看端口占用netstat -tunlp | grep 端口号netstat -tunlp | grep 8080查看指定端口占用情况
查看端口占用lsof -i:端口号lsof -i:8080另一种查看端口占用的方法
杀掉端口进程kill -9 $(lsof -i tcp:端口号 -t)kill -9 $(lsof -i tcp:6022 -t)强制终止占用指定端口的进程
后台运行程序nohup 命令 &nohup python3 fast_api.py &程序在后台持续运行,不受终端关闭影响

远程连接

SSH连接

操作步骤命令/操作说明
SSH登录ssh linaro@192.168.3.55默认账户和密码都是 linaro

文件传输

  • 如果你想在本机和设备间文件传输,可以使用scp命令,在你的电脑上重新打开一个终端,输入对应的指令即可。
传输方向命令格式示例说明
本地→远程scp /path/to/local/file username@remote_host:/path/to/remote/directoryscp "Z:\test99.py" linaro@192.168.3.55:~/Downloads将本地文件复制到远程主机
远程→本地scp username@remote_host:/path/to/remote/file /path/to/local/directoryscp linaro@192.168.3.55:~/test.py ./将远程文件复制到本地
目录传输scp -r /path/to/local/directory username@remote_host:/path/to/remote/directoryscp -r ./myproject linaro@192.168.3.55:~/递归复制整个目录

特殊符号说明

符号含义示例
~用户主目录~/Downloads 表示用户主目录下的Downloads文件夹
-r递归选项用于复制目录及其内容

Linux版本信息

info

Linux 内核衍生版本众多,譬如 ubuntu、debian、centos、fedora、archlinux 等。

不同版本之间存在差异,譬如 ubuntu 大版本号之外,小版本号也很重要,此外有时候版本号和代号会混用,譬如 ros 2(一种机器人操作系统)只能使用 Ubuntu 的 noble 即 Ubuntu 24.04。

Ubuntu版本代号特殊说明
24.10oracular最新版本
24.04nobleROS 2 支持版本

有趣的命令行体验

终端娱乐命令

命令名称安装命令使用方法功能说明
hollywoodsudo apt-get install hollywoodhollywood让终端像好莱坞大片一样显示各种电脑参数
cowsaysudo apt-get install cowsaycowsay "消息内容"让一头牛说话,显示指定消息
fortunesudo apt-get install fortunefortune显示随机名言、谚语或幽默语句
lolcatsudo apt-get install lolcat命令 | lolcat将文本输出为彩虹颜色

命令组合示例

组合效果命令说明
彩色牛说谚语fortune | cowsay | lolcat结合三个命令:随机谚语 + 牛说话 + 彩色输出
退出娱乐模式Ctrl + CC表示Cancel(取消),退出当前运行的程序

重要概念说明

概念说明示例
sudo以超级用户(root)身份执行命令sudo apt-get install
susuper user(超级用户)sudo = su + do
do执行sudo = su + do
apt-get包管理器名称用于下载和安装软件包
管道符 |将前一个命令的输出作为后一个命令的输入command1 | command2

系统管理实战案例

案例1:系统状态报告和管理脚本

工作环境设置

操作类型命令说明
创建工作目录mkdir -p /tmp/system_report创建目录(包括父目录)
进入目录cd /tmp/system_report切换到工作目录
记录当前路径pwd > current_directory.txt将当前路径保存到文件
列出目录内容ls -l > directory_listing.txt详细列出文件和文件夹信息

系统和用户信息收集

信息类型命令说明
当前时间date > system_datetime.txt获取系统日期和时间
当前用户whoami > current_user.txt显示当前登录用户
内核版本uname -r > kernel_version.txt显示系统内核版本信息
root用户IDecho "Root user ID: $(id -u root)" > root_user_id.txt获取root用户的ID

文件和目录信息

操作命令说明
查看配置目录ls -l /etc > etc_directory_listing.txt列出/etc目录内容
查看文件权限ls -l /etc/passwd > file_permissions.txt检查passwd文件权限
修改文件权限chmod 644 /tmp/system_report/* > chmod_output.txt 2>&1设置文件权限为644(所有者读写,组用户和其他用户只读)

系统日志和资源信息

信息类型命令说明
内核消息dmesg > dmesg.log收集内核环形缓冲区消息
系统日志journalctl -xe > system_journal.log获取系统详细日志
运行时间uptime > uptime_info.txt系统运行时间和负载信息
文件类型file /etc/passwd > file_type.txt检查文件类型信息

磁盘和进程信息

信息类型命令说明
磁盘使用df -h > disk_usage.txt磁盘空间使用情况(人类可读格式)
进程列表ps -aux > process_list.txt显示所有进程信息
实时进程(批处理)top -b -n 1 > top_output.txt一次性获取top信息
htop信息htop -C -b -n 1 > htop_output.txt一次性获取htop信息

网络信息收集

信息类型命令说明
网络连接sudo netstat -tulnp > network_connections.txt显示当前网络连接状态

文件压缩和传输

操作命令说明
创建压缩包tar -czvf system_report.tar.gz *.txt *.log压缩所有文本和日志文件
发送给管理员scp system_report.tar.gz admin@example.com:/reports/通过scp传输报告文件

案例2:系统安全监控

安全监控命令

监控类型命令说明
失败登录记录grep "Failed password" /var/log/auth.log查找登录失败记录
活动用户w显示当前登录的用户
最后登录信息last显示用户登录历史
开放端口ss -tuln显示监听的端口
文件完整性find /etc -type f -exec md5sum {} \;检查配置文件完整性

Linux系统测试题库

单选题

题目选项正确答案
在Linux中,以下哪个命令用于查看当前目录的内容?A. cd B. ls C. pwd D. mkdirB
哪个命令用于在Linux中创建一个新目录?A. mkdir B. rmdir C. touch D. rmA
在Linux中,以下哪个命令用于删除文件?A. delete B. remove C. rm D. delC
哪个命令用于在Linux中查看文件内容?A. view B. cat C. see D. readB
在Linux中,以下哪个命令用于复制文件?A. copy B. cp C. duplicate D. cloneB
哪个命令用于在Linux中移动或重命名文件?A. move B. rename C. mv D. shiftC
在Linux中,以下哪个命令用于查看磁盘使用情况?A. disk B. df C. space D. usageB
哪个命令用于在Linux中查看当前运行的进程?A. processes B. ps C. running D. tasksB
在Linux中,以下哪个命令用于终止进程?A. stop B. end C. kill D. terminateC
哪个命令用于在Linux中压缩文件?A. compress B. zip C. tar D. packC

判断题

题目正确答案
在Linux中,pwd命令用于显示当前工作目录的路径。
chmod命令用于更改文件的权限。
exit命令用于退出当前Shell会话。
echo命令用于输出文本到终端。
tar命令可以用于压缩和解压文件。
在Linux中,kill命令只能终止当前用户的进程。
find命令只能搜索文件名,不能搜索目录。
crontab命令用于管理定时任务。
在Linux中,lsof命令用于列出打开的文件。
iptables命令用于配置文件权限。
在Linux中,ls命令用于列出目录中的文件。
Bash脚本中,注释行以#开头。
在Linux中,rm命令用于移动文件。
cd ..命令用于切换到上一级目录。
Linux中,/bin目录通常包含二进制可执行文件。
chmod命令用于修改文件的所有者。
在Linux中,man命令用于查看命令的手册页。
df -h命令用于查看磁盘空间使用情况。
ps命令用于显示当前系统的进程信息。
mkdir命令用于删除目录。

多选题

题目选项正确答案
以下哪些命令可以用于在Bash中定义和调用函数?A. func B. function C. () D. defB, C
在Bash中,以下哪些符号可以用于重定向标准输出?A. > B. >> C. < D. |A, B
以下哪些命令可以用于SSH登录到远程服务器?A. ssh B. scp C. sftp D. rsyncA, B, C
Bash脚本中,以下哪些符号用于逻辑运算?A. && B. || C. ! D. ==A, B, C
在SSH配置文件~/.ssh/config中,以下哪些选项可以用于配置主机?A. Host B. User C. Port D. PasswordA, B, C
Bash中,以下哪些命令可以用于文本处理?A. awk B. sed C. grep D. lsA, B, C
以下哪些命令可以用于查看和管理SSH密钥?A. ssh-keygen B. ssh-add C. ssh-agent D. ssh-copy-idA, B, C, D
在Bash中,以下哪些命令可以用于控制流操作?A. if B. for C. while D. switchA, B, C
以下哪些命令可以用于查看Bash中的环境变量?A. printenv B. env C. set D. exportA, B, C
在Bash中,以下哪些命令可以用于信号处理?A. trap B. kill C. sigaction D. signalA, B
在Linux中,以下哪些命令可以用于文件操作?A. cp B. mv C. rm D. all of the aboveA, B, C
以下哪些命令可以显示文件内容?A. cat B. less C. more D. tailA, B, C, D
以下哪些命令可以用于查看磁盘使用情况?A. df B. du C. ls D. topA, B
以下哪些命令可以用于搜索文件中的文本内容?A. grep B. find C. locate D. awkA, D
以下哪些命令可以用于网络管理?A. ifconfig B. ip C. ping D. netstatA, B, C, D
在Linux中,以下哪些命令可以用于进程管理?A. ps B. top C. kill D. all of the aboveA, B, C
以下哪些命令可以用于压缩和解压文件?A. tar B. gzip C. unzip D. zipA, B, C, D
在Linux中,以下哪些目录通常包含配置文件?A. /etc B. /var C. /home D. /usrA, D
以下哪些命令可以用于监控系统性能?A. top B. htop C. vmstat D. iostatA, B, C, D
在Linux中,以下哪些命令可以用于管理服务?A. systemctl B. service C. init D. all of the aboveA, B, C

重要提示

warning

终端的命令通过空格和反斜杠来区分参数或者换行,示例中的引号并不是字符串的引号,而是为了避免空格和反斜杠引发歧义。环境变量本质都是字符串,建议新手始终使用引号包裹环境变量。

不光是环境变量,其他命令的变量也遵循这个引号使用规则。正确理解和使用这些规则对于避免命令执行错误非常重要。