# Linux 操作系统概述
# 自由软件含义和其他类型软件区别
自由软件是指拥有以下三个层次的自由软件
- 研究程序运行机制,源代码公开并根据用户自己的需要修改它的自由。
- 重新分发副本,以使其他人能够共享软件的自由
- 改进程序,为使其他人受益而散发它的自由
简而言之,就是用户有运行、复制、改进软件的自由
# linux 软件体系结构由的组成。
- 设备驱动层。设备驱动层的功能是各种各样的硬件设备交互,它用独立的程序和每一种设备交互。
- Linux 内核层。Linux 内核层是 Linux 系统的核心,是运行程序、管理磁盘和操控打印机等硬件设备的核心程序,包括 CPU 调度、作业管理、内存管理、文件管理、磁盘管理等。
- 系统调用接口层。系统调用接口层包含进入内核代码的切入点。
- 语言函数库层。语言函数库层是一组预先写好和测试过的可以被程序员用于开发软件的函数。
- Linux Shell 层。Linux Shell 层是 Linux 系统的用户界面,提供了用户与内核进行交互操作的一种接口。
- Linux 应用程序层。标准的 Linux 系统都具有一整套称为应用程序的程序集,包括文本编辑器、编程语言、X-Window、办公套件、Internet 工具、网络服务和数据库等。
# Linux 操作系统简介
# Linux 的内核版本
Linux 的内核版本表示方法发生几次变化,在 1.0~2.6 版本之间由 3 组数字组成:r.x.y.
r:目前发布的 Kernel 主版本。
x:偶数是稳定版本,奇数是开发中的版本。
y:错误修补次数。
一般来说,x 位为偶数的版本表明这是一个可以使用的稳定版本,如 2.6.18;x 位为奇数的版本一般加入了一些新内容,不一定稳定,是测试版本,如 2.7.22。
在 2.6~3.0 版本之间由 4 组数字组成:r.x.y.z。其中近 7 年的时间里前两个数 r.x 即 "2.6" 保持不变,y 随着新版本的发布而增加,z 代表一些 Bug 修复、安全更新、添加新特性和驱动的次数。
3.0 版本之后是 "r.x.y" 格式,x 随着新版本的发布而增加,y 代表一些 Bug 修复、安全更新、新特性和驱动的次数。这种表示方式中不再使用偶数代表稳定版、奇数代表开发版这样的命名方式。例如,3.7.0 代表的不是开发版,而是稳定版。
CentOS7 系统使用的内核版本是 3.10.0。
# Linux 的发行版本
就是因为 Linux 免费的内核,以及允许用户或厂商自行搭配其他应用程序的特性,目前世界上已经有几百种不同的组合,这些不同的厂商把发布的内核、源代码及相关的应用程序组织构成一个完整的操作系统,让一般的用户可以简便地安装和使用 Linux,这就是所谓的发行版本。
# 常见的发行版本
常见的发行版本有 Red Hat Linux、Redflag Linux、Mandrake Linux 及 Ubuntu Linux 等。
# Linux 特点
开发性、多用户、多任务、良好的用户界面、设备独立性、提供了丰富的网络功能、可靠的系统安全性、良好的可移植性、兼容其他 Unix 系统、支持多种文件系统
# Linux 系统的环境搭建
# Linux 安装 iso 镜像版本
Linux 安装 iso 镜像有哪几种版本,区别分别是什么?
- DVD:系统标准安装版,DVD 本身包含了软件,不需要依赖于网络进行安装,此版为大多数用户使用的推荐安装版本。
- Minimal:精简版,安装一个最基本的系统,具有一个功能系统所需的最少的软件包。
- NetInstall:网络版,这是网络安装和救援映像。根据选择的软件列表从网上下载安装。
- LiveKDE:KDE 桌面版。
- LiveGNOME:GNOME 桌面版。
- Everything:最新完整版,对完整版安装盘的软件进行补充,集成所有软件。
# 磁盘分区基础
不考
# Linux 系统的启动与关闭
# Linux 操作系统启动步骤
- 加载 BIOS (Basic Input/Output System)。当启动电源时 ,计算机首先加载 BIOS 引导系统 ,从硬盘引导会查找 MBR, 并且执行记录在 MBR 上的程序 ,这个程序通常就是操作系统的 Loader。 Loader 的 主要功能就是用来指示系统在启动之后要加载哪个系统 ,目前有许多不同种类的 Loader, 如果是 Windows 上的 Loader 则是 NTLDR, 如果是 Linux 的 Loader 则是 GRUB 或 LILO。
- 进入 GRUB。进入 GRUB 程序后 ,系统会出现 多重启动菜单 ,如果计算机已经安装了其他操作系统 则在此列表出现现有的操作系统选项 ,可以通过上下方向键选择要进入的系统 。
- 加载 Linux Kernel。在 GRUB 中选择的是 CentOSLinux, 系统就会开始加载 CentOS 内核程序 ,此时正式进入 Linux 的控制 ,内核开始初始化 , 从 /boot 目录中启动引导程序引导内核映像加载到内存。
- 初始化运行级别。systemd 进程获取系统控制权后 , 首先读取 /etc/systemd/ system/default. target 文件 中的配置 , 找到并读取其对应运行级别的相关服务 ,该对应的级别文件为 /lib/systemd/ system/runlevelN. target, 其中 , N 表示 0~6 的数字(下同) ,代表不同的运行级别。
- 执行默认级别中的所有 Script。systemd 进程获取运行级别的参数后,最先运行的服务是放在 /etc/re. d 目录下的文件。
- 对相关的设备进行初始化 。这主要包括设置初始的系统环境变量 、设置主机名 、 初始化文件系统、清除临时文件、 设置系统时钟等。
- 启动系统的后台进程 。系统的后台进程是指开机自动启动的进程(或称为服务) , 这些进程都是由 syst 程来管理的。
- 启动用户自定义服务。由于 Linux 是多用户系统 ,对权限有着严格的控制 , 每个用户可以设置自定义的用户服务及系统 ROOT 授权。
- 执行 /bin/Login 程序 。Login 程序会提示用户输入账号及口令 ,进行编码并确认口令的正确性,如果二者相互符合 ,则开始为用户进行环境的初始化 ,然后将控制权交给 Shell。
- 打开登录界面。在以上步骤都正确无误执行后,系统会按照指定的 Runlevel 来打开 X 窗口或进入字符命令的登录界面。
# Linux 操作运行级别
0— 停机。
1— 单用户模式。
2— 多用户,没有 NFS。
3— 完全多用户模式(标准的运行级,文本字符界面)。
4— 没有用到(保留)。
5—X 窗口(图形界面)。
6— 重新启动。
# Linux 操作基础
# Linux 系统与 Shell 的关系
Shell 的原意是外壳,用来形容物体外部的架构。 Linux 系统的 Shell 作为操作系统的外壳 ,为用户提供了使用操作 Linux 系统的组件系统的接口 。
Linux 默认的是 Bash (Bour neAgain Shell), 也可以重新设定或切换到其他的 Shell。
# Shell 功能简介
- 在 Linux 命令中 ,Shell 作为命令解释器的具体功能为: 它接收用户输入的命令, 进行分析 ,创建子进程,由子进程实现命令所规定的功能 , 等子进程终止后 ,发出提示符。 这是 Shell 最常见的使用方式。
- 另外 ,Shell 作为一种高级程序设计语言 ,可以编写出代码简洁 、功能强大的程序 。 它属于 UNIX/Linux 下的脚本编程语言,它是解释执行的 ,无须提前编译。
# 简单命令
# pwd 当前路径命令
wd 命令的功能是显示当前工作的全路径名。 例如,在系统中登录以后马上输入命令:
pwd | ||
/home/wdg |
# date 日期命令
date 命令的功能是显示系统当前的日期和时间。 例如 :
date | ||
2018年11 月26日 星期一06: 52: 54 CST |
# who 在线用户命令
who 命令的功能是显示当前已登录到系统的所有用户名、 所有终端名 和登录到系统的时间。 例如 :
who | ||
root ttyl 2018 -11 -26 06: 54 | ||
root pts/0 2018-11-26 06:49 (192.168.1.100) | ||
wdg pts/1 2018 -11 -26 06: 55 (192. 168. 1. 100) |
# cal 日历命令
cal 命令的功能是显示日历。 它可以显示公元 1 ~ 9999 年中任意一年或任意一个月的日历 。 可以不带任何参数直接使用该命令。 例如 :
cal | ||
December 2023 | ||
Su Mo Tu We Th Fr Sa | ||
1 2 | ||
3 4 5 6 7 8 9 | ||
10 11 12 13 14 15 16 | ||
17 18 19 20 21 22 23 | ||
24 25 26 27 28 29 30 | ||
31 |
在 cal 命令之后可以有一个表示年份的数字 ,指定显示某一年全年的日历 , 例如 cal 2019。 注意 , 年份 2019 不能缩写为 "19", 因为 "cal19" 将显示公元 19 年的日历 。 可以指定显示某一年某一月 的日历 ,如 cal82019, 将显示 2019 年 8 月份的日历 。
# uname 系统信息命令
uname 命令查看当前操作系统的信息 , 它可带多个选项。 常用选项有以下几个。
- -r: 显示发行版本号 。
- -m: 显示所用机器类型 。
- -i: 显示所需硬件平台 。
- -v: 显示操作系统版本 。
uname | ||
Linux | ||
uname -r | ||
3.10.0-693.el7.x86 64 | ||
uname -mi | ||
x86_64 x86_64 | ||
uname -v | ||
#1 SMP Mon Oct 19 16:18:59 UTC 2020 |
# WC 统计命令
wc 命令用来统计给定文件的行数、字数和字符数,其格式为:
wc [-lw] [-c] 文件名 |
选项含义 : l 为统计行数, w 为统计字数,c 为统计字节数;如果没有给出文件名 , 则读取标准输入。 例如 :
wc filel | ||
34 403 4075 filel |
输出的列的顺序和数目固定不变 , 分别为行数、字数、字节数和文件名 。 又如 :
wc -w filel | ||
403 filel |
# su 切换用户命令
su 命令用来切换当前用户的登录身份(前提是系统已经创建了其他用户) ,其常用的格式为:
su [ - ] [用户名] |
选项含义:”-” 表示切换时是否带切换用户的环境变量;如果不带用户名,是指普通用户切换到 root 用户。 例如:
su - wdg | ||
pwd | ||
/home/wdg | ||
su | ||
password: | ||
pwd | ||
/home/wdg |
# clear 清屏命令
clear 命令用来清除字符界面上的所有内容,只保留当前提示符 ,并显示在屏幕的第一行上 。
# Shell 命令的操作基础
# 在线帮助命令
用户需要掌握许多命令来使用 Linux 操作系统。 为了方便用户,Linux 提供了功能强大的在线帮助命令一一 man 命令 ,它可以查找到相应命令的语法结构、主要功能、主要选项 说明 。 另外,部分命令还列举了全称以及此命令操作后所影响的系统文件等信息。 格式如下:
man 命令名 |
例如
man who |

