一、初步进入Linux世界

系统的认识

一般我们常见的个人 PC系统是Windows系统,该系统能实现:鼠标能点、键盘能输入内容、阅读、看电影、安装软件等等功能,实现人机交互

世界上目前流行的电脑系统:

  1. Windows -> 微软

  2. Linux

  3. Unix

Linux概述

Linux是一种自由和开放源码类UNIX操作系统。Linux内核是由林纳斯·托瓦兹于1991年10月5日首次发布。(起因是林纳斯认对他使用的一个类 UNIX 操作系统 MINIX 十分不满,因为当时 MINIX 仅可用于教育但不允许任何商业用途。于是他在他的大学时期编写并发布了自己的操作系统,也就是后来所谓的 “Linux 内核”,成为了如今各类 Linux 发行版的基础。并将源码公布于网络,将Linux 开源,供大家免费使用。)

Android系统是基于Linus系统而开发出来的,而Android系统也是开源的,所以各大手机厂商都可以根据Android源码做出更改和扩展,做出属于自己的东西,如小米的MIUI、VIVO的OriginOS、OPPO的ColorOS等。

类似地,基于Linux内核开发出的各种Linux系统,称为Linux发行版。如:Debian、Ubuntu、RedHat、fedora、CentOS、ArchLinux等等。

二、Linux发行版的安装和使用

  • 基本说明:学习Linux需要一个环境,所以我们需要安装Linux系统。有三种方式可以选择

    1. 创建虚拟机,在虚拟机上安装Linux系统(VMware Workstation Pro安装CentOS 7教程)

    2. 购买云服务器并安装Linux系统来进行学习

    3. 在实体机上安装Linux系统

虚拟机网络连接的三种模式

img

  1. 使用桥接模式:我们创建的虚拟机会实际拥有一个和实体机同一个网段的公网IP地址。这时候虚拟机可以和同一个网段内的实体机进行通信。例如,若实体机公网IP网关为192.168.10.0,主机IP为192.168.10.20,我们所创建的虚拟机也会随机分配一个同网关的IP,如192.168.10.22。

  2. 使用NAT模式:VMware的DHCP服务器分配给虚拟机一个内网IP地址(与实体机不是同一个网段),同时也会分配给实体机一个和虚拟机同网段的虚拟IP,用于实体机和虚拟机之间的通信。这时虚拟机可以访问外网,但是外网无法直接访问虚拟机。

  3. 仅主机模式:虚拟机只能和实体机通信,无法访问外网。

桥接模式(Bridged)

🌟 特点

  • 虚拟机与物理机处于同一网络(局域网),相当于直接连接到物理网络。
  • 虚拟机可以获取与物理机相同网段的 IP 地址(由路由器或 DHCP 服务器分配)。
  • 虚拟机与外网、局域网中的其他设备可以互相访问,与一台真实电脑无异。
  • 需要物理机的网络正常工作,虚拟机才能联网

📌 适用场景

✅ 需要让虚拟机像一台独立的计算机,可被局域网内其他设备访问,例如:

  • 在虚拟机上搭建 Web 服务器、数据库服务器等,需要被局域网或互联网访问。
  • 需要让虚拟机使用与物理机相同的网关和 IP 分配方式(DHCP 或静态 IP)。
  • 在公司/学校的局域网中,希望虚拟机能像普通电脑一样访问内部资源。

NAT 模式(Network Address Translation,网络地址转换)

🌟 特点

  • 虚拟机可以访问外网,但外网无法直接访问虚拟机(VMware 充当 NAT 路由器)。
  • 虚拟机的 IP 由 VMware 自己的 DHCP 服务器分配,通常是 192.168.XXX.XXX与物理机不同网段
  • 所有虚拟机共享物理机的 IP 地址访问外网,就像一台设备连接路由器一样。

📌 适用场景

✅ 适用于只需要访问外网,但不希望虚拟机被外部访问的情况,例如:

  • 在虚拟机上安装和测试软件,需要联网但不需要其他设备访问它。
  • 适用于公司/学校等有严格网络限制的环境,防止虚拟机暴露在局域网中。

仅主机模式(Host-Only)

🌟 特点

  • 虚拟机只能与物理机通信,无法访问外网
  • 虚拟机 IP 由 VMware 的 DHCP 服务器分配,通常在 192.168.56.XXX(VMnet1)。
  • 与物理机建立一个“私有局域网”,其他外部设备无法访问虚拟机。
  • 适用于封闭式环境,如软件开发和测试。

📌 适用场景

✅ 适用于不需要互联网,只需要与物理机通信的情况,例如:

  • 测试本地网络服务,如数据库、Web 服务器等。
  • 多台虚拟机 之间需要通信,但不希望它们访问互联网。
  • 搭建离线环境(如模拟内部企业网络)。

安装vmtools

  • 介绍
  1. vmtools可以让我们在windos下更好地管理VMware虚拟机
  2. 可以设置windows和centOS的共享文件夹,即让实体机和虚拟机可以访问相同的文件夹。
  • 安装步骤

安装VMware Tools需要有gcc。我们在安装虚拟机时若选择了安装“开发工具”就会有gcc,如果没选择就需要先自行安装gcc。

  1. 打开VMware,进入centOS,点击VMware上方菜单栏中的”虚拟机(M)“选项,点击”重新安装VMware Tools“。
img

1.1 此处如果”重新安装VMware Tools“按钮是灰色的,无法点击。则先关闭虚拟机,然后点击””编辑虚拟机设置”。

img

日常不需要使用虚拟机时,可以选择“挂起客户机”,而不用关机,下次开启虚拟机时会和挂起前的虚拟机状态一样

img

1.2 在虚拟机设置中选择CD/DVD(IDE)选项,然后选择“使用物理驱动器”。重新启动虚拟机,使用root用户进行登录,重新安装VMware Tools。

img
  1. 重新安装VMware Tools后,出现下面的光盘。
img
  1. 双击打开该光盘后,会得到下面的几个文件。
img
  1. 将图片中第三个,以.tar.gz结尾的文件右击复制,然后粘贴到桌面。
img
  1. 在桌面上单击鼠标右键,点击“Open Terminal”,打开一个终端。
img
  1. 然后依次输入以下命令(没输入一条命令就按一次回车)。我们移动到Desktop文件夹下,可以看到我们刚刚复制到桌面的文件。
