Linux(CentOS 7)

Linux(CentOS 7)

super + space : 切换输入法

ctrl + alt : 级别三(大黑屏)呼出鼠标

Fn + Ctrl + Alt + F1 : 进入图形化界面

Fn + Ctrl + Alt + F2 : 进入控制台界面

第 1 章 Linux 入门

1.1 概述

Linux是一个操作系统(OS)

1.2 Linux 和 Windows 区别

第 2 章 VM 与 Linux 的安装

1.1 下载Centos




1.2 下载并安装vmware(一路下一步即可,可以根据需要进行更改)

1.3 创建新的虚拟机

按需即可, 不要超过自己的电脑本身配置

完成后出现

开启虚拟机, 进行系统安装

/boot: 引导分区, 用于启动

点击: 开始安装

... ...

1.4 认识Linux

Keyboard这可以看一些快捷键

super键 即 windows 键

退出: x 或 输入"exit"

第 3 章 Linux 文件与目录结构

3.1 Linux 文件

Linux 系统中一切皆文件。

3.2 Linux 目录结构

  • /bin: Binary的缩写。存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行。
  • /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev: Device的缩写。该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • /etc: Etcetera的缩写。这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:存放普通用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib: Library的缩写。这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /lib64: 64位相关的库会放在这。
  • /media: linux 系统会自动识别一些可移动媒体设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
  • /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
  • /opt: optional的缩写。这是给主机额外安装软件所摆放的目录。
  • /proc: Processes的缩写。/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里
  • /root: 该目录为系统管理员,也称作超级权限者的用户主目录。
  • /run: 运行目录, 存放当前系统运行以来的所有实时信息, 重启后就会消失
  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
  • /srv: 该目录存放一些服务启动之后需要提取的数据。
  • /sys: 虚拟文件系统。和 /proc/ 目录相似,该目录中的数据都保存在内存中,主要保存系统硬件相关的信息
  • /tmp: temporary的缩写这个目录是用来存放一些临时文件的。
  • /usr: unix system resources缩写。用于存储系统软件资源。
  • /var: 用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等

第 4 章 VI/VIM 编辑器

4.1 介绍

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

基本上 vi/vim 共分为三种模式,分别是一般模式,编辑模式和命令模式。

4.2 一般模式

刚刚启动 vi/vim,便进入了一般模式(默认模式)。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。在此模式可以复制黏贴,删除等操作。若想要编辑文本,进入一般模式,按下i,切换到编辑模式。

语法 功能描述
x 剪切当前光标位置的内容
X 向前删除一个字符,相当于backspace
w 光标跳到下一个单词
yy 复制光标当前一行
nyy n 为数字。复制光标所在的向下 n 行
yw 复制当前单词(包含空格)
y^ 复制光标所在 的那个字符之前 到该行行头 的所有数据
y$ 复制光标所在 的那个字符开始 到该行行尾 的所有数据
p 将已复制的数据在光标下一行贴上
np 将已复制的数据从光标下一行开始复制n句
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行
dw 从 当前光标位置 开始到 空格 视为一个单词, 并删除
u 撤销
^ 移动到行头
$ 移动到行尾
e 调到当前/下一个 词的词尾
b 调到当前/下一个 词的词头
gg / H 移动到这个档案的 开头
G / L 移动到这个档案的最后一行 的 开头
nG n 为数字。移动到这个档案的第 n 行
PgUp 上一页
PgDn 下一页

4.3 编辑模式

在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式。在编辑模式当中,左下角状态栏中会出现 --INSERT- 的字样,那就是可以输入任意字符的提示。这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮。

按键 功能
i, I i: 插入到当前光标前; I: 在目前所在行的 第一个非空格符 处开始输入
a,A a: 插入到当前光标后; A: 在光标所在行的 最后一个字符 处开始输入
o,O o: 插入到当前光标行的下一行; O: 在目前光标所在的上一行处输入新的一行
r,R r 只会取代光标所在的那 一个字符 一次;R会 一直取代 光标所在的文字,直到按下 ESC 为止

4.4 命令模式

在一般模式之中,只要按下 :或 / 就可以进入命令模式。

按键 说明
:set nu 显示行号
:set nonu 取消行号
:w 保存
:w! 若文件属性为只读时,强制写入该档案。不过,能不能写入, 还跟你对该档案的档案权限有关
:q 退出
:q! 强制退出
:wq 保存并退出
/word 查找 并 定位到该单词(n: 光标走向下一个; N: 光标走向上一个)
:noh 取消高亮显示
😒/old/new 替换当前匹配到的 第一个 old 为 new
😒/old/new/g 替换当前行 所有 的 old 为 new
:%s/old/new 替换文档中每一行匹配到的第一个 old 为 new
:%s/old/new/g 替换文档中匹配到所有的 old 为 new

第 5 章 网络配置

5.1 查看网络 IP 和 网关

VMware安装完成后会在宿主机上生成两块虚拟网卡,这两块网卡与虚拟机管理的两个虚拟交换机相连。

VMware管理了3个特殊的虚拟交换机:VMnet0(用于桥接模式),VMnet8(用于NAT模式),VMnet1(用于仅主机模式)。

VMware提供了3种网络工作模式:Bridged(桥接模式),NAT(网络地址转换模式),Host-Only(仅主机模式)。

  • 桥接模式:

    • 虚拟机直接连接外部物理网络的模式,主机起到了网桥的作用。这种模式下,虚拟机可以直接访问外部网络,并且对外部网络是可见的。
    • 将宿主机的网卡通过虚拟网桥与VMware管理的虚拟交换机VMnet0相连,所有网络连接设置为桥接模式的虚拟机都会连接到虚拟交换机VMnet0上。
    • 这样所有的虚拟机与宿主机以及与宿主机在同一个局域网下的主机之间都是可以相互访问的。
    • 在桥接模式下,虚拟机IP地址需要与宿主机在同一个网段,如果需要联网,则虚拟机的网关和DNS也需要与宿主机被桥接的网卡一致。
    • 虚拟网桥会转发宿主机网卡接收到的广播和组播信息,以及目标为虚拟交换机网段的单播。所以,与虚拟交换机机连接的虚拟网卡,如: eth0、ens33等能接收到路由器发出的DHCP信息及路由更新。
    • 桥接模式是通过虚拟网桥将主机上的网卡与虚拟交换机VMnet0连接在一起,虚拟机上的虚拟网卡都连接在虚拟交换机VMnet0上,在桥接模式下,虚拟机IP必须与宿主机的IP在同一网段且子网掩码、网关与DNS也要与宿主机网卡的一致。
    • 桥接模式的虚拟机会占用宿主机所在局域网内的IP地址资源。如果宿主机所在局域网中做了IP地址管理,比如IP地址需要公司网络部门审批通过后才能使用,那么虚拟机的IP地址也会受此管理规则的约束。
  • NAT模式:

    • 虚拟机和主机构建一个专用网络,并通过虚拟网络地址转换(NAT)设备对IP进行转换。虚拟机通过共享主机IP可以访问外部网络,但外部网络无法访问虚拟机。
    • 如果你的网络ip资源紧缺,但又希望虚拟机能够联网,NAT模式是最好的选择。
    • NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网
    • 使用NAT模式,就是让虚拟机借助NAT(网络地址转换功能),通过宿主机所在的网络来访问互联网。
    • 在虚拟机连接Vmnet8虚拟交换机时,虚拟机会将虚拟NAT设备及虚拟DHCP服务器连接到Vmnet8虚拟交换机上。依靠虚拟的NAT设备及虚拟的DHCP设备,如果你的宿主机已经联网了,那么你的虚拟机也就可以联网。
    • 同时宿主机上的虚拟网卡VMwareNetwork Adapter VMnet8也会连接到Vmnet8虚拟交换机上,用于宿主机和虚拟机的通信。如果禁用掉宿主机上的虚拟网卡VMwareNetwork Adapter VMnet8,虚拟机仍然是可以上网的,只是宿主无法再访问VMnet8网段下的虚拟机了,但是虚拟机仍然可以访问宿主机。
    • 虚拟网卡VMwareNetwork Adapter VMnet8只是作为主机与虚拟机通信的接口,虚拟机并不是依靠虚拟网卡VMware Network Adapter VMnet8来联网的。
    • 虚拟机可以通过NAT服务器访问宿主机所在局域网内的其他真实主机,但这些真实主机且不能反过来访问虚拟机。
  • 仅主机模式

    • 虚拟机只与主机共享一个专用网络,与外部网络无法通信。
    • 仅主机模式就是NAT模式去掉了虚拟NAT设备,使虚拟机无法与公网进行通信,而宿主机使用虚拟网卡VMware Network Adapter VMnet1连接VMnet1虚拟交换机来与虚拟机进行通信。
    • 仅主机模式将虚拟机与公网隔开,使虚拟机成为一个独立的系统,只能与宿主机相互通讯。
    • 仅主机模式通过宿主机的虚拟网卡VMwareNetwork Adapter VMnet1来连接虚拟交换机VMnet1,来达到宿主机与虚拟机通信的目的,但是虚拟机不能主动与宿主机通信,是单向连通的。
    • 如果想要在仅主机模式下联网,可以将能联网的主机网卡共享给VMware Network Adapter VMnet1,这样就可以实现虚拟机联网

5.2 配置网络 ip 地址

相关命令
ifconfig

用于显示或设置网络设备。可设置网络设备的状态,或是显示目前的设置

ping

ping + IP / 域名

命令用于检测主机。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
修改静态IP

复制代码
vim /etc/sysconfig/network-scripts/ifcfg- ens33

重启网络
修改 IP 地址后可能会遇到的问题

(1)物理机能 ping 通虚拟机,但是虚拟机 ping 不通物理机,一般都是因为物理机的 防火墙问题,把防火墙关闭就行

(2)虚拟机能 Ping 通物理机,但是虚拟机 Ping 不通外网,一般都是因为 DNS 的设置有 问题

(3)虚拟机 Ping www.baidu.com 显示域名未知等信息,一般查看 GATEWAY 和 DNS 设 置是否正确