通常 man 显示命令帮助的格式包含以下四部分。
- NAME: 命令名称。
- SYNOPSIS: 语法大纲 。
- DESCRIPTION: 描述说明 。
- OPTIONS: 选项。
用于控制手册页滚动的主要键如下。
- 空格键: 显示手册页的下一屏。
- 回车键:一次滚动手册页的一行 。
- q 键: 退出 man 命令。
除 man 命令外,有些命令可以用 "--help" 选项提供该命令的帮助信息 ,用户还可以用 info 和 whatis 等命令查询一些命令的帮助信息 。
# 与 Shell 有关的配置文件
- /etc/profile 文件 。 这是系统最重要的 Shell 配置文件,也是用户登录系统最先检查的文件 ,文件中存放的是系统的环境变量 ,对所有用户都有效果,要对其更改的话 ,必须要在 root 用户权限下才能进行 。 可以使用 env 命令来查看系统当前所有的环境变最 。
- ~/. bash_profile 文件 。 每个用户的 Bash 环境配置文件存在于用户的主目录中 ,当系统运行 /etc/profile 后 ,将读取此文件的内容,此文件定义了 USERNAME\BASHENV 和 PATH 等环境变量,此处的 PATH 包括了用户自己定义的路径以及用户的 "bin" 路径 。
- ~/. bashrc 文件 。 前两个文件仅在系统登录时读取,此文件将在每次运行 Bash 时读取 ,此文件主要定义的是一些终端设置以及 Shell 提示符等 , 而不定义环境变量等内容 。
- ~/. bash_history 文件 。 记录了用户使用的历史命令 。
# Shell 命令的高级操作
# Shell 的命令补全
在 Bash 中可以使用 Tab 键进行补全。如果与输入字母匹配的仅有一个命令名或文件名 ,系统将自动补全 ; 如果有多个与之匹配 ,系统将发出报警声音 ; 如果再按一下 Tab 键,系统将列出所有与之匹配的命令或文件名 ,从而方便用户操作 。
# Shell 的历史命令
用户在命令行操作中输入的所有命令,系统都会将其自动记录到用户宿主目录下的一个文件中 (~/. bash_history), 记录的多少由用户环境变最中的 HISTSIZE 决定。 在输入命令时 ,用户可以通过方向键的上下箭头来选择最近使用过的命令 , 即可完成自动输入历史命令 ; 还可以在提示符下输入 history 命令查看所有历史命令 。 例如 :
history | more | ||
1 ping baidu.com | ||
2 ping 172.29.51.232 | ||
3 cd /etc/sysconfig/network-scripts/ | ||
4 ls | ||
5 vi ifcfg-ens33 | ||
6 ipconfig | ||
7 ping baidu.com | ||
8 ping 172.29.51.232 | ||
9 init5 | ||
10 init 5 | ||
11 startx | ||
12 init 3 | ||
…… |
若执行以前历史命令列表中的某一个命令,则执行 "! n", n 为历史命令列表中的编号, 如执行本例中的编号 4 的历史命令:
!4 | ||
ls | ||
1 Documents hello_word.txt Pictures Templates Videos | ||
Desktop Downloads Music Public test |
# Shell 的重定向
输出重定向符号有 ">" 和 ">>"'">>" 称为重定向附加;而输入重定向符为 "<"。 另外,还有错误重定向输出 "2>"' 可以把命令行出错的信息保存到指定的文件中。
ls | ||
1.c 2.c cal.sh | ||
ls > test #把当前目录清单信息写入test文件中 | ||
cal >> test #把当月日历信息附加到test文件后 | ||
cat test #查看处理后的test文件内容 | ||
1.c | ||
2.c | ||
cal.sh | ||
test | ||
December 2023 | ||
Su Mo Tu We Th Fr Sa | ||
1 2 | ||
3 4 5 6 7 8 9 | ||
10 11 12 13 14 15 16 | ||
17 18 19 20 21 22 23 | ||
24 25 26 27 28 29 30 | ||
31 |
# Shell 的管道操作
命令 1 I 命令 21 命令 31 … I 命令 n |
例如 ,对当前月的日历输出进行统计。
cal | ||
December 2023 | ||
Su Mo Tu We Th Fr Sa | ||
1 2 | ||
3 4 5 6 7 8 9 | ||
10 11 12 13 14 15 16 | ||
17 18 19 20 21 22 23 | ||
24 25 26 27 28 29 30 | ||
31 | ||
cal | wc | ||
8 40 150 |
如果把 "cal I we" 的输出再当作另一个管道线后面命令的输入,进行 we 命令的信息统计,其示例如下:
cal | wc | wc | ||
1 3 24 |
# Linux 的桌面系统
Linux 桌面系统不是考试内容,大家知道常见桌面版本有哪些,都是基于 X-windows 协议基础的桌面系统即可。
# Linux 文件系统
# Linux 系统的文件及其类型
# Linux 系统的文件含义
“文件系统” 有以下几种含义。
- 指一种特定的文件格式。 例如 ,可以说 Linux 的文件系统是 ext4 或 xfs,MSDOS 的文件系统是 FAT16, 而 Windows XP 的文件系统是 NTFS 或 FAT32。
- 指按特定格式进行了 “格式化” 的一块存储介质 。 当人们说 “安装 ” 或 “拆卸 “一个文件系统时,指的就是这个意思 。
- 指操作系统中(通常在内核中)用来管理文件系统以及对文件进行操作的机制及其实现。
# 文件的含义
- 文件。 文件的含义也是有广义和狭义之分的。 广义地说,UNIX 从一开始就把部设备都当成 “文件”。 从这个意义上讲,凡是可以产生或消耗信息的都是文件。 狭义地说, “文件” 是指 “磁盘文件",进而可以是有组织、有次序地存储于任何介质(包括内存)中的一组信息。
- 目录。 目录文件中包含许多文件的目录项,每个目录项包含相应文件的名称和 i 节点号 。
- 文件名。 文件名是用来标识文件的字符串 ,它保存在一个文件目录项中。
- 路径名。 路径名是通过斜线字符 "/" 结合在一起的一个或多个目录及文件名的集合
- 当前工作目录。 当前工作目录就是用户当前所处的目录,刚登录时就是宿主目录,在 Linux 系统中的提示符中显示当前工作目录。
# 文件的成分
无论文件是一个程序、一个文档 、一个设备 ,或者是一个目录,操作系统都会赋予它如下所示的同样的成分。
- 索引节点。 又称 i 节点,在文件系统结构中,包含有关相应文件的信息的一个记录,这些信息包括文件权限、文件主、文件大小、存放位置 、建立日期等。
- 数据。 数据是文件的实际内容 ,它可以是空的,也可以非常大,并且有自己的结构 。
# 文件的命名
- 文件名应尽量简单,并且应反映出文件的内容。 文件名没有必要超过 14 个字符。
- 除斜线(/)和空字符 (ASCII 字符 \0) 以外 , 文件名可以包含任意的 ASCII 字符 , 因为那两个字符被操作系统当作表示路径名的特殊字符来解释。
- 习惯上允许使用下画线 "_" 和句点 "." 来区别文件的类型 , 使文件名更易读。 但是应避免使用以下字符, 因为对系统的 Shell 来说 ,它们有特殊的含义。 这些字符是;、 I 、 <、 >、`、"、'、$、!、%、&、*、?、\、(、)、[、]。文件名还应避免使用空格、制表符或其他控制字符
- 同类文件应使用同样的后缀或扩展名。
- Linux 系统区分文件名的大小写 ,例如,名为 letter 的文件与名为 Letter 的文件不是同一个文件。
- 以圆点 "." 开头的文件名是隐含文件,必须使用带 - a 选项的 ls 命令才能把它们在屏幕上显示出来。
# Linux 系统的目录结构
⭐⭐⭐重点是 1~6
- 根目录 (/)。 "/" 目录也称为根目录, 位于 Linux 文件系统目录结构的顶层。
- bin 。 /bin 目录为命令文件目录, 也称为二进制目录, 包含了供系统管理员及普通用户使用的重要的 Linux 命令的二进制(可执行)文件, 包括 Shell 解释器等。
- boot 。 /boot 目录中存放系统的内核文件和引导装载程序文件。
- dev 。 /dev 目录也称设备 (device) 文件目录 ,存放连接到计算机上的设备(终端、 磁盘驱动器、光驱及网卡等)的对应文件, 包括字符设备和块设备等。
- etc 。 /etc 目录存放系统的大部分配置文件和子目录。 X- Window 系统的文件保存在 /etc/Xll 子目录中,与网络有关的配置文件保存在 /etc/ sysconfig 子目录中。
- home 。 /home 目录中包含系统上各个用户的主目录, 子目录名称即为各用户名。
- lib。 /lib 目录下存放了各种编程语言库 。
- media 。 /media 目录是指系统设置的自动挂接点,如 CDROM 光盘或 U 盘的自动挂接点,而 /mnt 一般是指手动挂接点目录。
- opt。 /opt 目录表示的是可选择的意思, 某些第三方应用程序通常安装在这个目录。
- root。 /root 目录为系统管理员的主目录 。
- usr。 /usr 目录是 Linux 系统中最大的目录之一,很多系统中, 该目录是作为独立分区挂载的。
- mnt。 如果想要暂时挂载某些额外的装置,一般可以放置在 /mnt 目录中 。
- proc。 /proc 目录是一个虚拟的文件系统, 该目录中的文件是内存中的映像。
- sbin。 /sbin 目录下保存系统管理员或者 root 用户的命令文件 。
- tmp。 /tmp 目录存放了临时文件 ,一些命令和应用程序会用到这个目录 。 该目录 下的所有文件会被定时删除,以避免临时文件占满整个磁盘。
- var。 /var 目录以及该目录下的子目录中通常保存经常变化的内容,如系统日志 、 邮件文件等。
- run。 早期的 FHS 规定系统开机后所产生的各项信息应 该放在 /var/run 目录下,新版的 FHS 则规范到 /run 下。
# Linux 的文件类型
# 普通文件
普通文件也称为常规文件,包含各种长度的字节串。 内核对这些数据没有进行结构化,只是作为有序的字节序列把它提交给应用程序。 应用程序自己组织和解释这些数据,通常把它们归并为下述类型之一。
- 文本文件 。 文本文件 由 ASCII 字符构成。 例如,信件 、 报告和称作脚本 (Script) 的命令文本文件,后者由 Shell 解释执行 。
- 数据文件。 数据文件由来自应用程序的数字型和文本型数据构成。 例如,电子表格。数据库,以及字处理文档。
- 可执行的二进制程序。 可执行的二进制程序由机器指令和数据构成,例如 Linux 系统所提供的命令。
Linux 系统中可以使用 file 命令来确定指定文件的类型。该命令可以将任意多个文件名当作参数,其一般使用格式为:
file 文件名[文件名···] |
# 目录文件
目录也称为文件夹,在 Linux/UNIX 系统中把它当成是一类特殊的文件,利用它可以构成文件系统的分层树形结构。
每个目录的第一项都表示目录本身,并以 "." 作为它的文件名。 每个目录的第二项的名称是 "..", 表示该目录的父目录。
应注意,以 "." 开头的文件名表示隐含文件,使用带 - a 选项的 ls 命令可以列出它们。
# 设备文件
在 Linux 系统中,所有设备都作为一类特别文件对待,用户像使用普通文件那样对设备进行操作,从而实现设备无关性。 但是,设备文件除了存放在文件节点中的信息外,它们不包含任何数据。 系统利用它们来标识各个设备驱动器,内核使用它们与硬件设备通信。有两类特别设备文件,它们对应不同类型的设备驱动器。
- 字符设备,最常用的设备类型,允许 1/0 传送任意大小的数据,取决于设备本身的容量 。 使用这种接口的设备包括键盘、终端 、 打印机及鼠标。
- 块设备,这类设备利用核心缓冲区的自动缓存机制,缓冲区进行 I/O 传送总是以 1KB 为单位 。 使用这种接口的设备包括硬盘、软盘和光盘等。
# 链接文件
Linux 具有为一个文件命名多个名称的功能,称为链接。 被链接的文件可以存放在相同或不同的目录下。 如果在同一目录下,二者必须有不同的文件名,而不用在硬盘上为同样的数据重复备份 ; 如果在不同的目录下 ,那么被链接的文件可以与原文件同名 , 只要对一个目录下的该文件进行修改 ,就可以完成对所有目录下同名链接文件的修改。 对于某文件的各个链接文件,可以给它们指定不同的存取权限 ,以控制对信息的共享和增强安全性。
ls -l 看到的第一个字符
使用 ls -l 命令列目录时 ,输出信息的每一行的第一个字符代表文件类型。 其中 , ”-” 表示普通文件,"d" 表示目录文件 , "c" 表示字符设备文件,"b" 表示块设备文件,"l" 表示符号链 接文件。
# Linux 系统的文件操作命令
# ls 命令
其语法格式为 :
ls [选项] [目录或是文件名] |
对于每个目录,该命令将列出其中的所有子目录与文件。
ls 命令的选项及含义
| 命令选项 | 含义 |
|---|---|
| ls -a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
| ls -l | 以长格式来显示文件的详细信息。 每行列出的信息依次是文件类型与权限、链接数、文件属主、文件属组、文件大小和建立或最近修改的时间名称。 对于符号链接文件,显示的文件名后有 “一 “和引用文件路径名 。 对于设备文件,其 “文件大小” 字段显示主、次设备号,而不是文件大小。 目录中的总块数显示在长格式列表的开头,其中包含间接块 |
| ls -m | 按字母逆序或最早优先的顺序显示输出结果 |
| ls -R | 递归式地显示指定目录的各个子目录中的文件 |
| ls -i | 在输出的第一列显示文件的索引节点号 |
# cd 命令
d 命令用于改变当前工作目录 。 与 MS-DOS 的 cd 命令非常相似。 语法格式为:
cd [目录名] |
该命令将当前目录改变至所指定的目录。
cd 命令
| 命令示例 | 含义 |
|---|---|
| cd .. | 上移一层目录。 例如,如果当前在 /home/wdg 目录中,则移到 /home 目录 |
| cd /home/ a | 用户从当前目录移到用户 a 的主目录下,用户在任何当前目录下移动到的目标目录中,都可以使用绝对路径 |
| cd | 移到自己的主目录,适用于任何用户及任意目录下直接回到用户主目录下 |
# cat 命令
cat 命令的主要功能是显示文件信息 ,另外利用输入输出重定向可以建立小型文件以及文件连接功能。
# 显示文件信息
语法格式
cat [选项]文件名 |
常用的选项 - n 为由 1 开始对所有输出行进行编号显示。
例如 :
cat -n /etc/passwd | ||
1 root:x:0:0:root:/root:/bin/bash | ||
2 bin:x:1:1:bin:/bin:/sbin/nologin | ||
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin | ||
4 adm:x:3:4:adm:/var/adm:/sbin/nologin | ||
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin | ||
6 sync:x:5:0:sync:/sbin:/bin/sync | ||
…… |
# 建立小型文件
语法格式
cat>命名的新文件名 | |
··· # 输入信息 | |
<ctrl> + d # 存盘井退出 |
例如:
cat > ml | ||
echo "hello! Linux" | ||
echo'date' | ||
<ctrl> + d | ||
cat ml | ||
echo "hello! Linux" | ||
echo'date' |
# 合并文件
语法格式
cat 文件1 文件2 > 新文件名 |
例如
date > m2 | ||
cat ml m2 > m3 | ||
cat m3 | ||
echo "hello! Linux" | ||
echo'date' | ||
2018年12月03日星期一09:08:21 CST |
# more 分屏显示文件内容
more 命令的主要功能是分屏显示文件内容,在正常情况下每个满屏之后终止 , 并在屏 幕底部提示已显示内容占全部内容的百分比。 如果按 Enter 键则显示下一行 ,按 Space 键则显示下一屏 ,按 Q 键退出。 例如:
man ls > ls.hlp | ||
more ls.hlp | ||
LS(1) User Commands LS(1) | ||
NAME | ||
ls - list directory contents | ||
SYNOPSIS | ||
ls [OPTION]... [FILE]... | ||
DESCRIPTION | ||
List information about the FILEs (the current directory by default). | ||
Sort entries alphabetically if none of -cftuvSUX nor --sort is speci‐ | ||
fied. | ||
Mandatory arguments to long options are mandatory for short options | ||
too. | ||
-a, --all | ||
do not ignore entries starting with . | ||
-A, --almost-all | ||
do not list implied . and .. | ||
--More--(7%) |
用户可以指定显示的文件名,也可以利用管道线由另一个命令的输出作为 more 的输入,从而控制其显示 。 例如,上述例子的两个命令也可以合二为一 ,利用管道线进行如下方式的显示。
man ls | more |
# cp 复制命令
cp 命令把指定的源文件(或目录)复制到目标文件或把多个源文件复制到目标目录中 ,其语法格式为:
cp [选项] 源文件或目录 目标文件或目录 |
cp 命令示例
| 命令示例 | 含义 |
|---|---|
| cp filel file2 | 将文件 filel 复制成目标文件 file2, 目标文件得到的文件生成新的创建日期和 inode 编号 |
| cp ./* Dir1 | 将当前目录下的所有文件(不包含目录)复制到 Dirl 目录中 |
| cp -f filel file2 | 如果文件 file2 已经存在 ,则这个命令覆盖其内容时不先发出提示 |
| cp -p f ilel file2 | 将 filel 内容复制到目标文件 file2 中 ,目标文件保持原有的生成日期和 inode 编号 |
| cp -r Dir1 Dir2 | 将目录 Dirl 及其子目录内容复制到 Dir2 目录中 , 这个效果是递归的, 也就是说 ,如果 Dirl 的子目录中还有子目录,则也复制其中的文件和目录 |
说明
- 对于不同分区, inode 号不同, 因此从一个分区向另一个分区复制文件时,不能使用 cp -p file1 file2 命令 。
- 为防止用户在不经意的情况下用 cp 命令破坏另一个文件(如用户指定的目标文件名已存在, 用 cp 命令复制文件后 , 这个文件就会被新文件覆盖) , 系统默认是进行提示的,如 果加上选项 - f, 则不先发出提示。
- 如果复制一个目录 , 包含该目录下的所有文件及其子目录, 建议同时使用 - rf 这两个选项 。
- 复制多个文件时 , 建议使用通配符。
# mv 文件移动及改名命令
用户可以使用 mv 命令来为文件或目录改名或将文件由一个目录移入另一个目录中 。
其语法格式为:
mv [选项] 源文件或目录 目标文件或目录 |
mv 命令示例
| 命令示例 | 含义 |
|---|---|
| mv file1 file2 | 将文件名从 filel 变成 file2。 如果源文件与目标文件在同一卷中 , 则文件的 inode 号不变 |
| mv file* Dir1 | 将以 file 开头命名的多个文件移到一个目录中 |
| mv -f file1 file2 | 如果文件 file2 已经存在 ,则这个命令覆盖其内容时不发出提示 |
# rm 命令
可以用 rm 命令删除文件与目录。 如果没有使用 - r 选项,则 rm 不会删除目录。 其语法格式为:
rm [选项] 文件名 |
rm 命令示例
| 命令示例 | 含义 |
|---|---|
| rm file1 | 删除 file1 文件,系统默认要求确认 |
| rm -f file2 | 如果文件 file2 已经存在,则这个命令删除该文件时不发出提示确认 |
| rm -r Dir1 | 递归删除 Dirl 目录文件,如果当前目录中还有子目录,则也删除其中的文件和目 录。 但这个命令要求确认; 若不要求确认提示,则同时使用 - rf 选项 |
# 文件信息检索命令 grep
grep 命令是在指定文件中检索出匹配关键字的信息内容,在软件包安装检索中经常用到,其语法格式为:
grep [选项]字符串[文件…] |
它可以方便地搜索文件,可以不打开文件而搜索文件中的文本字符串。 主要选项有: -I 为忽略字符大小写的差别; -n 为在显示符合的字符串之前,标出该行的行号; -v 为过滤检索。
例如
grep root /etc/passwd | ||
root:x:0:0:root:/root:/bin/bash | ||
operator:x:11:0:operator:/root:/sbin/nologin |
同样利用管道线可以实现以上功能。
cat /etc/passwd | grep | ||
root root:x:0:0:root:/root:/bin/bash | ||
operator:x:11:0:operator:/root:/sbin/nologin |
带参数的过滤检索在查看系统配置文件中经常用到,例如 ,查看某一配置文件内容,过滤掉 “空格” 及 "#" 注释内容。 例如 :
cat /etc/logrotate.conf | grep -v ^$ | grep -v ^# | ||
weekly | ||
rotate 4 | ||
create | ||
dateext | ||
…… |
# 文件排序命令 sort
sort 命令对文件进行排序与合并 ,是把所有指定文件的行一起进行排序 ,结果写到标准输出上 。 其语法格式为 :
sort [选项][文件列表] |
sort 命令示例
| 命令示例 | 含义 |
|---|---|
| sort file1 | 对 file1 文件按每行第一个字符进行排序输出 |
| sort file1 file2 | 对 file1 和 file2 两个文件合起来进行排序并输出 |
| sort -r filel1 | 对 file1 文件按每行第一个字符进行反向排序 |
| sort -r -o outf1 file1 | 对 file1 文件按每行第一个字符进行反向排序,并把结果存在 outf1 中 |
| sort -n filel1 | 对 file1 文件按每行第一个字段进行数值排序 |
| sort -k 3 file1 | 对 file1 文件按每行以第 3 个字段为关键字进行排序 |
| sort -n -k 3 filel1 | 对 file1 文件按每行以第 3 个字段进行数值排序 |
# 查找文件命令 find
find 命令是根据指定路径和表达式查找所匹配的文件或目录的命令,find 的参数很多,并且支持正则表达式 ,功能强大。其语法格式为
find [路径···][表达式] |
find 命令
| 命令示例 | 含义 |
|---|---|
| find / -name test | 从/根目录查找名称为 test 的文件或目录 |
| find /var -name * . sh | 在 /var 目录下查找所有以 sh 为扩展名的文件 |
| find /home -user root | 在 /home 目录下查找宿主为 root 用户的文件 |
| find /home -user root -a -name * . sh | -a 连接两个不同的条件(两个条件必须同时满足) |
| find /tmp -perm 755 | 查找在 /tmp 目录下权限是 755 的文件 |
| find /tmp -perm -222 | 查找所有类别用户都满足写权限的文件,即 777-222=555 |
| find / -type d -a -atime + 3 | 在/根目录下查找 3 天之内没有访问过的目录 |
| find /tmp -size+2M | 查找在 /tmp 目录下大于 2MB 的文件 |
# 创建目录命令 mkdir
mkdir 命令用于创建一个目录(类似于 MS-DOS 下的 md 命令) 。 其语法格式为:
mkdir [选项][目录名] |
mkdir 命令示例
| 命令示例 | 含义 |
|---|---|
| mkdir Dir1 Dir2 | 同时创建 Dirl 和 Dir2 两个目录 |
| mkdir -p Dir1/Dir2 | 递归生成目录 Dirl 及 Dir2, 即 Dirl 作为当前目录的子目录,而 Dir2 作为 Dirl 目录的子目录 |
| mkdir -m 744 /usr/Dir3 | 生成目录 Dir3, 作为 /usr 目录的子目录。 权限 (744) 是拥有者 rwx, 组中的其他成员和别人为 r-- |
# rmdir 删除目录命令
rmdir 命令用于删除空目录。 其语法格式为:
rmdir [选项][目录名] |
命令中各选项的含义如下:
-p: 递归删除目录, 当子目录删除后其父 目录为空时 ,也一同被删除 。 如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
# 文件的权限
# 文件的属主与属组
chown 命令可以改变文件的属主,其语法格式为:
chown [选项] [所有者][:[组]] 文件列表 |
- 更改文件的属主 。 例如 ,要将文件的属主更改,可以运行以下命令 。
ls -l f* | ||
-rw-r--r--. 1 root root 0 Dec 30 16:26 f1 | ||
-rw-r--r--. 1 root root 0 Dec 30 16:26 f2 | ||
chown kangkkang f1 #更改 fl 文件的所有者 | ||
ls -l f* | ||
-rw-r--r--. 1 kangkkang root 0 Dec 30 16:26 f1 #fl 文件的属主由原来的 root 改为 kangkkang | ||
-rw-r--r--. 1 root root 0 Dec 30 16:26 f2 |
- 更改文件的属组。 文件同时属于某个特定的组,该组称为文件的属组。 用户可以使用 chown 命令同时修改文件的属主和属组。 例如 :
ls -l f* | ||
-rw-r--r--. 1 kangkkang root 0 Dec 30 16:26 f1 | ||
-rw-r--r--. 1 root root 0 Dec 30 16:26 f2 | ||
chown kangkkang:kangkkang f2 #更改 f2 的属主及属组 | ||
ls -l f* | ||
-rw-r--r--. 1 kangkkang root 0 Dec 30 16:26 f1 | ||
-rw-r--r--. 1 kangkkang kangkkang 0 Dec 30 16:26 f2 # f2 的属主和属组由原来的 root 改为 kangkkang |
# 文件的访问权限
访问权限的表示方法有 3 种, 即三组九位字母表示法、三组九位二进制表示法和三位八进制表示法。
# 三组九位字母表示法
三组九位字母表示法 。 每一组表示为不同类型用户的权限, 顺序分别为文件属主 、 同组用户和其他用户,字母表示法规定各类用户访问文件或目录的方式有 4 种。
- r (读) :允许读取文件内容或者列目录。
- w (写) :允许修改文件内容或者创建、删除文件 。
- x (可执行或查找):允许执行文件或者允许使用 cd 命令进入目录。
- -(无权限):不允许对文件进行读取、修改及执行。
使用 ls -1 命令显示文件或者目录详细信息时,可以看到文件的权限。 例如 :
ls -l | ||
total 8 | ||
-rw-r--r--. 1 root root 0 Dec 1 11:20 1.c | ||
-rw-r--r--. 1 root root 0 Dec 1 11:20 2.c | ||
-rw-r--r--. 1 root root 242 Dec 1 11:20 cal.sh | ||
-rw-r--r--. 1 kangkkang root 0 Dec 30 16:26 f1 | ||
-rw-r--r--. 1 kangkkang kangkkang 0 Dec 30 16:26 f2 | ||
-rw-r--r--. 1 root root 170 Dec 28 23:25 test |
# 三组九位二进制表示法
三组九位二进制表示法。 与九位字母相对应, 相应权限位有权限表示为 1, 无权限表示为 0 。 例如 ,某文件权限字母表示为: rwx r-x r--, 对应的三组九位二进制表示:111 10 1 100 。
# 三位八进制表示法
三位八进制表示法 。 在三位八进制表示中 , 第一位表示用户权限 (u), 第二位表示同组权限 (g), 第三位表示其他用户权限 (o), 每个数字都是多种权限的累加, 每个类型用户对应的三位权限二进制数转换为一个八进制数,例如,某文件权限字母表示为: rwx r-x r--, 其字母模式 、二进制模式和八进制模式的示例对比如下表所示 。
| 权限表示方法 | 属主(u) | 同组用户 (g) | 其他用户(o) |
|---|---|---|---|
| 字母表示法 | rwx | r-x | r-- |
| 二进制表示法 | 111 | 101 | 100 |
| 八进制表示法 | 7 | 5 | 4 |
# 文件权限的修改方法
# 字母模式修改权限
字母模式修改权限 。 字母模式形式即 “用户对象操作符号操作权限",其命令格式为:
chmod [选项] 模式[,模式] 文件名 |
其中的各项含义如下。
- 用户对象 : 包括以下符号或者这些符号的组合 。
- u: user 表示用户, 即文件或目录的所有者。
- g: group 表示同组用户, 即与文件属组有相同组 ID 的所有用户。
- o: others 表示其他用户。
- a: all 表示以上所有用户。
- 操作符号 : 可以是以下类型之一。
- +: 添加某个权限 。
- -: 取消某个权限 。
- =: 赋予给定权限并取消其他所有权限(如果有的话)。
- 操作权限:为下述字母的任意组合。
- r: 可读 。
- w: 可写
- X: 可执行 。
要使用多个字母模式,中间必须以逗号间隔 。 例如:
ls -l f* | ||
-rw-r--r--. 1 kangkkang root 0 Dec 30 16:26 f1 | ||
-rw-r--r--. 1 kangkkang kangkkang 0 Dec 30 16:26 f2 | ||
chmod u+x,g+w,o-r f1 | ||
chmod a=rw f2 | ||
ls -l f* | ||
-rwxrw----. 1 kangkkang root 0 Dec 30 16:26 f1 | ||
-rw-rw-rw-. 1 kangkkang kangkkang 0 Dec 30 16:26 f2 |
# 数字形式修改权限
数字形式修改权限 。 数字形式即由三位八进制数字组成,其命令格式为:
chmod 八进制模式 文件名 |
使用三位八进制数字表示权限,会使权限设置更加简单。
例如:
ls -l f* | ||
-rwxrw----. 1 kangkkang root 0 Dec 30 16:26 f1 | ||
-rw-rw-rw-. 1 kangkkang kangkkang 0 Dec 30 16:26 f2 | ||
chmod 644 f1 | ||
chmod 700 f2 | ||
ls -l f* | ||
-rw-r--r--. 1 kangkkang root 0 Dec 30 16:26 f1 | ||
-rwx------. 1 kangkkang kangkkang 0 Dec 30 16:26 f2 |
# 文件的链接
文件的链接用 ln 命令实现 ,其语法格式为 :
ln [选项] 源文件 [目标文件] |
# 硬链接
默认不带选项参数情况下 ,ln 命令创建硬链接。 建立硬链接时 ,是在另外的目录或本目录中增加目标文件的一个目录项 , 这样 , 一个文件就登记在多个目录中 。
对硬链接有如下限制 。
- 不能对目录文件做硬链接。
- 不能在不同的文件系统之间做硬链接。
# 软连接
软链接是将一个路径名链接到一个文件。 这些文件是一种特别类型的文件。
注意符号链接与源文件或目录之间的区别。
- 删除源文件或目录时 , 只删除了数据,不会删除链接。 一旦以同样的文件名创建了源文件 ,链接将继续指向该文件的新数据。
- 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是 l。
- 符号链接的大小是其链接文件的路径名中的字节数。
- 当用 "ls -l" 命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录。
当删除源文件时。硬链接的文件仍显示内容,而软连接不显示
# Linux 系统管理
# 用户和组管理
# 用户和组的配置文件
# passwd 文件、
位置:/etc/passwd
作用:用于保存各用户的账户信息 。
文件格式:每行定义一个用户账号 , 一行中又划分为多个字段定义用户账号的不同属性,各字段之间用 ":" 分隔 。 示例如下。 因篇幅关系 ,只显示部分行 。
cat /etc/passwd | ||
root:x:0:0:root:/root:/bin/bash | ||
bin:x:1:1:bin:/bin:/sbin/nologin | ||
daemon:x:2:2:daemon:/sbin:/sbin/nologin | ||
adm:x:3:4:adm:/var/adm:/sbin/nologin |
passwd 各字段的含义
| 字段 | 说明 |
|---|---|
| 用户名 | 这是用户登录系统时使用的用户名,它在系统中是唯一的 |
| 口令 | 此字段存放加密的口令。 加密的口令的形式是 X, 这表示用户的口令是被 /etc/ shadow 文件保护的,所有加密的口令以及和口令有关的设置都保存在 /etc/ shadow 中 |
| 用户标识号 (UID) | 是一个整数,系统内部用它来标识用户 。 每个用户的 UID 都是唯一的 。 root 用户的 URN 为 0,1~999 是系统的标准账户 。 普通用户的 URN 从 1000 开始 |
| 组标识号 CGID) | 是一个整数,用它来标识用户所属的组 。 每个用户账户在建立好后都会有一个主组 。 主组相同的账户其 GID 相同 。 默认情况下,每一个账户建立好后系统都会建立一个和账户名同名的组,作为该账户的主组,这个组只有用户这一个成员,即此组是私有组 |
| 注释描述 | 例如存放用户全名等信息 ,可为空 |
| 用户目录 | 用户登录系统后所默认进入的目录,也称宿主目录及用户主目录 |
| 命令解释器 | 指示该用户使用的 Shell, Linux 默认为 bash |
# 用户和组的管理命令
# useradd
useradd 的作用是添加新用户。 其语法格式为:
useradd [参数] 用户名 |
useradd 命令的常用参数
| 选项 | 功能说明 |
|---|---|
| -d home-dir<br> | 设置用户的宿主目录,默认值为 /home/username |
| -e date<br> | 设置账号的过期日期,格式如 2020-10-30 |
| -g group-name<br> | 设定用户所属的组名,默认自动创建以用户名为组名的新的组(私有组) ,若指定,必须为已经存在的组名 |
| -s shell-path<br> | 设定用户登录所使用的 Shell, 默认为 /bin/bash |
| -u uid<br> | 设定用户的 UID, 它必须是唯一的, 且大于 1000 |
| -D username | 用于显示用户所使用的默认值 |
# usermod
usermod 的作用是修改已有用户账户的属性,修改内容包括宿主目录、私有组、登录 Shell 以及设定锁定用户账号等。 其语法格式为:
usermod [参数]用户名 |
usermod 命令的常用参数
| 选项 | 功能说明 |
|---|---|
| -I newusername username<br> | 改变已有用户名 |
| -L username<br> | 用于锁定指定用户账号 |
| -U username | 对已锁定的用户进行解锁 |
# passwd
passwd 不仅是一个用户文件名 , 而且是一个命令。 passwd 命令用于设置用户账号的口令 ,如口令存在则覆盖原有口令 。 其语法格式为 :
passwd [参数] 用户名 |
passwd 命令的常用参数
| 选项 | 功能说明 |
|---|---|
| -S username<br> | 用于查询指定用户的口令状态 ,只 root 可用 |
| -l username<br> | 用于锁定指定用户的口令,只 root 可用 |
| -u username<br> | 用于解锁指定用户的口令,只 root 可用 |
| -d username | 用于删除指定用户的口令,只 root 可用 |
# 软件包管理
# RPM 软件包的管理
# RPM 包的命令
# RPM 包的安装
安装 RPM 包的基本命令格式为:
rpm -ivh <RPM包名> |
其中,i (Install) 表示安装; v (Verify) 表示在安装中 显示详细的安装信息; h (Horizontal) 表示显示水平进度条。
# RPM 包的删除
删除 RPM 包的基本命令格式为
rpm -e <RPM包名> |
其中 ,e 表示删除 (Erase)。 示例如下:
# RPM 包的查询
查询在 RPM 的操作中是很频繁的工作,RPM 命令也提供了大最的参数选项 , 实现灵活的查询。 常用查询如下表所示。 注意在查询包时也可简写,即只写包名即可。
| 命令格式 | 查询功能 |
|---|---|
| rpm -qa | 查询系统中安装的所有 RPM 软件包 |
| rpm -q <RPM 包名> | 查询指定的软件包是否已安装 |
| rpm -qp <RPM 包文件名> | 查询包中文件的信息,用于安装前了解软件包中的信息 |
| rpm -qi <RPM 包名> | 查询系统中已安装包的描述信息 |
| rpm -ql <RPM 包名> | 查询系统中已安装包中所包含的文件 |
| rpm -qf < 文件名> | 查询系统中指定文件所属的软件包 |
# RPM 包的升级
升级 RPM 包的基本命令格式为 :
rpm -Uvh <RPM 包名> |
其中 , U (Update) 表示升级。
# RPM 包的验证
验证 RPM 包的基本命令格式为 :
rpm -V [参数] |
# YUM 软件包的管理
# YUM 概述
基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,并构建软件的更新机制,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须烦琐地一次次下载 、安装,所有软件包由集中的 YUM 软件仓库提供。
# YUM 的常用命令
yum 命令可以管理 RPM 软件包 , 进行软件的安装、 查询 、更新、删除等操作, 但前提是接入网络的情况下 ,yum 命令可以从软件仓库中指定服务器上进行查找及下载软件包等相关操作。 其命令格式为:
yum [options] [ command] [ package …] |
其中,[options] 是可选的,选项包括 - h (帮助) 、 -y (当安装过程提示选择全部为 "yes") 、 -q (不显示安装的过程)等; [command] 为所要进行的操作; [package…] 是操作的对象。
# 查询
YUM 常用查询主要有以下几个方式。
- 查看所有软件仓库:
yum repolist all |
- 查看可用的软件仓库:
yum repolist enabled |
- 查询指定的软件包安装情况:
yum list <软件包名> |
- 查询指定的软件包详细信息:
yum info<软件包名> |
# 安装
YUM 的安装命令为 install, 安装过程中它会自动解决依赖关系,下载目标软件包及其依赖包,并进行安装 。 其语法格式为:
yum install <软件包名或程序组名> |
# 更新
YUM 的更新命令为 update, 用于更新系统中一个或多个软件包 ,其包括可更新的软件包,并根据需要进行升级更新 。 常用操作如下。
- 查找可更新的程序:
yum check -update |
- 更新指定的软件包:
yum update <软件包名> |
# 删除
- 删除指定的软件包:
yum remove <软件包名> |
- 清除缓存目录下的软件包:
yum clean <软件包名> |
# 网络通信管理
# 网络的基本配置
# Linux 下的网络配置文件
| 配置文件名 | 功能 |
|---|---|
| /etc/sysconfig/network-scripts/ifcfg-ens33/etc/hostname <br> | 该文件是系统启动时用来初始化网络的信息 |
| /etc/hostname | 修改主机名称 |
| /etc/hosts | 完成主机名映射为 IP 地址的功能 |
| /etc/host. conf | 配置域名服务客户端的控制文件 |
| /etc/resolv. conf | 配置 DNS 相关信息,用于域名解析 IP 地址 |
| /etc/ protocols | 设定主机使用的协议以及各个协议的协议号 |
| /etc/ services | 设定主机的不同端口的网络服务 |
# 常用的网络管理命令
# hostname
功能:显示及设置主机名 。
- 显示系统主机名 。 其语法格式为:
hostname |
- 设置系统主机名,该命令必须由 root 用户执行。 其语法格式为:
hostname 主机名 |
# ifconfig
功能 : 显示及设置当前活动的网卡。
- 显示当前活动的(或指定的)网卡设置。 其语法格式为:
ifconfig [网卡设备名] |
- 重新设置网卡的 IP 地址, 一般由 root 用户进行设置。 其语法格式为:
ifconfig 网卡设备名 IP地址 |
- 把指定的一块网卡设为多个虚拟 IP 地址 , 如下格式中 n 为指定网卡的编号 。 其语法格式为:
ifconfig 网卡设备名:n IP |
- 激活和停止指定的网卡。 其语法格式为:
ifconfig 网卡设备名 up|down |
# ping
ping 命令是最常用的网络测试命令 ,该命令通过向被测试的目的主机地址发送 ICMP 报文并收取回应报文,来测试当前主机到目的主机的网络连接状态。 ping 命令默认会不间断地发送 ICMP 报文直到用户终止该命令。 使用 "-c" 参数并指定相应的数目,可以控制 ping 命令发送报文的数量 。 其格式为:
ping [-C 报文数] 目的主机地址 |
# 进程管理
# Linux 系统的进程概述
从 CentOS 7 操作系统的启动过程看,系统启动后第一个运行的进程是 systemd, 它的 ID 是 1,systemd 是唯一一个由系统内核直接运行的进程。
# cron 作业
# cron 作业的含义
cron 是一个守护进程,是一个标准的后台服务程序 。 使用 cron 作业服务必须安装 vixie-cron RPM 软件包 , 而且必须运行 crond 服务 。 要启动 crond 服务,使用如下命令。
service crond restart |
cron 作业列表文件是一个文本数据库文件,该文件内容中,每列以 "<tab> 键" 的制表位分隔,共 6 列,每列固定含义如下表所示,每行是一个作业。
| 表头含义 | Min | Hour | Day of Mon | Mon | Day of Week | Command |
|---|---|---|---|---|---|---|
| 取址范围 | 0~59 | 0~23 | 1~31 | 1~12 | 0~6 |
# 创建 cron 作业
利用 crontab 命令去执行一个已经创建好的 cron 作业列表文件名。 创建 cron 作业的语法格式为:
crontab [-u user] filename |
其中,括号内指的是超级用户为指定的普通用户创建的 cron 作业,没有指定用户则是用户本身; filename 是已经编写好的 cron 作业列表文件。
# 管理 cron 作业
一个用户只能有一个 cron 作业, crontab 命令所创建的 cron 作业列表文件 , 根据用户名保存并写入 "/var/spool/cron/ username" 文件中。
当创建 cron 作业后 ,可以用以下命令进行管理。
crontab [-u user] { -e | -l | -r } |
其中, -e 为 edit user's crontab; -l 为 list user's crontab; -r 为 delete user's crontab。
# 进程的控制命令
# ps 命令
在 UNIX/Linux 中,使用 ps 命令对进程进行查看。
其命令格式为:
ps [参数选项] |
ps 命令的常用选项
| 选项 | 说明 |
|---|---|
| -a | 显示所有用户进程 |
| -e | 显示包括系统进程的所有进程 |
| -l | 显示进程的详细列表 |
| -f | 显示进程的详细信息 |
| -x | 显示没有控制终端的进程 |
| -u | 显示用户名和启动时间等信息 |
ps 输出信息的含义
| 选项 | 含义 |
|---|---|
| UID | 进程所有者的用户名 |
| C | 占用的 CPU 时间与总时间的百分比 |
| USER | 进程所有者的用户名 |
| PID | 进程号 |
| PPID | 父进程的进程号 |
| TTY | 进程从哪个终端启动 |
| STAT | 进程当前状态 ,详见下表 |
| STIME | 进程开始执行的时间 |
| VSZ | 进程占用的虚拟内存空间 (KB) |
| RSS | 进程所占用的内存空间 (KB) |
| TIME | 进程从启动以来占用的 CPU 的总时间 |
| USER | 用户名 |
| SIZE | 进程代码大小十数据大小十栈空间大 小 (KB) |
| CMD | 进程的命令名 |
| %CPU | 占用的 CPU 时间与总时间的百分比 |
| NI | 进程的优先级 |
进程状态的含义
| 号 | 含义 |
|---|---|
| S | 睡眠状态 |
| W | 进程没有驻留页 |
| R | 运行或准备运行状态 |
| I | 空闲 |
| Z | 僵尸状态 |
| D | 不间断睡眠 |
| T | 停止或追踪 |
| N | 低优先级的任务 |
# free 命令
free 命令用于显示系统内存的使用情况,包括内存总最 、 已经使用内存数最 、空闲内存数量等信息。 执行格式如下 :
free |
# top 命令
op 命令用于实时显示系统的进程状态,包括显示 CPU 利用率、进程状态、内存利用率等许多系统信息,并且 top 命令一旦运行就会持续不断地更新显示内容,这为系统管理员提供了实时监控系统进程的功能。 其语法格式为:
top |
在 top 环境中常用的功能如下 。
- 排序 。 在默认的情况下 ,top 会按照进程使用 CPU 时间来周期地刷新内容 。但是,用户也可以按照内存使用率或执行时间进行排序。
- 按 P 键,根据 CPU 使用时间的多少来排序 。
- 按 M 键,根据内存的使用最的多少来排序 。
- 按 T 键 ,根据进程的执行时间的多少来排序。
- 监视指定用户。 因为 top 命令显示的数据很多 ,所以从中找出用户所需要的数据很不方便 ,top 命令提供了查看指定用户的进程功能。
- 指定刷新时间。 在 top 中使用 "-d" 参数,可以指定实时显示的刷新时间。将刷新时间设为 1 秒,则在进入 top 时执行如下命令。
top -d 1 |
- 删除指定的进程。 作为管理员或者所有者的身份,可以在 top 中查找异常的进程(占系统太多的资源),因而终止删除它 ,其操作步骤如下。
- 在 top 下 ,查看异常进程的 PIDC 进程号),然后按 K 键。
- 画面上部的提示符会出现 "PID to kill:", 输入要删除的 PID。
- 输入要删除的 PID 后按 Enter 键后,则出现 "KillPID 3282 with signal [15]:" 信息(其中 , 3282 是用户要删除的进程号) ,此时直接按 Enter 键或输入 signal"15" 后再按 Enter 键,则以默认 kill 的参数 15 进行删除 。
- 若无法删除则重新进行以上操作 ,输入 signal"9" 后按 Enter 键 ,则强制删除。
- 查阅帮助。 在 top 环境下 ,可以直接按" ?” 或 H 键,系统会显示详细的帮助内容,按 Ctrl+C 组合键离开 。
- 退出 top 环境 。 在 top 实时显示的状态下,按 Q 键退出 top 环境 。
# sleep
sleep 命令用于使进程延迟一段时间再执行 。 其语法格式为:
sleep time; command |
其中 , time 为延迟时间 ,时间单位为 s; command 为命令 。
# kill 命令
通常情况下 ,可以通过停止一个程序运行的方法来结束程序产生的进程。 但有时由于某些原因 ,程序停止响应 ,无法正常终止 ,这就需要用 kill 命令来终止程序产生的进程并结束程序的运行。 要注意,kill 命令不但能终止进程,而且能终止该进程的所有子进程。 kill 命令的语法格式如下。
kill PID | |
kill -9 PID |
如 kill 不加任何参数,将显示关于于 kill 的帮助信息 。 格式 1 是向指定的进程发送终止运行的信号,进程将自行结束并处理好相关事务 ,属于安全结束;格式 2 用于立即终止进程运行 ,参数 "-9" 为 SIGKILL 信号,另外还有参数 "-15" 为 SIGTERM 信号,属于强制结
# 进程的前台与后台控制
# 前台与后台运行相关命令
在前台和后台执行命令的语法格式为:
command #前台执行 | |
command& #后台执行 |
# jobs 命令
使用 jobs 命令可以查看挂起到后台的进程。 其语法格式为:
jobs |
# fg 命令
fg 命令是将后台挂起的进程恢复到前台来运行。 其语法格式为:
fg 后台进程编号 |
# bg 命令
bg 命令是将后台挂起的进程恢复到后台来运行,即进行后台的进程切换。 注意 , 它和 直接在命令后加上 "&" 运行效果是相同的。 其语法格式为:
bg 后台进程编号 |
# 系统的服务管理
# INIT 进程
这个进程的特点是进程号为 1, 代表第一个运行的用户空间进程。
系统的运行级别
| 运行级别 | 说明 |
|---|---|
| 0 | 停机,不要把系统默认运行级别设置为 0, 否则系统将不能正常启动 |
| 1 | 单用户模式,用于 root 用户对系统进行维护 ,不允许其他用户使用主机 |
| 2 | 多用户模式,在该模式下不能使用 NFS |
| 3 | 完全多用户模式,主机作为服务器时通常在该模式下 |
| 4 | 未分配使用 |
| 5 | 图形登录的多用户模式,用户在该模式下可以进行图形界面的登录 |
| 6 | 重新启动,不要把系统默认运行级别设置为 6' 否则系统将不能正常启动 |
# 系统服务管理的常用命令
# init 转换运行级别
功能 : 转换服务的运行级别 。 其语法格式为:
init [n] |
其中 , n 为 0~6 的级别,转换级别后系统立刻生效 。
# systemctl 系统服务管理
在 CentOS 7 系统中,系统服务管理使用 systemctl 命令代替了原来的 service 命令和 chkconfig 命令 ,service 命令和 chkconfig 命令依然可以使用 ,但是主要是出于兼容的原因 ,应该尽量避免使用。
- 查看系统服务启动状态:
systemctl list -unit -files --type service |
- 列出所有处于激活状态的服务。 其语法格式为:
systemct1 list -units --type service --all |
- 服务状态控制。 对于用户来说 , 最常用的是对服务的启动和停止控制操作 , CentOS7 系统的服务最常见的类型是 service (一般后缀为.service), 可以通过 systemctl 命令来控制其状态。 其语法格式为:
systemctl [status/start/stop/restart/reload] name.service |
其中参数依次为查看服务的状态、服务的启动 、停止、重启、重新加载配置文件;
- 服务开机自启控制。 对于有些常用的服务,根据需要可以不用人工启动 , 设置其开机自动启动。 其语法格式为:
systemct1 [enable/disable] name.service |
其中参数依次为是否开机自动启动:允许、禁止。
# 磁盘操作管理
# Linux 文件系统类型简介
- XFS:XFS 文件系统是 SGI 开发的高级日志文件系统,XFS 极具伸缩性 ,非常健壮。
- vfat:vfat 是 Linux 对 DOS、 Windows 系统下的 FAT (包括 FAT16 和 FAT32) 文件系统的一个统称。
# 磁盘文件系统的挂载与卸载
# 挂载
使用命令手动挂载
挂载文件系统的命令为 mount, 该命令的语法为:
mount [ -t fs -type] [ -o option] device mountpoint |
# 卸载
卸载的命令是 umount 。 其语法格式为:
umount [device] [dir] |
# 常用的磁盘操作命令
# fdisk 磁盘分区
查看现有磁盘设备系统分区情况 ,主要使用 fdisk 命令。 其语法格式为:
fdisk [-l] device |
# du 磁盘统计
du 命令用于统计目录的磁盘使用情况。 其语法格式为:
du [-a] directoryname |
# df 磁盘空问统计
df 命令用于查看所有当前被挂载的文件系统的信息,包括所识别的文件系统的设备名称,该设备的磁盘空间大小,以及被挂载本地的挂接点 。 其常用的选项格式为:
df -[ahil] |
用选项的含义为: a 是显示所有文件系统的信息,包括 swap 和 /proc; h 是以最适合的容最单位显示;i 为显示文件节点数 inode 的使用情况而不是文件块的使用情况;l 为只显示本地文件系统的使用情况。 不加参数运行 df 时,会显示所有已挂载的文件系统的磁盘空间使用信息。
# vi 编辑器的使用
# vi 编辑器的启动 、保存和退出
# 存盘及退出
在命令模式下,输入冒号 ":" 进行存盘以及退出命令操作,如果不确定 w 当前是否处于命令模式,就多按几次 Esc 键 。 以下是 vi 中存盘及退出常用的命令。
:w <回车> #把编辑缓冲区的内容写到编辑的文件中 | |
:w filename <回车> #把编辑缓冲区的内容另存为一个名为filename的文件 | |
:q <回车> #退出,如果没有任何修改可以直接退出 | |
:wq <回车> #存盘后退出 | |
:q! <回车> #强行无条件退出,丢弃缓冲区内容 |
# vi 编辑器的 3 种工作模式
# 命令模式
当输入 vi 命令进入编辑器时,就处于命令模式。 此时 ,从键盘上输入的任何字符都被当作编辑命令来解释。
# 插入模式
插入模式也称为输入模式, 可以通过输入 vi 的插入命令 "i"、附加命令 "a"、 打开命令 "o"、替换命令 "s"、修改命令 "e" 或取代命令 "r" 从命令模式进入插入模式。 在插入模式下,从键盘上输入的所有字符都被插入正在编辑的缓冲区中 , 被当作该文件的正文。
# 底行命令模式
要执行底行命令模式 ,必须在命令模式下输入一个冒号 ":", 在 vi 编辑器的底行出现冒号后接着输入命令按 Enter 键则完成一个底行命令,冒号作为底行命令提示符出现在状态行(通常在屏幕最下一行)。 按下中断键(通常是 Del 键)可中止正在执行的底行命令。
# 3 种模式间的转换

# 命令模式下的操作
# 快速光标定位命令
# 移至行首。
命令(键):”^” 及 "0"(零)
这两个命令都是将光标移到当前光标所在行的开头。但二者有些差别:命令 "0" 总是将光标移到当前行的第一个字符 ,不管它是否为空白符;而命令 """ 将光标移到当前行的第一个非空白符(非制表符或非空格符)。
# 移至行尾
命令(键):"$"
它将光标移至当前光标所在行的行尾 , 停在最后一个字符上 。 如果在它前面先输入一个数字 n, 则光标移到下面 n-1 行的行尾。
# 移至指定行
命令(键):"[行号] G"
将光标移至由行号所指定的行的开头 。 如果没有给出行号 , 则光标移至该文件最后一行开头 。 例如 ,"4G" 则光标移至文本的第 4 行的开头。
# 移至指定列
命令(键):"[列号] |"
将光标移至当前行中指定的列上。 如果没有指定列号, 则移至当前行的第一列上 。 例如:"5|" 则移至第 5 列上 。

# 文本删除命令
# 删除字符
命令(键):"x" 及 "X"
这两个命令都能够删除一个字符。命令 x (小写字母)删除光标所在的字符。如果前面给出一个数值 n, 则由光标所在字符开始 , 向右删除 n 个字符。 这是删除少量字符的快捷方法。命令 X (大写字母)删除光标前面的那个字符。 如果前面给出数值 n, 则由光标之前的那个字符开始、向左删除 n 个字符。
# 复原命令
复原命令(英文 undo) 是很有用的命令,它取消前面刚输入的命令。
命令(键):"u" 及 "U"
这两个命令都能取消刚才输入、插入或删除的命令 ,恢复到原来的状态。 但二者在功能上又有所区别 : u 命令的功能是取消最近一次的编辑 ,多次按 u 键 ,则依次取消前几次的操作;而 U 命令把当前行恢复成它被编辑之前的状态 ,无论把光标移到该行后对它编辑了多少次。
# 字符串检索命令
# 向前检索
命令的格式为:/字符串 <回车>
# 向后检索
命令的格式为:?字符串 <回车>
# 检索下一个字符串
命令 n 和 N 可以重复上一个检索命令。 命令 n 重复检索的方向与上一个检索命令相同,而命令 N 重复检索的方向与上一个检索命令相反。
# 检索特殊字符
如果检索的字符串包含特殊字符*、^、$、[、/、\、| , 需要使用转义形式,即在这些字符前面加上反斜线 "\"' 使其失去特殊的含义,作为一般字符对待。
# 底行命令模式下的操作
# 全局替换命令
全局 (global) 替换命令是一种在底行模式下的组合命令 , 可以对文件进行复杂修改。 这种命令的一般格式为:
:g/模式/命令表 |
:g/字符串1/p: 屏幕输出 (p 命令一一 print) 包含字符串 l 的所有行。:g/字符串1/s//字符串2/: 在包含字符串 1 的所有行中用字符串 2 替换 (s 命令 ——substitute) 字符串 1 的首次出现 。:g/字符串1/s//字符串2/g: 用字符串 2 替换字符串 1 的所有出现,包括在一行中字符串 1 出现多次。:g/字符串1/s//字符串2/gp: 它的功能与 3 本例相同,此外,它还将所有修改过的行显示在屏幕上 。- :
g/字符串1/s//字符串2/gc: 确认 (c 命令一一 confirm) 替换。 字符串 1 每出现一次,就询问用户是否用字符串 2 替换。 如果回答是,则输入 Y 进行替换;否则,不做替换。 :g/字符串0/s/字符串1/字符串2/g: 对包含字符串 0 的所有行做上标记, 然后只对有标记的行进行替换,用字符串 2 替换字符串 1。:g!/模式/命令表: 其功能是对所有不匹配给定 模式的文本行执行给出的命令表 。:g/^/s// /g: 在文件的每一行的开头插入给定的空格。:s/模式/替代文本/选项: 对于每一指定的行 , 与正则表达式 “模式"匹配的第一个字符串用 “替代文本 “取代 。 如果” 选项 “是全局指示符 g, 则该行上的所有匹配 模式的字符串全部被替换;如果” 选项” 是 c (表示确认),就在替换之前提示用户进行确认: 输入 "y"' 就做替换;否则 ,不做替换,保待原样。
# Shell 程序设计
# Shell 概述
# Shell 的简介
事实上,Shell 的功能主要有两个:一个作为命令解释程序;另一个作为一种高级程序设计语言。
# Shell 脚本的建立与执行
# Shell 脚本的建立
建立 Shell 脚本的方法同建立普通文本文件的方式相同,可利用编辑器 w 或 cat 命令,进行程序输入和编辑加工。
# Shell 脚本的执行
执行 Shell 脚本的方式常用的有以下 3 种。
- 输入定向的执行方式。
sh<脚本名 - 以脚本名作为 Shell 参数的执行方式。
sh 脚本名 - 以脚本名作为 Shell 参数的执行方式。
./脚本名
# Shell 的变量
# Shell 环境变量
# 只读的 Shell 环境变量
# 特殊的环境变量
| 环境变量 | 含义 |
|---|---|
| $0 | Shell 程序名 |
| $1-$9 | 第 1 个至第 9 个命令行参数的值 |
| $* | 所有命令行参数的值 |
| $# | 命令行参数的总数 |
| $$ | 当前进程的进程 ID (PID) |
| $? | 最后执行的一条命令的退出状态,返回值为 0 则成功,非 0 则失败 |
| $! | 在后台运行的最后一个进程的进程 ID |
# 位置参数
# 用 set 命令给位置参数赋值
在 Shell 程序中可以利用 set 命令为位置参数赋值,如
set a b c |
# 移动位置参数
在 Shell 中规定,位置参数最多不能超过 9 个,即 $1~$9。 如果实际给定的命令行参数多于 9 个,就需要用 shift 命令移动位置参数。 每执行一次 shift 命令 ,就把位置参数整体向左移一位,即原 $1 的值被移走,新 $1 的值是原 $2 的值 ,新 $2 的值是原 $3 的值,以此类推。 shift 命令不能将 $0 移走 ,所以经 shift 左移参数后, $1 不会取代 $0 的值 。
# Shell 的用户自定义变量
- 字符串赋值
语法格式:
变量名=字符串 |
在程序中使用变最值时,要在变量名前面加上一个符号 "$" 。 这个符号告诉 Shell, 要取出其后变最的值。
- 如果在赋给变最的值中要含有空格、制表符或换行符,那么就应该用双引号把这个字符串引起来 。
如:
myname="Zhang san" |
- 在一个赋值语句中可以出现多个赋值 ,变量赋值可以迭代进行。 但必须注意 , 各赋值动作是从右向左实现的。
如:
A=$B b=$C c=hello |
- 变量值可以作为某个长字符串中的一部分
如果它在长字符串的末尾 ,就可以利用直接引用形式。 例如:
s1=ing | ||
echo walk$s1 or read$s1 or sleep$s1 | ||
walking or reading or sleeping |
变量名出现在开头或中间的长字符串,应该用 "{ }" 括起来。 例如
dir=/home/userl/ | ||
echo ${dir}ml.c | ||
/home/userl/ml.c |
# Shell 中的特殊字符
# Shell 的通配符
- 星号 (*): 星号匹配任意个字符串,在搜索文件时经常使用。
- 问号 (?): 问号匹配任意一个字符。
- 一对方括号 ([]): 方括号中有一个字符组。 其作用是匹配该字符组所限定的任何一个字符。
- 感叹号 (!): 如果感叹号紧跟在一对方括号的左方括号之后 ,则表示不在一对方括号中列出的字符 。
# Shell 的引号
- 双引号 (""): 由双引号引起来的字符, 除 $ 、倒引号和反斜线 (\) 仍保留其特殊功能外 ,其余字符通常作为普通字符对待。
- 单引号 (''): 由单引号引起来的所有字符或字符串都作为普通字符出现。
- 倒引号 (``): 倒引号引起来的字符串被 Shell 解释为命令行 ,在执行时 , Shell 会先执行该命令行 , 并以它的标准输出结果取代整个倒引号部分 。
- 倒引号的嵌套应用,倒引号嵌套时必须将内层的一组倒引号用反斜线 (\) 转义。
# Shell 的命令执行顺序操作符
# 顺序执行
- 顺序分隔符 (😉: 多条命令可以在多行中输入 , 也可以将这些命令在一行中输入 , 但各条命令应以分号 (;) 隔开 , 如下所示 :
cd /home/a; ls -l; cat a.txt |
- 管道线 (|): 它的执行也是顺序执行, 例如:
who | wc -l | write username1 |
本例的含义是统计在线人数 , 并把结果以消息形式发送给 username1 用户 , 它们的执行方式也是顺序执行,只不过是管道方式, 即把前面命令的输出当成后面执行命令的输入 。
# 逻辑与 (&&)
逻辑与操作符 "&&" 可把两个或两个以上命令联系在一起。 其语法格式为 :
commandl&&command2&& … &&commandN |
功能: 先运行 command1, 如果运行成功, 才运行 command2; 否则 , 若 command1 运行不成功,则不运行 command2 。 以此类推 , 只有前 n-1 个命令都正确运行后,第 n 个命令才 能运行。
# 逻辑或 (||)
逻辑或操作符 "||" 可把两个或两个以上命令联系起来。 其语法格式为:
commandl || command2 || ··· || commandN |
功能: 先运行 command1, 如果运行不成功,则运行 command2; 否则 , 若 command1 运行成功,则不运行 command2
# Shell 编程中的输入输出命令
# Shell 的输入输出重定向命令
# Shell 的输入重定向命令
输入重定向是通过使用小于号 "<" 来完成的。 该命令的语法如下所示:
command < input-file |
# Shell 的输出重定向命令
输出重定向通过使用大于号 ">" 来实现 。 其语法格式为:
command > output-file |
# 输出附加定向命令
输出附加定向 命令通过使用两个大于号 ">>" 来实现。 其语法格式为:
command >> output-file |
# 标准错误重定向命令
标准错误重定向使用操作符 "2 >"' 对命令的错误进行重定向 。其语法格式为:
command 2> error-file |
# Shell 的输入输出命令
# read 命令
read 命令是标准的输入命令 ,可以利用 read 命令由标准输入读取数据,然后赋给指定的变最 。 其语法格式为:
read 变量1 [变量2] … |
# echo 命令
echo 命令是将其后的参数在标准输出上输出。各参数之间以空格隔开,以换行符终止。如果数据之间保留多个空格,则要用单引号或双引号把它们引起来。通常,最好用双引号把所有参数引起来,这样不仅易读并且能使 Shell 对它们进行正确的解释。
echo 的参数中有一些特殊字符,用于输出控制或打印出无法显示的字符, 如下表所示 。
| 字符 | 含义 |
|---|---|
| \b | 退格 |
| \c | 不将光标移到下行 |
| \f | 换页 |
| \n | 换行(光标移到下一行) |
| \r | 回车 |
| \t | 水平制表符 |
| \ | 垂直制表符 |
| \\ | 反斜线(转义 "\" 的特殊含义) |
| \ON | ASCII 码为八进制 N 的字符 |
# Shell 程序控制结构语句
# if 语句
# 两路分支的 if 语句
if 语句的最基本形式一般用于两路分支 。 其语法格式为:
if 判断条件 | |
then 命令1 | |
else 命令2 | |
fi |
# 多路条件判断分支的 if 语句
在上述的 if 语句两路分支中,再嵌套一组 if 语句两路分支,则可以变成多路条件分支。它可以简写为以下格式。
if 判断条件1 | |
then 命令1 | |
elif 判断条件2 | |
then 命令2 | |
··· | |
else 命令n | |
fi |
# 测试语句
测试语句是 Shell 的特有功能,它往往是和各种条件 语句结合使用的,如与 if、case、while 搭配
该语句有两种语法格式:一种是使用关键字 test; 另 一种是使用方括号。 其语法格式如下。
test expression | |
[expression] |
二者是等效的。 同时要注意以下几点。
- 如果在 test 语句中使用 Shell 变量,为表示完整,避免造成歧义,最好用双引号将变量引起来。
- 在任何一个运算符、 圆括号或方括号等操作符的前后至少需要留有一个空格。
- 如果需要在下一行继续测试表达式 , 应该在按下 Enter 键之前加上反斜线 (\),这样 Shell 就会将下一行当作和上一行的接续 。
# 文件测试
文件测试参数
| 参数 | 功能 |
|---|---|
| -r file | 若文件存在并且是用户可读的 ,则测试条件为真 |
| -w file | 若文件存在并且是用户可写的 ,则测试条件为真 |
| -x file | 若文件存在并且是用户可执行的 ,则测试条件为真 |
| -f file | 若文件存在并且是普通文件,则测试条件为真 |
| -d file | 若文件存在并且是目录文件,则测试条件为真 |
| -p file | 若文件存在并且是 FIFO 文件,则测试条件为真 |
| -s file | 若文件存在并且不是空文件,则测试条件为真 |
# 字符串测试
字符串测试参数
| 参数 | 功能 |
|---|---|
| str | 如果字符串 str 不是空字符串,则测试条件为真 |
| str1 = str2 | 如果 strl 等于 str2, 则测试条件为真(注意,”=“前后须有空格) |
| str1 != str2 | 如果 strl 不等于 str2, 则测试条件为真 |
| -n str | 如果字符串 str 的长度不为 0, 则测试条件为真 |
| -z str | 如果字符串 str 的长度 为 0, 则测试条件为真 |
# 数值测试
数值测试参数
| 参数 | 功能 |
|---|---|
| n1 -eq n2 | 如果整数 n1 等于 n2 (n1 = n2), 则测试条件为真 |
| n1 -ne n2 | 如果整数 n1 不等于 n2 (n1 <> n2), 则测试条件为真 |
| n1 -lt n2 | 如果 n1 小于 n2 (n1 < n2), 则测试条件为真 |
| n1 -le n2 | 如果 n1 小于等于 n2 (n1 <= n2), 则测试条件为真 |
| n1 -gt n2 | 如果 n1 大于 n2 (n1> n2), 则测试条件为真 |
| n1 -ge n2 | 如果 n1 大于等于 n2 (n1>= n2), 则测试条件为真 |
# 逻辑操作符进行组合的测试
构成复杂表达式的运算符
| 参数 | 功能 |
|---|---|
| ! | 逻辑非,放在任意逻辑表达式之前,原来真的表达式变为假,原来假的变为真 |
| -a | 逻辑与,放在两个逻辑表达式之间,仅当两个逻辑表达式都为真时,结果才为真 |
| -o | 逻辑或,放在两个逻辑表达式之间,其中只要有一个逻辑表达式为真时,结果就为真 |
| () | 圆括号,用于将表达式分组,优先得到结果。 括号前后应有空格并用转义符 "(" 和 ")" |
# case 语句
case 语句允许从几种情况中选择一种情况执行,而且 case 语句不但取代了多个 elif 和 then 语句,还可以用变最值对多个模式进行匹配 , 当某个模式与变最值匹配后 ,其后的一系列命令将被执行 。
Bash 的 case 格式如下。
case string1 in | |
strl) | |
commands-list1;; | |
str2) | |
commands-list2;; | |
··· | |
strn) | |
commadns-listn;; | |
esac |
作用 : 将 string1 和 str1...strn 比较。 如果 strl 和 strn 中的任何一个和 string1 相符合,则执行其后的命令一直到两个分号 (;;) 结束;如果 str1 和 strn 中没有 和 string1 相符合的 ,则其后的语句不被执行 。
# for 语句
for 语句是程序设计语言循环语句中最常用的一个,但 for 语句在 Bash 中和 C 语言中 有所不同。下面是 Bash 中 for 语句的格式 。
for variable [inargument-list] do | |
command-list | |
done |
作用 : 重复执行 command-list 中的命令 ,执行次数与 inargument-list 中的单词个数相同。
# while 语句
while 语句又称为 while 循环 。 根据一个表达式的条件重复执行代码块 。 while 语句的 语法格式为:
while expression | |
do | |
command-list | |
done |
作用: 只要 expression 的值为真,则进入循环体,执行 command-list 中的命令, 然后再做条件测试 ,直到测试条件为假时才终止 while 语句的执行 。
# until 语句
until 语句是另一种循环,它的语法类似于 while 语句,但在语义上有所不同 。 在 while 语句中,只有表达式的值为真时才执行循环体;而在 until 语句中,只在表达式为假时才执行循环体。 其语法格式为:
until expression | |
do | |
command-list | |
done |
作用:只要 expression 的值为假,就执行 command-list 命令 。
# break 和 continue 语句
# break 语句
break 命令可以从循环体中退出来 。 其语法格式为:
break[n] |
其中,n 表示要跳出几层循环。 默认值是 1, 表示只跳出一层循环 。 如果 n 为 3, 则表示一次跳出 3 层循环。 执行 break 时,是从包含它的那个循环体中向外跳出。
# continue 语句
continue 命令跳过循环体中在它之后的语句,回到本层循环的开头 , 进行下一次循环。其语法格式为:
continue [n] |
其中,n 是表示从 continue 语句的最内层循环向外跳出第 n 层循环, 默认值为 1 。
# 算术表达式
Shell 提供 5 种基本的算术运算 : +(加) 、 -(减) 、 \*(乘) 、/(除)和%(取模) 。 Shell 只提供整数的运算。 其语法格式为 :
expr nl 运算符 n2 |
# 退出脚本程序命令
在 Shell 脚本中,exit 命令用于立即退出正在运行的 Shell 脚本,并设有退出值。 其语法格式为:
exit[n] |
其中, n 为设定的退出值,如果未给定 n 的值, 则退出值为最后一个命令的执行状态 。
# 自定义函数
在 Shell 脚本中可以定义并使用函数。 其语法格式为 :
Function() | |
{ | |
commadn-list | |
} |
函数应先定义,后使用。 调用函数时,直接利用函数名调用。
# Linux 的网络服务
# web 服务
# Apache 服务器的安装及启动
- 启动
systemctl start httpd |
- 停止
systemctl stop httpd |
- 重启
systemctl restart httpd |
# Apache 服务器的配置
# 基本指令配置
| 配置信息 | 指令关键字 | 默认参数 | 备注说明 |
|---|---|---|---|
| 服务器的根目录 | ServerRoot | /etc/httpd | |
| 管理员邮箱地址 | ServerAdmin | root@localhost | |
| 标识服务器名 | ServerName | www.example.com:80 | 禁用则为 hostname |
| 根文档目录 | DocumentRoot | /var/www/html | |
| 站点主页检索名访问 | DirectoryIndex | index. html <br> | |
| 日志文件 | logs/ access_log | ||
| 错误日志文件 | logs/ error_log | ||
| HTTP 端口号 | Listen | 80 | |
| 网页编码设置 | AddDefaultCharset | UTF-8 | 配置中文支持 |
| 日志记录等级 | LogLevel | warn | 默认为警告等级 |
| 错误页面导引信息 | ErrorDocument | 404/missing. html | 常用 500、 402、 404 |
| 模块存放路径 | modules | ||
| 附属配置文件功能 | IncludeOptional | conf.d/*.conf | 与主配置文件功能等同 |