Linux(Ubuntu)入门到实战:系统管理、常用命令与权限体系完整指南

文章目录

    • [一、Linux 入门概述](#一、Linux 入门概述)
      • [1.1 Linux 的起源与定义](#1.1 Linux 的起源与定义)
      • [1.2 Linux 与 Windows 的区别](#1.2 Linux 与 Windows 的区别)
    • [二、Linux 文件与目录结构](#二、Linux 文件与目录结构)
      • [2.1 一切皆文件](#2.1 一切皆文件)
      • [2.2 目录结构详解](#2.2 目录结构详解)
    • 三、系统管理操作
      • [3.1 systemctl 服务管理](#3.1 systemctl 服务管理)
        • [3.1.1 基本语法](#3.1.1 基本语法)
        • [3.1.2 经验技巧](#3.1.2 经验技巧)
        • [3.1.3 案例实操](#3.1.3 案例实操)
        • [3.1.4 设置后台服务的自启配置](#3.1.4 设置后台服务的自启配置)
      • [3.2 防火墙管理](#3.2 防火墙管理)
        • [3.2.1 临时关闭防火墙](#3.2.1 临时关闭防火墙)
        • [3.2.2 开机启动时关闭防火墙](#3.2.2 开机启动时关闭防火墙)
      • [3.3 关机与重启命令](#3.3 关机与重启命令)
        • [3.3.1 sync 命令](#3.3.1 sync 命令)
        • [3.3.2 关机和重启命令](#3.3.2 关机和重启命令)
        • [3.3.3 案例实操](#3.3.3 案例实操)
      • [3.4 修改主机名](#3.4 修改主机名)
      • [3.5 修改 Windows 机器的 hosts 文件](#3.5 修改 Windows 机器的 hosts 文件)
        • [3.5.1 Windows 7 系统](#3.5.1 Windows 7 系统)
        • [3.5.2 Windows 10 系统](#3.5.2 Windows 10 系统)
    • 四、远程登录
    • [五、APT 软件包管理器](#五、APT 软件包管理器)
      • [5.1 更新可用软件包列表](#5.1 更新可用软件包列表)
      • [5.2 使用 APT 安装软件包](#5.2 使用 APT 安装软件包)
      • [5.3 使用 APT 卸载软件包](#5.3 使用 APT 卸载软件包)
      • [5.4 使用 APT 搜索软件包](#5.4 使用 APT 搜索软件包)
    • 六、常用基本命令
      • [6.1 帮助命令](#6.1 帮助命令)
        • [6.1.1 man 手册页](#6.1.1 man 手册页)
        • [6.1.2 help 获取 shell 内建命令的帮助信息](#6.1.2 help 获取 shell 内建命令的帮助信息)
        • [6.1.3 常用快捷键](#6.1.3 常用快捷键)
      • [6.2 文件目录类](#6.2 文件目录类)
        • [6.2.1 pwd 显示当前工作目录的绝对路径](#6.2.1 pwd 显示当前工作目录的绝对路径)
        • [6.2.2 ls 列出目录的内容](#6.2.2 ls 列出目录的内容)
        • [6.2.3 cd 切换目录](#6.2.3 cd 切换目录)
        • [6.2.4 mkdir 创建一个新的目录](#6.2.4 mkdir 创建一个新的目录)
        • [6.2.5 touch 创建空文件](#6.2.5 touch 创建空文件)
        • [6.2.6 cp 复制文件或目录](#6.2.6 cp 复制文件或目录)
        • [6.2.7 rm 删除文件或目录](#6.2.7 rm 删除文件或目录)
        • [6.2.8 mv 移动文件与目录或重命名](#6.2.8 mv 移动文件与目录或重命名)
        • [6.2.9 cat 查看文件内容](#6.2.9 cat 查看文件内容)
        • [6.2.10 more 文件内容分屏查看器](#6.2.10 more 文件内容分屏查看器)
        • [6.2.11 less 分屏显示文件内容](#6.2.11 less 分屏显示文件内容)
        • [6.2.12 tail 输出文件尾部内容](#6.2.12 tail 输出文件尾部内容)
        • [6.2.13 echo](#6.2.13 echo)
        • [6.2.14 > 输出重定向和 >> 追加](#6.2.14 > 输出重定向和 >> 追加)
        • [6.2.15 ln 软链接](#6.2.15 ln 软链接)
        • [6.2.16 history 查看已经执行过历史命令](#6.2.16 history 查看已经执行过历史命令)
      • [6.3 VI/VIM 编辑器](#6.3 VI/VIM 编辑器)
        • [6.3.1 vi/vim 是什么](#6.3.1 vi/vim 是什么)
        • [6.3.2 测试数据准备](#6.3.2 测试数据准备)
        • [6.3.3 一般模式](#6.3.3 一般模式)
        • [6.3.4 编辑模式](#6.3.4 编辑模式)
        • [6.3.5 指令模式](#6.3.5 指令模式)
        • [6.3.6 模式间转换](#6.3.6 模式间转换)
      • [6.4 时间日期类](#6.4 时间日期类)
        • [6.4.1 date 显示当前时间](#6.4.1 date 显示当前时间)
        • [6.4.2 date 显示当前时间](#6.4.2 date 显示当前时间)
        • [6.4.3 date 显示非当前时间](#6.4.3 date 显示非当前时间)
        • [6.4.4 date 设置系统时间](#6.4.4 date 设置系统时间)
      • [6.5 用户管理命令](#6.5 用户管理命令)
        • [6.5.1 adduser 添加新用户](#6.5.1 adduser 添加新用户)
        • [6.5.2 passwd 设置或更改用户密码](#6.5.2 passwd 设置或更改用户密码)
        • [6.5.3 id 查看用户是否存在](#6.5.3 id 查看用户是否存在)
        • [6.5.4 cat /etc/passwd 查看创建了哪些用户](#6.5.4 cat /etc/passwd 查看创建了哪些用户)
        • [6.5.5 su 切换用户](#6.5.5 su 切换用户)
        • [6.5.6 userdel 删除用户](#6.5.6 userdel 删除用户)
        • [6.5.7 usermod 修改用户](#6.5.7 usermod 修改用户)
      • [6.6 用户组管理命令](#6.6 用户组管理命令)
        • [6.6.1 groupadd 新增组](#6.6.1 groupadd 新增组)
        • [6.6.2 groupdel 删除组](#6.6.2 groupdel 删除组)
        • [6.6.3 groupmod 修改组](#6.6.3 groupmod 修改组)
        • [6.6.4 usermod 修改用户主组](#6.6.4 usermod 修改用户主组)
        • [6.6.5 查看附加组和用户的映射关系](#6.6.5 查看附加组和用户的映射关系)
        • [6.6.6 将用户添加到附加组](#6.6.6 将用户添加到附加组)
        • [6.6.7 将用户从组中移除](#6.6.7 将用户从组中移除)
        • [6.6.8 sudo 设置普通用户具有 root 权限](#6.6.8 sudo 设置普通用户具有 root 权限)
      • [6.7 文件权限类](#6.7 文件权限类)
        • [6.7.1 文件属性](#6.7.1 文件属性)
        • [6.7.2 chmod 改变权限](#6.7.2 chmod 改变权限)
        • [6.7.3 chown 改变所有者](#6.7.3 chown 改变所有者)
        • [6.7.4 chgrp 改变所属组](#6.7.4 chgrp 改变所属组)
      • [6.8 搜索查找类](#6.8 搜索查找类)
        • [6.8.1 find 查找文件或者目录](#6.8.1 find 查找文件或者目录)
        • [6.8.2 grep 过滤查找及 "|" 管道符](#6.8.2 grep 过滤查找及 "|" 管道符)
      • [6.9 压缩和解压类](#6.9 压缩和解压类)
        • [6.9.1 gzip/gunzip 压缩](#6.9.1 gzip/gunzip 压缩)
        • [6.9.2 tar 打包](#6.9.2 tar 打包)
      • [6.10 磁盘类](#6.10 磁盘类)
        • [6.10.1 df 查看磁盘空间使用情况](#6.10.1 df 查看磁盘空间使用情况)
        • [6.10.2 du 文件和目录的磁盘使用空间](#6.10.2 du 文件和目录的磁盘使用空间)
      • [6.11 进程线程类](#6.11 进程线程类)
        • [6.11.1 ps 查看当前系统进程状态](#6.11.1 ps 查看当前系统进程状态)
        • [6.11.2 kill 终止进程](#6.11.2 kill 终止进程)
        • [6.11.3 查看服务器总体内存](#6.11.3 查看服务器总体内存)
        • [6.11.4 top 查看系统健康状态](#6.11.4 top 查看系统健康状态)
        • [6.11.5 netstat 显示网络统计信息和端口占用情况](#6.11.5 netstat 显示网络统计信息和端口占用情况)
      • [6.12 crontab 系统定时任务](#6.12 crontab 系统定时任务)
        • [6.12.1 crontab 服务管理](#6.12.1 crontab 服务管理)
        • [6.12.2 crontab 定时任务设置](#6.12.2 crontab 定时任务设置)
    • 七、常见错误及解决方案
      • [7.1 虚拟化支持异常情况](#7.1 虚拟化支持异常情况)
      • [7.2 问题原因](#7.2 问题原因)
      • [7.3 解决办法](#7.3 解决办法)
  • 速查表

一、Linux 入门概述

1.1 Linux 的起源与定义

Linux 内核最初由芬兰人 ** 林纳斯・托瓦兹(Linus Torvalds)** 在赫尔辛基大学上学时出于个人爱好编写。

Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议,支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE。

1.2 Linux 与 Windows 的区别

比较维度 Windows Linux
免费与收费 收费且很贵 免费或少许费用
软件与支持 数量和质量有优势,大部分为收费软件;由微软官方提供支持和服务 开源自由软件,用户可以修改定制和再发布;由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的 Linux 开发者和自由软件社区提供支持
安全性 三天两头打补丁安装系统安全更新,还是会中病毒木马 要说 Linux 没有安全问题那当然是不可能的,但比 PC 操作系统更加稳定安全,不容易产生垃圾文件,适合长期运行
使用习惯 普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上手容易入门简单 兼具图形界面操作和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导,一旦熟练之后效率极高
可定制性 封闭的,系统可定制性很差 开源,可定制非常强
应用场景 桌面操作系统主要使用的是 Windows 支撑百度、谷歌、淘宝等应用软件和服务的,是后台成千上万的 Linux 服务器主机。世界上大部分软件和服务都是运行在 Linux 之上的

二、Linux 文件与目录结构

2.1 一切皆文件

Linux 系统中一切皆文件。这是 Linux 设计哲学的核心之一,硬件设备、进程、网络套接字都以文件的形式存在和访问。

2.2 目录结构详解

Linux 采用树形目录结构,根目录为 /,下面挂载各种子目录。以下是每个关键目录的详细说明。

/bin:是 Binary 的缩写,这个目录存放着最经常使用的命令。

/sbin:s 就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序。

/home:存放普通用户的主目录,在 Linux 中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

/root:该目录为系统管理员,也称作超级权限者的用户主目录。

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

/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

/etc:所有的系统管理所需要的配置文件和子目录。

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

/boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里。

/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

/srv:service 缩写,该目录存放一些服务启动之后需要提取的数据。

/sys:这是 Linux 2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs。

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

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

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

/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在 /mnt/ 上,然后进入该目录就可以查看里的内容了。

/opt:这是给主机额外安装软件所摆放的目录。比如安装一个 mysql 数据库则就可以放到这个目录下。默认是空的。

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

/selinux:SELinux 是一种安全子系统,它能控制程序只能访问特定文件。


三、系统管理操作

3.1 systemctl 服务管理

3.1.1 基本语法
复制代码
systemctl start | stop | restart | status 服务名
3.1.2 经验技巧

查看服务的方法:查看 /usr/lib/systemd/system 目录下的文件列表,该目录下每个文件都对应一个服务。

复制代码
atguigu@ubuntu:\~\$ cd /usr/lib/systemd/system

atguigu@ubuntu:/usr/lib/systemd/system\$ pwd

/usr/lib/systemd/system

atguigu@ubuntu:/usr/lib/systemd/system\$ ls -al

输出示例:

复制代码
-rw-r--r--. 1 root root 275 4月 27 2018 abrt-ccpp.service

-rw-r--r--. 1 root root 380 4月 27 2018 abrtd.service

-rw-r--r--. 1 root root 361 4月 27 2018 abrt-oops.service

-rw-r--r--. 1 root root 266 4月 27 2018 abrt-pstoreoops.service

-rw-r--r--. 1 root root 262 4月 27 2018 abrt-vmcore.service

-rw-r--r--. 1 root root 311 4月 27 2018 abrt-xorg.service

-rw-r--r--. 1 root root 751 3月 25 2017 alsa-restore.service

-rw-r--r--. 1 root root 486 3月 25 2017 alsa-state.service
3.1.3 案例实操

(1)查看网络服务的状态

复制代码
sudo systemctl status NetworkManager

(2)停止网络服务

复制代码
sudo systemctl stop NetworkManager

(3)启动网络服务

复制代码
sudo systemctl start NetworkManager

(4)重启网络服务

复制代码
sudo systemctl restart NetworkManager
3.1.4 设置后台服务的自启配置
命令 功能描述
systemctl list-unit-files 查看服务开机启动状态
systemctl disable service_name 关掉指定服务的自动启动
systemctl enable service_name 开启指定服务的自动启动

3.2 防火墙管理

Ubuntu 系统默认使用 ufw(Uncomplicated Firewall)作为防火墙管理工具。

3.2.1 临时关闭防火墙

(1)查看防火墙状态

复制代码
sudo systemctl status ufw

(2)临时关闭防火墙

复制代码
sudo systemctl stop ufw
3.2.2 开机启动时关闭防火墙

(1)设置开机时启动防火墙

复制代码
sudo systemctl enable ufw

(2)设置开机时关闭防火墙

复制代码
sudo systemctl disable ufw

(3)查看服务是否开机自启

复制代码
sudo systemctl is-enabled ufw
  • disabled 表示开机不自启

  • enabled 表示开机自启

3.3 关机与重启命令

在 Linux 领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

3.3.1 sync 命令
复制代码
sync

功能描述:将数据由内存同步到硬盘中。

Linux 系统中为了提高磁盘的读写效率,对磁盘采取了 "预读迟写" 操作方式。当用户保存文件时,Linux 核心并不一定立即将保存数据写入物理磁盘中,而是将数据保存在缓冲区中,等缓冲区满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率。但是,也带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导致数据丢失。使用 sync 指令可以立即将缓冲区的数据写入磁盘。

现代 Linux 系统设计得足够智能,能够在执行关机或重启命令时自动处理必要的清理和同步操作。因此,对于绝大多数情况,直接使用关机或重启命令即可,而无需手动执行 sync。Ubuntu 系统版本为 22.04.4,像其它现代 Linux 发行版一样,不需要在关机或重启之前手动执行 sync。

3.3.2 关机和重启命令
命令 功能描述
halt 关闭系统,当前版本 Ubuntu 不会断电
poweroff 关闭系统并断电,等同于 shutdown -h now
reboot 重启,等同于 shutdown -r now
shutdown [选项] 时间 按指定时间关机或重启

shutdown 参数说明:

选项 功能
-h -h=halt 关机,不完全等同于 halt 命令
-r -r=reboot 重启
参数 功能
now 立刻关机
时间 等待多久后关机(时间单位是分钟)
3.3.3 案例实操

(1)将数据由内存同步到硬盘中(这一步可以不做)

复制代码
sync

(2)重启

复制代码
sudo reboot

(3)终止 CPU 的所有活动

复制代码
sudo halt

当前系统环境下,此命令会终止 CPU 活动,但不会断电。要关机或重启,需要借助 VMWare 完成。

(4)计算机将在 1 分钟后关机,并且会显示在登录用户的当前屏幕中

复制代码
sudo shutdown -h 1

输出示例:

复制代码
Broadcast message from root@ubuntu on pts/1 (Tue 2024-03-05 14:55:53 CST):

The system is going down for poweroff at Tue 2024-03-05 14:56:53 CST!

Shutdown scheduled for Tue 2024-03-05 14:56:53 CST, use 'shutdown -c' to cancel.

(5)取消关机

复制代码
sudo shutdown -c

(6)立马关机(不完全等同于 halt,会使系统断电)

复制代码
sudo shutdown -h now

(7)立马断电

复制代码
sudo poweroff

(8)系统立马重启(等同于 reboot)

复制代码
sudo shutdown -r now

3.4 修改主机名

复制代码
sudo hostnamectl --static set-hostname ubuntu

注:终端命令提示符中 @ 之后冒号之前的部分为当前的主机名。上述命令更改主机名为 ubuntu,执行 hostname 命令可以看到主机名已更改,但命令提示符的更新需要重启机器。

3.5 修改 Windows 机器的 hosts 文件

3.5.1 Windows 7 系统

可以直接修改:

  1. 进入 C:\Windows\System32\drivers\etc 路径

  2. 打开 hosts 文件并添加如下内容,然后保存

    192.168.10.150 ubuntu

3.5.2 Windows 10 系统

先拷贝出来,修改保存以后,再覆盖即可。


四、远程登录

通常在工作过程中,公司中使用的真实服务器或者是云服务器,都不允许除运维人员之外的员工直接接触,因此就需要通过远程登录的方式来操作。所以,远程登录工具就是必不可缺的。

目前,比较主流的远程登录工具有:Xshell、SSH Secure Shell、SecureCRT、FinalShell 等,可以根据自己的习惯自行选择。


五、APT 软件包管理器

APT(Advanced Packaging Tools)是 Debian 及其派生 Linux 的软件包管理器,可以自动下载、配置、安装二进制或者源代码格式的软件包,因此简化了 Unix 系统上管理软件的过程。

用法:

复制代码
apt \[选项] 命令

命令行软件包管理器 apt 提供软件包搜索、管理和信息查询等功能。它提供的功能与其他 APT 工具相同(像 apt-get 和 apt-cache),但是默认情况下被设置得更适合交互。

常用命令:

命令 功能
list 根据名称列出软件包
search 搜索软件包描述
show 显示软件包细节
install 安装软件包
reinstall 重新安装软件包
remove 移除软件包
autoremove 卸载所有自动安装且不再使用的软件包
update 更新可用软件包列表
upgrade 通过安装 / 升级软件来更新系统
full-upgrade 通过卸载 / 安装 / 升级来更新系统
edit-sources 编辑软件源信息文件
satisfy 使系统满足依赖关系字符串

5.1 更新可用软件包列表

复制代码
sudo apt update

5.2 使用 APT 安装软件包

复制代码
sudo apt install net-tools

常用参数:-y 不确认直接安装。

5.3 使用 APT 卸载软件包

复制代码
sudo apt remove net-tools

常用参数:-y 不确认直接卸载。

5.4 使用 APT 搜索软件包

复制代码
sudo apt search net-tools

六、常用基本命令

6.1 帮助命令

6.1.1 man 手册页

手册页(Manual Packages),简称 "man pages",是 Unix 和类 Unix 系统(包括 Linux 和 macOS)上提供程序、函数、命令及文件格式文档的一种方式。手册页是用户和管理员获取命令用法、程序功能、配置文件规范和某些 API 函数描述的重要资源。

查看手册页说明文档的方式:

复制代码
man man

手册的章节号(页)及其包含的手册类型对应关系:

章节 类型 说明
1 可执行程序或 shell 命令 包含了绝大多数用户级别的外部命令或程序的文档,这些命令通常位于用户的 PATH 环境变量指定的目录下,如 /bin、/usr/bin 等
2 系统调用(内核提供的函数) 提供了内核提供的系统调用的文档,系统调用是应用程序与操作系统内核之间进行交互的接口
3 库调用(程序库中的函数) 包括标准 C 库函数和其他库函数的文档,这些库函数提供了执行特定任务(如字符串处理、文件操作)的编程接口
4 特殊文件(通常位于 /dev) 涉及到系统上的特殊文件,如设备文件的说明
5 文件格式和规范,如 /etc/passwd 描述了各种文件格式和配置文件的结构,比如 /etc/passwd 或 /etc/shadow 文件的格式
6 游戏和屏保 有些系统会在这一节中提供游戏和屏保程序的文档
7 杂项(包括宏包和规范) 包含了一些杂项文档,如宏包、约定等。如 man (7),groff (7),man-pages (7)
8 系统管理命令(通常只针对 root 用户) 提供了系统管理员级别的命令或程序的文档,这些命令通常位于 /sbin、/usr/sbin 等目录
9 内核例程(并非所有的发行版都有) 某些系统会提供内核级别函数和例程的文档

我们常用的文档位于第 1、2、3、7 页。

手册页引用格式: 执行 man man 命令,进入手册页浏览模式,左上角会显示 MAN(1),这就是手册页引用格式或 man 引用格式,括号前面是命令(或系统调用等)的名称,括号内是命令所在的手册页编号。

当存在多个同名但功能不同的命令或调用时,可以通过页编号区分。如:用户命令 write 位于第一页,用 write(1) 表示;系统调用 write 位于第 2 页,用 write(2) 表示。

基本语法:

复制代码
man \[页编号] \[命令或配置文件]

功能描述:获得帮助信息。

显示说明:

信息 功能
NAME 命令的名称和单行描述
SYNOPSIS 怎样使用命令
DESCRIPTION 命令功能的深入讨论
EXAMPLES 怎样使用命令的例子
SEE ALSO 相关主题(通常是手册页)

案例实操:

(1)查看 ls 命令的帮助信息

复制代码
man ls

(2)查看用户命令 write 的帮助信息

复制代码
man write

(3)查看系统调用 write 的帮助信息

复制代码
man 2 write

当手册页内存在多个同名命令(或系统调用等)时,不指定页编号,会从第一页开始扫描,展示第一个名称匹配的说明文档。同一页内不会存在名称相同的命令(或系统调用等)。如果想要搜索的不是第一个名称匹配的文档,则需要指定页编号。

6.1.2 help 获取 shell 内建命令的帮助信息

shell 内建命令是 shell 的一部分,它们没有单独的可执行文件或手册页,这类命令的文档通过 help 命令访问。

基本语法:

复制代码
help 命令

功能描述:获得 shell 内建命令的帮助信息。

案例实操: 查看 cd 命令的帮助信息

复制代码
help cd

输出:

复制代码
cd: cd \[-L|\[-P \[-e]] \[-@]] \[目录]

    改变当前工作目录。

改变当前目录至 <目录>。默认的 <目录> 是 shell 变量 HOME 的值。

变量 CDPATH 定义了搜索含有 <目录> 的目录的搜索路径。CDPATH 中额外的目录名称以冒号(:)隔开。空的 CDPATH 表示当前目录。如果 <目录> 以斜杠(/)开头,则不会使用 CDPATH。

如果找不到目录,并且 shell 选项 \`cdable\_vars\` 被设定,则假定参数是一个变量名。如果该变量有值,则它的值被当作 <目录>。
6.1.3 常用快捷键
常用快捷键 功能
ctrl + c 停止进程
ctrl+l 清屏;彻底清屏是:reset
ctrl + q 退出
善于用 tab 键 提示(更重要的是可以防止敲错)
上下键 查找执行过的命令
ctrl +u 清除当前敲的命令

6.2 文件目录类

6.2.1 pwd 显示当前工作目录的绝对路径

pwd:print working directory,打印工作目录。

基本语法:

复制代码
pwd

功能描述:显示当前工作目录的绝对路径。

案例实操:

复制代码
atguigu@ubuntu:\~/桌面\$ pwd
6.2.2 ls 列出目录的内容

ls:list,列出目录内容。

基本语法:

复制代码
ls \[选项] \[目录或是文件]

选项说明:

选项 功能
-a 全部的文件,连同隐藏档(开头为。的文件)一起列出来(常用)
-l 长数据串列出,包含文件的属性与权限等等数据(常用)

显示说明: 每行列出的信息依次是:文件类型与权限、链接数、文件属主、文件属组、文件大小(用 byte 来表示)、建立或最近修改的时间、名字。

案例实操:

(1)查看当前目录的所有内容信息

复制代码
ls -al

输出:

复制代码
总用量 44

drwx------. 5 atguigu atguigu 4096 5月 27 15:15 .

drwxr-xr-x. 3 root    root    4096 5月 27 14:03 ..

drwxrwxrwx. 2 root    root    4096 5月 27 14:14 hello

-rwxrw-r--. 1 atguigu atguigu   34 5月 27 14:20 test.txt

(2)Ubuntu 中 llls -alF 的别名,可以使用 ll 查看目录下的所有文件

复制代码
ll
6.2.3 cd 切换目录

cd:Change Directory,切换路径。

基本语法:

复制代码
cd \[参数]

参数说明:

参数 功能
cd 绝对路径 切换路径
cd 相对路径 切换路径
cd ~ 或者 cd 回到自己的家目录
cd - 回到上一次所在目录
cd .. 回到当前目录的上一级目录
cd -P 跳转到实际物理路径,而非快捷方式路径

案例实操:

(1)使用绝对路径切换到 root 目录

复制代码
cd /root/

(2)使用相对路径切换到 "公共的" 目录

复制代码
cd 公共的/

(3)表示回到自己的家目录,亦即是 /root 这个目录

复制代码
cd \~

(4)cd- 回到上一次所在目录

复制代码
cd -

(5)表示回到当前目录的上一级目录,亦即是 "/root/ 公共的" 的上一级目录的意思

复制代码
cd ..
6.2.4 mkdir 创建一个新的目录

mkdir:Make directory,建立目录。

基本语法:

复制代码
mkdir \[选项] 要创建的目录

选项说明:

选项 功能
-p 创建多层目录

案例实操:

(1)创建一个目录

复制代码
mkdir xiyou

mkdir xiyou/qujing

(2)创建一个多级目录

复制代码
mkdir -p xiyou/dssz/meihouwang
6.2.5 touch 创建空文件

基本语法:

复制代码
touch 文件名称

案例实操:

复制代码
touch xiyou/dssz/sunwukong.txt
6.2.6 cp 复制文件或目录

基本语法:

复制代码
cp \[选项] source dest

功能描述:复制 source 文件到 dest。

选项说明:

选项 功能
-r 递归复制整个文件夹

参数说明:

参数 功能
source 源文件
dest 目标文件

经验技巧: 强制覆盖不提示的方法:\cp

案例实操:

(1)复制文件

复制代码
cp xiyou/dssz/sunwukong.txt xiyou/qujing/

(2)递归复制整个文件夹

复制代码
cp -r xiyou/dssz/ ./
6.2.7 rm 删除文件或目录

基本语法:

复制代码
rm \[选项] deleteFile

功能描述:递归删除目录中所有内容。

选项说明:

选项 功能
-r 递归删除目录中所有内容
-f 强制执行删除操作,而不提示用于进行确认
-v 显示指令的详细执行过程

案例实操:

(1)删除目录中的内容

复制代码
rm xiyou/qujing/sunwukong.txt

(2)递归删除目录中所有内容

复制代码
rm -rf dssz/
6.2.8 mv 移动文件与目录或重命名

基本语法:

复制代码
mv oldNameFile newNameFile    # 功能描述:重命名

mv /temp/movefile /targetFolder  # 功能描述:移动文件

案例实操:

(1)重命名

复制代码
mv xiyou/dssz/sunwukong.txt xiyou/dssz/houge.txt

(2)移动文件

复制代码
mv xiyou/dssz/houge.txt ./
6.2.9 cat 查看文件内容

查看文件内容,从第一行开始显示。

基本语法:

复制代码
cat \[选项] 要查看的文件

选项说明:

选项 功能描述
-n 显示所有行的行号,包括空行

经验技巧: 一般查看比较小的文件,一屏幕能显示全的。

案例实操: 查看文件内容并显示行号

复制代码
cat -n houge.txt
6.2.10 more 文件内容分屏查看器

more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键。

基本语法:

复制代码
more 要查看的文件

操作说明:

操作 功能说明
空白键(space) 代表向下翻一页
Enter 代表向下翻「一行」
q 代表立刻离开 more,不再显示该文件内容
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号

案例实操:

(1)复制 .bashrc 文件到当前目录

复制代码
cp \~/.bashrc ./

(2)采用 more 查看文件

复制代码
more .bashrc
6.2.11 less 分屏显示文件内容

less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

基本语法:

复制代码
less 要查看的文件

操作说明:

操作 功能说明
空白键 向下翻动一页
[pagedown] 向下翻动一行
[pageup] 向上翻动一行
/字串 向下搜寻「字串」的功能;n:向下查找;N:向上查找
?字串 向上搜寻「字串」的功能;n:向上查找;N:向下查找
q 离开 less 这个程序

经验技巧: 用 SecureCRT 时 pagedownpageup 可能会出现无法识别的问题。

案例实操: 采用 less 查看文件

复制代码
less .bashrc
6.2.12 tail 输出文件尾部内容

tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。

基本语法:

复制代码
tail 文件          # 功能描述:查看文件尾部 10 行内容

tail -n 5 文件     # 功能描述:查看文件尾部 5 行内容,5 可以是任意行数

tail -f 文件       # 功能描述:实时追踪该文档的所有更新

选项说明:

选项 功能
-n<行数> 输出文件尾部 n 行内容
-f 显示文件最新追加的内容,监视文件变化

案例实操:

(1)查看文件尾 1 行内容

复制代码
tail -n 1 .bashrc

(2)实时追踪该档的所有更新

复制代码
tail -f houge.txt
6.2.13 echo

echo 输出内容到控制台。

基本语法:

复制代码
echo \[选项] \[输出内容]

选项:-e:支持反斜线控制的字符转换。

控制字符 作用
\\ 输出 \ 本身
\n 换行符
\t 制表符,也就是 Tab 键

案例实操:

复制代码
echo "hello\tworld"

\# 输出:hello\tworld

echo -e "hello\tworld"

\# 输出:hello    world
6.2.14 > 输出重定向和 >> 追加

基本语法:

复制代码
ls -l > 文件      # 功能描述:列表的内容写入文件 a.txt 中(覆盖写)

ls -al >> 文件    # 功能描述:列表的内容追加到文件 aa.txt 的末尾

cat 文件1 > 文件2 # 功能描述:将文件1的内容覆盖到文件2

echo "内容" >> 文件

案例实操:

(1)将 ls 查看信息写入到文件中

复制代码
ls -l > houge.txt

(2)将 ls 查看信息追加到文件中

复制代码
ls -l >> houge.txt

(3)采用 echo 将 hello 单词追加到文件中

复制代码
echo hello >> houge.txt
6.2.15 ln 软链接

软链接也成为符号链接,类似于 Windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。

基本语法:

复制代码
ln -s \[原文件或目录] \[软链接名]

功能描述:给原文件创建一个软链接。

经验技巧:

  • 删除软链接:rm -rf 软链接名,而不是 rm -rf 软链接名/

  • 查询:通过 ll 就可以查看,列表属性第 1 位是 l,尾部会有位置指向

案例实操:

(1)创建软连接

复制代码
mv houge.txt xiyou/dssz/

ln -s xiyou/dssz/houge.txt ./houzi

ll

输出:

复制代码
lrwxrwxrwx. 1 root root 20 6月 17 12:56 houzi -> xiyou/dssz/houge.txt

(2)删除软连接

复制代码
rm -rf houzi

注意:rm -rf houzi/ 这样删是删不掉的,不能在软连接后面加 /

(3)进入软连接实际物理路径

复制代码
ln -s xiyou/dssz/ ./dssz

cd -P dssz/
6.2.16 history 查看已经执行过历史命令

基本语法:

复制代码
history

功能描述:查看已经执行过历史命令。

案例实操:

复制代码
history

6.3 VI/VIM 编辑器

6.3.1 vi/vim 是什么

VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。

VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。

在终端中执行以下命令安装 vim:

复制代码
sudo apt install vim
6.3.2 测试数据准备

拷贝 /etc/profile 数据到当前目录下:

复制代码
cp /etc/profile ./
6.3.3 一般模式

以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,可以使用上下左右按键来移动光标,可以使用删除字符或删除整行来处理档案内容,也可以使用复制、贴上处理文件数据。

常用语法:

语法 功能描述
yy 复制光标当前一行
y 数字 y 复制一段(从光标当前行到后 n 行)
p 箭头移动到目的行粘贴
u 撤销上一步
dd 删除光标当前行
d 数字 d 删除光标(含)后多少行
x 剪切一个字母(当前光标),相当于 del
X 剪切一个字母(当前光标的前一个),相当于 Backspace
yw 复制一个词
dw 删除一个词
shift+6(^) 移动到行头
shift+4($) 移动到行尾
1+shift+g 移动到页头,数字
shift+g 移动到页尾
数字 N+shift+g 移动到目标行
6.3.4 编辑模式

在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容。要等到按下 i, I, o, O, a, A 等任何一个字母之后才会进入编辑模式。

通常在 Linux 中,按下这些按键时,在画面的左下方会出现 INSERTREPLACE 的字样,此时才可以进行编辑。而如果要回到一般模式时,则必须要按下 Esc 这个按键即可退出编辑模式。

进入编辑模式:

按键 功能
i 当前光标前
a 当前光标后
o 当前光标行的下一行
I 光标所在行最前
A 光标所在行最后
O 当前光标行的上一行

退出编辑模式:Esc 键。

6.3.5 指令模式

在一般模式当中,输入 : / ? 3 个中的任何一个按钮,就可以将光标移动到最底下那一行。

在这个模式当中,可以提供搜寻资料的动作,而读取、存盘、大量取代字符、离开 vi、显示行号等动作是在此模式中达成的。

基本语法:

命令 功能
:w 保存
:q 退出
:! 强制执行
/要查找的词 n 查找下一个,N 往上查找
:noh 取消高亮显示
:set nu 显示行号
:set nonu 关闭行号
:%s/old/new/g 替换内容,/g global 替换匹配到的所有内容

案例实操:

(1)保存退出:对于有写权限的文件,修改后,保存并退出。

复制代码
:wq

(2)直接退出:没有修改文件内容,直接退出。

复制代码
:q

(3)强制退出:修改了文件内容,但是不想保存,此时需要强制退出。

复制代码
:q!

(4)强制保存退出:对于没有写权限的文件,修改后,必须强制保存退出方可保留更改。

复制代码
:wq!
6.3.6 模式间转换
  • 在命令行下执行 vim xxx 进入一般模式,主要操作:删除、复制、粘贴

  • 在一般模式下按 i、a 或者 o 进入编辑模式,主要操作:编辑文本

  • 在编辑模式下按 ESC 回到一般模式

  • 在一般模式下输入 : 或者 / 进入命令模式

  • 在命令模式下执行 :wq :q :q! :wq! 等命令

6.4 时间日期类

6.4.1 date 显示当前时间

基本语法:

复制代码
date \[OPTION]... \[+FORMAT]

选项说明:

选项 功能
-d<时间字符串> 显示指定的 "时间字符串" 表示的时间,而非当前时间
-s<日期时间> 设置系统日期时间

参数说明:

参数 功能
<+日期时间格式> 指定显示时使用的日期时间格式
6.4.2 date 显示当前时间
命令 功能描述
date 显示当前时间
date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" 显示年月日时分秒

案例实操:

(1)显示当前时间信息

复制代码
date

\# 输出:2017年 06月 19日 星期一 20:53:30 CST

(2)显示当前时间年月日

复制代码
date +%Y%m%d

\# 输出:20170619

(3)显示当前时间年月日时分秒

复制代码
date "+%Y-%m-%d %H:%M:%S"

\# 输出:2017-06-19 20:54:58
6.4.3 date 显示非当前时间
命令 功能描述
date -d '1 days ago' 显示前一天时间
date -d '-1 days ago' 显示明天时间

案例实操:

(1)显示前一天

复制代码
date -d '1 days ago'

\# 输出:2017年 06月 18日 星期日 21:07:22 CST

(2)显示明天时间

复制代码
date -d '-1 days ago'

\# 输出:2017年 06月 20日 星期二 21:07:22 CST
6.4.4 date 设置系统时间

基本语法:

复制代码
date -s 字符串时间

案例实操: 设置系统当前时间

复制代码
date -s "2017-06-19 20:52:18"

6.5 用户管理命令

6.5.1 adduser 添加新用户

基本语法:

复制代码
adduser 用户名

功能描述:添加新用户。

应用场景 1:企业开发,多人协同(也会有多人使用相同的一个低权限用户)。

应用场景 2:框架协同 gitlab mysql redis。

案例实操: 添加一个用户

复制代码
sudo adduser tangseng

输出:

复制代码
正在添加用户"tangseng"...

正在添加新组"tangseng" (1001)...

正在添加新用户"tangseng" (1001) 到组"tangseng"...

创建主目录"/home/tangseng"...

正在从"/etc/skel"复制文件...

新的密码:

无效的密码: 密码是一个回文

重新输入新的密码:

passwd:已成功更新密码

正在改变 tangseng 的用户信息

请输入新值,或直接敲回车键以使用默认值

&#x20;   全名 \[]: 唐僧

&#x20;   房间号码 \[]: 1

&#x20;   工作电话 \[]:

&#x20;   家庭电话 \[]:

&#x20;   其它 \[]:

chfn: 名称中有非 ASCII 字符: "唐僧"

这些信息是否正确? \[Y/n] y

按提示输入密码、用户信息即可。然后执行 ll /home/ 可以看到新创建的用户目录。

6.5.2 passwd 设置或更改用户密码

基本语法:

复制代码
passwd 用户名

功能描述:设置用户密码。

案例实操: 更改用户的密码

复制代码
sudo passwd tangseng
6.5.3 id 查看用户是否存在

基本语法:

复制代码
id 用户名

案例实操: 查看用户是否存在

复制代码
id tangseng
6.5.4 cat /etc/passwd 查看创建了哪些用户

基本语法:

复制代码
cat /etc/passwd
6.5.5 su 切换用户

su:swith user,切换用户。

基本语法:

复制代码
su 用户名称      # 功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量

su - 用户名称    # 功能描述:切换到用户并获得该用户的环境变量及执行权限

案例实操:

(1)切换用户

复制代码
su tangseng

echo \$PATH

\# 输出:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

exit

su - tangseng

echo \$PATH

\# 输出:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tangseng/bin
6.5.6 userdel 删除用户

基本语法:

复制代码
userdel 用户名      # 功能描述:删除用户但保存用户主目录

userdel -r 用户名   # 功能描述:用户和用户主目录,都删除

选项说明:

选项 功能
-r 删除用户的同时,删除与用户相关的所有文件

案例实操:

(1)删除用户但保存用户主目录

复制代码
sudo userdel tangseng

ll /home/

(2)删除用户和用户主目录,都删除

复制代码
sudo adduser zhubajie

ll /home/

sudo userdel -r zhubajie

ll /home/
6.5.7 usermod 修改用户

基本语法:

复制代码
usermod -l 新用户名 老用户名

usermod -d /home/新用户名 -m 新用户名

选项说明:

选项 功能
-l 改变用户名
-d 修改家目录

案例实操:

(1)改变用户名

复制代码
sudo usermod -l meihouwang sunwukong

(2)更改家目录

复制代码
sudo usermod -d /home/meihouwang -m meihouwang

6.6 用户组管理命令

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同。

如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新。

6.6.1 groupadd 新增组

基本语法:

复制代码
groupadd 组名

案例实操: 添加一个 xitianqujing 组

复制代码
sudo groupadd xitianqujing
6.6.2 groupdel 删除组

基本语法:

复制代码
groupdel 组名

案例实操: 删除 xitianqujing 组

复制代码
sudo groupdel xitianqujing
6.6.3 groupmod 修改组

基本语法:

复制代码
groupmod -n 新组名 老组名

选项说明:

选项 功能描述
-n<新组名> 指定工作组的新组名

案例实操: 修改 xitianqujing 组名称为 xitian

复制代码
sudo groupmod -n xitian xitianqujing
6.6.4 usermod 修改用户主组

在 Linux 和 Unix 系统中,每个用户都有一个主组(primary group)和可能的多个附加组(secondary groups 或 additional groups)。

用户的主组在用户创建时被指定,默认与用户名称相同,当用户创建一个新文件或目录时,默认情况下,这些文件或目录会被分配给用户的主组。

基本语法:

复制代码
usermod -g 组名 用户名

选项说明:

选项 功能描述
-g 指定用户的新主组

案例实操:

(1)查看用户主组:默认情况下用户的家目录会被分配给主组。

复制代码
sudo adduser zhubajie

ll /home

可以看到,zhubajie 所属的主组为 zhubajie。

(2)切换用户主组

复制代码
sudo usermod -g xitian zhubajie

ll /home

可以看到 zhubajie 的主组已经变为 xitian。

6.6.5 查看附加组和用户的映射关系

/etc/group 文件存储了用户和附加组的映射关系,每一行对应一个用户组,第三个冒号后面是以该组作为附加组的用户列表,列表为空表示没有用户将其作为附加组。

复制代码
cat /etc/group
6.6.6 将用户添加到附加组

基本语法:

复制代码
usermod -aG 组名 用户名

选项说明:

选项 功能描述
-aG 指定用户需要加入的附加组

案例实操:

(1)查看 atguigu 组的用户列表

复制代码
sudo cat /etc/group

atguigu 组的用户列表为空。

(2)将 atguigu 作为 zhubajie 的附加组

复制代码
sudo usermod -aG atguigu zhubajie

sudo cat /etc/group

可以看到 atguigu 组后面出现了 zhubajie。

6.6.7 将用户从组中移除

基本语法:

复制代码
deluser 用户名 组名

案例实操:

复制代码
sudo deluser zhubajie atguigu

\# 输出:正在将用户"zhubajie"从组"atguigu"中删除... 完成。
6.6.8 sudo 设置普通用户具有 root 权限

sudo 是将对应的命令给到 root 用户去执行。

(1)将 meihouwang 更名为 sunwukong

复制代码
sudo usermod -l sunwukong meihouwang

sudo usermod -d /home/sunwukong -m sunwukong

(2)修改配置文件

复制代码
sudo vim /etc/sudoers

找到下面一行(50 行):

复制代码
\# Allow members of group sudo to execute any command

%sudo   ALL=(ALL:ALL) ALL

这行的作用是允许 sudo 组的所有成员执行任何命令,换言之,该组成员都拥有了 root 权限。但是通过 sudo 命令操作时需要输入密码。在最后一个 ALL 前添加 NOPASSWD:,则该组的成员通过 sudo 命令操作时不必输入密码。

复制代码
\# Allow members of group sudo to execute any command

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

保存退出。注意:sudoers 文件没有写权限,保存退出要用 wq!

(3)查看 sudo 组的成员

复制代码
sudo cat /etc/group

可以看到,atguigu 用户已经在 sudo 组中,因此之前我们并没有做 sudo 相关的配置,但是 atguigu 用户却可以获得 root 权限。

(4)将 sunwukong 添加到 sudo 组中

复制代码
sudo usermod -aG sudo sunwukong

(5)重新查看 sudo 组的成员

复制代码
sudo cat /etc/group

可以看到 sudo 组中出现了 sunwukong。

(6)案例实操

切换到 sunwukong:

复制代码
su - sunwukong

用普通用户 sunwukong 查看 /etc 下的 hostname 文件:

复制代码
cat /etc/sudoers

\# 输出:cat: /etc/sudoers: 权限不够

使用 root 权限查看:

复制代码
sudo cat /etc/sudoers

普通控制台会打印 sudoers 文件的内容。

切换回 atguigu 用户:

复制代码
exit

6.7 文件权限类

6.7.1 文件属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在 Linux 中我们可以使用 ll 或者 ls -l 命令来显示一个文件的属性以及文件所属的用户和组。

文件属性:从左到右的 10 个字符表示

第 0 位表示类型:

  • - 代表文件

  • d 代表目录

  • l 链接文档(link file)

第 1-3 位确定属主(该文件的所有者)拥有该文件的权限(User)

第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限(Group)

第 7-9 位确定其他用户拥有该文件的权限(Other)

rwx 作用文件和目录的不同解释:

(1)作用到文件:

  • [r] 代表可读(read):可以读取,查看

  • [w] 代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件

  • [x] 代表可执行(execute):可以被系统执行

(2)作用到目录:

  • [r] 代表可读(read):可以读取,ls 查看目录内容

  • [w] 代表可写(write):可以修改,目录内创建 + 删除 + 重命名目录

  • [x] 代表可执行(execute):可以进入该目录

案例实操:

复制代码
ll

输出:

复制代码
总用量 104

-rw-------. 1 root root 1248 1月  8 17:36 anaconda-ks.cfg

drwxr-xr-x. 2 root root 4096 1月 12 14:02 dssz

lrwxrwxrwx. 1 root root   20 1月 12 14:32 houzi -> xiyou/dssz/houge.txt

(1)文件基本属性介绍:文件类型与权限、链接数、文件属主、文件属组、文件大小、建立或最近修改的时间、文件名字。

(2)如果查看到是文件:链接数指的是硬链接个数。创建硬链接方法:

复制代码
ln \[原文件] \[目标文件]

ln xiyou/dssz/houge.txt ./hg.txt

(3)如果查看的是文件夹:链接数指的是子文件夹个数。

复制代码
ls -al xiyou/
6.7.2 chmod 改变权限

基本语法:

第一种方式变更权限:

复制代码
chmod \[{ugoa}{+-=}{rwx}] 文件或目录

第二种方式变更权限:

复制代码
chmod \[mode=421] 文件或目录

经验技巧:

  • U:所有者;g:所有组;o:其他人;a:所有人(u、g、o 的总和)

  • r=4 w=2 x=1,rwx=4+2+1=7

案例实操:

(1)修改文件使其所属主用户具有执行权限

复制代码
cp xiyou/dssz/houge.txt ./

chmod u+x houge.txt

(2)修改文件使其所属组用户具有执行权限

复制代码
chmod g+x houge.txt

(3)修改文件所属主用户执行权限,并使其他用户具有执行权限

复制代码
chmod u-x,o+x houge.txt

(4)采用数字的方式,设置文件所有者、所属组、其他用户都具有可读可写可执行权限

复制代码
chmod 777 houge.txt

(5)修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限

复制代码
chmod -R 777 xiyou/
6.7.3 chown 改变所有者

基本语法:

复制代码
chown \[选项] \[最终用户] \[文件或目录]

功能描述:改变文件或者目录的所有者。

选项说明:

选项 功能
-R 递归操作

案例实操:

(1)修改文件所有者

复制代码
sudo chown sunwukong houge.txt

ll

输出中 houge.txt 的属主变为 sunwukong。

(2)递归改变文件所有者和所有组

复制代码
cd xiyou/

ll

sudo chown -R sunwukong:sunwukong ../xiyou/

ll
6.7.4 chgrp 改变所属组

基本语法:

复制代码
chgrp \[最终用户组] \[文件或目录]

功能描述:改变文件或者目录的所属组。

案例实操: 修改文件的所属组

复制代码
cd ..

ll

sudo chgrp root houge.txt

ll

6.8 搜索查找类

6.8.1 find 查找文件或者目录

find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端。

基本语法:

复制代码
find \[搜索范围] \[选项]

选项说明:

选项 功能
-name<查询方式> 按照指定的文件名查找模式查找文件
-user<查询方式> 查找属于指定用户名所有文件
-size<文件大小> 按照指定的文件大小查找文件,单位为:b------ 块(512 字节)、c------ 字节、w------ 字(2 字节)、k------ 千字节、M------ 兆字节、G------ 吉字节

案例实操:

(1)按文件名:根据名称查找当前目录下所有以 .txt 结尾的文件

复制代码
find ./ -name "\*.txt"

(2)按拥有者:查找当前目录下,用户名称为 atguigu 的文件

复制代码
find ./ -user atguigu

(3)按文件大小:在当前目录下查找大于 200 字节的文件(+n 大于、-n 小于、n 等于)

复制代码
find ./ -size +200c
6.8.2 grep 过滤查找及 "|" 管道符

管道符 | 表示将前一个命令的处理结果输出传递给后面的命令处理。

基本语法:

复制代码
grep 选项 查找内容 源文件

选项说明:

选项 功能
-n 显示匹配行及行号

案例实操: 查找某文件在第几行

复制代码
ls | grep -n houge

6.9 压缩和解压类

6.9.1 gzip/gunzip 压缩

基本语法:

复制代码
gzip 文件        # 功能描述:压缩文件,只能将文件压缩为 \*.gz 文件

gunzip 文件.gz   # 功能描述:解压缩文件命令

经验技巧:

  • 只能压缩文件不能压缩目录

  • 不保留原来的文件

案例实操:

(1)gzip 压缩

复制代码
ls

\# 输出:a dssz hg.txt houge.txt profile xiyou

gzip houge.txt

ls | grep houge

\# 输出:houge.txt.gz

(2)gunzip 解压缩文件

复制代码
gunzip houge.txt.gz

ls | grep houge

\# 输出:houge.txt
6.9.2 tar 打包

基本语法:

复制代码
tar \[选项] XXX.tar.gz 将要打包进去的内容

功能描述:打包目录,压缩后的文件格式 .tar.gz。

选项说明:

选项 功能
-c 产生 .tar 打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包 .tar 文件

案例实操:

(1)压缩多个文件

复制代码
touch bailongma.txt

tar -zcvf houma.tar.gz houge.txt bailongma.txt

ls

\# 输出:a bailongma.txt dssz hg.txt houge.txt houma.tar.gz profile xiyou

(2)压缩目录

复制代码
tar -zcvf xiyou.tar.gz xiyou/

ls

\# 输出:a bailongma.txt dssz hg.txt houge.txt houma.tar.gz profile xiyou xiyou.tar.gz

(3)解压到当前目录

复制代码
mkdir houma\_test

cd houma\_test/

mv ../houma.tar.gz ./

ls

\# 输出:houma.tar.gz

tar -zxvf houma.tar.gz

\# 输出:houge.txt bailongma.txt

ls

\# 输出:bailongma.txt houge.txt houma.tar.gz

(4)解压到指定目录

复制代码
mkdir xiyou2

tar -zxvf xiyou.tar.gz -C ./xiyou2

ls xiyou2/

\# 输出:xiyou

6.10 磁盘类

6.10.1 df 查看磁盘空间使用情况

df:disk free,空余硬盘。

基本语法:

复制代码
df 选项

功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况。

选项说明:

选项 功能
-h 以人们较易阅读的 GBytes、MBytes、KBytes 等格式自行显示

案例实操: 查看磁盘使用情况

复制代码
df -h

输出:

复制代码
Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2        15G  3.5G   11G  26% /

tmpfs           939M  224K  939M   1% /dev/shm

/dev/sda1       190M   39M  142M  22% /boot
6.10.2 du 文件和目录的磁盘使用空间

基本语法:

复制代码
du 目录/文件

功能描述:统计文件或递归显示目录及子目录的磁盘使用空间。

选项说明:

选项 功能
-a 显示当前目录下所有的文件目录及子目录大小

案例实操:

(1)查看文件的空间使用情况

复制代码
du houge.txt

\# 输出:4 houge.txt

(2)查看目录及子目录的空间使用情况

复制代码
du xiyou

\# 输出:

\# 4  xiyou/dssz/meihouwang

\# 12 xiyou/dssz

\# 4  xiyou/qujing

\# 20 xiyou

(3)查看目录、子目录及目录下所有文件的空间使用情况

复制代码
du -a xiyou

6.11 进程线程类

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

6.11.1 ps 查看当前系统进程状态

ps:process status,进程状态。

基本语法:

复制代码
ps -aux | grep xxx    # 功能描述:查看系统中所有进程

ps -ef | grep xxx     # 功能描述:可以查看子父进程之间的关系

选项说明:

选项 功能
-a 选择所有进程
-u 显示所有用户的所有进程
-x 显示没有终端的进程

功能说明:

(1)ps -aux 显示信息说明:

  • USER:该进程是由哪个用户产生的

  • PID:进程的 ID 号

  • % CPU:该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源

  • % MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源

  • VSZ:该进程占用虚拟内存的大小,单位 KB

  • RSS:该进程占用实际物理内存的大小,单位 KB

  • TTY:该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端,tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 代表虚拟终端

  • STAT:进程状态。常见的状态有:R 运行、S 睡眠、T 停止状态、s 包含子进程、+ 位于后台

  • START:该进程的启动时间

  • TIME:该进程占用 CPU 的运算时间,注意不是系统时间

  • COMMAND:产生此进程的命令名

(2)ps -ef 显示信息说明:

  • UID:用户 ID

  • PID:进程 ID

  • PPID:父进程 ID

  • C:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高

  • STIME:进程启动的时间

  • TTY:完整的终端名称

  • TIME:CPU 时间

  • CMD:启动进程所用的命令和参数

经验技巧:

  • 如果想查看进程的 CPU 占用率和内存占用率,可以使用 aux

  • 如果想查看进程的父进程的进程 ID 可以使用 ef

案例实操:

(1)查看进程的 CPU 占用率和内存占用率

复制代码
ps -aux

(2)查看进程的父进程 ID

复制代码
ps -ef
6.11.2 kill 终止进程

基本语法:

复制代码
kill \[选项] 进程号      # 功能描述:通过进程号杀死进程

killall 进程名称        # 功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用

选项说明:

选项 功能
-9 表示强迫进程立即停止

案例实操:

(1)开启多个终端:在 XShell 中双击开启的标签,即可打开新的终端。准备两个终端。

(2)监控 houge.txt:在其中一个终端中执行以下命令

复制代码
tail -F houge.txt

(3)查看 tail 进程号:在另一个终端中查看进程号

复制代码
ps -ef | grep tail

(4)杀死 tail 进程

复制代码
kill -9 43823

此时,另一个终端可以看到提示,进程已被杀死。

(5)通过名称杀死进程:killall 命令可以根据名称杀死进程,此处的进程名称是精确匹配。通常进程名称为启动命令中可执行文件的名称。对于 tail -F houge.txt 启动的进程,其进程名称为 tail。

复制代码
killall tail

可以看到另外两个终端的 tail 进程均被杀死。

6.11.3 查看服务器总体内存

基本语法:

复制代码
free -m

功能描述:查看服务器总体内存。

案例实操:

复制代码
man free

输出:

复制代码
&#x20;             total   used   free   shared  buff/cache  available

Mem:           3934    543   2879       12         511       3093

Swap:          4095      0   4095
6.11.4 top 查看系统健康状态

基本命令:

复制代码
top \[选项]

选项说明:

选项 功能
-d 秒数 指定 top 命令每隔几秒更新。默认是 3 秒
-i 使 top 不显示任何闲置或者僵死进程
-p 通过指定监控进程 ID 来仅仅监控某个进程的状态

操作说明:

操作 功能
P 以 CPU 使用率排序,默认就是此项
M 以内存的使用率排序
N 以 PID 排序
q 退出 top

查询结果字段解释:

(1)第一行信息为任务队列信息

内容 说明
12:26:46 系统当前时间
up 1 day, 13:32 系统的运行时间,本机已经运行 1 天 13 小时 32 分钟
2 users 当前登录了两个用户
load average: 0.00, 0.00, 0.00 系统在之前 1 分钟,5 分钟,15 分钟的平均负载。一般认为小于 1 时,负载较小。如果大于 1,系统已经超出负荷

(2)第二行为进程信息

Tasks: 95 total 系统中的进程总数
1 running 正在运行的进程数
94 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程。如果不是 0,需要手工检查僵尸进程

(3)第三行为 CPU 信息

Cpu(s): 0.1%us 用户模式占用的 CPU 百分比
0.1%sy 系统模式占用的 CPU 百分比
0.0%ni 改变过优先级的用户进程占用的 CPU 百分比
99.7%id 空闲 CPU 的 CPU 百分比
0.1%wa 等待输入 / 输出的进程的占用 CPU 百分比
0.0%hi 硬中断请求服务占用的 CPU 百分比
0.1%si 软中断请求服务占用的 CPU 百分比
0.0%st st(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

(4)第四行为物理内存信息

Mem: 625344k total 物理内存的总量,单位 KB
571504k used 已经使用的物理内存数量
53840k free 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了 628MB 内存,所以只有 53MB 的空闲内存了
65800k buffers 作为缓冲的内存数量

(5)第五行为交换分区(swap)信息

Swap: 524280k total 交换分区(虚拟内存)的总大小
0k used 已经使用的交换分区的大小
524280k free 空闲交换分区的大小
409280k cached 作为缓存的交互分区的大小

案例实操:

复制代码
top -d 1

top -i

top -p 2575

执行上述命令后,可以按 P、M、N 对查询出的进程结果进行排序。

6.11.5 netstat 显示网络统计信息和端口占用情况

基本语法:

复制代码
netstat -anp | grep 进程号    # 功能描述:查看该进程网络信息

netstat -nlp | grep 端口号    # 功能描述:查看网络端口号占用情况

选项说明:

选项 功能
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 listen(监听)的服务状态
-p 表示显示哪个进程在调用

案例实操:

(1)通过 nc 命令监听某个端口

复制代码
nc -lk 12345

上述命令表示监听本机 12345 端口。

(2)在另一个终端查看进程号

复制代码
ps -ef | grep "nc -lk 12345"

(3)通过进程号查看该进程的网络信息

复制代码
netstat -anp | grep 44118

(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)

输出:

复制代码
tcp   0   0 0.0.0.0:12345   0.0.0.0:\*   LISTEN   44118/nc

(4)查看某端口号是否被占用

复制代码
netstat -nlp | grep 12345

6.12 crontab 系统定时任务

6.12.1 crontab 服务管理

重新启动 crond 服务:

复制代码
sudo systemctl restart cron
6.12.2 crontab 定时任务设置

基本语法:

复制代码
crontab \[选项]

选项说明:

选项 功能
-e 编辑 crontab 定时任务
-l 查询 crontab 任务
-r 删除当前用户所有的 crontab 任务

选择编辑器:

复制代码
crontab -e

执行上述命令,系统会提示我们选择编辑器,此处没有 vim。可以通过 EDITOR 环境变量在执行 crontab 时选择编辑器:

复制代码
EDITOR=vim crontab -e

参数说明:

(1)执行上述命令会进入 crontab 编辑界面,并打开 vim 编辑定时任务。

复制代码
\* \* \* \* \* 执行的任务
项目 含义 范围
第一个 * 一小时当中的第几分钟 0-59
第二个 * 一天当中的第几小时 0-23
第三个 * 一个月当中的第几天 1-31
第四个 * 一年当中的第几月 1-12
第五个 * 一周当中的星期几 0-7(0 和 7 都代表星期日)

(2)特殊符号

特殊符号 含义
* 代表任何时间。比如第一个 * 就代表一小时中每分钟都执行一次的意思
, 代表不连续的时间。比如 0 8,12,16 * * * 命令,就代表在每天的 8 点 0 分,12 点 0 分,16 点 0 分都执行一次命令
- 代表连续的时间范围。比如 0 5 * * 1-6 命令,代表在周一到周六的凌晨 5 点 0 分执行命令
*/n 代表每隔多久执行一次。比如 */10 * * * * 命令,代表每隔 10 分钟就执行一遍命令

(3)特定时间执行命令

时间 含义
45 22 * * * 命令 在 22 点 45 分执行命令
0 17 * * 1 命令 每周 1 的 17 点 0 分执行命令
0 5 1,15 * * 命令 每月 1 号和 15 号的凌晨 5 点 0 分执行命令
40 4 * * 1-5 命令 每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 * * * 命令 每天的凌晨 4 点,每隔 10 分钟执行一次命令
0 0 1,15 * 1 命令 每月 1 号和 15 号,每周 1 的 0 点 0 分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱

案例实操:

(1)监听 bailongma.txt

复制代码
tail -F bailongma.txt

(2)每隔 1 分钟,向 /home/atguigu/ 桌面 /bailongma.txt 文件中添加一个 11 的数字

复制代码
\*/1 \* \* \* \* /bin/echo "11" >> /home/atguigu/桌面/bailongma.txt

(3)查看效果

复制代码
tail -F bailongma.txt

可以看到文件中不断出现数字 11。


七、常见错误及解决方案

7.1 虚拟化支持异常情况

在使用 VMware 安装 Ubuntu 等 64 位操作系统时,可能遇到以下几种虚拟化支持异常:

异常情况一: 启动虚拟机时提示内核需要 x86-64 CPU,但只检测到 i686 CPU,无法启动。

复制代码
Loading vmlinuz......

Loading initrd.img................................ready.

This kernel requires an x86-64 CPU, but only detected an i686 CPU.

Unable to boot - please use a kernel appropriate for your CPU.

异常情况二: 提示主机 BIOS / 固件中禁用了硬件虚拟化,正在使用带有软件 MMU 的软件虚拟化。

复制代码
Hardware virtualization is disabled in the host's BIOS/firmware.

Using software virtualization with a software MMU.

异常情况三: 提示此平台上二进制转换与长模式不兼容,长模式将在此虚拟环境中被禁用。

复制代码
Binary translation is incompatible with long mode on this platform.

Long mode will be disabled in this virtual environment. Applications

requiring long mode will not function properly as a result.

异常情况四: 提示此虚拟机配置为 64 位客户机操作系统,但 64 位操作不可用。主机支持 Intel VT-x,但 Intel VT-x 被禁用。

复制代码
This virtual machine is configured for 64-bit guest operating systems.

However, 64-bit operation is not possible.

This host supports Intel VT-x, but Intel VT-x is disabled.

Intel VT-x might be disabled if it has been disabled in the BIOS/firmware

settings or the host has not been power-cycled since changing this setting.

(1) Verify that the BIOS/firmware settings enable Intel VT-x and disable

'trusted execution'.

(2) Power-cycle the host if either of these BIOS/firmware settings have been

changed.

(3) Power-cycle the host if you have not done so since installing VMware

Workstation.

(4) Update the host's BIOS/firmware to the latest version.

7.2 问题原因

宿主机 BIOS 设置中的硬件虚拟化被禁用了。

7.3 解决办法

需要打开笔记本 BIOS 中的 IVT(Intel Virtualization Technology)对虚拟化的支持。

进入 BIOS 设置界面后,找到 Virtualization 或 Intel ® Virtualization Technology 选项,将其设置为 Enabled,保存并退出即可。

速查表

概念 语法 / 示例 说明
查看当前路径 pwd 显示当前工作目录的绝对路径
列出目录内容 ls -al / ll 显示所有文件及详细属性
切换目录 cd 路径 / cd ~ / cd - / cd .. 支持绝对路径、相对路径、家目录、上一次目录
创建目录 mkdir -p 多级目录 -p 创建多层目录
创建空文件 touch 文件名 创建空文件或更新时间戳
复制文件 / 目录 cp -r 源 目标 -r 递归复制文件夹
删除文件 / 目录 rm -rf 文件/目录 -r 递归,-f 强制不提示
移动 / 重命名 mv 旧名 新名 同目录重命名,不同目录移动
查看文件内容 cat -n 文件 从小文件,-n 显示行号
分屏查看 more 文件 / less 文件 more 向下翻页,less 更强大支持上下翻和搜索
查看文件尾部 tail -f 文件 -f 实时追踪文件更新
输出内容 echo -e "内容" -e 支持转义字符
输出重定向 ls > 文件 / ls >> 文件 > 覆盖写,>> 追加写
软链接 ln -s 原文件 链接名 类似 Windows 快捷方式
历史命令 history 查看已执行过的命令
服务管理 systemctl start/stop/restart/status 服务名 管理系统服务
开机自启 systemctl enable/disable 服务名 开启 / 关闭服务开机自启
关机重启 shutdown -h now / reboot / poweroff 关机、重启、断电
修改主机名 hostnamectl --static set-hostname 名称 永久修改主机名
软件安装 apt install 包名 APT 安装软件包
软件卸载 apt remove 包名 APT 卸载软件包
更新源 apt update 更新可用软件包列表
添加用户 adduser 用户名 添加新用户并创建家目录
设置密码 passwd 用户名 设置或更改用户密码
切换用户 su - 用户名 切换用户并加载环境变量
删除用户 userdel -r 用户名 -r 同时删除家目录
修改用户 usermod -l 新名 旧名 修改用户名、家目录、主组、附加组
添加组 groupadd 组名 新增用户组
删除组 groupdel 组名 删除用户组
修改组 groupmod -n 新名 旧名 修改组名
修改主组 usermod -g 组名 用户名 修改用户主组
添加附加组 usermod -aG 组名 用户名 将用户添加到附加组
sudo 权限 编辑 /etc/sudoers,添加 %sudo ALL=(ALL:ALL) NOPASSWD:ALL 配置 sudo 组免密执行
修改权限 chmod 777 文件 / chmod u+x 文件 数字方式或符号方式修改权限
修改所有者 chown -R 用户:组 文件/目录 -R 递归修改
修改所属组 chgrp 组名 文件 修改文件所属组
查找文件 find 路径 -name "*.txt" 按名称、用户、大小查找
过滤查找 grep -n 内容 文件 -n 显示行号,配合管道符使用
gzip 压缩 gzip 文件 / gunzip 文件.gz 只能压缩文件,不保留原文件
tar 打包 tar -zcvf 包名.tar.gz 内容 / tar -zxvf 包名.tar.gz -C 目录 -z 压缩,-c 打包,-x 解包,-C 指定目录
查看磁盘 df -h 查看文件系统磁盘使用量
查看目录大小 du -a 目录 统计文件和目录磁盘占用
查看进程 ps -aux / ps -ef aux 看 CPU / 内存,ef 看父子进程关系
杀死进程 kill -9 进程号 / killall 进程名 -9 强制终止
查看内存 free -m 以 MB 为单位查看内存
系统健康 top -d 秒数 实时监控系统状态,P/M/N 排序
网络端口 `netstat -anp grep 进程号/netstat -nlp
定时任务 crontab -e 编辑定时任务,分 时 日 月 周 格式
VI 一般模式 yy 复制、dd 删除、p 粘贴、u 撤销 默认模式,用于复制删除移动
VI 编辑模式 i/a/o/I/A/O 进入,Esc 退出 编辑文本内容
VI 指令模式 :wq 保存退出、:q! 强制退出、/词 搜索 保存、退出、搜索、替换
相关推荐
前端世界1 小时前
Linux服务器实战:NTP时间同步、SELinux权限与rsyslog日志管理,一次搞懂三大运维问题
linux·运维·服务器
Android系统攻城狮1 小时前
Linux Gstreamer深度解析之gst_audio_converter_new调用流程与实战(二十)
linux·运维·服务器·gstreamer音视频·音视频进阶
H_oRIZoN_6 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
GeW8 小时前
RHCE备考别瞎学!按这个计划走,30天提高通过率,快速拿证
linux
Escalating_xu8 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊8 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
码农小韩8 小时前
Linux应用开发(六)——进程间通信
linux·linux驱动·嵌入式软件开发·嵌入式操作系统·linux应用
cui_hao_nan9 小时前
从零搭建 Kubernetes 集群:Ubuntu + kubeadm 完整实战
ubuntu·容器·kubernetes
笨笨饿9 小时前
#138_解决Codex要五次回复的问题
linux·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库