5.3 配置主机名

5.3.1 修改主机名称
复制代码
hostname //查看主机名
shell 复制代码
vim /etc/hostname //进入配置文件修改主机名,修改完成后需要重启
shell 复制代码
hostname set-hostname 修改的主机名  // 更好的修改方式,不用重启
5.3.2 修改 hosts 映射文件

1)修改 linux 的主机映射文件(hosts

shell 复制代码
vim /etc/hosts

2)修改 windows 的主机映射文件(hosts 文件)

(1)进入 C:\Windows\System32\drivers\etc 路径, 加入(若hosts不能更改, 可以直接用另一个同名文件覆盖)

第 6 章 远程登录

通常在工作过程中,公司中使用的真实服务器或者是云服务器,都不允许除运维人员之外的员工直接接触,因此就需要通过远程登录的方式来操作。目前,比较主流的有Xshell, SSH Secure Shell, SecureCRT,FinalShell。

Xftp中若乱码需要修改语言编码为UTF-8

第 7 章 系统管理

7.1 Linux 中的进程和服务

计算机中,一个正在执行的程序或命令,被叫做"进程",启动一次之后一直存在、常驻内存的进程,一般被称作"服务"。

7.2 service 服务管理

systemctl

"system control"
systemctl start | stop | restart | status 服务名

查看服务的方法:/usr/lib/systemd/system

参数 说明
start 启动服务
stop 停止服务
restart 重启服务
enable 使某服务 开机自启
disable 关闭某服务 开机自启
status 查看服务状态
list -unit-files 列举所有服务是否开机自启

参考实例

shell 复制代码
systemctl stop network
systemctl status network
systemctl restart NetworkManager
setup

上下箭头移动 空格选中

7.3 系统运行级别

CentOS6

开机 -> BIOS -> /boot -> init进程 -> 运行级别 -> 运行级别对应的服务

  • 查看默认级别: vim /etc/inittab
  • Linux系统有7种运行级别(runlevel):常用的级别是3和5
shell 复制代码
运行级别0: 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。

运行级别1: 单用户工作状态,root权限,用于系统维护,禁止远程登陆。

运行级别2: 多用户状态(没有NFS:网络文件系统),不支持网络。

运行级别3: 完全的多用户状态(有NFS:网络文件系统),登陆后进入控制台命令行模式。

运行级别4: 系统未使用,保留。

运行级别5: X11控制台,登陆后进入图形GUI模式。

运行级别6: 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
  • CentOS7 的运行级别简化为:
shell 复制代码
multi-user.target 等价于原运行级别3,多用户有网,无图形界面)

graphical.target 等价于原运行级别5,多用户有网,有图形界面
  • 查看当前运行级别systemctl get-default
  • 修改当前运行级别

systemctl set-default xxx.target
init n : init 3 (切为大黑屏)

7.4 关闭防火墙

  • 查看防火墙状态 systemctl status firewalld
  • 临时关闭防火墙 systemctl stop firewalld
  • 开机禁用防火墙服务(可以不加.service)systemctl enable firewalld.service
  • 启动防火墙systemctl start firewalld
  • 开机启用防火墙systemctl enable firewalld

7.5 关机重启命令

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

shutdown

shutdown [-t sec] [-arkhncfF] time [warning-message]

可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机。shutdown命令作用同于poweroff命令。

参数 说明
-f 重启时跳过磁盘检测。
-F 重启时强制磁盘检测。
-h 多久以后系统关机
-c 取消关机任务
-r 将系统重启
-k 发送警告信息给所有用户
  • 参考示例
shell 复制代码
# 立即关机
shutdown -h now

# 指定 10 分钟后关机
shutdown -h 10

# 立即重新启动计算机
shutdown -r now

# 设定当前的服务器指定时间自动关机,格式为"小时:分钟":
shutdown -h 21:00

# 设定当前的服务器5分钟后关机,同时发送警告信息给所有已登录的用户:
shutdown +5 "System will shutdown after 5 minutes" 

# 取消当前服务器上已有的关机任务:
shutdown -c 
sync

sync [OPTION]

用于数据同步,sync命令是在关闭Linux系统时使用的。

  • sync命令用于强制被改变的内容立刻写入磁盘,更新信息速度非常快, 在Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。
  • sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。用户通常不需执行sync命令,系统会自动执行update或bdflush操作,将缓冲区的数据写入磁盘。只有在update或bdflush无法执行或用户需要非正常关机时,才需手动执行sync命令。
参数 说明
无参数 被改变的内容立刻写入磁盘
--help 显示帮助然后终止。
--version 显示版本信息然后终止。
halt命令

用于关闭当前服务器系统,类似于poweroff与shutdown命令,没有太大差别。

参数 说明
-n 在关机前不做将记忆体资料写回硬盘的动作
-w 模拟关机,把过程写入到日志文件
-d 不写入日志纪录
-f 强制关机或重启
-i 关机或重启前关掉所有的网络服务
-p 当关机的时候,顺便做关闭电源的动作
shell 复制代码
# 关闭系统
halt
# 关闭系统并关闭电源
halt -p
 
# 关闭系统,但不留下纪录
halt -d

# 强制关闭当前服务器系统:
halt -f
poweroff命令

用来关闭计算机操作系统并且切断系统电源。如果确认系统中已经没有用户存在且所有数据都已保存,需要立即关闭系统,可以使用poweroff命令。

reboot

用于重新启动计算机。

参数 说明
-n 直接重启系统,不保存当前资料
-w 模拟重启过程,将过程写入到日志中
-d 重启系统但不将过程写入到日志中
-f 强制重启系统
-i 关闭所有的网络服务,然后重启系统
shell 复制代码
# 重启当前系统
reboot
 
# 模拟重启当前系统:
reboot -w

第 8 章 常用基本命令

Shell可以看作是一个命令解释器,为我们提供了交互式的文本控制的界面。我们可以通过终端控制台来输入命令,由 shell进行解释并最终交给内核执行。

SH(Bourne Shell)是UNIX最初使用的shell,BASH(Bourne Again Shell)Linux默认的,是Bourne Shell的扩展一部分基础功能的系统命令是直接内嵌在shell 中的,系统加载启动之后会随着shell一起加载,常驻系统内存中。这部分命令被称为"内置(built-in)命令"﹔相应的其它命令被称为"外部命令"。

一部分基础功能的系统命令是直接内嵌在shell 中的,系统加载启动之后会随着shell一起加载,常驻系统内存中。这部分命令被称为"内置(built-in)命令"﹔相应的其它命令被称为"外部命令"。

8.1 帮助命令

man

man命令来自于英文单词manual的缩写,中文译为帮助手册,其功能是用于查看命令、配置文件及服务的帮助信息。

参数 说明
-a 在所有的man帮助手册中搜索
-d 检查新加入的文件是否有错误
-f 相当于运行whatis 的操作。即:显示工具指令与工具程序的简单说明。
-p 指定内容时使用分页程序
-M 指定man手册搜索的路径
-w 显示文件所在位置
快捷键 说明
q 退出
Enter 按行下翻
Space/PgDn 按页下翻
b/PgUp 上翻一页
/字符串 在手册页中查找字符串
shell 复制代码
# 查看指定命令的帮助信息:
man ls

//查看指定配置文件的帮助信息
//如果即有passwd命令,又有/etc/passwd文件,则需要手动指定帮助信息的编号。编号规则:普通命令为1,函数为2,库文件为3,设备为4,配置文件为5,游戏为6,宏文件为7,系统命令为8,内核程序为9,TK指令为10。
man 5 passwd

# 找到某个命令的帮助信息的存储位置
man -w ls

# 找到某个配置文件的帮助信息的存储位置
man -w 5 passwd