1
2
3
4
5
6
7
[root@ryan ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
[root@ryan ~]# cd Desktop/
[root@ryan Desktop]# ls
VMwareTools-10.3.23-16594550.tar.gz
[root@ryan Desktop]#

[root@ryan ~]# 解析:

root:用户名

ryan:计算机名

~:表示当前在home目录下,即该位置放的是目录名

#:输入命令提示符,即在#号后面,是用户输入的命令行

Linux 命令行(Command Line Interface,CLI)是用户与 Linux 操作系统交互的重要方式,主要通过 终端(Terminal)Shell 运行命令来管理系统、处理文件、执行程序等。

命令ls:显示当前目录下有哪些文件夹或文件

命令cd:进入到指定的文件夹中

  1. 输入以下命令解压缩该文件。
1
[root@ryan Desktop]# tar zxvf VMwareTools-10.3.23-16594550.tar.gz 

文件名很长,我们可以先输入VM两个字母,然后按tab键,就会自动补全文件名。

  1. 解压缩后输入ls,可以发现多了一个文件夹。
1
2
3
[root@ryan Desktop]# ls
VMwareTools-10.3.23-16594550.tar.gz vmware-tools-distrib
[root@ryan Desktop]#
  1. 使用cd命令进入该文件夹,文件名补全方式如之前的操作一致。
1
2
3
4
[root@ryan Desktop]# cd vmware-tools-distrib/
[root@ryan vmware-tools-distrib]# ls
bin caf doc etc FILES INSTALL installer lib vgauth vmware-install.pl
[root@ryan vmware-tools-distrib]#
  1. 执行 vmware-install.pl这个文件(使用了root用户登录可使用下面的命令进行执行)
1
[root@ryan vmware-tools-distrib]# ./vmware-install.pl

没有使用root用户登录的可使用下面的命令进行执行:

1
[root@ryan vmware-tools-distrib]# sudo ./vmware-install.pl

使用sudo代表使用管理员权限进行操作,回车后会需要输入密码,直接在键盘上输入密码即可,密码在终端上是不显示的,输入完密码后点击回车即可。

  1. 输入完命令后,下面所有操作都直接回车,直到出现最后一个选项Would you like to recover the wasted disk space by uninstalling VMware Tools at this time? (yes/no) [yes] ,这里要输入NO,然后回车。(下面截取的是执行成功后的一小部分片段)
1
2
3
4
5
6
7
8
9
10
11
12
13
VMware Tools installed on top of open-vm-tools has not added anything of 
significance or potential benefit. VMware Tools is not needed.

Would you like to recover the wasted disk space by uninstalling VMware Tools at
this time? (yes/no) [yes] no

INPUT: [no]

Enjoy,

--the VMware team

[root@ryan vmware-tools-distrib]#

出现 --the VMware team,就表示安装成功了

  1. 安装成功后,刚才桌面上的两个文件就可以删掉了。

设置共享文件夹

  1. 先在实体机创建一个文件夹。在该文件夹中随便创建一个文件。

  2. 回到VMware,鼠标右键虚拟机,点击设置。

img
  1. 进入设置选项卡后点击上方的“选项”。进入“选项”卡界面,点击“共享文件夹”,选择“总是启用”,然后在下方的“文件夹”选项中点击添加,将刚才在实体机创建的文件夹添加进来,最后点击确定。
img
  1. 在虚拟机中查看该文件夹。进入虚拟机,打开文件管理器。点击“Other Locations”后,点击”Computer”。
img
  1. 进入后,点击”mnt”文件夹,进入后点击”hgfs”文件夹,进入后就能看到我们共享的文件夹了。
img img img

windows和虚拟机centOS可以通过创建共享文件夹来实现文件共享,但是在实际开发中,文件的上传下载是需要使用远程方式来实现的。

三、Linux的目录结构

  • 基本介绍
  1. Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录。

  2. Linux中经典的一句话:在Linux中,一切皆文件

  3. Linux文件系统层次结构图:

img

Linux目录结构详解

  • /bin (/ust/bin、/usr/local/bin):是binary的缩写,这个目录存放着最常用的命令。
  • /sbin(/usr/sbin、/usr/local/sbin):s就是super user,这个目录存放的是系统管理员使用的系统管理程序。
  • /home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号名命名的。如下,进入到home目录下使用ls命令进行查看,其中ryantwo就是我安装centOS时配置的普通用户的用户名。
1
2
3
[root@ryan home]# ls
ryantwo
[root@ryan home]#
  • /root:该目录为系统管理员,也称为超级权限者的用户主目录。

  • /lib:系统开机所需要的最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found:(这个在上方的图片中没有,因为这个是一个隐藏文件,在Linux中的根目录下是存在的)这个目录一般情况下是空的,当系统非法关机时,这里就存放了一些文件。

  • /etc:所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库,my.conf会存放在该目录下

  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录。

  • /boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

  • /proc:这个目录是一个虚拟目录,它是系统内存的映射,访问这个目录来获取系统信息(不要随意尝试更改该目录中的内容)

  • /srv:service缩写,该目录存放一些服务启动后需要提取的数据。(不要随意尝试更改该目录中的内容)

  • /sys:这是Linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。(不要随意尝试更改该目录中的内容)

  • /tmp:这个目录用来存放一些临时文件

  • /dev:类似于Windows的设备管理器,把所有的硬件用文件的形式存储

  • /media:Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别到后,Linux会把识别到的设备挂载到该目录下。

例如在安装有Windows系统的的电脑上插入一个U盘,我们可以在文件资源管理器中发现多了一个该U盘的盘符,而不是将该U盘放到已有的盘符如C盘、D盘中。

  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看其中的内容了。如之前创建的共享文件夹:E:\VM\share。

  • /opt:这是给主机额外安装软件所存放的目录。如要安装oracle数据库,可以先把安装包放到该目录下,然后再进行安装操作(这一般是约定俗成的操作)。默认为空。

  • /usr/local:这个是另一个给主机额外安装软件时该软件程序文件存放的目录。一般是通过编译源码方式安装的程序。

  • /var:这个目录中存放着再不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。

  • /selinux:security-enhanced linux,(这个目录需要启用才能看到)SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作方式,可以自行设置。

四、Linux命令行概念

Linux 命令行(Command Line Interface,CLI) 是一种通过文本输入命令来操作系统的方式。相比图形界面(GUI),命令行提供了更强大的控制能力,适用于 服务器管理、自动化任务、开发、运维 等工作。

Linux命令大全(手册):Linux命令是非常多的,我们需要使用时可以进行查询


终端(Terminal)与 Shell

在 Linux 中,命令行是通过 终端(Terminal) 访问的,而 Shell 是解析用户命令的程序,常见的 Shell 包括:

  • Bash(默认 Shell):大多数 Linux 发行版默认使用的 Shell。
  • Zsh:功能强大的 Shell,支持自动补全、插件等。
  • Fish:更易用的交互式 Shell。
  • Sh:最基本的 Shell,功能较少。

你可以通过以下命令查看当前使用的 Shell:

1
echo $SHELL

如果返回:

1
/bin/bash

说明当前使用的是 Bash

使用命令行要特别注意各参数之间的空格

五、远程登录到Linux服务器

为什么需要远程登录服务器

  1. 在实际开发中,Linux服务器是开发小组共享的
  2. 正式上线的项目是运行在公网的
  3. 因此程序员需要远程登录到Linux进行项目管理和开发
  4. 远程登录客户端有Xshell、Xftp等

使用Xshell远程连接Linux

  1. 在虚拟机中打开一个终端Terminal,然后输入ifconfig来获取虚拟机的IP地址。
img
  1. 安装好Xshell并打开。
  2. 点击左上角的”文件“,然后点击”新建“。
img
  1. 填写名称,协议选择SSH,主机就填写刚才得到的虚拟机的IP地址,端口号选择22,最后点击连接。
img
  1. 在弹出的SSH安全警告中选择”接受并保存“,接下来就输入登录账户名密码即可。

远程上传下载文件 - Xftp

  • 介绍

Xftp是一个基于windows平台的功能强大的SFTP、FTP文件传输软件。使用了Xftp以后,Windows用户能安全地在UNIX/Linux和Windows之间传输文件。

  1. 安装并运行Xftp。

  2. 点击左上角的”新建”,填写名称,主机填写虚拟机的IP地址,协议选择SFTP,端口号依旧是22,然后点击连接。

img
  1. 然后输入要登录的用户名和密码即可。
img
  1. 传输文件,右边Linux系统用鼠标点击进入要保存传输文件的目录下,然后在左边Windows中找到要传输的文件,鼠标右键该文件,点击第一个“传输”即可。
img
  • 细节讨论:如何处理Xftp中文乱码问题。
  1. 打开Xftp,点击上方菜单栏中的“属性”。
img
  1. 在打开的属性弹窗中点击上方菜单栏的“选项”,将“编码”选项更改为“Unicode(UTF-8)”,最后点击”确定”即可。
img

六、 Vim 基本介绍

🔹 什么是 Vim?

Vim(Vi IMproved)Vi 编辑器的增强版,(vi是所有Linux发行版默认的文本编辑器)是 Linux 和 macOS 上常用的 文本编辑器。它功能强大,支持 语法高亮、查找替换、多级撤销、插件扩展 等,适用于程序员和系统管理员。


1️⃣ Vim 的三种模式

Vim 主要有 三种模式

模式 作用 进入方法
普通模式(Normal Mode) 用于 浏览操作文本 启动 Vim 或按 Esc
插入模式(Insert Mode) 用于 输入文本 i / a / o
命令模式(Command Mode) 用于 保存、查找、替换等 在普通模式下按 :

2️⃣ Vim 的基本操作

📌 启动 Vim

1
[root@ryan home]# vim 文件名
  • 如果文件已存在,Vim 会打开文件
  • 如果文件不存在,Vim 会新建一个文件

📌 进入插入模式(编辑文本)

按以下键之一:

按键 作用
i 在光标前插入
a 在光标后插入
o 在下一行插入新行
I 在当前行行首插入
A 在当前行行尾插入

📌 退出 Vim

命令 作用
:q 退出(如果文件未修改)
:q! 强制退出(不保存)
:w 只保存,不退出
:wqZZ 保存并退出
:x 保存并退出(仅在修改过内容时保存)

📌 在普通模式下移动光标

按键 作用
h 左移
l 右移
j 下移
k 上移
gg 移动到文件首行
G 移动到文件末行
nG 移动到第 n
0 移动到行首
^ 移动到行首(跳过空格)
$ 移动到行尾

📌 复制、粘贴、删除

按键 作用
yy 复制当前行
p 粘贴到光标后
dd 删除当前行
x 删除当前字符
dw 删除一个单词
u 撤销
Ctrl + r 反撤销

📌 搜索与替换

命令 作用
/关键字 向下搜索
?关键字 向上搜索
n 跳到下一个匹配项
N 跳到上一个匹配项
:%s/旧/新/g 替换文件中所有
:n,m s/旧/新/g 替换 nm 行的

3️⃣ Vim 配置(举例)

可以在 ~/.vimrc 中添加个性化配置:

1
2
3
4
bash复制编辑set number       " 显示行号
set autoindent " 自动缩进
set tabstop=4 " 设置 Tab 宽度
syntax on " 语法高亮

七、Linux开机、重启和用户登录注销

关机&重启命令

命令 执行结果
shutdown -h now 立刻进行关机
shutdown -h 1 提示1分钟后关机
shutdown -r now 立刻重启计算机
halt 立刻进行关机
reboot 立刻重启计算机
sync 把内存的数据同步到磁盘
  • 注意细节:
  1. 不管是重启系统还是关机,首先要运行sync命令,把内存中的数据写到磁盘中
  2. 目前的shutdown/reboot/halt等命令均在底层实现在关机前默认执行sync命令。(但小心驶得万年船,最好自己先执行一次)

用户登录和注销

  • 基本介绍
  1. 登录时尽量少用root账户进行登录,因为它是系统管理员,拥有最高权限,避免操作失误。可以利用普通用户登录,登录后在用su - 用户名命令来切换成系统管理员身份。
  2. 在终端下输入logout即可注销用户
  • 使用细节
  1. logout注销指令在图形运行级别(即安装了图像界面的Linux)无效,在运行级别3(无图形界面)下有效。
  2. 运行级别的概念在之后进行介绍。
1
2
3
4
5
6
[ryantwo@ryan ~]$ su - root // ryantwo普通用户-> 切换到root用户
Password: // 输入密码是看不见的,密码直接输入,输入完成后按回车
Last login: Sat Jan 18 23:29:16 EST 2025 on pts/1
[root@ryan ~]# logout // 这里用户变成了root,然后使用命令注销root用户
[ryantwo@ryan ~]$ // 回到ryantwo普通用户下

这里有个小细节:普通用户输入命令前面的符号是$,root用户输入命令前面的符号是#

八、用户管理

基本介绍

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统

添加用户

  • 基本语法
1
useradd 用户名
  • 细节说明
  1. 当创建用户成功后,会自动的创建和用户名同名的家目录,默认放在/home/下。
  2. 也可以通过一下命令,给新创建的用户指定home目录。
  3. 创建用户后,用户的文件都放在其家目录下
1
useradd -d 指定目录 新用户名
1
2
3
4
5
6
7
8
9
10
11
12
[root@ryan home]# ls
ryantwo
[root@ryan home]# useradd ryanthree
[root@ryan home]# ls
ryanthree ryantwo // 成功创建ryanthree用户
[root@ryan home]# cd ryantwo // 进入到用户ryantwo的家目录中
[root@ryan ryantwo]# ls // 显示用户ryantwo家目录下的文件夹和文件
Desktop Documents Downloads Music Pictures Public Templates Videos
[root@ryan ryantwo]# pwd // 显示当前目录的绝对路径
/home/ryantwo // 表示当前位于`/`目录下的`home`目录下的`ryantwo`目录中
[root@ryan ryantwo]#

补充一条命令:pwd。显示当前目录的绝对路径

指定或修改密码

  • 基本语法
1
passwd 用户名
1
2
3
4
5
6
[root@ryan home]# passwd ryanthree   // 给ryanthree用户指定密码
Changing password for user ryanthree.
New password: // 这里通过键盘输入密码,但是是不显示的
Retype new password: // 这里重新输入密码,同样不显示
passwd: all authentication tokens updated successfully. // 密码指定成功
[root@ryan home]#

删除用户

  • 基本语法(删除用户是需要root权限的)
1
2
(1) userdel 用户名   // 表示删除指定的用户,但保留用户的家目录。(虽然保留了家目录,但是该用户已经不能在登录了)
(2) userdel -r 用户名 // 表示删除用户以及用户的家目录

举例:

1
2
3
4
5
6
7
8
9
[root@ryan home]# ls
ryanfour ryanthree ryantwo
[root@ryan home]# userdel ryanthree // 删除ryanthree,但是保留家目录
[root@ryan home]# ls
ryanfour ryanthree ryantwo
[root@ryan home]# userdel -r ryanfour // 删除ryanfour,并且不保留家目录
[root@ryan home]# ls
ryanthree ryantwo
[root@ryan home]#
  • 细节说明:是否应该保留家目录?

一般情况下,建议保留。毕竟在不确定该用户的工作内容是否依旧有用的情况下,最好保留下来。

查询用户信息指令

  • 基本语法
1
id 用户名

当用户不存在时,返回无此用户。

1
2
3
4
5
[root@ryan home]# id root
uid=0(root) gid=0(root) groups=0(root)
[root@ryan home]# id ryan100 // ryan100不存在
id: ryan100: no such user
[root@ryan home]#

uid:表示user id,即用户id

gid:表示组groups id,即组id

groups:表示,用户组

切换用户

  • 介绍

在Linux中,如果当前用户的权限不足,可以通过su - 指令,切换到高权限用户,比如root用户。

  • 基本语法
1
su - 所要切换的用户名
1
2
3
4
5
6
7
8
9
[root@ryan home]# ls
ryanthree ryantwo
[root@ryan home]# su - ryantwo // root -> 普通用户:不需要密码
Last login: Sun Jan 19 04:35:55 EST 2025 on pts/0
[ryantwo@ryan ~]$ su - ryanthree // 普通用户 -> 普通用户/权限高的用户:需要密码
Password: // 输入密码
[ryanthree@ryan ~]$ logout
[ryantwo@ryan ~]$ logout
[root@ryan home]# // 回到root用户
  • 细节说明
  1. 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要

  2. 当需要返回到原来用户时,使用exit或者logout指令即可。

查看当前用户/登录用户

1
2
(1) whoami:显示当前操作的用户名
(2) who am i:显示第一次登录时的用户名
1
2
3
4
5
6
7
8
9
10
11
[root@ryan home]# whoami
root
[root@ryan home]# who am i
root pts/0 2025-01-19 03:36 (192.168.174.1)
[root@ryan home]# su - ryantwo // 切换为普通用户
Last login: Sun Jan 19 04:36:36 EST 2025 on pts/0
[ryantwo@ryan ~]$ whoami // 当前操作的用户
ryantwo
[ryantwo@ryan ~]$ who am i // 第一次登录的用户
root pts/0 2025-01-19 03:36 (192.168.174.1)
[ryantwo@ryan ~]$

九、用户组

  • 介绍

类似于角色,系统可以对有共性的多个用户进行统一的管理。在 Linux 中,用户组(Group) 是用于组织和管理用户权限的一个重要机制。每个用户(User)可以属于一个或多个组(Group),用户组用于控制 文件权限、资源访问和管理多个用户 的权限。

新增组/添加组

1
groupadd 组名
1
[root@ryan home]# groupadd group01

删除组

1
groupdel 组名
1
[root@ryan home]# groupdel group01

增加用户时直接加上组

1
useradd -g 用户组 用户名
1
2
3
4
5
[root@ryan home]# groupadd group02
[root@ryan home]# useradd -g group02 ryanfive
[root@ryan home]# id ryanfive // 查询用户信息
uid=1002(ryanfive) gid=1002(group02) groups=1002(group02)
[root@ryan home]#

创建新用户时若没有指定用户组,那么系统会自动创建一个和用户名相同的用户组,并将该用户划分到该用户组中。

1
2
3
4
[root@ryan home]# useradd ryanfour
[root@ryan home]# id ryanfour
uid=1003(ryanfour) gid=1003(ryanfour) groups=1003(ryanfour)

修改用户的组

1
usermod -g 用户组 用户名
1
2
3
4
5
6
7
[root@ryan home]# groupadd group01
[root@ryan home]# id ryanthree
uid=1001(ryan three) gid=1001(ryanthree) groups=1001(ryanthree)
[root@ryan home]# usermod -g group01 ryanthree
[root@ryan home]# id ryanthree
uid=1001(ryanthree) gid=1002(group01) groups=1002(group01)
[root@ryan home]#

用户和组相关文件

查看文件内容或编辑文件内容的命令在之后进行学习,目前可以通过图形界面下的Linux中的文件资源管理器进行查看。

  • /etc/passwd 文件
  1. 用户(user)的配置文件,记录用户的各种信息

  2. 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

  • /etc/shadow 文件
  1. 口令的配置文件

  2. 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

  • /etc/group 文件
  1. 组(group)的配置文件,记录Linux包含的组的信息
  2. 每行的含义:组名:口令:组标识号:组内用户列表

十、Linux实用指令

指定运行级别

  • 基本介绍:运行级别(Runlevel) 是 Linux 系统启动后进入的不同模式,控制系统的 服务进程多用户功能。不同的运行级别决定了系统是以 命令行模式图形界面模式 还是 维护模式 启动。
运行级别 说明
0 关机
1 单用户模式【维护模式,可以帮助找回丢失密码,仅 root 可用】
2 多用户状态没有网络服务
3 命令行模式(CLI),多用户状态有网络服务
4 预留,通常未使用
5 图形界面模式(GUI)
6 系统重启

常用运行级别是3和5,也可以指定默认运行级别

如何查看当前运行级别

不同的 Linux 发行版使用不同的命令:

🔹 在 SysVinit(CentOS 6 及更早版本)

1
[root@ryan home]# runlevel

示例输出:

1
N 3

表示当前运行级别是 3(命令行模式)。


🔹 在 systemd(CentOS 7+、Ubuntu 16+)

1
[root@ryan home]# systemctl get-default

示例输出:

1
2
3
multi-user.target
或者
graphical.target

表示当前是 **multi-user.target**(相当于 3)。

表示当前是 **graphical.target**(相当于 5)。


修改运行级别

🔹 临时修改运行级别

(仅对当前会话有效,重启后恢复原状态)

在 SysVinit 系统

1
2
[root@ryan home]# init 5  # 切换到图形模式
[root@ryan home]# init 3 # 切换到命令行模式

在 systemd 系统

1
2
[root@ryan home]# systemctl isolate graphical.target  # 切换到图形界面(GUI)
[root@ryan home]# systemctl isolate multi-user.target # 切换到命令行模式(CLI)

🔹 永久修改运行级别

(修改后 重启生效

在 SysVinit 系统

编辑 /etc/inittab 文件:

1
[root@ryan home]# vim /etc/inittab

找到类似以下内容:

1
id:3:initdefault:

修改 35(如果要进入 GUI)。

然后重启:

1
[root@ryan home]# reboot

在 systemd 系统

1
2
[root@ryan home]# systemctl set-default graphical.target  # 设置默认 GUI 模式
[root@ryan home]# systemctl set-default multi-user.target # 设置默认 CLI 模式

然后重启:

1
[root@ryan home]# reboot

十一、找回root密码

  1. 首先,启动系统,进入到开机界面,在界面中按”e“进入编辑界面。
img
  1. 进入编辑界面,使用键盘上的上下方向键,把光标向下移动,找到以”Linux16”开头内容所在的行,然后按左右方向键,将光标移动到该行的末尾,在该行的最后面输入:init=/bin/sh(init前面要有一个空格)。
img
  1. 输入完成后,按快捷键:Ctrl + x 进入单用户模式。
  2. 然后在光标闪烁的位置输入:mount -o remount,rw /(注意单词间的空格),输入后按回车。

img

  1. 在新的一行最后面输入:passwd,完成后按回车。输入密码,然后再次确认密码即可。(密码长度最好在8位以上),密码修改成功后,会显示passwd......successfully的样式,说明密码修改成功。

img

  1. 接着在光标闪烁位置(最后一行中)输入:touch /.autorelabel(注意touch后面有一个空格),输入后按回车。

7

  1. 接着在光标闪烁位置,输入:exec /sbin/init(注意:exec后面有一个空格),输入完后按回车,等待系统自动修改密码(该过程时间会比较长,耐心等待即可),完成后系统会自动重启,新的密码就生效了

img

  1. 重启后就可以使用新的密码进行登录,然后可以用之前学过的命令重新更改成别的密码。
1
2
3
4
5
6
[root@ryan ~]# passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@ryan ~]# reboot // 重启后即可生效

十二、帮助指令

man 指令

1
man 命令或配置文件

man(manual)命令Linux 的帮助文档系统,用于 查看 Linux 命令的详细说明,类似于一本 电子版手册

1
[root@ryan ~]# man ls

输入man ls后会进入到帮助文档里,按空格键可以向下翻一页,按q键退出文档。

img
  • man 常见快捷键
按键 作用
↑ / ↓ 上下滚动
PageUp / PageDown 上下翻页
Home / End 跳到开头/结尾
/关键字 向下搜索关键字
?关键字 向上搜索关键字
n 跳到下一个搜索结果
N 跳到上一个搜索结果
q 退出 man

help 指令

1
help 命令   // 获得shell内置命令的帮助信息

helpBash 内置命令,用于 查看 shell 内置命令(Built-in Commands)的帮助信息。它不像 man 那样适用于所有命令,而是 专门针对 shell 内置命令(如 cdechoexit 等)。

1
2
3
4
5
6
[root@ryan ~]# help cd
cd: cd [-L|[-P [-e]]] [dir]
Change the shell working directory.
...... // 省略
-P is used; non-zero otherwise.
[root@ryan ~]#
  • helpman 的区别
特性 help man
适用范围 Bash 内置命令 所有 Linux 命令
使用方式 help 命令名 man 命令名
文档类型 简要说明 完整手册
示例 help exit man ls

🔹 **如果命令是 shell 内置的,就用 help,否则用 man**。

🔹 如果不确定命令是否是内置的,可以用:

1
type 命令名

示例:

1
[root@ryan ~]# type cd

输出:

1
cd is a shell builtin

表示 cd 是 shell 内置命令,可以用 help cd 查看帮助。

  • 也可以使用第四章中提供的Linux命令大全进行查看。

十三、绝对路径和相对路径

在 Linux 文件系统中,路径用于指向文件或目录。路径有两种类型:

  • 绝对路径(Absolute Path)
  • 相对路径(Relative Path)

绝对路径(Absolute Path)

概念

绝对路径是 从根目录 / 开始 的完整路径,始终指向同一个文件或目录 无论当前在哪个位置

特点

  • / 开头
  • 不受当前目录影响
  • 始终指向唯一的文件/目录

示例

1
2
[root@ryan ~]# cd /home/ryan/Documents    # 切换到 /home/ryan/Documents
[root@ryan ~]# ls /etc/passwd # 访问 /etc/passwd 文件

上面 /home/ryan/Documents/etc/passwd 都是绝对路径。


相对路径(Relative Path)

概念

相对路径是 相对于当前目录(pwd 命令显示的目录) 计算的路径。

特点

  • 不以 / 开头
  • 依赖于当前目录
  • 更简短,适合在脚本和命令行中使用

示例

假设当前目录是 /home/ryan

1
2
3
[root@ryan ~]# cd Documents       # 进入 /home/ryan/Documents
[root@ryan ~]# ls ./test.txt # 查看当前目录下的 test.txt 文件
[root@ryan ~]# cat ../file.txt # 访问上一级目录 (/home) 下的 file.txt

相对路径依赖于当前目录示例:

1
2
3
4
5
6
7
[root@ryan ~]# ls
Documents Pictures Templates Desktop Downloads Music Public Videos
[root@ryan ~]# cd Documents/ // 进入Documents目录
[root@ryan Documents]# cd Downloads // 使用相对路径进入root目录下的Downloads目录
-bash: cd: Downloads: No such file or directory // 无法进入
[root@ryan Documents]# cd /root/Downloads/ // 使用绝对路径进入root目录嗲的Downloads目录
[root@ryan Downloads]# // 成功进入

其中:

  • Documents 相当于 /home/ryan/Documents
  • ./test.txt 表示当前目录中的 test.txt
  • ../file.txt 表示上一级目录中的 file.txt

... 目录

在相对路径中,两个特殊符号:

  • . 代表 当前目录
  • .. 代表 上一级目录

示例

1
2
3
[root@ryan ~]# ls .              # 列出当前目录内容
[root@ryan ~]# ls .. # 列出上一级目录内容
[root@ryan ~]# cd ../Downloads # 进入上一级目录的 Downloads 目录

十四、文件目录类

接下来使用的都是root用户!

pwd指令

  1. 功能:显示当前工作目录的绝对路径
  2. 语法:
1
pwd
  1. 应用案例:
1
2
3
[root@ryan Documents]# pwd
/root/Documents
[root@ryan Documents]#

ls指令

  1. 功能:显示当前工作目录中的目录和文件
  2. 语法
1
ls [选项] [目录或文件]
  1. 常用选项

​ -a : 显示当前目录所有的文件和目录,包括隐藏的目录和文件

​ -l : 以列表的方式显示详细信息

  1. 应用实例:
1
2
3
4
5
[root@ryan ~]# ls
[root@ryan ~]# ls -a
[root@ryan ~]# ls -l
[root@ryan ~]# ls -al(或ls -la,顺序是随意的)
[root@ryan ~]# ls -al /home

在Linux中,隐藏文件是以 .开头的,选项可以组合使用,如ls -al /root,表示按列详细显示/root目录下的文件和文件夹(包括隐藏文件)。

快捷指令 ll:相当于ls -l,但在Ubuntu中ll:相当于ls -al

cd指令

  1. 功能:切换到指定的目录
  2. 语法:
1
cd 绝对路径或相对路径
  1. 补充:
1
2
3
4
5
[root@ryan ~]# cd ~		// 切换到当前用户的家目录下
[root@ryan ~]# cd // 直接输入cd然后回车也是切换到当前用户的家目录
[root@ryan ~]# cd .. // 切换到当前目录的上一级目录
[root@ryan ~]# cd - // 切换到上一次所在的目录
[root@ryan ~]# cd ../.. // 切换到上一级目录的上一级目录
  1. 应用案例:
1
2
3
4
5
6
7
8
9
10
[root@ryan ~]# cd /mnt/hgfs/
[root@ryan hgfs]# pwd
/mnt/hgfs
[root@ryan hgfs]# cd ..
[root@ryan mnt]# pwd
/mnt
[root@ryan mnt]# cd ~
[root@ryan ~]# pwd
/root
[root@ryan ~]#

mkdir指令

  1. 功能:用于创建目录
  2. 语法
1
mkdir [选项] 目录名
  1. 常用选项

​ -p : 创建多级目录

  1. 应用案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@ryan Documents]# ls	// 当前目录下没有demo目录
[root@ryan Documents]# mkdir demo // 创建名为demo的目录
[root@ryan Documents]# ls // 创建成功
demo
[root@ryan Documents]# mkdir demo01/demo02 // 创建多级目录
mkdir: cannot create directory ‘demo01/demo02’: No such file or directory // 创建多级目录失败
[root@ryan Documents]# mkdir -p demo01/demo02 // 加上`-p`参数创建多级目录
[root@ryan Documents]# ls // 创建多级目录成功
demo demo01
[root@ryan Documents]# cd demo01
[root@ryan demo01]# ls
demo02
[root@ryan demo01]#

rmdir指令

  1. 功能:删除空目录
  2. 语法
1
rmdir [选项] 要删除的空目录名
  1. 补充:rmdir 删除的是空目录,如果该目录下有内容则无法删除。(那么该如何删除有内容的目录呢?接着往下学……)

  2. 应用案例:

1
2
3
4
5
6
7
8
9
10
[root@ryan Documents]# ls
demo demo01
[root@ryan Documents]# rmdir demo // 删除无内容的目录demo
[root@ryan Documents]# ls
demo01
[root@ryan Documents]# rmdir demo01 // 删除有内容的目录demo01
rmdir: failed to remove ‘demo01’: Directory not empty
[root@ryan Documents]# ls
demo01
[root@ryan Documents]#

touch指令

  1. 功能:当不存在指定的文件时,创建空文件;当存在指定的文件时,更新该文件的创建或修改时间
  2. 语法
1
2
touch 文件名	// 创建单个文件
touch 文件名 文件名 文件名 ... // 创建多个文件时,用空格隔开即可。
  1. 应用案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@ryan Documents]# touch hello.txt
