Linux命令行与脚本-01-Linux命令行入门:从零开始掌握Shell

全文摘要

本文将带你从零开始掌握Linux命令行,帮助你理解Shell的工作原理和核心概念。你将学到Linux文件系统的层次结构、基础命令的使用方法、命令行的参数与选项、以及如何高效地在终端中工作。通过阅读本文,你将掌握Linux系统管理的基础技能,为学习Shell脚本编程打下坚实基础。

全书总结

Linux命令行是系统管理员和开发者的必备技能,它提供了比图形界面更强大、更高效的系统操作方式。本文系统梳理了Linux系统的架构特点、文件系统的层次结构、Bash Shell的基本命令、文件与目录管理操作、命令行的参数与选项、以及环境变量的配置方法。从初学者的角度切入,涵盖了日常系统管理中最常用的核心命令。适合Linux初学者、运维工程师、后端开发者、以及对Unix-like系统感兴趣的技术人员阅读。


一、为什么学习Linux命令行?

在图形界面盛行的今天,为什么还要学习命令行?这是很多Linux初学者的第一个疑问。

flowchart TB
    subgraph GUI[图形界面GUI]
        G1[直观易用]
        G2[适合日常操作]
        G3[功能有限]
        G4[难以自动化]
    end

    subgraph CLI[命令行CLI]
        C1[功能强大]
        C2[高效灵活]
        C3[可脚本化]
        C4[远程管理便利]
    end

    GUI --> Comparison[适用场景对比]
    CLI --> Comparison

    style GUI fill:#e3f2fd
    style CLI fill:#fff9c4

图表讲解:这张图对比了图形界面和命令行的特点——理解这些差异有助于选择合适的工作方式。

**图形界面(GUI)**是现代操作系统的标配,它用窗口、菜单、图标等可视化元素让用户与系统交互。GUI的优势在于直观易学,适合日常的办公、娱乐等场景。点击鼠标就能打开文件,拖拽就能移动文件夹,这些操作对普通用户来说非常友好。但GUI也有局限:功能受到菜单和按钮的限制,无法执行系统提供的所有功能;难以自动化,重复性操作需要人工逐个执行;远程管理时传输大量图形数据,网络延迟高时体验差。

命令行界面(CLI)是通过文本命令与系统交互的方式。CLI的优势首先体现在功能完整性——系统提供的每一个功能都可以通过命令调用,没有”隐藏”的功能。其次CLI的效率极高——熟练的用户可以快速输入命令完成复杂操作,比鼠标点击快得多。更重要的是CLI的可脚本化——可以把一系列命令写成脚本文件,自动执行重复性任务。对于远程服务器管理,CLI只需要传输少量文本数据,在低带宽网络下也能流畅工作。

Linux服务器的管理几乎完全通过命令行完成。即使你使用桌面Linux,掌握命令行也能让你如虎添翼。很多服务器版本的Linux甚至不安装图形界面,因为命令行更节省资源、更稳定可靠。


二、Linux文件系统层次结构

理解Linux文件系统是学习命令行的第一步。Linux使用统一的层次化文件系统,所有资源都表示为文件。

flowchart TB
    Root[/ 根目录]

    Root --> Bin[/bin<br/>用户命令]
    Root --> Sbin[/sbin<br/>系统管理命令]
    Root --> Etc[/etc<br/>配置文件]
    Root --> Home[/home<br/>用户主目录]
    Root --> Var[/var<br/>可变数据]
    Root --> Usr[/usr<br/>用户程序]
    Root --> Opt[/opt<br/>可选软件]
    Root --> Tmp[/tmp<br/>临时文件]
    Root --> Dev[/dev<br/>设备文件]
    Root --> Proc[/proc<br/>进程信息]

    Home --> User1[~alice]
    Home --> User2[~bob]

    style Root fill:#ef5350
    style Bin fill:#42a5f5
    style Etc fill:#66bb6a
    style Home fill:#ffa726

图表讲解:这张图展示了Linux文件系统的标准层次结构——这是理解Linux文件组织方式的关键。

