Skip to main content

Terminal

Terminals

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

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

WSL

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

info

WSL的安装可以是通过命令在线安装,安装完成后,您需要为 Linux 环境创建一个用户名和密码。(Linux环境中密码不显示长度)

如果网络不畅,也可以让其他安装好的人,导出为文件,再导入即可。(记得索要root密码哦)

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

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

# 安装默认的 Ubuntu Linux 发行版。
wsl --install

# 导出发行版
wsl --export <你的Ubuntu发行版名称> <导出的文件路径>.tar
# 示例:wsl --export Ubuntu-24.04 ubuntu-24.04-wsl-ros2.tar

# 从文件导入
wsl --import <新实例的名称> C:\<新实例的文件夹> <压缩包的完整路径>
# 示例:wsl --import Ubuntu-ROS2 C:\WSL_ROS2 D:\windows_app\systools\ubuntu-24.04-wsl-ros2.tar

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

# 启动指定wsl
wsl -d <新实例的名称>
# 示例:wsl -d Ubuntu-ROS2

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

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

不同版本之间存在差异,譬如 ubuntu 大版本号之外,小版本号也很重要,此外有时候版本号和代号会混用

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

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

有趣的命令行体验

终端娱乐命令

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

命令组合示例:fortune | cowsay | lolcat

  • sudo:以超级用户身份执行命令( su 表示 super user(超级用户) do 表示 执行)

如果不希望每次都输入sudo,可以切换到有权限的用户。

  • su 用户名表示切换到该用户,如果不填用户名sudo su 则默认切换到root

  • 管道符 | 将前一个命令的输出作为后一个命令的输入 ,示例 command1 | command2 |

基本语法

命令格式

组成部分格式示例说明
基本格式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递归选项用于复制目录及其内容

变量设置

export A="1 2 3"

warning

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

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