文章目录
第一章 Linux的介绍
一、简介
Linux是一款多用户操作系统,这意味着该系统可以为多个用户创建自己的账户且允许多个用户同时访问同一个计算机。并且每个账号可以运行多个程序。
在多个账户中root账户拥有最高权限,类似于Windows系统中的administrator账户。
Linux系统的特点:开源,安全,稳定
二、架构
Linux由三个主要部分构成,分别为:
1)内核——直接和硬件交互;
2)shell——用户界面;
3)实用程序和应用程序——处理日常需求的程序,通过shell调用。
三、Linux与UNIX的比较
Linux主要用于:家庭和开发人员;
UNIX主要用于:主机服务器和工作站。
Linux是免费的开源系统,而UNIX需要高额的许可费。
四、Linux的文件系统
对于Linux来说一切皆文件和结构目录必须熟悉!
所有的文件都在 ‘ / ’ 目录下。‘ / ’目录被进一步细分为bin、boot、home、etc等多个目录。
Linux系统的管理员可以将用户的所有主目录都放在‘ home ’目录下。
如:用户‘ tom ’的主目录是‘ tom ’,那么‘tom ’可以将他的所有文件或创建新的文件于‘ tom ’目录之下。
一些重要目录的介绍
bin目录:存储Linux中的诸多实用程序和命令;
dev目录:存储所有系统与设备相关的文件;
etc目录:存储用户和系统需要引用的与系统有关的相应数据;
如:passwd文件通常存储的是各种基本系统程序和配置文件
lib目录:存储的是可以被Linux软件项目多次使用的代码集(类似于库函数);
home目录:存储的是用户的所有主目录;
usr目录:存储引导进程中不包含操作的文件;
类似于Windows系统中的Program Files
var目录:用于存储缓冲文件、日志文件、缓存文件等等内容经常变化的文件。
五、Linux的基本使用
1. 与用户相关的命令
①创建用户
语法:useradd “用户名”
结果:用户创建成功后,会在 home 目录下自动创建和用户同名的家目录。
②创建用户至指定目录
语法:useradd -d “用户名”
③为用户指定或修改密码
语法:passwd “用户名”
④删除用户(主目录不删除)
结构:userdel “用户名”
⑤删除用户及其主目录
结构:userdel -r “用户名”
“#” 为root用户的提示符
“Bash Shell” 为普通用户的提示符
查看文件内容-语法:
cat “文件位置”
进入指定目录-语法:cd “目录位置”
输出指定目录的信息-语法:ls “目录位置”
2. 查看系统日期和时间的命令
语法:date “相应格式”
格式可以混搭,也可以单独使用
例1(date 直接使用):
例2(单独使用)(注意观察书写语法!!):
例3(混合使用)(注意观察书写语法!!):
补充:date 命令可以修改系统时间
仅系统管理员可修改
语法:date -s "具体时间"
实例:date -s “2022-2-14 12:51:11”
3.屏幕相关的命令
①清空终端屏幕
语法:clear
注意:clear并不删除原来的命令,只是将上面的命令上移,在视觉上看不到而已。
②清空屏幕并将光标定位到屏幕的左上角
语法:tput clear
③屏幕反白显示及恢复
语法:tput smso
(反白显示)
语法:tput rmso
(恢复正常)
④显示闪烁输出
语法:tput blink
⑤将屏幕恢复到默认设置
语法:tput reset
4. 了解正在使用系统的用户的命令
①显示当前登录的所有用户名字
语法:who
对上表解读
- 上表的结果共有四列,其中第四列位用户登录终端的远程主机名,且第四列只显示不是从服务器登录的用户的主机名。
- 终端类型:
tty 表示从服务器登录的用户;
pts 表示远程终端的用户。
②了解当前登录的用户名
语法1:who am i
语法2:who -m
③打印登录用户的登录名和登录数
语法:who -q
补充:
Linux允许多达六个用户从服务器登录操作系统,可以通过Ctrl+Alt+Fx(x表示1~6的数字) 调用虚拟控制台;按Alt键和任意功能键可以在控制台间切换。
5. 确定系统正常运行时间的命令
① 语法 :uptime
②作用
用于查找系统运行的持续时间,会提供一行显示信息,如:当前时间、系统运行时长、当前用户登陆数、过去1、5、15分钟内CPU利用率
③实例
④ CPU利用率
⑤平均负载
- 单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。
- 平均负载的值越小表示系统工作量越少,符合越低;反之负载越高。
- 对于单核而言,负载的值不要大于0.7。
6. 手册页的相关命令
① 显示随Linux系统安装的Linux参考手册的页面
语法:man “命令”
(按q键退出手册页)
手册页的内容分布
②提供命令的详细信息
语法:info “命令”
man命令迎合原始操作系统手册的帮助,而info命令旨在提供更深入的信息和更新过的文档。此外info命令还支持超链接。
③ 显示关于命令(或系统)调用的信息
语法:info “option” “menu item”
④ 搜索所有手册页索引的字符串并显示结果
语法:info --aprpose=version
⑤在当前目录创建文件并在文件写入info命令的结果而不再标准输出上显示结果
语法1:info -o
语法2:info -- output=FILENAME
⑥显示帮助页面并退出
语法1:info -h
语法2:info --help
⑦ 显示info命令的版本信息并退出
语法:info --version
7、结束Linux会话的命令
①立即关机
语法:shutdown -h now
②1分钟后关机
语法:shutdown -h 1
③ 立即重启
语法:shutdown -r now
④关机
语法:halt
⑤ 重启
语法:reboot
⑥把内存中的数据同步到磁盘
语法:sync
六、软链接
①定义
软链接也称符号链接,类似于Windows系统中的快捷方式,主要存放了链接其他文件的路径。
② 语法:ln -s "源文件/目录" “软链接文件的路径”
③示例
在使用pwd命令查看文件目录是,仍然看到的是软链接所在目录!!!
第二章 Linux的基本知识
一、Linux的文件系统
1. 文件结构
所有的文件都存储在磁盘的一个主目录“ / ”下。目录“ / ”被进一步细分为多个目录,如bin、boot、home……
在每个目录中都能存储包含相关数据的文件。
Linux系统的管理员可以将用户的所有目录都放在 /home 目录下。例如目录tom是用户tom的主目录,他将他的所有文件都存储在其主目录tom中,或者在该目录下创建新的目录。
2. 文件命名
- 最多可有255个字节长度;
- 可以包含除了“ / ”以外的特殊字符;
- 可以包含大小写字母;
- 要区分大小写;
- 可以包含空格。
3. 路径
种类:绝对路径 & 相对路径
以“ / ”开头的大都是绝对路径;
不以“ / ”开头的大都是相对路径。
二、Linux的目录命令
1. 路径相关的命令
①显示当前工作目录的绝对路径
语法:pwd
②切换到指定目录
语法:cd “目录路径”
2. 目录相关的命令
①ls指令
Ⅰ语法:ls (选项) “目录/文件”
Ⅱ可选项表
隐藏文件:以“ .XXX ”显示。
Ⅲ示例:
(1).ls -a "目录/文件"
(2).ls -F "目录/文件"
(3).ls -S "目录/文件"
②mkdir指令
Ⅰ语法:mkdir (选项) “目录名”
Ⅱ可选项表
Ⅲ示例:
(1)mkdir "目录名"
(2)mkdir -p "目录名"
③ 删除非空目录
Ⅰ语法:rmdir "目录名"
只能删除非空目录
Ⅱ示例
④强制删除非空目录
Ⅰ语法:rm -rf "目录名"
Ⅱ示例
3. 文件相关的命令
① 创建空文件
语法:touch "文件名"
②拷贝文件到指定目录
语法:cp "源文件" “新目录的路径”
如果目标目录中有要复制的内容则会提示是否覆盖,若希望强制覆盖且不提示则用**\cp**即可
补充:递归复制整个文件夹
语法:cp -r "源文件" "新目录的路径"
③rm指令
Ⅰ语法:rm (选项) “文件/目录名”
Ⅱ可选项表:
也可以联合使用,见示例
Ⅲ示例
(1)rm -r
(2)rm -v
(3)rm -rf
常用
④mv指令
Ⅰ功能:移动(或重命名)文件/目录
Ⅱ语法:
mv “旧文件名” “新文件名”
重命名
mv “源文件” “目标目录”
移动/剪切 到新目录
Ⅲ示例
(1)重命名文件
(2)移动文件
4. 文件查看的指令
①cat指令
Ⅰ功能:查看文件内容
Ⅱ语法:cat "文件名"
Ⅲ示例
补充:
Ⅰ语法:cat -n "文件名"
Ⅱ功能:查看文件内容并显示行号
Ⅲ示例
②more指令
Ⅰ功能介绍:是一个基于VI编辑器的文本过滤器;它以全屏的方式按页显示文本文件的内容。
Ⅱ特点:全部加载文件内容
Ⅲ语法:more “文件名”
Ⅳ内置快捷操作键表
Ⅴ示例
③less指令
Ⅰ功能介绍:用于分屏查看文件内容,功能和more指令相似,但比more指令强大,支持各种显示终端。less指令在显示文件内容时,并不是一次性将整个文件加载后再显示的。而是根据显示需求去加载文件内容,对于大型文件的显示有较高的效率。
Ⅱ特点:按需加载文件内容
Ⅲ语法:less “文件名”
Ⅳ内置快捷操作键表
Ⅴ示例
(1)less “文件名”
(2)/+"字符串"
5. 通配字符
①通配字符表
②示例
Ⅰ只显示a1,a2,a3
语句:ls a[1 2 3]
Ⅱ显示以a开头的文件
语句:ls a*
Ⅲ显示"a_"的文件
语句:ls a?
三、Linux的用户类型
Linux可根据用户类型限制其对文件的访问
1. 系统管理员
主要负责系统的平稳运行。管理员的工作是在系统控制器(或服务器)上进行切换。系统管理员还为系统创建用户和用户组,并且进行备份防止数据丢失,拥有所有的系统权限。一般称为root用户。
2. 文件所有者
创建文件的用户被称为文件的所有者。可以对文件进行任何的操作。
3. 组所有者
在Linux中,可以定义属于某一个组的用户,还会为组指定一个名称。
4. 其他用户
其他用户是相对组而言的,是指不属于某个组的用户。
组的概念:
Linux中的每一个用户都必须属于一个组,不能独立于组外。
而对于文件所有者、所在组和其他组的概念来说,组是共享一些相同属性的用户的集合,本质上是管理权限的集合。
四、文件的访问权限
指文件所有者、组和其他用户所具有的权限
1. 查看文件的访问权限
①语法:ls -l "文件名"
②数据解读
2. 文件类型
①普通文件
用户创建的所有文件都属于普通文件类别。这些文件包括所有数据文件、程序文件、对象文件和可执行文件。用户可以更改这些文件。
②目录文件
目录文件包括目录中存在的所有文件和目录列表。用户不能修改目录文件,而向该目录添加新文件或新的子目录时,系统将自动修改它。
③特殊文件
Linux中的大多数系统文件都是都是特殊文件。他们通常与I/O设备相关联,并都在标准Linux目录中,如:“/dev”和“/etc”。用户不能修改特殊文件。
Linux支持的特殊文件:
字符设备文件(如鼠标)、块设备文件(如硬盘)、链接文件(硬链接和软链接)、套接字(进程间通信)、命名管道(一个进程的输出充当一个进程的输入,也称为“先进先出”FIFO文件)……
3. 文件权限
①权限的种类
Ⅰ r — read — 可读;
Ⅱ w — write — 可写;
Ⅲ x — execute — 可执行。
②各权限的解读
Ⅰ对文件而言:
(1) r — 可以读取、查看;
(2) w — 可以修改但不能删除,删除需要对文件所在目录有w权限;
(3) x — 可以被执行(前提是此文件为可执行文件)。
Ⅱ对目录而言:
(1) r— 可以读取,ls查看目录内容;
(2) w — 可以创建、删除目录中的内容,可以重命名目录;
(3) x — 可以cd进入此目录。
三个权限的位置不会改变;如果没有权限,就会出现减号(-)。
③用数字表示权限
r - 4;w - 2;x - 1;
wx - 3;rx - 5;rw - 6;
rwx - 7.
4. 文件权限的变更
文件所有者才能更改与文件相关的权限
①语法:chmod “更改的权限” “文件名”
②变更方式
u: 文件所有者;g: 所在组;o: 其他组;a:所有人(ugo的综合)。
Ⅰ方式一(符号模式):
· 通过“ + - = ”变更权限
· 示例:
(1)chmod u=rwx,g=rx,o=x "文件/目录名"
;
(2)chmod o+w "文件/目录名"
;
(3)chmod a-x "文件/目录名"
。
Ⅱ方式二(绝对模式):
· 通过数字改变权限
· 示例:
chmod 751 "文件/目录名"
<=> chmod u=rwx,g=rx,o=x "文件/目录名"
数字命令转换表
第三章 Linux的文本编辑器
文本编辑器是一种应用程序软件,通常与操作系统捆绑在一起。文本编辑器用于创建和管理文本文件和文档,有广泛的功能如创建文件、打开文件、复制和粘贴文本、搜索文本……
常见的适用于Linux的文本编辑器有vim和emacs等等。
Windows的文本编辑器是文本文档(vi)
一、vim文本编辑器
1. 介绍
vim编辑器是vi的增强版本(类似于window系统的Edit编辑器)
vim编辑器是用于创建和编辑包含数据、文档或程序文本文件的可视化编辑器。 它在屏幕上显示文件并允许用户插入、删除或更改文本。在vim中引入了一些新功能如分割窗口、可视化模式、语法高亮显示、可编辑压缩文件等等。vim编辑器支持大多数的语言,也可以用vi/vim调用编辑器。
2. vim编辑器的使用
①语法:vim "文件名"
如果有该文件,则直接编辑该文件;
如果无该文件,则先自动创建文件然后开始编辑。
②vim编辑器的工作模式
Ⅰ命令模式(默认):在此模式中所按的键会被翻译成命令;
Ⅱ输入模式:需要输入命令(i/a/o)切换到输入模式,按Esc键会切换到命令模式;
Ⅲ退出模式:在命令模式按冒号( : ) 进入退出模式。
三种模式的相互转换关系
3. vim编辑器的常用命令
4. vim编辑器的配置
内置virc文件包含控制vim编辑器的行为命令。编辑器启动时,会读取virc文件,可以通过cat /etc/virc
来查看此文件的内容
①set命令
语法及其功能
set nu
— 显示行号;
set nonu
— 取消显示行号。
②map命令
Ⅰ功能 自定义快捷键。使用map命令可以将键盘上的某个按键与vim的命令绑定起来。
Ⅱ语法
:map < A > < B >
(A:自定义快捷键;B:vim命令)
Ⅲ示例
③ab命令
Ⅰ功能 自定义缩写
Ⅱ语法
:ab <缩写样式> <命令样式>
— 创建自定义缩写;
:unab “缩写样式”
— 取消自定义缩写;
:ab
— 查看所有已创建的缩写。
Ⅲ示例
(1)创建hello world的缩写
:ab hw hello world
(2)取消hello world的缩写
:unab hw
第四章 Linux的标准设备文件、过滤器和管道
一、标准设备文件
1. 标准输入文件
键盘,0
①介绍
Linux将所有输入输出设备都看作是特殊文件。在执行需要输入的命令时,shell翻译命令并将键盘作为默认输入源。因此,键盘被称为标准输入文件。
以 cat 命令为例
当cat命令后接一个文件名时,会显示文件的所有行;如果没有文件名,则会从标准输入文件获取请输入信息。
②注意
①在Linux中,不是所有的文件都来自标准输入文件,如 ls命令。
②在Linux中,会为所有打开的文件(包括标准文件)赋予一个称为文件描述符的数字,文件描述符 0 被赋予标准输入文件。
2.标准输出文件
显示器,1
①介绍
在Linux中,shell将显示器作为执行任何命令的默认输出设备,显示器被称为标准输出文件。
以ls命令为例
发出 ls命令 时,shell执行命令并将其输出发送到标准输出文件上。
②注意
不是所有的命令都会生成输出,如 mkdir命令 不使用标准输出文件。
标准输出文件的文件描述符为 1。
3. 标准错误文件
显示器,2
shell在显示器上显示错误消息,因此显示器也是标准错误文件。
以 cat命令 为例(存在问题)
cat命令后跟一个不存在的文件名则会出现错误提示。
以 cp file1 dir1命令 为例(权限问题)
如果对dir1没有写权限或对file1没有读权限,此命令会在标准错误文件中显示错误消息。虽然命令是正确的,但因为没有对文件的权限,也将生成错误。
二、输入和输出的重定向
自定义输入源和输出地
1. 输入的重定向
①语法符号 <
②示例
cat命令的默认输入源是键盘;
若使用cat 0< hello.txt
,则输入源为hello.txt的内容。
其中的标准输入文件符号"0"可以省略。
2. 输出的重定向
①语法符号
>
— 覆盖;
>>
— 增添。
②示例
cat zs.txt 1> ls.txt
cat zs.txt 1>> ls.txt
其中的标准输出文件符号"1"可以省略。
解读
使用 >:如果ls.txt不存在,则会先创建此文件;如果此文件已经存在则会覆盖原内容;
使用 >>:如果ls.txt不存在,则会先创建此文件;如果此文件已经存在则会自动追加文件内容。
3. 错误的重定向
①语法符号
>
— 覆盖;
>>
— 增添。
②示例
cat zs.txt 2> ls.txt
cat zs.txt 2>> ls.txt
其中的标准错误文件符号 “2” 不可以省略!!!!
解释:标准错误文件的文件描述符号是强制的;因为 > 的默认值为1,也就是标准输出文件。
三、过滤器
1. 正则表达式
①定义
正确的字符串规则表达式
②作用
用于指定从简单到复杂的字符,正则表达式通常在单引号中。
③示例表
Ⅰ简单的正则表达式
Ⅱ复杂的正则表达式
2. grep过滤器
①介绍
grep过滤器用于搜索文件中指定的字符并显示包含该样式的所有所在行。
②使用语法
grep (选项) “正则表达式” “文件名”
强调:正则表达式要写在双引号中
grep命令中的文件名是可选的,如果没有文件名,grep则等待标准输入。
输入一行后,grep在行中搜索正则表达式,如果包含该特定表达式就显示此行。
用户指示输入结束(Ctrl+d),则执行结束。
③可选项表
任何选项都可以联合使用,如
grep -nc "abc" hello.txt
3. wc过滤器
①介绍
wc过滤器用于计算磁盘文件或标准输入文件中的行数、单词数和字符数。
②使用语法
wc (选项) “文件名”
③可选项表
任何选项都可以联合使用,如
wc -lwc hello.txt
④示例及解读
4. cut过滤器
①介绍
cut过滤器可以抽取文件中特定列的内容。(文件文本必须有行和列的关系)
②使用语法
cut (选项) “文件名”
③可选项表
-d:分隔符,按照指定分隔符分割列;与 -f 一起使用
-f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思(列号,提取第几列);
-c:以字符的单位取出固定字符区间;
-b:以字节为单位进行分割。
④示例
5. tr过滤器
①介绍
tr过滤器用于将一组字符翻译成另一组,也可以用于删除删除重复出现的字符
②常见用法
Ⅰ将多个空格压缩成一个空格
(1)语法 tr -s " " < "文件名"
(2)示例
Ⅱ大小写转换
(1)语法tr "[a-z]" "[A-Z]"
ctrl+d结束操作
(2)示例
6. sort过滤器
①介绍
sort过滤器是按升序排序标准输出中的每行。sort过滤器是根据字符的ASCII码来排序的
②使用及语法
Ⅰ升序排序
(1)语法 sort "文件名"
(2)示例
Ⅱ逆序排序
(1)语法 sort -r "文件名"
(2)示例
Ⅲ按照数字顺序排序
非字符排序
(1)语法 sort -n "文件名"
(2)示例
Ⅳ显示多个文件组合的行
(1)语法 sort "文件名1" "文件名2"
(2)示例
Ⅴ按特定的列对文本进行排序
(1)语法sort +"A" -"B" "文件名"
(2)讲解
指定第一列 +0 -1
指定第二列 +1 -2
指定第三列 +2 -3
指定第N列 +(n-1) -n
忽略前(n-1)个分隔符,指定到第n个分隔符停止
Ⅵ指定分隔符
(1)语法 sort -t ":" ”文件名“
分隔符要用双引号括起来
(2)示例
Ⅶ保留排序结果并输入到文件中
(1)语法 sort -o "文件名"
(2)示例
多个选项之间可以联合选用
四、管道
1. 介绍
Linux具有组合过滤器和其他命令的功能。通过这种方式,过滤器或命令的标准输出可以作为标准输入发送给另一个过滤器或命令。
2. 管道符号 |
3. 讲解
4. 示例
显示当前目录中的总文件数
五、tee命令
保存中间程序
1.介绍
· Linux废弃了管道的中间输出,即中间输出不保存在磁盘上。有时可能要将命令的标准输出通过管道传输到另一个命令,并将其保存在磁盘上备日后使用,这可以使用tee命令实现。
· tee命令读取标准输入并将其写到标准输出和文件。
如果要写入数据的文件不存在,则会创建该文件;如果文件已存在,就重写文件内容。
-a 选项可用于将新内容附加到现有文件。
2. 示例
第五章 Linux的shell脚本
本章的讲解中,会与C语言的部分内容进行比较以促进对Linux的理解
一、shell的介绍
Shell是用户和内核之间的接口,充当着翻译的角色。且Shell是Linux系统提供的实用程序。
Shell的功能:重定向,管道,作业控制等。
Shell作为命令解释器解释命令的过程:
- 读取命令;
- 搜索包含实用程序的目录中的具有该名称的文件并进行定位;
- 加载实用程序到内存;
- 执行实用程序;
- 完成执行后再次显示提示符
命令提示符 ——“ # ”
若没有定位到与命令相应的文件,则会提示错误。
二、shell脚本的创建
1. echo命令
功能:在用户屏幕上显示消息
类似于C语言中的printf
若加“ -n ”则不会换行;不加则默认换行。
2. 执行shell脚本
shell脚本的后缀名:.sh
在第一行要有相应声明:# !/bin/bash
(在**#**后写注释)
方式一:通过“ . ”执行脚本
- 是在当前脚本中执行此脚本,不创建新的shell。
- 必须要有此文件的执行权限。
- 会读取脚本文件的第一行,根据其声明指定的文件去读。
方式二:通过“sh”执行脚本
- 会创建一个新的子shell来执行脚本。
- 不要求执行权限,有读取权限即可。
- 第一行的文档声明是失效的。
3. 创建变量
Linux的所有变量都视为字符串。
变量:在运行过程中值会发生改变的量。
语法:"变量名"="变量值"
(赋值操作符两端无空格)
shell脚本中创建的变量会在脚本执行结束后清空,但shell提示符后创建的变量会保留。
4. 引用变量
变量引用操作符:$
示例:将一个变量的值赋给另一个变量
a=${as}
(as为字符串)
若as处为字符串,则必须加上 { },且在涉及关联使用时,也需要加上大括号。
5. 将值读取到变量
类似于C语言中的scanf
语法:read "XXXX"
# 类似于C语言中的 // 进行注释。
三、shell脚本中命令替换的使用
替换操作符:` `(反引号)
示例:echo “the date is `date`”
1. expr命令
大部分shell不支持数字变量,所有变量都会被视为字符串;若处理数字运算时,可以使用expr命令。
语法:expr num1 + num2
执行此命令时,运算符两侧有空格。
示例:
expr命令支持的运算符包括 +,-,*,/,%;在使用*时,要加 \,即 \*。否则shell会认为*为通配符。
expr命令不支持小数,出现小数会报错。
2. test命令
test命令评估一个表达式,并返回真(0)假(1);
语法:test [表达式]
test命令可以检查变量的值,判断测试字符是否相同(=或!=)
test命令对多个条件的测试
test -a ——and——多个条件必须同时满足;
test -o ——or——多个条件满足一个即可。
四、shell脚本中编程构造的使用
1.if构造
类似于C语言中的if语句
if构造通常于test命令共同使用。
语法(一):
if [表达式]
then [代码块]
else [代码块]
fi
语法(二)
if [表达式1]
then [代码块]
elif [表达式2]
then [代码块]
else [代码块]
fi
在shell脚本中不能使用“>”“<”等符号判断关系
-eq | = | 等于则为真 |
---|---|---|
-ne | != | 不等于则为真 |
-gt | > | 大于则为真 |
-ge | >= | 大于等于则为真 |
-lt | < | 小于则为真 |
-le | <= | 小于等于则为真 |
2. case…esac构造
类似于C语言中的switch语句
该构造在shell脚本中根据特定的变量执行特定的代码。
语法:
case [变量] in
num1) [代码块1] ;;
num2) [代码块2] ;;
*) [代码块3] ;;
esac
;; 表示结束
* ) 类似于C语言中的default子句
3. while构造
类似于C语言中的while语句
功能:实现循环
语法:
while [表达式]
do [代码块]
done
只要表达式结果为真,就会循环执行do和done之间的命令
4. for构造
类似于C语言中的for语句
for构造的一列值由一个或多个空格分隔
语法(一):
for [变量名] in [变量值列表]
do
[循环列表代码块]
done
循环次数由“变量值列表”决定
语法(二):
for((变量初始化;循环条件;变量修改))
do
[循环体]
done
5. break、continue、exit
与C语言的break、continue、exit类似
**break:**跳出循环;
**continue:**结束(跳过)当前循环,继续开始下一轮循环;
**exit:**直接退出,停止脚本的运行。
用“ 换行 ”或“ ; ”来分隔两个命令
6. test命令
判断真假
①test命令用于检查文件的状态
语法:test -e
检查文件是否存在
语法:test -f
判断是否为普通文件
语法:test -d
判断是否为文件夹
②字符串测试
选项 | 值 | 描述 |
---|---|---|
string | string | 字符串不为空 |
-z string | ture | 字符串长度为0 |
-n string | ture | 字符串长度为非0 |
string1 = string2 | ture | 字符串相同 |
string1 != string2 | ture | 字符串不同 |
7. 函数的创建
函数是由同一名称引用的并用于执行特定任务的代码块。
语法:
function [函数名]
{
[函数体]
}
shell脚本还允许将参数传递给函数,需要使用他们的位置来引用传递给函数的参数。
语法:$n
(其中n为数字,表示传递的第n个参数)
可以直接用函数名调用函数
五、shell脚本中参数的处理
位置参数变量
语法:
$n
n为数字,$0表示命令本身,$1-9表示第1~9个参数,十以上的参数需要用大括号括起${10};
$*
表示命令行中的所有参数;
&#
表示命令行中参数的个数。
六、shell脚本的调试
set命令
1. -v 选项
功能: 在脚本执行的同时显示脚本内容。
2. -x 选项
功能: shell脚本中的每一个语句或表达式前都要加一个**+**符号;且还会显示脚本中对语句或表达式的替换
第六章 Linux的管理文件和进程
一、文件的定位
1. find命令
find命令用于定位目录及其所有子目录中的文件
语法:find [指定目录] [表达式]
(若不指定目录,则会在当前目录中搜索)
① -name和 -print选项
-name
指定要搜索的文件名;
-print
显示文件的完整路径
若未指定搜索路径,则默认从当前目录开始搜索;
find
命令的默认选项,可以省略;
不带-name
的find
命令显示指定目录及其子目录的所有文件的路径名
② -type选项
语法:-type [可选参数]
按照类型搜索文件
可选参数表
可选参数 | 功能 |
---|---|
b | 特殊快 |
c | 特使字符 |
d | 目录 |
f | 普通文件 |
l | 符号链接 |
③ -mtime选项
**功能:**显示在当前日期前的特定天数内修改过的所有文件名称。
可选参数表
可选参数 | 功能 |
---|---|
-mtime n | 指定在第n天修改过的文件 |
-mtime +n | 指定早于n天前修改过的文件 |
-mtime -n | 指定当前日期的n天前修改过的文件 |
④ -exec选项
**功能:**指定执行对文件的操作。
必须使用“ { } ”指定 -exec选项;最后用“ \ ”表示该选项结束
⑤ -ok选项
**功能:**在执行,每个文件执行命令时都会要求用户确认。
2. locate命令
需要系统管理员定期更新locate数据库
功能: 快速定位文件位置。
语法:locate [可选项] [搜索的文件]
locate是基于数据库进行查询,在第一次运行前必须使用
updatedb
指令创建lacate数据库
只有Linux的系统管理员才能重新创建或更新locate数据库。
3. xargs命令
功能: 一次性操作多个文件;
语法: xargs [可选项] [命令 初始化参数]
示例:find /home/zs -type f | xargs rm
定位到多个文件
可选项表
可选项 | 功能 |
---|---|
-n num | 对命令指定每个命令行处理最多num个参数,即每个命令行每次将处理num个文件 |
-F num | 每次最多运行num个进程,默认值为1;若num=0,xargs一次将运行尽可能多的进程。若未指定-p,一次将只对一组文件执行命令,若指定了 -p num,将尝试对num组文件运行命令 |
-p | 以交互模式运行命令。它提示用户是否要运行每个命令行,并从终端读取一行;只有当响应以Y(y)开头,才会运行命令。 |
-s num | 指定每个命令行最多num个字符,包含命令、初始参数和参数字符串末尾的终止空字符 |
-t | 在执行前,在标准错误文件中打印命令行 |
-r | 指定如果标准输入不包含任何行,它不应当执行命令。通常,即使没有输入也会运行一次命令 |
可以通过
-P 0
来提高CPU利用率。-P
表示最多运行多少进程,0
表示一次尽可能多的运行进程。
二、文件的管理
1. ln命令(硬链接和软链接)
**硬链接:**如果A文件和B文件的关系是硬链接,则用户修改A文件的内容,那么B文件的内容也会发生改变。
特点
硬链接可以创建多个;
不能对目录做硬件链接;
不能在不同的文件系统之间做硬链接(不能跨文件系统);
所有的硬链接具备相同的Node节点号。
语法(一):ln [源文件] [硬链接文件]
语法(二):ln -s [源文件] [链接文件]
创建软链接
软链接类似于快捷方式
语法(三):ln -x
创建硬链接,不受源文件影响
2. paste命令
**功能:**并排显示文件内容,即水平合并。
水平合并并显示文件的内容。
三、文件的比较
1. cmp命令
cmp命令允许用户比较两个文件并显示两个文件首个不同之处的行号和字符位数。
若两个文件是相同的,则不提供任何输出。
2. comm命令
comm命令按行比较两个排序的文件。
不带任何选项的命令仅提供三列输出:
第一列:只存在第一个文件的行;
第二列:只存在第二个文件的行;
第三列:两个文件都存在的行。
可选项表
可选项 | 功能 |
---|---|
-1 | 在输出中不显示第一列 |
-2 | 在输出中不显示第二列 |
-3 | 在输出中不显示第三列 |
3. uniq命令
uniq比较存储的文件的相邻行,并使用不同选项来显示文件中唯一的或重复的内容
可选项表
可选项 | 功能 |
---|---|
-v | 只显示唯一的行 |
-d | 只显示重复的行 |
-c | 显示所有行,每行前有它出现的次数 |
4. type命令
显示对应命令的所在路径;如果是内置命令,则会相应的显示命令的类型(关键字,内置命令等)。
5. exec命令
exec后跟命令,在执行完对应的命令后会退出shell。
四、文件的压缩
1. gzip实用程序
功能: 压缩文件;
压缩语法:gzip [可选项] [要压缩的文件]
解压语法:gunzip/zcat [可选项] [压缩包]
可选项表
可选项 | 功能 |
---|---|
-e | 将输出显示在标准输出中 |
-d | 解压文件 |
-h | 显示gzip和gunzip的帮助 |
-L | 显示软件许可证 |
-n / --no-name | 压缩时不保存原始文件名和时间戳记 |
-N / --name | 保存或恢复原始文件名和时间戳记 |
-r | 递归压缩/解压目录。 |
-l | 列出文件属性 |
-q | 不显示任何警告 |
-f | 强制重写输出文件和压缩链接 |
-t | 检查压缩文件的完整性 |
-v | 显示在解压/压缩期间关于每个文件的详细信息 |
-V | 打印压缩/解压实用程序的版本 |
-S | 对压缩文件使用后缀SUF |
2. GZIP环境变量
可用于为gzip和gunzip指定默认选项
五、文件中的特殊字符
1. 文件名扩展字符(通配符)
?
*
[ ]
\
忽略后面紧跟的字符的特殊含义;
' '
关闭其中包含的每个字符的特殊含义 ;
" "
关闭除$、'、\意外的所有特殊字符的含义。
2. Linux中的分隔符
空格、制表符、换行符;
3. ,命令终止符
;
&
使命令在后台运行;
(管道符号)
4. 注释
#
后跟注释内容
六、Linux进程
1. 进程的介绍
①介绍
程序:静态的、存在磁盘中、永久的;
进程:动态的、存在内存中、有生命周期。
②系统模式转换
指令的分类:
普通指令:ls、cd;
特权指令:只有内核可以使用。
系统模式的转换:
用户模式:运行用户进程的模式;
内核模式:运行内核进程的模式。
③进程的启动和销毁
原始进程:init > getty > login > shell
进程的启动:当系统启动完成后,管理进程的是initial,而不是内核;
进程的销毁: 父进程负责销毁子进程并且释放子进程占用的空间。
④进程的优先级
内核控制:0~99 动态优先级
用户控制:100~139 静态优先级
值越低,优先级越高,可用nice值来管理进程的优先级;给重要的进程分配更多的时间片,nice值越低,优先级越高。
⑤进程的类型
交互进程:分为前台进程和后台进程,在shell启动的程序都是交互进程;
批处理进程:进程序列;
守护进程:一般常驻后台运行。
2. 进程的管理
①管理类型
监视进程;进程前后台的切换;设置教程的优先级;终止进程。
②进程的分类(根据启动方式)
终端无关进程;终端相关进程。
③监视进程
进程的状态
提示符 | 意义 |
---|---|
stopped,T,t | 停止 |
ready,R | 可以运行,但尚未运行 |
running | 运行 |
interrupt | 可中断运行 |
uninterrupt | 不可中断运行 |
zombie,Z | 僵尸进程(进程结束但内存未释放) |
D | 不可中断睡眠 |
S | 可中断睡眠 |
X | 死亡进程,不会显示 |
pstree命令
以树状显示进程的父子状态
-p
可选项会显示进程的id
ps命令
功能: 显示系统中进程的详细信息
可选项表
选项 | 功能 |
---|---|
a | 显示现行终端下的所有进程信息,包括其他用户的进程信息(终端相关进程) |
u | 显示进程是哪个用户发起的 |
x | 显示终端无关进程信息 |
e | 显示所有的进程(包括终端相关和无关) |
l | 以长格式显示 |
f | 显示进程的完整信息 |
top命令
以动态的方式实时显示系统的进程、CPU、内存等信息。
可选项表
可选项 | 功能 |
---|---|
-d | 指定top命令的更新时间(单位:秒) |
-l | 使top不显示任何闲置或僵尸的进程 |
-p | 通过指定进程ID来指定监控某个进程的状态 |
P | 以CPU使用率排序 |
M | 以内存使用率排序 |
N | 以PID排序 |
Q | 退出top |
④进程前后台的切换
操作 | 功能 |
---|---|
命令后加 & | 指定进程到后台运行 |
ctrl + z | 暂挂当前进程 |
jobs | 查看所有暂挂的前台和后台进程,以及正在运行的后台进程列表 |
bg | 在后台恢复进程 |
fg | 在前台恢复进程 |
wait | 暂挂shell,使其不再接受命令 |
⑤设置进程的优先级
语法:nice [可选项] [命令]
可选项 | 功能 |
---|---|
-n | 指定进程的优先级 |
⑥终止进程
语法:
kill
kill -l
列出所有的终止信号
常见信号 | 含义 |
---|---|
SIGUP | 挂起进程、终端掉线、用户退出 |
SIGNT | 信号终端 |
SIGOUIT | 退出信号 |
SIGKILL | 强制终端信号 |
SIGTERM | 终止进程 |
SIGTSTP | 暂停进程 |
第七章 Linux的实用程序
一、文件压缩实用程序
1. gzip使用程序
功能: 压缩文件
压缩语法: gzip
[可选项] [要压缩的文件]
解压语法: gunzip/zcat
[可选项] [压缩包]
可选项 | 功能 |
---|---|
-r | 递归压缩 |
-v | 显示详细信息 |
2. GZIP环境变量
GZIP环境变量可用于为gzip和gunzip指定默认选项。
3. 压缩重定向
语法: gzip -c
二、格式化磁盘实用程序
语法: fdisk [可选项]
可选项表
可选项 | 功能 |
---|---|
-l | 列出分区 |
-p | 打印分区表 |
-n | 创建新分区 |
-d | 删除一个分区 |
-q | 不保存更改并退出 |
-w | 写入新分区表并退出 |
三、聊天实用程序
1. mesg命令设置是否接收消息
语法 | 功能 |
---|---|
mesg | 显示终端当前的访问状态 |
mesg -y | 允许其他用户写入你的终端 |
mesg -n | 不允许其他用户写入你的终端 |
2. who命令查看用户消息状态
语法 | 功能 |
---|---|
who -T/-w | 显示当前登录用户的消息状态 |
who -HT | 显示表头 |
3. talk命令
功能: 通过网络与另一个用户聊天
语法: talk [用户名] [终端名]
4. write实用程序
功能: 将文本写入另一个用户的终端
语法: writr [用户名] [终端名]
5. wall实用程序
功能: 向所有用户的终端发送消息
语法: wall [发送的消息]
root用户发送的消息可以忽视mesg命令,即各用户均会以
mesg -y
接收
四、任务调度实用程序
1. cron守护进程
①crond任务调度
crond后台程序:
定时调用
- shell脚本——完成对数据可的备份;
- 简单任务。
②crontab进行定时任务设置
功能: 系统在某个时间执行的特定的命令或程序
语法: crontab [可选项]
可选项 | 功能 |
---|---|
-e | 编辑crontad定时任务 |
-l | 查询ctontab任务 |
-r | 删除当前用户的所有crontab任务 |
2. at实用程序
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行;
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业;
- at命令执行完一个任务后不再执行此任务 ;
- 在使用at命令时,一定要保证atd进程的启动。
语法: at [可选项] [时间]
可选项表
可选项 | 功能 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-l | atq的别名 |
-d | atrm的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q [队列] | 使用指定的队列 |
-f [文件] | 从指定文件读入任务而不是从标准输入读入 |
-t [时间参数] | 以时间参数的形式提交要运行的任务 |
时间定义
-
接受在当天的hh:mm(小时:分钟)式的时间指定。 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午
-
指定命令执行的具体时间。 指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定日期必须跟在指定时间后面。
-
使用相对计时法。 格式为:now + x
时间单位,时间单位可以是minutes(分钟)、hours(小时)、days(天)、weeks(星期) -
直接使用today(今天)、tomorrow(明天)来指定完成命令的时间
五、其他实用程序
1. bc实用程序
功能: 充当计算器
语法: bc [可选项] [文件]
2. finger实用程序
功能: 显示当前登录到Linux系统的所有用户状态。
语法: finger [可选项] [用户名]
可选项表
可选项 | 功能 |
---|---|
-s | 与不带任何选项使用finger命令相同 |
-l | 附加显示用户的家目录、家庭电话、登录shell、邮件状态及上述三个文件内容 |
-p | 当与-l 一起使用时,不显示 .plan 和 .project文件的信息 |
-m | 使finger命令对登录名检查大小写 |
3. aspell实用程序
功能: 检查文件中每个词的拼写,并对字典中不存在的词建议替换。
语法: aspell -c [文件名]
4. chfn实用程序
功能: 更改用户的finger信息。
语法: chnf [可选项] [用户名]
可选项表
可选项 | 功能 |
---|---|
-f | 指定你的全名 |
-o | 指定你的办公室地址和房间号 |
-p | 指定你的办公室号码 |
-h | 指定你的家庭电话号码 |
-u | 显示帮助 |
-v | 显示chfn的版本 |
字段中不能包含逗号
5. head和tail实用程序
功能: head命令从文件开头显示指定的行数;tail命令从文件结尾显示指定的行数。
如果未指定行数,则默认显示10行
语法: head/tail [可选项] [文件名]
—— writing by Pan Qifan(潘琦藩) ——