文章目录
-
- [一、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 系统
可以直接修改:
-
进入
C:\Windows\System32\drivers\etc路径 -
打开 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 中 ll 是 ls -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 时 pagedown 和 pageup 可能会出现无法识别的问题。
案例实操: 采用 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 中,按下这些按键时,在画面的左下方会出现 INSERT 或 REPLACE 的字样,此时才可以进行编辑。而如果要回到一般模式时,则必须要按下 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 的用户信息
请输入新值,或直接敲回车键以使用默认值
  全名 \[]: 唐僧
  房间号码 \[]: 1
  工作电话 \[]:
  家庭电话 \[]:
  其它 \[]:
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
输出:
  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! 强制退出、/词 搜索 |
保存、退出、搜索、替换 |