Linux文件系统的根是”/“(斜杠),所有文件和目录都在根之下。几个重要的目录需要牢记:

/bin(binary)存放普通用户可以执行的命令,如ls、cp、mv、cat等。这些是系统最基础的命令,无论什么用户都能使用。

/sbin(system binary)存放系统管理命令,如ifconfig、iptables、reboot等。这些命令通常需要root权限才能执行。

/etc存放系统配置文件。几乎所有系统和服务的配置都在这里:网络配置(/etc/network/)、用户信息(/etc/passwd)、软件包配置(/etc/apt/)等。修改配置时,/etc是你最常打交道的目录。

/home是普通用户的主目录。每个用户在/home下都有一个以用户名命名的目录,如/home/alice、/home/bob。用户对自己的主目录有完全权限,可以自由创建、修改、删除文件。~(波浪号)是主目录的快捷方式,~alice指代/home/alice。

/var(variable)存放可变数据,如日志文件(/var/log/)、缓存(/var/cache)、队列文件(/var/spool)等。这些文件在系统运行过程中会不断变化。

/usr(Unix System Resources)存放用户程序和数据。/usr/bin存放大量应用程序命令,/usr/lib存放库文件,/usr/share存放共享数据(如文档、图标)。

/tmp存放临时文件。系统和用户可以在/tmp中创建临时文件,系统重启时/tmp的内容会被清空。

/dev存放设备文件。Linux的哲学是”一切皆文件”,硬盘是/dev/sda,内存是/dev/mem,终端是/dev/tty。这让你可以用统一的命令行工具操作设备。

/proc是虚拟文件系统,提供内核和进程信息。/proc/cpuinfo显示CPU信息,/proc/meminfo显示内存使用,/proc/[PID]/显示进程PID的详细信息。


三、基础文件操作命令

掌握文件和目录管理是命令行使用的第一步。

文件列表与查看

flowchart TB
    Start[需要查看文件] --> Choice{查看类型?}

    Choice -->|简单列表| LS1[ls<br/>列出文件名]
    Choice -->|详细信息| LS2[ls -l<br/>长格式]
    Choice -->|所有文件| LS3[ls -a<br/>包括隐藏文件]
    Choice -->|文件大小| LS4[ls -lh<br/>人类可读]
    Choice -->|文件内容| Cat[cat<br/>显示全部]

    Cat --> Choice2{文件很大?}
    Choice2 -->|是| Less[less<br/>分页查看]
    Choice2 -->|否| Cat

    style LS2 fill:#e3f2fd
    style LS3 fill:#fff9c4
    style Less fill:#c8e6c9

图表讲解:这张图展示了查看文件的不同命令选择——根据需求选择合适的命令是高效使用命令行的关键。

ls(list)是最常用的命令之一,列出目录内容。单独的ls只显示非隐藏文件的文件名,按文件名排序。

ls -l以长格式显示,包含详细信息:

  • 文件类型和权限:drwxr-xr-x(d表示目录,rwx表示权限)
  • 硬链接数:文件被链接的次数
  • 所有者:文件所属用户
  • 所属组:文件所属组
  • 文件大小:字节数
  • 修改时间:最后修改的时间戳
  • 文件名

ls -a显示所有文件,包括以点开头的隐藏文件(如.bashrc)。Linux中以点开头的文件默认不显示,这是约定俗成的惯例。

ls -lh结合了-l(长格式)和-h(人类可读),文件大小以KB、MB、GB显示而非字节数,更易读。

cat(concatenate)连接并显示文件内容,适合查看小文件。但对于大文件,cat会一次性输出全部内容,屏幕滚动太快看不清。

less是分页查看器,可以上下滚动、搜索内容,非常适合查看大文件或日志文件。使用/搜索字符串、n跳到下一个匹配、q退出。

文件操作命令

