Linux 命令行基础

这一篇我们从零开始,认识终端、命令的格式,学会最基本的"走路"——知道自己在哪里、怎么列文件、怎么切换目录、怎么建目录建文件。这是后续所有命令的基础。

1. 终端、Shell、提示符

终端(Terminal)是一个让你输入文字命令的程序窗口;Shell是终端背后真正解释并执行这些命令的程序,最常用的是 bash(Bourne Again Shell)。打开终端(Linux 上 Ctrl+Alt+T),你会看到一行提示符,光标闪烁等待你输入。

# pwd:print working directory,显示当前所在目录的绝对路径
pwd
# /home/aden

# 终端提示符长这样:
#   aden@ubuntu:~/projects$
#   |     |     |  |
#   |     |     |  当前目录(~ 表示主目录)
#   |     |     主机名
#   当前用户 @

# $ 表示普通用户,# 表示 root(管理员)

提示符末尾的 $ 表示你是普通用户;如果是 #,说明你是 root(管理员,权限最大,误操作也最危险)。日常尽量用普通账号,需要时再用 sudo 临时提权。

2. 命令的通用格式

几乎所有 Linux 命令都遵循这个格式:

命令名 [选项] [参数]

例如 ls -l /etc 里,ls 是命令名,-l 是选项(option,通常以 - 开头,改变命令的行为),/etc 是参数(作用对象)。多个选项可以合并:ls -l -a -h 等于 ls -lah

3. pwd:我在哪

pwd 是 "print working directory" 的缩写,告诉你当前所在目录的绝对路径。新手最容易"迷路",pwd 就是问路的第一步。

# pwd:print working directory,显示当前所在目录的绝对路径
pwd
# /home/aden

# 终端提示符长这样:
#   aden@ubuntu:~/projects$
#   |     |     |  |
#   |     |     |  当前目录(~ 表示主目录)
#   |     |     主机名
#   当前用户 @

# $ 表示普通用户,# 表示 root(管理员)

4. ls:列出目录内容

ls 是 "list" 的缩写,使用频率可能比任何命令都高。常用选项:

# ls:list,列出目录内容
ls                   # 仅列出文件名
ls -l                # 长格式:权限、所有者、大小、时间
ls -a                # all:含隐藏文件(以 . 开头的)
ls -h                # human-readable:文件大小用 K/M/G
ls -lah              # 三个选项组合(最常用)
ls -lt               # 按修改时间排序(新的在前)
ls -lS               # 按文件大小排序(大的在前)
ls -lr               # 反向排序
ls /etc              # 列出指定目录的内容
ls *.txt             # 通配符:所有 .txt 文件

看懂 ls -lah 的输出是基本功,每一列都有含义:

# ls -lah 的输出解读(每行一个文件)
total 48K
drwxr-xr-x  3 aden aden 4.0K Aug  5 10:22  .
drwxr-xr-x 30 aden aden 4.0K Aug  5 09:00  ..
-rw-r--r--  1 aden aden  220 Aug  5 10:00  hello.txt
-rwxr-xr-x  1 aden aden  84K Aug  4 18:30  deploy.sh
drwxr-xr-x  2 aden aden 4.0K Aug  3 14:11  src

# 第 1 列:文件类型 + 权限(d=目录, -=普通文件, l=链接)
# 第 2 列:链接数
# 第 3、4 列:所有者、所属组
# 第 5 列:大小
# 第 6-8 列:修改时间
# 第 9 列:文件名

第一列第一个字符表示文件类型:- 是普通文件,d 是目录,l 是软链接。后面 9 位是权限位,下一篇权限专门讲。

5. cd:切换目录

cd 是 "change directory" 的缩写。掌握它的关键是理解绝对路径相对路径

# cd:change directory,切换目录
cd /home/aden/projects   # 绝对路径(从根 / 开始)
cd projects              # 相对路径(从当前目录开始)
cd ..                    # 上一级目录(两个点)
cd .                     # 当前目录(一个点,几乎不用)
cd ~                     # 回主目录(~ 是 home 的简写)
cd                       # 不带参数,也回主目录
cd -                     # 回到上一次所在的目录(来回切换神器)
cd ../..                 # 上两级
cd ~/Documents           # 主目录下的 Documents

几个高频技巧:

6. mkdir 与 touch:创建目录和文件

mkdir 是 "make directory",touch 本意是"摸一下"文件来更新时间戳,但最常用来创建空文件。

# mkdir:make directory,创建目录
mkdir photos             # 创建一个名为 photos 的目录
mkdir a b c              # 一次创建多个
mkdir -p parent/child/grand   # -p:父目录不存在就一起建(常用)

# 不加 -p,父目录不存在会报错
mkdir nope/sub
# mkdir: cannot create directory 'nope/sub': No such file or directory

# touch:创建空文件,或更新已有文件的时间戳
touch notes.txt          # 创建空文件(或刷新访问时间)
touch a.txt b.txt c.txt  # 一次创建多个

mkdir -p 是高频选项:一次性建多级目录而不会因为父目录不存在报错,在写脚本时几乎必加。

7. 绝对路径、相对路径、通配符

把这些概念一次讲清楚,后面所有命令都依赖它:

# 绝对路径 vs 相对路径

# 绝对路径:从根目录 / 开始,唯一确定,任何位置都能用
cat /etc/hostname
cd /var/log

# 相对路径:从当前目录开始,取决于你在哪
cd projects              # 当前目录下必须有 projects
cat ../shared/config.yml # 上一级里的 shared 目录

# 两个特殊目录:
#   .   当前目录
#   ..  上一级目录
#   ~   主目录(等于 /home/用户名)

# 通配符(wildcard)
ls *.py                  # 所有 .py 文件
ls test?.txt             # test1.txt、test2.txt……(? 匹配单字符)
ls [abc].md              # a.md、b.md、c.md([] 匹配其中之一)

通配符(wildcard)是命令行的杀手锏:* 匹配任意长度字符,? 匹配单个字符,[abc] 匹配方括号里任一字符。批量操作时离不开它,比如 rm *.log 一次删所有日志、cp *.jpg photos/ 一次复制所有图片。

8. 三个提速神器

9. man:命令自带的说明书

忘了某个命令怎么用,不要急着搜百度,先用 man(manual 的缩写):

小结

这一篇你学会了"走路":pwd 知道在哪、ls 看周围有什么、cd 切换位置、mkdirtouch 创建目录和文件、Tab 键补全加速。下一篇我们学文件操作——复制、移动、删除、查看内容。

← 上一篇 Linux 简介

下一篇 Linux 文件操作

✈️💬