[root@ryan Documents]# ls
demo01 hello.txt
[root@ryan Documents]# ls -al
total 12
drwxr-xr-x. 3 root root 4096 Jan 21 03:15 .
dr-xr-x---. 15 root root 4096 Jan 21 03:02 ..
drwxr-xr-x. 3 root root 4096 Jan 21 03:05 demo01
-rw-r--r--. 1 root root 0 Jan 21 03:15 hello.txt // 这里创建空文件,时间是 03:15
[root@ryan Documents]# touch hello.txt
[root@ryan Documents]# ls -al
total 12
drwxr-xr-x. 3 root root 4096 Jan 21 03:15 .
dr-xr-x---. 15 root root 4096 Jan 21 03:02 ..
drwxr-xr-x. 3 root root 4096 Jan 21 03:05 demo01
-rw-r--r--. 1 root root 0 Jan 21 03:16 hello.txt // 这里已存在该文件,则更新该文件的修改时间 03:16
[root@ryan Documents]# touch hello01.txt hello02.txt // 创建多个文件
[root@ryan Documents]# ls
demo01 hello01.txt hello02.txt hello.txt
[root@ryan Documents]#

cp指令

  1. 功能:将指定文件或目录复制到指定的目录下
  2. 语法
1
2
3
4
5
cp [选项] 源文件 目标目录或目标文件
cp [选项] 具体文件 具体文件
cp [选项] 具体文件 绝对或相对路径
cp [选项] 绝对或相对路径 绝对或相对路径
cp [选项] 绝对或相对路径 具体文件