flowchart LR
    subgraph FileOps[文件操作]
        direction TB
        Create[创建文件<br/>touch file.txt]
        Copy[复制文件<br/>cp src dst]
        Move[移动/重命名<br/>mv old new]
        Delete[删除文件<br/>rm file.txt]
        Link[创建链接<br/>ln -s src link]
    end

    subgraph DirOps[目录操作]
        direction TB
        Mkdir[创建目录<br/>mkdir dir]
        Rmdir[删除目录<br/>rmdir dir<br/>rmdir -p dir]
        Change[切换目录<br/>cd path]
        Print[打印当前目录<br/>pwd]
    end

    FileOps --> Usage[日常使用]
    DirOps --> Usage

    style Create fill:#e3f2fd
    style Copy fill:#fff9c4
    style Delete fill:#ffcdd2
    style Mkdir fill:#c8e6c9

图表讲解:这张图展示了文件和目录操作的常用命令——这些命令是最基本的文件管理工具。

touch创建空文件或更新文件的时间戳。touch newfile.txt创建一个空文件,touch existing.txt更新已有文件的时间戳为当前时间。

cp(copy)复制文件或目录。cp file1.txt file2.txt复制文件,cp -r dir1 dir2递归复制目录(-r recursive)。复制时可以指定目标目录或新文件名。

mv(move)移动或重命名文件。mv oldname.txt newname.txt重命名文件,mv file.txt /tmp/移动文件到/tmp目录。mv在同一文件系统内只是重命名,不涉及数据复制,速度很快。

rm(remove)删除文件。rm file.txt删除文件,rm -r directory递归删除目录及其内容。警告:rm删除的文件无法恢复,使用时要特别小心!建议新手使用rm -i(interactive),删除前会询问确认。

mkdir(make directory)创建目录。mkdir newdir创建目录,mkdir -p path/to/dir递归创建父目录(如果/path和/path/to不存在,会先创建它们)。

cd(change directory)切换目录。cd /etc切换到/etc目录,cd ~切换到用户主目录,cd ..切换到上级目录,cd -切换到上一个目录。

pwd(print working directory)显示当前工作目录的完整路径。当你”迷路”了,不知道当前在哪个目录时,pwd很有用。


四、命令行的参数与选项

Linux命令的强大在于其灵活的参数和选项系统。

flowchart TB
    subgraph Command[命令格式]
        direction TB
        Cmd[命令名称]
        Options[选项<br/>短选项: -l<br/>长选项: --all]
        Arguments[参数<br/>文件/目录/数据]
    end

    Cmd --> Options
    Options --> Arguments

    subgraph Example[示例:ls -l /etc]
        E1[命令:ls]
        E2[选项:-l]
        E3[参数:/etc]
    end

    style Cmd fill:#e3f2fd
    style Options fill:#fff9c4
    style Arguments fill:#c8e6c9

图表讲解:这张图展示了Linux命令的基本结构——理解命令格式是掌握命令行的关键。

Linux命令的基本格式是:命令 选项 参数

命令名称是要执行的程序名,如ls、cp、grep等。

选项(options,也叫flags)修改命令的行为。选项有两种形式:

  • 短选项:单个破折号加单个字母,如-l-a-h。可以组合:-la等同于-l -a
  • 长选项:双破折号加单词,如--all--human-readable--recursive。长选项更易读,但输入较长。

参数(arguments)是命令要操作的对象,如文件名、目录名、搜索字符串等。参数可以有多个,按空格分隔。

例如:ls -lh /home/user

  • 命令:ls
  • 选项:-lh(长格式+人类可读大小)
  • 参数:/home/user(要列出的目录)

通配符(wildcards)可以扩展参数:

  • *匹配任意多个字符:*.txt匹配所有.txt文件
  • ?匹配单个字符:file?.txt匹配file1.txt、fileA.txt等
  • []字符集:file[0-9].txt匹配file0.txt到file9.txt

例如:rm *.log删除所有.log文件,cp image?.png /tmp/复制image0.png到image9.png到/tmp。


五、命令历史与自动补全

熟练的命令行用户会大量使用命令历史和自动补全,提高输入效率。