# man查看内置命令
[pinkpig@Demo100 ~]$ man -f cd
cd (1)               - GNU Bourne-Again SHell (GNU 命令解释程序 "Bourne二...
cd (3tcl)            - 改变工作目录
cd (1p)              - change the working directory
[pinkpig@Demo100 ~]$ man 1p cd
[pinkpig@Demo100 ~]$ man 3 cd
help

用于显示帮助信息,能够输出Shell内部命令的帮助内容,但对于外部命令则无法使用,需要用 man 或 info 命令或在后面加 --help 进行查看。

shell 复制代码
# 以默认格式显示指定命令的帮助信息
help cd

# 以短格式显示指定命令的帮助信息
help -s cd

# 以简短格式显示指定命令的帮助信息
help -d cd

# 以man命令格式显示指定命令的帮助信息
help -m cd
type

用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。

shell 复制代码
type cd
clear

clear命令用于清除屏幕, 等同于ctrl + l。这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。

reset

reset命令其实和 tset 是一同个命令,用于重置终端机的状态,将终端机设置为原始状态。

tset

tset命令的作用是可以进行终端初始化。默认终端类型为"unknown"。

8.2 文件目录类

pwd

pwd:print working directory 显示当前工作目录的绝对路径(从根路径开始)

参数 说明
-P 抛开符号链接的影响, 直接查看当前工作目录的物理路径
shell 复制代码
# 查看当前工作目录路径
pwd
cd

cd命令来自于英文词组"change directory"的缩写,其功能是用于更改当前所处的工作目录,路径可以是绝对路径,也可以是相对路径,若省略不写则会跳转至当前使用者的家目录。~ 也表示为 home 目录 的意思, . 则是表示目前所在的目录,...则表示目前目录位置的上一层目录。

参数 说明
-P 如果切换的目标目录是一个符号链接,则直接切换到符号链接指向的目标目录
-L 如果切换的目标目录是一个符号链接,则直接切换到符号链接名所在的目录
-- 仅使用"-"选项时,当前目录将被切换到环境变量"OLDPWD"对应值的目录
~ 切换至当前用户目录
... 切换至当前目录位置的上一级目录
shell 复制代码
# 切换当前工作目录至/etc
cd /etc

# 切换至当前用户的家目录:(~可以不加)
cd ~

# 进入到上一级所在目录(家目录→根目录)
cd ..

# 返回到上一次所在目录(根目录→家目录)
cd -
ls

ls命令来自于英文单词list的缩写,其功能是列举出指定目录下的文件名称及其属性。默认不加参数的情况下,ls命令会列出当前工作目录中的文件信息。

参数 说明
-a 显示所有文件及目录 (包括以"."开头的隐藏文件), 可与-l一起完整显示
-l 使用长格式列出文件及目录的详细信息(ls -l == ll)
-h human-readable 与-l 一起,以易于阅读的格式输出文件大小
-i 输出文件的inode节点信息
-color 输出信息中带有着色效果
shell 复制代码
# 查看某个根路径下的文件
ls /
# 查看当前路径下的文件
ls
mkdir

来自于英文词组"make directories"的缩写,其功能是用来创建目录文件。

参数 说明
-p 递归创建多级目录
-m 建立目录的同时设置目录的权限
-z 设置安全上下文
-v 显示目录的创建过程
shell 复制代码
# 在当前工作目录中,建立一个目录文件
mkdir dir1

# 在当前工作目录中,创建一个目录文件并设置700权限,不让除所有主以外任何人读、写、执行它
mkdir -m 700 dir2

# 在当前工作目录中,一次性创建多个目录文件
mkdir dir3 dir4 dir5

# 在系统根目录中,一次性创建多个有嵌套关系的目录文件
mkdir -p /dir1/dir2/dir3/dir4/dir5
rmdir

来自于英文词组"remove directory"的缩写,其功能是用于删除空目录文件。

rmdir命令仅能够删除空内容的目录文件,如需删除非空目录时,则需要使用带有-R参数的rm命令进行操作。而rmdir命令的-p递归删除操作亦不意味着能删除目录中已有的文件,而是要求每个子目录都必须是空的。

参数 说明
-p 用递归的方式删除指定的目录路径中的所有父级目录,非空则报错
-v 显示命令的详细执行过程
shell 复制代码
# 删除指定的空目录
rmdir Documents

# 删除指定的空目录,及其内的子空目录
rmdir -p Documents

# 删除指定的空目录,并显示删除的过程
rmdir -v Documents
touch

创建空文件(vim 文件名)
touch 文件名称

shell 复制代码
# 当前目录下创建文件
touch hello
# 指定路径下创建文件
touch /home/kiddkid/hello
cp

copy - 复制文件和目录
cp [选项] 原文件 目标路径

参数 说明
-f 若目标文件已存在,则会直接覆盖原文件
-i 若目标文件已存在,则会询问是否覆盖
-r 递归复制文件和目录
shell 复制代码
# 在当前工作目录中,将某个文件复制一份,并定义新文件名称
cp anaconda-ks.cfg kickstart.cfg

# 在当前工作目录中,将某个目录复制一份,并定义新目录名称
cp -r Documents Doc

复制某个文件时,保留其原始权限及用户归属信息
cp -a kickstart.cfg ks.cfg

# 将某个文件复制到/etc目录中,并覆盖已有文件,不进行询问(等同于 \cp -f ks.cfg /etc 使用Linux原生命令)
cp -f ks.cfg /etc

# 将多个文件一同复制到/etc目录中,如已有目标文件名称则默认询问是否覆盖
cp anaconda-ks.cfg ks.cfg /etc
rm

rm [选项] deleteFile

来自于英文单词remove的缩写,其功能是用于删除文件或目录,一次可以删除多个文件,或递归删除目录及其内的所有子文件。

参数 说明
-f 强制删除(不二次询问)
-i 删除前会询问用户是否操作
-r/R 递归删除
-v 显示指令的详细执行过程
shell 复制代码
# 删除某个文件,默认会进行二次确认,敲击y进行确认
rm anaconda-ks.cfg 

# 删除某个文件,强制操作不需要二次确认:
rm -f initial-setup-ks.cfg 

# 删除某个目录及其内的子文件或子目录,一并都强制删除
rm -rf Documents

# 强制删除当前工作目录内的所有以.txt为后缀的文件
rm -f *.txt

# 强制清空服务器系统内的所有文件
rm -rf /*
mv

mv oldNameFile newNameFile : 重命名
mv /temp/movefile /targetFolder : 移动文件到新的文件夹

自于英文单词move的缩写,用于对文件进行剪切和重命名.

参数 说明
-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
shell 复制代码
# 在当前工作目录中,对某个文件进行剪切后粘贴(重命名)操作
mv anaconda-ks.cfg ks.cfg

# 将某个文件移动到/etc目录中,保留文件原始名称
mv ks.cfg /etc

# 将某个目录移动到/etc目录中,并定义新的目录名称
mv Documents /etc/docs

# 将/home目录中所有的文件都移动到当前工作目录中,遇到已存在文件则直接覆盖
mv -f /home/* .
cat

cat [选项]

catch的缩写, 用于查看文件内容。cat命令适合查看内容较少的、纯文本的文件。

参数 说明
-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-b 显示行数(空行不编号)
-E 每行结束处显示$符号
more

more 要查看的文件名

用于分页显示文本文件内容。如果文本文件中的内容较多较长,使用cat命令读取后则很难看清,这时使用more命令进行分页查看就更加合适,可以把文本内容一页一页的显示在终端界面上,用户每按一次回车即向下一行,每按一次空格即向下一页,直至看完为止。

  • 操作说明
操作 功能说明
space 代表向下翻一页
Enter 代表向下翻一行
q 代表立刻离开 more ,不再显示该文件内容。
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 删除当前行的行号
:f 输出文件名和当前行的行号
  • 参数
参数 说明
-num 指定每屏显示的行数
-l more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性
-f 计算实际的行数,而非自动换行的行数
-u 禁止下划线
less

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

操作 功能说明
space/[pagedown] 向下翻动一页
[pageup] 向上翻动一页
/字串 向下搜寻『字串』的功能;n:向下查找;N:向上查找
?字串 向上搜寻『字串』的功能;n:向上查找;N:向下查找
q 离开 less 这个程序
echo

echo [选项] [输出内容]

echo是用于在终端设备上输出指定字符串或变量提取后值的命令。能够给用户一些简单的提醒信息,也可以将输出的指定字符串内容同管道符一起传递给后续命令作为标准输入信息再来进行二次处理,又或者同输出重定向符一起操作,将信息直接写入到文件中。

如需提取变量值,需在变量名称前加入$符号做提取,变量名称一般均为大写形式。

输出字符串或提取后的变量值

参数 说明
-n 不输出结尾的换行符
-e "\a" 发出警告音
-e "\b" 删除前面的一个字符
-e "\c" 结尾不加换行符
-e "\f" 换行,光标扔停留在原来的坐标位置
-e "\n" 换行,光标移至行首
-e "\r" 光标移至行首,但不换行
-E 禁止反斜杠转移,与-e参数功能相反
shell 复制代码
# 输出指定字符串到终端设备界面
echo LinuxCool
echo "hello       world"

# 输出环境变量内容($+Tab可查看环境变量)
echo $PATH

# 搭配转义符一起使用,输出纯字符串内容
echo \$PATH

# 搭配输出重定向符一起使用,将字符串内容直接写入文件中
echo "Hello World" > Document

# 搭配反引号执行命令,并将执行结果输出
echo `uptime`

# 输出带有换行符的内容
echo -e "First\nSecond\nThird" 
>输出重定向 >>追加
  • ls -l > 文件 (功能描述:列表的内容写入文件 a.txt 中(覆盖写)
  • ls -al >> 文件 (功能描述:列表的内容追加到文件 aa.txt 的末尾)
  • cat 文件 1 > 文件 2 (功能描述:将文件 1 的内容覆盖到文件 2)
  • echo "内容" >> 文件

显示文件开头的内容,默认为前10行。

选项 功能
-n <行数> 指定显示头部内容的行数
复制代码
# 查看文件的开头
head hello
# 查看文件的头2行
head -n 2 hello
tail

用于查看文件尾部内容,默认为后10行。

参数 说明
-f 持续显示文件最新追加的内容
-n 输出文件的尾部N(N位数字)行内容
shell 复制代码
# 指定显示某个文件尾部的后5行内容
tail -n 5 initial-setup-ks.cfg 

# 持续刷新显示某个文件尾部的后10行内容
tail -f /var/log/messages
ln

自于英文单词link的缩写,中文译为"链接",其功能是用于为某个文件在另外一个位置建立同步的链接。

  • Linux系统中的链接文件有两种形式,一种是硬链接(hard link),另一种是软链接(symbolic link)。
  • 软连接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软连接文件也将无法使用,而硬链接则是通过将文件的inode属性块进行了复制 ,因此把原始文件移动或删除后,硬链接文件依然可以使用。
参数 说明
-s 对源文件建立符号链接(软连接),而非硬链接
-i 交互模式,若目标文件已经存在,则提示用户确认进行覆盖
shell 复制代码
# 为指定的源文件创建快捷方式(默认为硬链接形式)
ln anaconda-ks.cfg ana.cfg

# 为指定的源文件创建快捷方式(设定为软连接形式)
ln -s initial-setup-ks.cfg ini.cfg

# 在指定的源文件创建快捷方式,并输出制作的过程信息
ln -v anaconda-ks.cfg ana.cfg

8.3 时间日期类

history

显示与管理历史命令记录。Linux系统默认会记录用户所执行过的所有命令,可以使用history命令查阅它们,也可以对其记录进行修改和删除操作。

参数 说明
-a 写入命令记录
-c 清空命令记录
-d 删除指定序号的命令记录
-n 读取命令记录
-r 读取命令记录到缓冲区
-s 将指定的命令添加到缓冲区
-w 将缓冲区信息写入到历史文件
shell 复制代码
# 查看输入过的所有命令
histroty
# 查看最近输入的10条命令
history 10
# 重新条用之前调用过的编号为10的命令
!10
date

date [OPTION]... [+FORMAT]

用来显示或设定系统的日期与时间。

参数 说明
-d <时间字符串> 通过字符串显示时间格式,字符串不能是'now'
-s <日期时间> 根据字符串设置系统时间
  • 具体实例
shell 复制代码
# 以默认格式输出系统当前的日期与时间信息
date

# 按照"年-月-日"的指定格式输出系统当前的日期信息
date "+%Y-%m-%d"

# 按照"小时:分钟:秒"的指定格式输出系统当前的时间信息
date "%H:%M:%S"

# 按照"年-月-日 小时:分钟:秒"
date "+%Y-%m-%d %H:%M:%S"

# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"

# 输出 2 秒后的时间
date -d "2 second" +"%Y-%m-%d %H:%M.%S"

# 时间格式转换
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"

# 按自己的格式输出
date '+usr_time: $1:%M %P -hey'
  • 时间加减操作
shell 复制代码
date +%Y%m%d                   # 显示年月日
date -d "1 days ago"           # 显示后一天的日期
date -d "-1 day" +%Y%m%d       # 显示前一天的日期
date -d "-1 days ago"
date -d "-1 month" +%Y%m%d     # 显示上一月的日期
date -d "+1 month" +%Y%m%d     # 显示下一月的日期
date -d "-1 year" +%Y%m%d      # 显示前一年的日期
date -d "+1 year" +%Y%m%d      # 显示下一年的日期
  • 设定时间
shell 复制代码
date -s                         # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523                # 设置成20120523,这样会把具体时间设置成00:00:00
date -s 01:01:01                # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23"   # 这样可以设置全部时间
date -s "01:01:01 20120523"     # 这样可以设置全部时间
date -s "2012-05-23 01:01:01"   # 这样可以设置全部时间
date -s "20120523 01:01:01"     # 这样可以设置全部时间

注: 时间调乱后使用ntpdate + 同步时钟服务器名称获取当前最新的正确时间

cal

cal命令的名字来自英语单词"Calendar"。改命令用来显示当前日历,或者指定日期的公历(公历是现在国际通用的历法,又称格列历,通称阳历。)如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份 。

参数 说明
-1/null 只显示当前月份
-3 显示上个月、当月和下个月
-s 将星期天作为月的第一天
-m 将星期一作为月的第一天
-j 显示在当年中的第几天(儒略日)
-y 显示当年的日历
  • 参考实例
shell 复制代码
# 显示当前月份的日历
cal

# 显示近期三个月的日历(当前月,上一个月和下一个月)
cal -3  
                                                        
# 显示指定年月的日历,如显示2020年2月的日历
cal 2 2020

8.4 用户管理命令

useradd

创建并设置用户信息。

  • useradd命令来自于英文词组"User add"的全拼,其功能是用于创建并设置用户信息。使用useradd命令可以自动的完成创建用户的信息、基本组、家目录等工作,并在创建的过程中对用户初始信息进行定制。
  • 已创建的用户则需使用chmod命令修改账户信息,passwd命令修改密码信息。
参数 说明
-D 改变新建用户的预设值
-c 添加备注文字
-d 新用户每次登陆时所使用的家目录
-e 用户终止日期,日期的格式为YYYY-MM-DD
-f 用户过期几日后永久停权。当值为0时用户立即被停权,而值为-1时则关闭此功能,预设值为-1
-g 指定用户对应的用户组
-G 定义此用户为多个不同组的成员
-m 用户目录不存在时则自动创建
-M 不建立用户家目录,优先于/etc/login.defs文件设定
-n 取消建立以用户名称为名的群组
-r 建立系统帐号
-u 指定用户id
  • 参考实例
shell 复制代码
# 创建指定的用户信息
useradd user1

# 创建指定的用户信息,但不创建家目录,亦不让登录系统
useradd -M -s /sbin/nologin user2

# 创建指定的用户信息,并自定义UID值
useradd -u 6688 user3

# 创建指定的用户信息,并追加指定组为该账户的扩展组
useradd -G root user4

# 创建指定的用户信息,并指定过期时间
useradd -e "2023/01/01" user5

# 为新添加的用户指定home目录
useradd -d /home/myd user6
passwd

修改用户的密码值。

  • passwd命令来自于英文单词password的缩写。同时也可以对用户进行锁定等操作,但需要管理员身份才可以执行。
参数 说明
-d 删除已有密码
-l 锁定用户的密码值,不允许修改
-u 解锁用户的密码值,允许修改
-e 下次登陆强制修改密码
-k 用户在期满后能仍能使用
-S 查询密码状态
shell 复制代码
# 修改当前登录用户的密码值
passwd

# 修改指定用户的密码值
passwd linuxprobe

# 锁定指定用户的密码值,不允许其进行修改
passwd -l linuxprobe

# 解锁指定用户的密码值,允许其进行修改
passwd -u linuxprobe

# 强制指定的用户在下次登陆时必须重置其密码
passwd -e linuxprobe

# 删除指定用户的密码值
passwd -d linuxprobe

# 查看指定用户的密码状态
passwd -S linuxprobe
su

切换用户身份

  • su命令来自于英文单词"switch user"的缩写。管理员切换至任意用户身份而无需密码验证,而普通用户切换至任意用户身份均需密码验证。另外添加单个减号(-)参数为完全的身份变更,不保留任何之前用户的环境变量信息。
参数 说明
单个减号(-) 完全身份变更
-c 执行完指定的指令后,即恢复原来的身份
-f 适用于csh与tsch,使shell不用去读取启动文件
-l 改变身份时,也同时变更工作目录
-m 变更身份时,不要变更环境变量
-s 指定要执行的shell
  • 参考实例
shell 复制代码
# 变更至指定用户身份
su user1

# 完全变更至指定用户身份
su - user1
id

显示用户与用户组信息。

  • UID是指用户身份的唯一识别号码,相当于人类社会的身份证号码,而GID则指用户组的唯一识别号码,用户仅有一个基本组,但可以有多个扩展组。
参数 说明
-g 显示用户所属群组的ID
-G 显示用户扩展群组的ID
-n 显示用户所属群组或扩展群组的名称
-r 显示实际ID
-u 显示用户ID
  • 参考实例
shell 复制代码
# 显示当前用户的身份信息
id

# 显示当前用户的所属群组GID
id -g

# 显示当前用户的身份码UID
id -u

# 查询当前用户的身份信息
id linuxprobe

# 查看创建了哪些用户
cat /etc/passwd
who

用于显示当前登录用户信息,包含登录的用户名、终端、日期时间、进程等信息,帮助运维人员了解当前系统的登入用户情况。

参数 说明
-a 全面信息
-b 系统最近启动时间
-d 死掉的进程
-l 系统登录进程
-H 带有列标题打印用户名,终端和时间
-t 系统上次锁定时间
-u 已登录用户列表
  • 参考实例
shell 复制代码
# 显示自身用户名称(当前所在用户)
whoami

# 显示登录用户的用户名以及登陆时间(外层真正登录的用户)
who am i

# 查看当前登录用户信息
who

# 查看当前登录用户信息,并加上标题
who -H

# 查看当前全部的登录全部用户信息
who -H -a

# 查看系统的最近启动时间
who -b
sudo

授权普通用户执行管理员命令。

  • sudo命令来自于英文词组"super user do"的缩写,中文译为"超级用户才能干的事"。使用sudo服务可以授权某个指定的用户去执行某些指定的命令,在满足工作需求的前提下尽可能少的放权,保证服务器的安全。
  • 配置sudo服务可以直接编辑配置文件/etc/sudoers,亦可以执行visudo命令进行设置,一切妥当后普通用户便能够使用sudo命令进行操作了。
参数 说明
-v 本次需要验证当前用户的密码
-k 下次强制验证当前用户的密码
-b 将要执行的指令放在后台执行
-p 更改需要密码验证时的提示语
-s 指定默认调用的SHELL解释器
shell 复制代码
# 查看当前用户有哪些被sudo服务授权的命令
sudo -l

# 使用某个被sudo服务允许的用户身份来执行管理员的重启命令
sudo -u linuxprobe "reboot"

# 使用当前用户身份,基于sudo命令来执行管理员的重启命令
sudo reboot

# 以root权限执行上一条命令
$ sudo !!
usermod

修改用户账号信息。

  • usermod命令来自于英文词组"user modify"的缩写,其功能是用于修改用户账号中的各项参数。
参数 说明
-c<备注> 修改用户账号的备注文字
-d<登入目录> 修改用户登入时的家目录
-e<有效期限> 修改账号的有效期限
-f<缓冲天数> 修改在密码过期后多少天即关闭该账号
-g<群组> 修改用户所属的群组
-G<群组> 修改用户所属的附加群组
-l<账号名称> 修改用户账号名称
-L 锁定用户密码,使密码无效
-s 修改用户登入后所使用的shell
-u 修改用户ID
-U 解除密码锁定
  • 参考实例
shell 复制代码
修改指定用户的家目录路径
usermod -d /home user1

修改指定用户的UID号码
usermod -u 6688 user1

修改指定用户的名称为user2
usermod -l user2 user1

锁定指定用户的账户,临时不允许登录系统
usermod -L user1

解锁指定用户的账户,再次允许登录系统
usermod -U user1

8.5 用户组管理命

每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同, 如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

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

groupadd

创建新的用户组。

  • groupadd命令来自于英文词组"group add"。每个用户在创建时都有一个与其同名的基本组,后期可以使用groupadd命令创建出新的用户组信息,让多个用户加入到指定的扩展组中。
参数 说明
-g 指定新建工作组的id
-r 创建系统工作组
-K 覆盖配置文件"/ect/login.defs"
-o 允许添加组ID号不唯一的工作组
  • 参考实例
shell 复制代码
# 创建一个新的用户组
groupadd user1

# 创建一个新的用户组,并指定GID号码
groupadd -g 6688 user1

# 创建一个新的用户组,设定为系统工作组
groupadd -r user1
groupdel

删除用户组。

  • groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。

  • userdel修改系统账户文件,删除与 GROUP 相关的所有项目。给出的组名必须存在。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。

  • 参考实例

shell 复制代码
# 使用groupdel命令删除user1工作组
groupdel user1

# 查看user1组是否删除成功
more /etc/group|grep user1 
groupmod

更改群组识别码或名称。

  • 用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议先删除旧的,再建立新的。

    | 参数 | 说明 |

    | --- | --- |

    | -n <新组名> <旧组名> | 设置欲使用的群组名称 |

  • 参考实例

shell 复制代码
# 更改user1用户组为root
groupmod -n root user1

8.6 文件权限类

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。

为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做 了不同的规定。

在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属 的用户和组。

  • 在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等.
    • d: 目录
    • -: 文件
    • l: 链接文档
    • b: 块设备文件, 例如: 硬盘
    • c: 字符类型的设备文件,例如: 键盘、鼠标
  • 接下来的字符中,以三个为一组,且均为rwx的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 -
  • 每个文件的属性由左边第一部分的 10 个字符来确定。
    • 第 0 位确定文件类型
    • 第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
    • 第4-6位确定属组(所有者的同组用户)拥有该文件的权限。
    • 第7-9位确定其他用户拥有该文件的权限。
  • 如果查看到是文件:链接数指的是硬链接个数。
  • 如果查看的是文件夹:链接数指的是子文件夹个数。
chmod

改变文件或目录权限。
chmod [ {ugoa} {+-=} {rwx} ] 文件或目录
chmod [ mode=421 ] 文件或目录

  • chmod命令来自于英文词组"change mode"的缩写。默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。
  • 设置权限时可以使用数字法,亦可使用字母表达式,对于目录文件建议加入-R参数进行递归操作,意味着不仅对于目录本身,也对目录内的子文件/目录都进行新权限的设定。

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)用户组(Group)其它用户(Other Users)

只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。

u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。

参数 说明
-f 若该文件权限无法被更改也不显示错误讯息
-v 显示权限变更的详细资料
-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更
  • 参考实例
shell 复制代码
# 设定某个文件的权限为775(rwxrwxrwx)
chmod 775 anaconda-ks.cfg

# 设定某个文件让任何人都可以读取
chmod a+r anaconda-ks.cfg 

# 设定某个目录及其内子文件任何人都可以读取和读取
chmod -R a+r Documents

# 设定某个二进制命令文件上新增SUID特殊权限位
chmod u+s /sbin/reboot 

# 将文件 file1.txt 设为所有人皆可读取
chmod ugo+r file1.txt

# 将文件 file1.txt 设为所有人皆可读取
chmod a+r file1.txt

# 将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w file1.txt file2.txt

# 为 ex1.py 文件拥有者增加可执行权限
chmod u+x ex1.py

# 将目前目录下的所有文件与子目录皆设为任何人可读取
chmod -R a+r *
chown

chown [参数] 所属主:所属组 文件

改变文件或目录的用户和用户组信息。

  • chown命令来自于英文词组"Change owner"的缩写。管理员可以改变一切文件的所属信息,而普通用户只能改变自己文件的所属信息。
  • 参考实例
shell 复制代码
# 改变指定文件的所属主与所属组
chown root:root /etc/fstab

# 改变指定文件的所属主与所属组,并显示过程
chown -c linuxprobe:linuxprobe /etc/fstab

# 改变指定目录及其内所有子文件的所属主与所属组
chown -R root:root /etc

# 把 /var/run/httpd.pid 的所有者设置 root
chown root /var/run/httpd.pid

# 将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup
chown runoob:runoobgroup file1.txt

# 将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup
chown -R runoob:runoobgroup *

# 把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者
chown :512 /home/runoob
chgrp

更改文件用户组。

  • chgrp是英语单词"change group"的缩写,命令的作用和其中文释义一样,为用于变更文件或目录的所属群组。
参数 说明
-c 效果类似"-v"参数,但仅回报更改的部分
-f 不显示错误信息
-h 对符号连接的文件作修改,而不更动其他任何相关文件
-R 递归处理,将指定目录下的所有文件及子目录一并处理
-v 显示指令执行过程
--reference 把 指定文件或目录 的 所属群组 全部设成和 参考文件或目录 的所属群组相同
  • 参考实例
shell 复制代码
# 改变文件的群组属性
chgrp -v linuxcool file

# 根据指定文件改变文件的群组属性
chgrp --reference=file_1 file_2

# 将/usr/linuxcool及其子目录下的所有文件的用户组改为cool
chgrp -R cool /usr/linuxcool

8.7 搜索查找类

find

find [搜索范围] [选项]

根据路径和条件搜索指定文件。

  • find命令可以使用的参数很多,并且支持正则表达式,结合管道符后能够实现更加复杂的功能。
  • find命令通常进行的是从**根目录(/)**开始的全盘搜索,有别于whereis、which、locate......等等的有条件或部分文件的搜索。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。
参数 说明
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
-type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune 忽略某个目录
-exec ...... {}; 后面可跟用于进一步处理搜索结果的命令
  • 参考实例
shell 复制代码
# 全盘搜索系统中所有以.conf结尾的文件
find / -name *.conf

# 在/home目录中搜索所有属于指定用户的文件
find /home -user linuxprobe

# 列出当前工作目录中的所有文件、目录以及子文件信息
find .

# 在/var/log目录下搜索所有指定后缀的文件,后缀不需要大小写
find /var/log -iname "*.log"

# 在/var/log目录下搜索所有后缀不是.log的文件
find /var/log ! -name "*.log"

# 搜索当前工作目录中的所有近7天被修改过的文件
find . -mtime +7

# 全盘搜索系统中所有类型为目录,且权限为1777的目录文件
find / -type d -perm 1777

# 全盘搜索系统中所有类型为普通文件,且可以执行的文件信息
find / -type f -perm /a=x 

# 全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件
find / -name "*.mp4" -exec rm -rf {} \;

# 将当前目录及其子目录下所有文件后缀为 .c 的文件列出来
find . -name "*.c"

# 将当前目录及其子目录中的所有文件列出
find . -type f

# 将当前目录及其子目录下所有最近 20 天内更新过的文件列出
find . -ctime  20

# 查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们
find /var/log -type f -mtime +7 -ok rm {} \;

# 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
find . -type f -perm 644 -exec ls -l {} \;

# 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径
find / -type f -size 0 -exec ls -l {} \;
updatedb

创建或更新数据库文件。

  • updatedb命令用来创建或更新 slocate/locate 命令所必需的数据库文件。
  • updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入 slocate/locate 数据库文件中。
  • 使用updatedb命令可以创建或更新locate所使用的数据库。如果数据库已经存在,它的数据是重复使用,以避免重读并没有改变的目录。updatedb通常每天由cron运行来更新默认的数据库。
参数 说明
-o 忽略默认的数据库文件,使用指定的slocate数据库文件
-U 更新指定目录的slocate数据库
-v 显示执行的详细过程
  • 参考实例
shell 复制代码
# 更新数据库
updatedb

# 检测一个未存在的文件file.txt
locate file.txt    

# 使用 -U 参数可以指定要更新 slocate 数据库的目录
updatedb -U /root/file/

# 创建或更新mlocate数据库
updatedb

# 创建mlocate数据库,只扫描/etc目录,写入数据库到db_file文件
updatedb -o db_file -U /etc
locate

快速查找文件或目录。

  • locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给 定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。
  • 为了保证查询结果的准确 度,管理员必须定期更新 locate 时刻
参数 说明
-c 只输出找到的数量
-d 指定数据库所在的目录
-i 忽略大小写
  • 参考实例
shell 复制代码
updatedb 

# 搜索带有指定关键词的文件
locate network

# 在指定的目录下,搜索带有指定关键词的文件
locate /etc/network

# 查找 passwd 文件
locate passwd

# 搜索 etc 目录下所有以 sh 开头的文件
locate /etc/sh

# 忽略大小写搜索当前用户目录下所有以 r 开头的文件
locate -i ~/r
which

查找命令文件

  • which命令能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么就使用which命令。
参数 说明
-n 指定文件名长度(不含路径)
-p 指定文件名长度(含路径)
-w 指定输出时栏位的宽度
-V 显示版本信息
  • 参考实例
bash 复制代码
# 查找某个指定命令文件所在位置
which reboot

# 查找多个指定命令文件所在位置
which shutdown poweroff
whereis

显示命令及相关文件的路径。

  • whereis命令用来定位命令的二进制程序、源代码文件和man手册页等相关文件的路径。
  • whereis命令查找速度非常快,因为它不是在磁盘中乱找,而是在一个数据库中查询;
  • 数据库是linux系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行updatedb命令更新一次。
  • whereis命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到, 原因就是该数据库文件没有被更新
grep

用于查找文件里符合条件的字符串。

  • grep来自于英文词组"global search regular expression and print out the line"的缩写,意思是用于全局搜索的正则表达式,并将该行输出
  • 通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵活。
  • 与之容易混淆的是egrep命令和fgrep命令。如果把grep命令当作是标准搜索命令,那么egrep则是扩展搜索 命令,等价于"grep -E"命令,支持 扩展的正则表达式。而fgrep则是快速搜索命令 ,等价于"grep -F"命令,不支持正则表达式,直接按照字符串内容进行匹配。
  • 管道符,"|",表示将前一个命令的处理结果输出传递给后面的命令处理。
参数 说明
-i 忽略大小写
-c 只输出匹配行的数量
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n 列出所有的匹配行,显示行号
-h 查询多文件时不显示文件名
-s 不显示不存在、没有匹配文本的错误信息
-v 显示不包含匹配文本的所有行
-w 匹配整词
-x 匹配整行
-r 递归搜索
-q 禁止输出任何结果,已退出状态表示搜索是否成功
-b 打印匹配行距文件头部的偏移量,以字节为单位
-o 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位
-F 匹配固定字符串的内容
-E 支持扩展的正则表达式
  • 参考实例
shell 复制代码
# 搜索某个文件中,包含某个关键词的内容
grep root /etc/passwd

# 搜索某个文件中,以某个关键词开头的内容
grep ^root /etc/passwd

# 搜索多个文件中,包含某个关键词的内容
grep linuxprobe /etc/passwd /etc/shadow

# 搜索多个文件中,包含某个关键词的内容,不显示文件名称
grep -h linuxprobe /etc/passwd /etc/shadow

# 输出在某个文件中,包含某个关键词行的数量
grep -c root /etc/passwd /etc/shadow

# 搜索某个文件中,包含某个关键词位置的行号及内容
grep -n network anaconda-ks.cfg 

# 搜索某个文件中,不包含某个关键词的内容
grep -v nologin /etc/passwd

# 搜索当前工作目录中,包含某个关键词内容的文件,未找到则提示
grep -l root *

# 搜索当前工作目录中,包含某个关键词内容的文件,未找到不提示
grep -sl root *

# 递归搜索,不仅搜索指定目录,还搜索其内子目录内是否有关键词文件
grep -srl root /etc

# 搜索某个文件中,精准匹配到某个关键词的内容(搜索词应与整行内容完全一样才会显示,有别于一般搜索)
grep -x cd anaconda-ks.cfg 
grep -x cdrom anaconda-ks.cfg 

# 判断某个文件中,是否包含某个关键词,通过返回状态值输出结果(0为包含,1为不包含),方便在Shell脚本中判断和调用
grep -q linuxprobe anaconda-ks.cfg 
echo $?

grep -q linuxcool anaconda-ks.cfg 
echo $?

# 搜索某个文件中,空行的数量
grep -c ^$ anaconda-ks.cfg 

8.8 压缩和解压

gzip

压缩和解压文件。

  • gzip命令来自于英文单词gunzip的缩写。gzip是一款使用广泛的压缩工具,文件经过压缩后一般会以.gz后缀结尾,与tar命令合用后即为.tar.gz后缀。
  • gzip命令对文本文件的压缩比率通常能达到60%~70%,压缩后可以很好的提升存储空间的使用率,还能够在网络传输文件时减少等待时间。
参数 说明
-a 使用ASCII文字模式
-d 解开压缩文件
-f 强行压缩文件
-k 保留原文件
-l 列出压缩文件的相关信息
-L 显示版本与版权信息
-c 把压缩后的文件输出到标准输出设备,不去更动原始文件
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-q 不显示警告信息
-n 压缩文件时,不保存原来的文件名称及时间戳记
-N 压缩文件时,保存原来的文件名称及时间戳记
-t 测试压缩文件是否正确无误
-S<压缩字尾字符串> 更改压缩字尾字符串。
-v 显示指令执行过程
-V 显示版本信息
-<压缩效率> 压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高
--best 此参数的效果和指定"-9"参数相同
--fast 此参数的效果和指定"-1"参数相同
  • 参考实例
shell 复制代码
# 将指定的文件进行压缩,压缩包默认会以"原文件名.gz"保存到当前工作目录下,原文件会被自动删除
gzip anaconda-ks.cfg

# 解压指定的压缩包文件,并显示解压过程。解压后的文件会保存在当前工作目录下,压缩包会被自动删除
gzip -dv anaconda-ks.cfg.gz 

# 将指定的文件进行压缩,但是不删除原文件
[root@linuxcool ~]# gzip -k initial-setup-ks.cfg

# 显示指定文件的压缩信息
gzip -l initial-setup-ks.cfg.gz 
gunzip

解压提取文件内容。

  • gunzip命令来自于英文词组"Gnu unzip"的缩写。gunzip通常被用来解压那些被基于gzip格式压缩过的文件,也就是那些.gz结尾的压缩包。
参数 说明
-a 使用ASCII文字模式
-c 把解压后的文件输出到标准输出设备
-f 强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接
-h 在线帮助
-l 列出压缩文件的相关信息
-L 显示版本与版权信息
-n 解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其忽略不予处理
-N 解压缩时,若压缩文件内含有原来的文件名称及时间戳记,则将其回存到解开的文件上
-q 不显示警告信息
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-S<压缩字尾字符串> 更改压缩字尾字符串
-t 测试压缩文件是否正确无误
-v 显示指令执行过程
-V 显示版本信息
  • 参考实例
shell 复制代码
# 解压指定的压缩包文件
gunzip Filename.gz

# 解压指定的压缩包文件,并输出解压过程
gunzip -v Filename.gz

# 测试指定的压缩包文件内容是否损坏,能够正常解压
gunzip -t Filename.gz
zip

压缩文件。

  • 通过zip命令可以将文件打包成.zip格式的压缩包,里面会附含文件的名称、路径、创建时间、上次修改时间等等信息,与tar命令相似。
参数 说明
-A 调整可执行的自动解压缩文件
-b<工作目录> 指定暂时存放文件的目录
-c 替每个被压缩的文件加上注释
-d 从压缩文件内删除指定的文件
-D 压缩文件内不建立目录名称
-f 更新现有的文件
-F 尝试修复已损坏的压缩文件
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件
-i<范本样式> 只压缩符合条件的文件
-j 只保存文件名称及其内容,而不存放任何目录名称
-J 删除压缩文件前面不必要的数据
-L 显示版权信息
-m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中
-n<字尾字符串> 不压缩具有特定字尾字符串的文件
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同
-q 不显示指令执行过程
-r 递归处理,将指定目录下的所有文件和子目录一并处理
-S 包含系统和隐藏文件
-t<日期时间> 把压缩文件的日期设成指定的日期
-T 检查备份文件内的每个文件是否正确无误
-u 与 -f 参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 显示指令执行过程或显示版本信息
-w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效
-x<范本样式> 压缩时排除符合条件的文件
-X 不保存额外的文件属性
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效
-z 替压缩文件加上注释
-$ 保存第一个被压缩文件所在磁盘的卷册名称
-<压缩效率> 压缩效率是一个介于1-9的数值
unzip

解压缩zip格式文件。

  • unzip命令用于解压缩zip格式文件,虽然Linux系统中更多的使用tar命令进行对压缩包的管理工作,但有时也会收到同Windows系统常用的.zip和.rar格式的压缩包文件。
参数 说明
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换
-d 解压到外部文件夹
-f 更新现有的文件
-l 显示压缩文件内所包含的文件
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换
-t 检查压缩文件是否正确
-v 执行时显示详细的信息
-z 仅显示压缩文件的备注文字
-a 对文本文件进行必要的字符转换
-b 不要对文本文件进行字符转换
-C 压缩文件中的文件名称区分大小写
-j 不处理压缩文件中原有的目录路径
-L 将压缩文件中的全部文件名改为小写
-n 解压缩时不要覆盖原有的文件
-o 不必先询问用户,unzip执行后覆盖原有文件
-q 执行时不显示任何信息
  • 参考实例
shell 复制代码
# 将压缩包文件解压到当前工作目录中
unzip latest.zip

# 将压缩包文件解压到指定的目录中
unzip latest.zip -d /home

# 测试压缩包文件是否完整,文件有无损坏
unzip -t latest.zip
tar

压缩和解压缩文件。

  • tar命令能够制作出Linux系统中常见的.tar、.tar.gz、.tar.bz2等格式的压缩包文件。对于RHEL7、CentOS7版本以后的系统,解压时可以不加压缩格式参数(如z或j),系统能自动进行分析并解压。
参数 说明
-c 产生.tar 打包文件
-C 解压到指定目录
-f 指定存档或设备
-j 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v 显示详细信息
-x 解包.tar 文件
-z 打包同时压缩
-- -remove-files 归档/压缩之后删除源文件
  • 参考实例
shell 复制代码
# 使用gzip压缩格式对某个目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.gz
tar czvf backup1.tar.gz /etc

# 使用bzip2压缩格式对某个目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.bz2
tar cjvf backup2.tar.bz2 /etc

# 将当前工作目录内所有以.cfg为后缀的文件打包,不进行压缩
tar cvf backup3.tar *.cfg

# 将当前工作目录内的所有以.cfg为后缀的文件打包,不进行压缩,并删除原始文件
tar cvf backup4.tar *.cfg --remove-files

# 解压某个压缩包到当前工作目录
tar xvf backup4.tar 

# 解压某个压缩包到/etc目录
tar xvf backup4.tar -C /etc

# 查看某个压缩包内文件信息(无需解压)
tar tvf backup4.tar 

8.9 磁盘查看和分区类

tree

以树状图形式列出目录内容。

  • 若不存在命令, 需要进行下载 yum install tree
参数 说明
-a 显示所有文件和目录
-C 彩色显示
-d 仅显示目录名称
-D 显示文件更改时间
-f 显示完整的相对路径名称
-g 显示文件所属群组名称
-i 不以阶梯状列出文件或目录名称
-l 直接显示连接文件所指向的原始目录
-n 不在文件和目录清单上加上色彩
-N 直接列出文件和目录名称
-p 列出权限标示
-P<范本样式> 只显示符合范本像是的文件或目录名称
-s 列出文件或目录大小
-t 用文件和目录的更改时间排序
-u 列出文件或目录的拥有者名称
-x 将范围局限在现行的文件系统中
-L 层级显示
  • 参考实例
shell 复制代码
# 显示当前工作目录下的文件层级情况
tree

# 以文件和目录的更改时间进行排序
tree -t

# 以带有相对路径的形式,显示当前工作目录下的文件层级情况
 tree -f

# 只显示目录的层级关系情况
tree -d
du

查看文件或目录的大小

  • du命令来自于英文词组"Disk Usage"的缩写。不要将df和du命令混淆,df是用于查看磁盘或分区使用情况 的命令,而du命令则是用于按照指定容量单位来查看文件或目录在磁盘中的占用情况
参数 说明
-a 显示目录中所有文件大小
-c 显示所有的文件和子目录大小后,显示总和
-k 以KB为单位显示文件大小
-m 以MB为单位显示文件大小
-g 以GB为单位显示文件大小
-h 以易读方式显示文件大小
-s 仅显示总计
-exclude=<目录或文件> 略过指定的目录或文件
--max-depth=<目录层数> 指定统计子目录的深度为第 n 层
  • 参考实例
shell 复制代码
# 以易读的容量格式显示指定目录内各个文件的大小信息
du -h /etc

# 以易读的容量格式显示指定目录内总文件的大小信息
du -sh /etc 

# 显示指定文件的大小信息(默认单位为K)
du anaconda-ks.cfg 
df

显示系统上磁盘空间的使用量情况。

  • df命令来自于英文词组"Disk Free"的缩写。df命令显示的磁盘使用量情况含可用、已有及使用率等信息,默认单位为Kb,建议使用-h参数进行单位换算。
参数 说明
-a 显示所有系统文件
-B <块大小> 指定显示时的块大小
-h 以容易阅读的方式显示
-H 以1000字节为换算单位来显示
-i 显示索引字节信息
-k 指定块大小为1KB
-l 只显示本地文件系统
-t <文件系统类型> 只显示指定类型的文件系统
-T 输出时显示文件系统类型
-- -sync 在取得磁盘使用信息前,先执行sync命令
  • 参考实例
shell 复制代码
# 带有容量单位的显示系统全部磁盘使用量情况
df -h

文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        2.0G     0  2.0G    0% /dev
tmpfs           2.0G     0  2.0G    0% /dev/shm
tmpfs           2.0G   13M  2.0G    1% /run
tmpfs           2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/sda3        35G  5.6G   30G   16% /
/dev/sda1      1014M  169M  846M   17% /boot
tmpfs           394M   40K  394M    1% /run/user/0


# 带有容量单位的显示指定磁盘分区使用量情况
df -h /boot

# 显示系统中所有文件系统格式为xfs的磁盘分区使用量情况
df -t xfs
free

显示系统内存使用量情况,包含物理和交换内存的总量、使用量和空闲量情况。

参数 说明
b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s 持续显示内存
-t 显示内存使用总合
-h 以易读的单位显示内存使用情况
  • 参考实例
shell 复制代码
# 以默认的容量单位显示内存使用量信息
free
# 以MB位单位显示内存使用量信息
free -m

# 以易读的单位显示内存使用量信息
free -h
              total        used        free      shared  buff/cache   available
Mem:           3.8G        1.1G        875M         80M        1.9G        2.5G
Swap:          4.0G          0B        4.0G


# 以易读的单位显示内存使用量信息,每个10秒刷新一次
free -hs 10
lsblk

查看系统的磁盘使用情况。来自于英文词组"list block"的缩写。

参数 说明
-a 显示所有设备
-f 显示文件系统信息
-m 显示权限信息
-l 使用列表格式显示
-n 不显示标题
-P 使用key="value"格式显示
  • 参考实例
shell 复制代码
# 显示系统中磁盘设备的使用情况信息
lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   40G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0    4G  0 part [SWAP]
└─sda3   8:3    0   35G  0 part /
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0   20G  0 part 
sr0     11:0    1 1024M  0 rom  

# 显示系统中所有磁盘设备的使用情况信息
lsblk -a

# 显示系统中磁盘设备的归属及权限信息
lsblk -m

# 显示系统中所有SCSI类型的磁盘设备信息
lsblk -S

# 以列表格式显示磁盘设备信息,并且不显示标题
sblk -nl
mount

mount [-t vfstype] [-o options] device dir

把文件系统挂载到目录。

  • 文件系统指的是被格式化过的硬盘或分区设备,进行挂载操作后,用户便可以在挂载目录中使用硬盘资源。默认情况下Linux系统并不会像Windows系统那样自动的挂载光盘和U盘设备,需要自行完成。
参数 说明
-t 指定挂载类型
-l 显示已加载的文件系统列表
-h 显示帮助信息并退出
-V 显示程序版本
-n 加载没有写入文件"/etc/mtab"中的文件系统
-r 将文件系统加载为只读模式
-a 加载文件 "/etc/fstab"(用于配置开机时自动挂载) 中描述的所有文件系统
  • 挂载前必须要有光盘或者已经连接镜像文件
  • 参考实例
shell 复制代码
# 查看当前系统中已有的文件系统信息(可结合管道符与grep命令进行过滤)
mount 

# 挂载/etc/fstab文件中所有已定义的设备文件
mount -a

# 将光盘设备挂载到指定目录
mount /dev/cdrom /media/cdrom

# 强制以xfs文件系统挂载硬盘设备到指定目录
mount -t xfs /dev/sdb /disk=
umount

把文件系统挂载到目录。

  • umount命令来自于英文单词unmount的缩写。umount卸载命令只需要提供 设备名 或 挂载目录 之一即可。
参数 说明
-a 卸载/etc/mtab中记录的所有文件系统
-h 显示帮助
-n 卸载时不要将信息存入/etc/mtab文件中
-r 尝试以只读的方式重新挂入文件系统
-t 仅卸载选项中所指定的文件系统
-v 执行时显示详细的信息
-V 显示版本信息
  • 参考实例
shell 复制代码
# 卸载指定的文件系统
umount /dev/sdb

# 卸载指定的文件系统并显示过程
umount -v /dev/cdrom
fdisk

管理磁盘的分区信息。

  • fdisk命令来自于英文词组"Partition table manipulator for Linux"的缩写,其功能是用于管理磁盘的分区信息。fdisk命令可以用于对磁盘进行分区操作,根据实际情况进行合理划分。
参数 说明
-b 指定每个分区的大小
-l 列出指定的外围设备的分区表状况
-s 将指定的分区大小输出到标准输出上,单位为区块
-u 搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
-v 显示版本信息
  • 添加磁盘

磁盘文件名称任意, 此处使用默认名称

  • 参考实例
shell 复制代码
# 查看当前系统的分区情况
fdisk -l

# 管理指定硬盘的分区
fdisk /dev/sda
cfdisk

磁盘分区。

  • cfdisk是用来磁盘分区的程序,它十分类似DOS的fdisk,具有互动式操作界面而非传统fdisk的问答式界面,您可以轻易地利用方向键来操控分区操作。输入指令cfdisk之后,将出现上面的图形界面,它是基于鼠标进行操作的,利用它可以进行磁盘的分区操作。
参数 说明
-a 在程序里不用反白代表选取,而以箭头表示
-c 忽略BIOS的数值,直接指定磁盘的柱面数目
-P 显示分区表的内容
-s 忽略BIOS的数值,直接指定磁盘的磁区数目
-v 显示版本信息
-z 不读取现有的分区,直接当作没有分区的新磁盘使用
  • 参考实例
shell 复制代码
# 进行磁盘分区
cfdisk 

# 进行磁盘分区,使用箭头进行操作,而不使用反白表示
cfdisk -a
mkfs

对设备进行 格式化文件系统 操作。

  • mkfs命令来自于英文词组"make file system"的缩写。在挂载使用硬盘空间前的最后一步,运维人员需要对整块硬盘或指定分区进行格式化文件系统操作,Linux系统支持的文件系统包含ext2、ext3、ext4、xfs、fat、msdos、vfat、minix等多种格式。
参数 说明
-V 详细显示模式
-t 给定档案系统的型式
-c 检查该设备是否有损坏
  • 参考实例
shell 复制代码
# 对指定的硬盘进行格式化文件系统操作
mkfs -t xfs /dev/sdb
 
# 对指定的硬盘进行格式化文件系统操作,并输出详细过程信息
mkfs -V -t xfs /dev/sdb

8.10 进程管理类

ps

显示进程状态。

  • ps命令来自于英文词组"process status"的缩写。使用ps命令可以查看到进程的所有信息,例如进程的号码、发起者、系统资源使用占比(处理器与内存)、运行状态等等。帮助我们及时的发现哪些进程出现"僵死"或"不可中断"等异常情况。经常会与kill命令搭配使用来中断和删除不必要的服务进程,避免服务器的资源浪费。
参数 说明
a 显示现行终端机下的所有程序,包括其他用户的程序
-A 显示所有程序
c 显示每个程序真正的指令名称,而不包含路径
-d 显示所有程序,但不包括阶段作业管理员的程序
e 列出程序时,显示每个程序所使用的环境变量
-e 列出所有进程
-f 显示UID,PPID,C与STIME栏位
g 显示现行终端机下的所有程序,包括所属组的程序
h 不显示标题列
-H 显示树状结构,表示程序间的相互关系
-l 采用详细的格式来显示程序状况
-N 显示所有的程序,除了执行ps指令终端机下的程序之外
r 只列出现行终端机正在执行中的程序
-T 显示现行终端机下的所有程序
u 以用户为主的格式来显示程序状况
v 采用虚拟内存的格式显示程序状况
-w或w 采用宽阔的格式来显示程序状况
x 显示所有程序,不以终端机来区分
--cols <每列字符数> 设置每列的最大字符数
--lines <显示列数> 设置显示画面的列数
  • ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义:

    • A 列出所有的进程
    • w 显示加宽可以显示较多的资讯
    • au 显示较详细的资讯
    • aux/-ef 显示所有包含其他使用者的进程
  • au(x) 输出格式 :USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

    • USER: 行程拥有者

    • PID: 进程的ID号

    • %CPU: 占用的 CPU 的百分比

    • %MEM: 占用理内存的百分比

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

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

    • TTY: 改进程是在哪个终端中运行的。对于CentOS来说,tty1是图像化界面,tty2-tty6是本地的字符界面终端。pst/0-255代表虚拟终端

    • STAT: 该行程的状态:

      • R: 运行状态
      • D: 无法中断的休眠状态 (通常 IO 的进程)
      • R: 正在执行中
      • S: 静止状态(睡眠状态)
      • s: 包含子进程
      • l: 多线程
      • +: 前台显示
      • T: 暂停执行
      • Z: 不存在但暂时无法消除,僵尸状态
      • W: 没有足够的记忆体分页可分配
      • <: 高优先序的行程
      • N: 低优先序的行程
      • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    • START: 进程开始时间

    • TIME: 该进程占用 CPU 的运算时间

    • COMMAND:所执行的指令

  • -ef 输出格式: UID PID PPID C STIME TTY TIME CMD

    • UID: 用户 ID
    • PPID: 父进程 ID
    • C: CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算, 执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
    • STIME: 进程启动的时间
    • TIME: CPU时间
    • CMD: 启动进程所用的命令和参数
  • 经验技巧

    • 如果想查看进程的 CPU占用率 和 内存占用率 ,可以使用 aux;
    • 如果想查看进程的 父进程ID 可以使用 -ef
kill

杀死进程。

  • Linux系统中如需结束某个进程,既可以使用如service或systemctl的管理命令来结束服务,也可以使用kill命令直接结束进程信息。如使用kill命令后进程并没有被结束,则可以使用信号9进行强制杀死动作。
参数 说明
-l 列出系统支持的信号
-s 指定向进程发送的信号
-a 不限制命令名和进程号的对应关系
-p 不发送任何信号

最常用的信号是:

  • 1 (HUP):重新加载进程。

  • 9 (KILL):强迫杀死一个进程。

  • 15 (TERM):正常停止一个进程。

  • 参考实例

shell 复制代码
# 列出系统支持的全部信号列表
kill -l

# 结束某个指定的进程(数字为对应的PID值)
kill 1518

# 强制结束某个指定的进程(数字为对应的PID值)
kill -9 1518
pstree

以树状图显示进程。

  • Linux系统中pstree命令的英文全称是"process tree",树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root),如果有指定使用者 id,则树状图会只显示 该使用者所拥有的 行程。
参数 说明
-a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示
-h 列出树状图时,特别标明现在执行的程序
-p 显示进程的PID
-u 显示进程的所属用户
  • 参考实例
shell 复制代码
pstree

# 特别表明在运行的进程
pstree -apnh # 显示进程间的关系

# 同时显示用户名称
pstree -u # 显示用户名称

# 显示当前所有进程的进程号和进程id
pstree -p

# 显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示
pstree  -a
top

实时显示系统运行状态。

  • top命令的功能是用于实时显示系统运行状态,包含处理器、内存、服务、进程等重要资源信息。
参数 说明
q 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
c 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
S 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
s 安全模式,将交谈式指令取消, 避免潜在的危机
b 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内
-d <秒> 改变显示的更新速度
-s 安全模式,不允许交互式指令
-i 不显示任何闲置或僵死的行程
-n 设定显示的总次数,完成后将会自动退出
  • 参考实例
shell 复制代码
# 以默认格式显示系统运行信息
top

# 以默认格式显示系统运行信息,但提供完整的进程路径及名称
top -c  
  
# 以批处理模式显示程序信息
top -b

# 设定每隔5秒刷新一次信息
top -d 5

# 设定总显示次数为3回,随后自动退出命令
top -n 3
netstat

显示网络状态。

  • netstat命令来自于英文词组"network statistics"的缩写,其功能是用于显示各种网络相关信息,例如网络连接状态、路由表信息、接口状态、NAT、多播成员等等。
参数 说明
-a 显示所有连线中的Socket(ip:port)
-p 显示正在使用Socket的进程
-l 仅列出在监听的服务状态
-t 显示TCP传输协议的连线状况
-u 显示UDP传输协议的连线状况
-i 显示网络界面信息表单
-r 显示路由表信息
-n 直接使用IP地址,不通过域名服务器
  • 参考实例
shell 复制代码
netstat -anp | grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
951/sshd
tcp 0 0 192.168.202.100:22 192.168.202.1:57741
ESTABLISHED 3380/sshd: root@pts
tcp 0 52 192.168.202.100:22 192.168.202.1:57783
ESTABLISHED 3568/sshd: root@pts
tcp 0 0 192.168.202.100:22 192.168.202.1:57679
ESTABLISHED 3142/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN
951/sshd
unix 2 [ ] DGRAM 39574 3568/sshd:
root@pts
unix 2 [ ] DGRAM 37452 3142/sshd:
root@pts
unix 2 [ ] DGRAM 48651 3380/sshd:
root@pts
unix 3 [ ] STREAM CONNECTED 21224 951/sshd

# 显示系统网络状态中的所有连接信息
netstat -a

# 显示系统网络状态中的UDP连接信息
netstat -nu

# 显示系统网络状态中的UDP连接端口号使用信息
netstat -apu 

# 显示网卡当前状态信息
netstat -i 

# 显示网络路由表状态信息
netstat -r

# 找到某个服务所对应的连接信息
netstat -ap | grep ssh

8.11 系统定时任务

crontab

时间格式: f1 f2 f3 f4 f5 program

  • crontab命令来自于英文词组"cron table"的缩写。定时计划任务,就计划好的任务,到了时间就会自动执行,在Linux系统中的crond是一个定时计划任务服务,用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入到配置文件中,那么就会按照预定的周期时间自动的执行下去,而crontab命令则是用于配置的工具名称。
    • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
    • 当 f1 为 ***** 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其余类推。
    • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推。
    • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推。
    • 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推。
参数 说明
-e 编辑任务
-l 列出任务
-r 删除任务
-u 指定用户名字
  • 参考实例
shell 复制代码
每一分钟执行一次 /bin/ls
* * * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 [email protected]:
0 17 * * 1-5 mail -s "hi" [email protected] < /tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"

0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache 

50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 

50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务 

0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘 

1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件 

00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。

30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令

# 管理当前用户的计划任务
crontab -e  

# 管理指定用户的计划任务
crontab -e -u user1

# 查看当前用户的已有计划任务列表
crontab -l 

第 8 章 软件包管理

rpm

RPM软件包管理器。

rpm命令来自于英文词组"RedHat Package Manager"的缩写,中文译为红帽软件包管理器,其功能是用于在Linux系统下对软件包进行安装、卸载、查询、验证、升级等工作。

参数 说明
-a 查询所有的软件包
-e 卸载软件包
-f 查询文件或命令属于哪个软件包
-i 安装软件包
-l 显示软件包的文件列表
-p 查询指定的rpm软件包
-q 查询软件包
-h 安装软件包时列出标记
-R 显示软件包的依赖关系
-s 显示文件状态,本参数需配合"-l"参数使用
-U 升级软件包
-v 显示命令执行过程
-vv 详细显示指令执行过程
  • 参考实例
shell 复制代码
# 正常安装软件包
rpm -ivh cockpit-185-2.el8.x86_64.rpm 

# 卸载软件
rpm -e firefox

# 显示系统已安装过的全部RPM软件包
rpm -qa

# 查询某个软件的安装路径
rpm -ql cockpit

# 卸载某个通过RPM软件包安装的服务
rpm -evh cockpit

# 升级某个软件包
rpm -Uvh cockpit-185-2.el8.x86_64.rpm 
yum

基于RPM的软件包管理器。

  • yum命令来自于英文词组"YellowdogUpdater,Modified"的缩写,其功能是用于在Linux系统中基于RPM技术进行软件包的管理工作。yum技术通用于RHEL、CentOS、Fedora、OpenSUSE等主流系统,可以让系统管理人员交互式的自动化更新和管理软件包,实现从指定服务器自动下载、更新、删除软件包的工作。
  • yum软件仓库及命令能够自动处理软件依赖关系,一次性安装所需全部软件,无需繁琐的操作。
参数 说明
-h 显示帮助信息
-y 对所有的提问都回答"yes"
-c 指定配置文件
-q 安静模式
-v 详细模式
-t 检查外部错误
-d 设置调试等级(0-10)
-e 设置错误等级(0-10)
-R 设置yum处理一个命令的最大等待时间
-C 完全从缓存中运行,而不去下载或者更新任何头文件
install 安装rpm软件包
update 更新rpm软件包
check-update 检查是否有可用的更新rpm软件包
remove 删除指定的rpm软件包
list 显示软件包的信息
search 检查软件包的信息
info 显示指定的rpm软件包的描述信息和概要信息
clean 清理yum过期的缓存
shell 进入yum的shell提示符
resolvedep 显示rpm软件包的依赖关系
localinstall 安装本地的rpm软件包
localupdate 显示本地rpm软件包进行更新
deplist 显示rpm软件包的所有依赖关系
  • 参考实例
shell 复制代码
# 不需要询问,直接下载好
yum -y install firefox

# 清理原有的软件仓库信息缓存
yum clean all

# 建立最新的软件仓库信息缓存
yum makecache

# 安装指定的服务及相关软件包
yum install httpd

# 更新指定的服务及相关软件包
yum update httpd

# 卸载指定的服务及相关软件包
yum remove httpd

# 显示可安装的软件包组列表
yum grouplist 

# 显示指定服务的软件信息
yum info httpd
修改网络 YUM 源

https://blog.csdn.net/2302_77228926/article/details/139559880?spm=1001.2014.3001.5506

第 9 章 克隆虚拟机

右键虚拟机名称 -> 管理 -> 克隆

注:以下操作见 5.3

  • 修改主机名 hostnamectl set-hostname xxx
  • 修改hosts文件
  • 修改主机hosts文件
  • xshell中新建会话并连接

快照: 类似于存档

复制到另一台机器: 在vmware打开虚拟机的文件

相关推荐
无敌小茶6 分钟前
Linux学习笔记之环境变量
linux·笔记
Harbor Lau19 分钟前
Linux常用中间件命令大全
linux·运维·中间件
漫谈网络37 分钟前
基于 Netmiko 的网络设备自动化操作
运维·自动化·netdevops·netmiko
꧁坚持很酷꧂1 小时前
Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
linux·运维·qt
凉、介1 小时前
PCI 总线学习笔记(五)
android·linux·笔记·学习·pcie·pci
电鱼智能的电小鱼2 小时前
EFISH-SBC-RK3588无人机地面基准站项目
linux·网络·嵌入式硬件·机器人·无人机·边缘计算
电鱼智能的电小鱼2 小时前
基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案
linux·网络·嵌入式硬件·数码相机·无人机·边缘计算
小诸葛的博客3 小时前
详解Linux中的定时任务管理工具crond
linux·运维·chrome
一默19913 小时前
CentOS 7.9升级OpenSSH到9.9p2
linux·运维·centos
keep intensify3 小时前
Linux常用指令
linux·服务器·php