复制源文件到另一个目标文件时,若目标文件存在,则直接将源文件的内容复制到目标文件中,并且会使用源文件中的内容覆盖掉目标文件中的内容,覆盖后同样会更新文件的修改时间为当前系统时间;若目标文件不存在,则会默认先创建目标文件,再将源文件的内容复制到目标文件中。

  1. 常用选项

​ -i : 复制或者覆盖目标文件之前先询问用户(因为cp的特殊性,所以一般强制要求使用-i选项

​ -r : 递归复制整个文件夹

  1. 应用案例:(起初的Downloads文件夹下没有任何文件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@ryan Documents]# ls
demo01 hello01.txt hello02.txt hello.txt
[root@ryan Documents]# cp hello01.txt /root/Downloads/
[root@ryan Documents]# cd /root/Downloads/
[root@ryan Downloads]# ls
hello01.txt
[root@ryan Documents]# cp hello02.txt hello03.txt // hello03.txt原先不存在
[root@ryan Documents]# ls
demo01 hello01.txt hello02.txt hello03.txt hello.txt // 创建了hello03.txt文件
[root@ryan Documents]# cp -i hello01.txt hello03.txt
cp: overwrite ‘hello03.txt’? y // y表示确认覆盖,n表示取消覆盖
[root@ryan Documents]# cp -r /root/Documents/ /root/Downloads/ // 将Documents文件夹及其里面的内容都复制到/root/Downloads目录中
[root@ryan Documents]# cd /root/Downloads/
[root@ryan Downloads]# ls
Documents hello01.txt
[root@ryan Downloads]#

rm指令

  1. 功能:删除指定文件或目录(删除后就无法还原了,Linux不存在回收站的概念)
  2. 语法
1
rm [选项] 文件或目录
  1. 常用选项

​ -r : 递归删除整个文件夹

​ -i : 删除文件前先询问用户是否确定删除(因为rm的特殊性,所以一般强制要求使用-i选项

​ -f : 强制删除指定文件或目录,不询问不提示

  1. 应用案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@ryan Downloads]# ls
Documents hello01.txt test.txt
[root@ryan Downloads]# rm -i test.txt // 询问用户是否删除
rm: remove regular empty file ‘test.txt’? y
[root@ryan Downloads]# ls
Documents hello01.txt
[root@ryan Downloads]# rm hello01.txt // 直接删除不提示
rm: remove regular empty file ‘hello01.txt’? y
[root@ryan Downloads]# ls
Documents
[root@ryan Downloads]# rm -ri Documents/ // 遍历删除Documents文件夹下的文件包括Documents文件夹并且每次删除都询问用户是否删除
rm: descend into directory ‘Documents/’? y
rm: remove regular empty file ‘Documents/hello.txt’? y
rm: remove regular empty file ‘Documents/hello01.txt’? y
rm: descend into directory ‘Documents/demo01’? y
rm: remove directory ‘Documents/demo01/demo02’? y
rm: remove directory ‘Documents/demo01’? y
rm: remove regular empty file ‘Documents/hello02.txt’? y
rm: remove regular empty file ‘Documents/hello03.txt’? y
rm: remove directory ‘Documents/’? y
[root@ryan Downloads]# ls
[root@ryan Downloads]#
  1. 重要部分

Linux最危险的指令之一。**sudo rm -rf /:是一个极其危险*的命令,它会 删除 Linux 系统上的所有文件,可能导致系统彻底崩溃,无法恢复。

参数解析

1
sudo rm -rf /*
  • sudo(superuser do)提升权限,使普通用户可以执行 管理员权限 命令。
  • rm(remove):用于删除文件或目录。
  • -r(recursive):递归删除目录及其中的所有文件(即删除整个文件夹)。
  • -f(force):强制删除,无需确认(即使文件有写保护)。
  • /*
    • /:Linux 的根目录,所有系统文件都在这个目录下(如 /bin/etc/home)。
    • *:匹配根目录下的所有文件和文件夹

执行效果

  1. 如果以 root 用户执行
    • 整个系统所有文件都会被删除(包括 /bin/etc/homeusr 等)。
    • 系统核心文件被删除后,Linux 会彻底崩溃,无法开机
    • 除非有备份,否则无法恢复,甚至连 rm 命令本身都会被删除。
  2. 如果是普通用户执行
    • 只能删除当前用户有权限删除的文件,系统的核心文件可能无法删除。

🚨 千万不要随便尝试 sudo rm -rf /* 🚨

mv指令

  1. 功能:移动文件/文件夹或者重命名文件/文件夹
  2. 语法
1
2
mv 旧文件/文件夹名 新文件/文件夹名	// 重命名
mv 文件/绝对路径 绝对路径 // 移动文件或文件夹
  1. 应用案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@ryan test]# ls
ajsldasdfasdf.pdf
[root@ryan test]# mv ajsldasdfasdf.pdf new.pdf
[root@ryan test]# ls
new.pdf
[root@ryan test]# mv new.pdf /root/Documents/
[root@ryan test]# cd /root/Documents/
[root@ryan Documents]# lws
bash: lws: command not found...
[root@ryan Documents]# ls
demo01 hello01.txt hello02.txt hello03.txt hello.txt new.pdf
[root@ryan Documents]# mv /root/test/ /root/Documents/
[root@ryan Documents]# ls
demo01 hello01.txt hello02.txt hello03.txt hello.txt new.pdf test
[root@ryan Documents]#

cat指令

  1. 功能:用于 显示文件内容,但无法翻页,适合查看短文件
  2. 语法
1
cat [选项] 文件名
1
cat file1.txt file2.txt ... 	// 连接并显示多个文件
  1. 常用选项

​ -n : 显示行号

  1. 应用案例
1
2
3
4
5
6
7
8
[ryan@ryan Documents]$ cat test1.txt 
fasf
ads
f
asd
fads
... 剩下的内容省略
[ryan@ryan Documents]$
  1. 使用细节:cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | command

Linux管道命令 |

管道(|Linux Shell 中的一个强大特性,它用于 连接多个命令,让一个命令的输出成为另一个命令的输入。

基本语法

1
command1 | command2 | command3 ...

command1 产生输出

command2 处理 command1 的输出

command3 进一步处理…

more指令

  1. 功能: 支持分页查看文件内容,适用于大文件

  2. 语法:

1
more file.txt

逐页显示 file.txt,如果文件很长,你可以滚动查看

主要操作

按键 作用
Space空格键 翻到下一页
Enter 向下滚动一行
b 返回上一页
Ctrl + F 向下滚动一页
q 退出 more
  1. 应用案例:
1
2
[ryan@ryan Documents]$ more test1.txt 
省略...

less指令

  1. 功能:是 more 的增强版,支持上下滚动,功能更强大。

  2. 语法

1
less file.txt

主要操作

按键 作用
Space 下一页
b 上一页
/ 向上/向下滚动
/关键字 搜索 关键字(按 n 跳到下一个匹配项)
q 退出 less

cat vs more vs less

命令 适用场景 是否支持翻页 是否支持回滚
cat 短文件 ❌ 不能翻页 ❌ 不能回滚
more 中等大小文件 ✅ 能翻页 ❌ 不能回滚
less 大文件 ✅ 能翻页 ✅ 能回滚

echo指令

  1. 功能:用于在终端打印字符串、变量值,或者格式化输出。

  2. 语法

1
echo [选项] 输出的内容
  1. 应用案例:

(1)输出环境变量。如$PATH $HOSTNAME

1
2
3
4
5
[ryan@ryan Documents]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ryan/.local/bin:/home/ryan/bin
[ryan@ryan Documents]$ echo $HOSTNAME
ryan
[ryan@ryan Documents]$

(2)输出指定的内容

1
2
3
[ryan@ryan Documents]$ echo Hello,world
Hello,world
[ryan@ryan Documents]$

head指令

  1. 功能:用于显示文件的开头部分,默认显示前 10 行。
  2. 语法
1
head [选项] 文件名
  1. 常用选项

-n <行数> : 指定显示的行数

-c <字节数> : 指定显示的字节数

  1. 应用案例

(1)显示文件的前 10 行(默认行为):

1
head filename.txt

(2)显示文件的前 5 行:

1
head -n 5 filename.txt

(3)显示文件的前 100 个字节:

1
head -c 100 filename.txt

(4)结合管道使用,显示命令输出的前 10 行:

1
ls -l | head

tail指令

  1. 功能:用于显示文件的结尾部分,默认显示最后 10 行。
  2. 语法
1
tail [选项] 文件名
  1. 常用选项
  • -n <行数>:指定显示的行数。
  • -c <字节数>:指定显示的字节数。
  • -f:实时跟踪文件内容的变化(常用于查看日志文件)。
  • -F:与 -f 类似,但会重新打开文件(适合文件被轮转的情况)。
  1. 应用案例

(1)显示文件的最后 10 行(默认行为):

1
tail filename.txt

(2)显示文件的最后 5 行:

1
tail -n 5 filename.txt

(3)显示文件的最后 100 个字节:

1
tail -c 100 filename.txt

(4)实时跟踪文件内容的变化(常用于查看日志):

1
tail -f /var/log/syslog

(5)结合管道使用,显示命令输出的最后 10 行:

1
ls -l | tail

>指令 和 >>指令

>:输出重定向。覆盖文件(清空原内容后写入)

>>:追加。追加到文件(保留原内容,在末尾添加)

示例:>

(1)写入文件

1
echo "Hello,world!" > file.txt

原文件file.txt若不存在,则会先创建再重定向。

(2)覆盖原文件

1
echo "New Content" > file.txt

(3)将ls输出写入文件

1
ls > list.txt

示例:>>

(1)追加文本

1
2
echo "First Line" > file.txt
echo "Second Line" >> file.txt

(2)追加ls命令的输出

1
ls >> list.txt

> vs >> 对比

符号 作用 是否清空文件
> 覆盖 写入文件 ✅ 是,先清空
>> 追加 到文件 ❌ 否,保留原内容

ln指令

  1. 功能:ln 命令用于 创建链接文件,链接分为:

(1)硬链接(Hard Link)

(2)符号链接(Symbolic Link,也叫软链接 Soft Link),类似于windows里的快捷方式,主要存放了链接其他文件的路径。

  1. 语法
1
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
  1. 应用案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[ryan@ryan ~]$ ln -s / myroot
[ryan@ryan ~]$ ll
total 32
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:04 Desktop
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:13 Documents
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:04 Downloads
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:04 Music
lrwxrwxrwx. 1 ryan ryan 1 Jan 30 23:22 myroot -> /
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:04 Pictures
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:04 Public
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:04 Templates
drwxr-xr-x. 2 ryan ryan 4096 Jan 24 06:04 Videos
[ryan@ryan ~]$ cd myroot
[ryan@ryan myroot]$ ls
bin dev home lib64 media opt root sbin sys usr
boot etc lib lost+found mnt proc run srv tmp var
[ryan@ryan myroot]$

myroot指向根目录/,所以cd myroot,相当于cd / ,即进入根目录下。

删除软链接

1
2
3
4
5
6
7
[ryan@ryan ~]$ ls
Desktop Documents Downloads Music myroot Pictures Public Templates Videos
[ryan@ryan ~]$ rm -ri myroot
rm: remove symbolic link ‘myroot’? y
[ryan@ryan ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
[ryan@ryan ~]$

history指令

  1. 功能:查看已经执行过的历史命令,也可以执行历史命令
  2. 语法
1
history (功能描述:查看已经执行过的历史命令)

3.应用案例

(1)显示所有的历史命令

1
2
3
4
5
6
7
8
9
[ryan@ryan ~]$ history
1 ifconfig
2 reboot
3 ls
4 cd /home
5 ls
......
[ryan@ryan ~]$

(2)显示最近使用过的5个指令

1
2
3
4
5
6
7
[ryan@ryan ~]$ history 5
32 rm -ri myroot
33 ls
34 history 10
35 history
36 history 5
[ryan@ryan ~]$

(3)执行历史编号为5的指令

1
2
3
4
[ryan@ryan ~]$ !5
ls
Desktop Documents Downloads Music Pictures Public Templates Videos
[ryan@ryan ~]$

十五、使用组合命令

语法:

1
命令1 && 命令2 && ......

示例:

1
cd ../Documents && ls -al 	// 进入到上一级目录下的Documents目录中并显示其中的内容
1
2
3
4
5
6
7
8
[root@ryan Documents]# cd /root/Downloads/ && touch test.txt && ls -al
total 12
drwxr-xr-x. 3 root root 4096 Jan 23 05:29 .
dr-xr-x---. 15 root root 4096 Jan 23 03:22 ..
drwxr-xr-x. 3 root root 4096 Jan 23 05:21 Documents
-rw-r--r--. 1 root root 0 Jan 23 04:34 hello01.txt
-rw-r--r--. 1 root root 0 Jan 23 05:29 test.txt
[root@ryan Downloads]#

十六、通配符

通配符用于匹配文件名或目录名,通常和 lscprm 等命令一起使用,能高效地操作多个文件。

  1. \*(匹配任意多个字符)

* 代表 0 个或多个字符,可以匹配任意文件名。

示例

1
ls *.txt

匹配当前目录下所有 .txt 文件(如 file1.txttest.txt)。

1
ls demo*

匹配以 demo 开头的所有文件(如 demo1.txtdemo_test.c)。

1
rm *  # 小心!删除所有文件

2. ?(匹配单个字符)

? 只匹配 任意 1 个字符

示例

1
ls file?.txt

匹配 file1.txtfileA.txt,但不匹配 file12.txt

1
ls ?.txt

匹配单字符文件名(如 a.txt,但不匹配 ab.txt

3. [](匹配指定范围的字符)

[] 匹配 一组字符中的任意一个

示例

1
ls file[123].txt

匹配 file1.txtfile2.txtfile3.txt,但不匹配 file4.txt

1
ls file[a-c].txt

匹配 filea.txtfileb.txtfilec.txt

1
ls file[!2].txt

匹配 file1.txtfile3.txt,但不匹配 file2.txt! 取反)。

4. {}(匹配多个字符串)

{} 用于匹配 多个特定的文件名模式,逗号 , 分隔。

示例

1
ls file{1,3,5}.txt

匹配 file1.txtfile3.txtfile5.txt

1
mv {file1,file2}.txt backup/

移动 file1.txtfile2.txtbackup/ 目录

1
touch {a,b,c}{1,2,3}.txt

创建 a1.txta2.txta3.txtb1.txtc3.txt(共 9 个文件)

5. ~(用户目录)

~ 代表当前用户的 home 目录(通常 /home/用户名)。

示例

1
cd ~

回到用户的 home 目录(等同于 cd /home/yourname)。

1
ls ~/Documents

列出 Documents 目录下的文件

6. ...(当前目录和上级目录)

  • . 代表 当前目录
  • .. 代表 上一级目录

示例

1
cd .

保持在当前目录(无变化)。

1
cd ..

进入上一级目录

1
mv file.txt ../

移动 file.txt 到上一级目录

通配符总结

通配符 作用 示例 匹配
* 0 个或多个字符 ls *.txt 所有 .txt 文件
? 单个字符 ls file?.txt file1.txt 但不匹配 file12.txt
[] 指定范围字符 ls file[1-3].txt file1.txtfile2.txt
{} 多个匹配模式 ls file{1,3,5}.txt file1.txtfile3.txt
~ 用户 home 目录 cd ~/Downloads 进入 Downloads 目录
. 当前目录 cd . 仍在当前目录
.. 上级目录 cd .. 进入上一级

实战技巧

批量删除

1
rm *.log

删除所有 .log 日志文件

批量移动

1
mv report[1-3].pdf backup/

移动 report1.pdfreport3.pdfbackup/ 目录

查找特定类型文件

1
ls *.{jpg,png,gif}

列出所有图片文件