flowchart TB
    subgraph History[命令历史]
        direction TB
        H1[上箭头<br/>上一条命令]
        H2[下箭头<br/>下一条命令]
        H3[Ctrl+R<br/>搜索历史]
        H4[history<br/>查看所有历史]
        H5[!n<br/>执行第n条命令]
    end

    subgraph Completion[自动补全]
        direction TB
        C1[Tab键<br/>补全命令/文件]
        C2[Tabx2<br/>列出所有可能]
        C3[Esc+. <br/>补全上一个参数]
    end

    History --> Skill[效率技能]
    Completion --> Skill

    style History fill:#e3f2fd
    style Completion fill:#fff9c4

图表讲解:这张图展示了命令历史和自动补全功能——掌握这些技巧能让你的命令行效率提升数倍。

命令历史让Bash shell记住你执行过的命令:

  • 上下箭头:上箭头回到上一条命令,下箭头前进。重复按可以遍历历史。
  • Ctrl+R:反向搜索历史,输入命令的一部分后按Ctrl+R,会找到匹配的历史命令。
  • history:显示所有命令历史,每条命令有编号。!100执行第100条命令,!!执行上一条命令。
  • Ctrl+ A:跳到命令开头,Ctrl+ E:跳到命令结尾,方便编辑。

自动补全是省时的利器:

  • Tab键:输入命令或文件名的一部分后按Tab,Bash会自动补全。如果有多个匹配,再按一次Tab会列出所有可能。
  • Tab×2:按两次Tab会列出所有可能的补全选项,当不记得确切的文件名时很有用。
  • Esc+ .:自动补全上一个命令的最后一个参数,例如cat /path/to/long/file.txt后输入rm 然后按Esc+.,会自动填入/path/to/long/file.txt。

这些技巧看起来简单,但熟练使用后能极大地提高效率。想象一下,输入docker后按Tab补全为docker-compose,再按Tab补全配置文件名,比逐字输入快得多。


六、环境变量与Shell配置

环境变量是影响程序行为的配置项,理解它们对定制Shell环境很重要。

flowchart TB
    subgraph EnvTypes[环境变量类型]
        direction TB
        Global[全局环境变量<br/>所有进程可见]
        Local[局部环境变量<br/>当前Shell可见]
        Shell[Shell变量<br/>当前Shell内部]
    end

    subgraph Common[常用环境变量]
        PATH[PATH<br/>命令搜索路径]
        HOME[HOME<br/>用户主目录]
        USER[USER<br/>当前用户名]
        SHELL[SHELL<br/>当前Shell]
        EDITOR[EDITOR<br/>默认编辑器]
    end

    EnvTypes --> Usage[配置方法]
    Common --> Usage

    style Global fill:#e3f2fd
    style Local fill:#fff9c4
    style PATH fill:#ef5350

图表讲解:这张图展示了环境变量的类型和常用变量——环境变量是定制Linux系统的关键机制。

环境变量是存储配置信息的命名值,分为:

  • 全局环境变量:子进程会继承,通常在~/.bashrc或/etc/profile中设置
  • 局部环境变量:只在当前Shell中有效
  • Shell变量:Bash内部使用的变量,不会导出给子进程

几个关键的环境变量: PATH是最重要的环境变量之一,它定义了命令搜索的路径。当你输入ls时,Bash会在PATH指定的目录中查找ls命令。PATH由冒号分隔的目录列表组成,如/usr/local/bin:/usr/bin:/bin。当你安装新软件到自定义路径时,需要把该路径添加到PATH。

HOME指定用户的主目录,cd ~时会切换到这里。USER是当前用户名,SHELL是默认Shell的路径(如/bin/bash)。EDITOR指定默认的文本编辑器,很多命令(如crontab -e)会使用EDITOR指定的编辑器。

设置环境变量

  • VAR=value设置局部变量
  • export VAR=value设置全局环境变量
  • echo $VAR查看变量的值

配置文件

  • ~/.bashrc:每次启动交互式Shell时执行,在这里设置别名、函数、提示符
  • ~/.bash_profile:登录时执行,用于设置环境变量
  • /etc/environment:系统级环境变量,影响所有用户

结语

Linux命令行不是神秘的黑魔法,而是可以通过系统学习掌握的实用技能。从理解文件系统结构开始,到掌握基础命令、参数选项、历史补全,每一步都为你打开新的可能性。

命令行的价值在于:

  • 效率:熟练后比图形界面快得多
  • 能力:可以执行GUI无法实现的操作
  • 自动化:通过脚本自动执行重复性任务
  • 远程管理:管理服务器不可或缺

接下来的系列文章将深入更多主题:文件权限管理、进程监控、软件安装、Shell脚本编程等。每一篇都会建立在之前的 knowledge 基础上,逐步构建完整的Linux系统管理技能体系。

记住:命令行的掌握需要练习。每天使用Linux系统,尝试用命令完成日常任务,遇到问题时用man命令查看手册,慢慢你就能感受到命令行的强大。


常见问题解答

Q1:绝对路径和相对路径有什么区别?

:绝对路径从根目录(/)开始,完整描述文件的位置,如/home/user/document.txt。无论当前在哪个目录,绝对路径都能唯一确定文件。

相对路径从当前目录开始,..表示上级目录,.表示当前目录。如document.txt指当前目录的document.txt,../file.txt指上级目录的file.txt。相对路径更简洁,但不稳定——切换目录后,同样的相对路径可能指向不同的文件。

在脚本中推荐使用绝对路径,避免歧义。命令行操作时,相对路径更方便。


Q2:隐藏文件和隐藏目录是怎么命名的?

:Linux中以点开头的文件或目录是隐藏的,如.bashrc、.config/、.ssh/。这是约定俗成的惯例,ls命令默认不显示它们(需要用-a选项才能看到)。

隐藏文件通常存放配置文件,避免用户误操作或让目录更整洁。你自己的配置文件可以放在~(主目录)下,以点开头隐藏起来。要创建隐藏目录,mkdir .secret即可。

要查看隐藏文件,ls -als -la(a表示all,显示所有文件包括隐藏文件,l表示long格式)。


Q3:如何查看命令的帮助文档?

:Linux有多个帮助命令:(1)man command:显示命令的手册页,是最详细的文档。按空格翻页,q退出。例如man ls查看ls的完整手册。(2)command --help:显示命令的简要帮助和选项列表。(3)info command:GNU项目使用的info文档,比man更详细,但导航复杂。(4)whatis command:简要描述命令的功能。(5)apropos keyword:搜索与关键词相关的命令。

初学者推荐先用command --help快速查看选项,需要详细信息时用man


Q4:rm删除的文件能恢复吗?

:通常不能。rm命令直接删除文件,不放入回收站,无法恢复。这是命令行的”危险”之处——误删的文件可能永久丢失。

为了安全,可以:(1)使用rm -i选项,删除前会询问确认;(2)创建rm的别名,默认使用-i选项:alias rm='rm -i';(3)使用专门的”回收站”工具,如trash-cli,提供类似Windows回收站的功能。

要删除目录,rm -r会递归删除目录及其所有内容,非常危险!建议使用rm -ri,删除每个文件前都确认。对于重要文件,操作前最好备份。


Q5:Tab补全不工作怎么办?

:Tab补全依赖bash-completion软件包。如果不工作,首先确认已安装:(1)Debian/Ubuntu:sudo apt-get install bash-completion;(2)RHEL/CentOS:sudo yum install bash-completion

安装后需要在~/.bashrc中添加source /etc/bash-completion(如果还没有的话),然后执行source ~/.bashrc或重新登录。

如果特定命令的补全不工作,可能该命令没有提供补全脚本。检查/usr/share/bash-completion/completions/目录下是否有该命令的补全文件。很多软件包安装时会自动安装补全脚本,但有些需要额外配置(如Docker需要source /etc/bash_completion.d/docker)。


更新时间:2026年3月2日 作者:Linux技术专栏 标签:#Linux 命令行 Bash Shell 文件管理