高级操作系统
第一节
自己写的
第二节
Shell编程
对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
Bash有以下的优点:
(1) 补全命令。当你在Bash命令提示符下输入命令或程序名时,你不必输全命令或程序名,按【Tab】键,Bash将自动补全命令或程序名。
(2) 通配符。在Bash下可以使用通配符“”和“?”。“”可以替代多个字符,而“?”则替代一个字符。
(5) 输入/输出重定向。
输出重定向
把ll命令本来该显示在终端的信息,输入到指定txt文本中。
“>>”表示要将一条命令的输出结果追加到文件dir1.out的后面,该文件的原有内容不被破坏,如果使用“>”,则文件原有内容被覆盖。
输入重定向
假设有一个包含一些文本的文件,叫做 example.txt
。你可以使用输入重定向将文件中的内容传递给某个命令,而不是手动键入。
例如,如果你想要查看文件 example.txt
的内容,可以使用以下命令:
cat < example.txt |
这里,cat
是一个用于显示文件内容的命令,而 < example.txt
部分表示将文件 example.txt
的内容作为输入传递给 cat
命令,而不是手动输入。
(8) 作业控制。
作业控制是指在一个作业执行过程中,控制执行的状态。可以挂起一个正在执行的进程,并在以后恢复执行该进程。
按下【Ctrl-z】组合键,挂起正在执行的进程,用bg命令使进程恢复在后台执行,用fg命令使进程恢复在前台执行。
【Ctrl-c】 结束程序
变量命名
声明环境变量
export 变量名=变量值
env
查询所有环境变量
测试chmod
vim test2.sh |
输入下面程序
!/bin/bash |
退出
:wq |
添加权限
chmod +x tets2.sh |
运行
./test2.sh |
结果
命令替换
test3.sh
内容如下:
Shell 语 法
test命令
1. test
命令的用法
test
是 Shell 内置命令,用于检测某个条件是否成立。通常与 if
语句一起使用,大部分 if
语句都依赖于 test
。test
命令涵盖了数值、字符串和文件三个方面的检测。
Shell test
命令的基本用法为:
test expression |
当 test
判断 expression
成立时,退出状态为 0,否则为非 0 值。
test
命令也可以简写为 []
,其用法为:
[ expression ] |
注意 [ ]
和 expression
之间的空格,这两个空格是必须的,否则会导致语法错误。[ ]
的写法更加简洁,且使用频率较高。
|
其中,-le
选项表示小于等于,-ge
选项表示大于等于,&&
是逻辑与运算符。
2. 与文件检测相关的 test
选项
(1) 文件类型判断
-b filename
: 判断文件是否存在,并且是否为块设备文件。-c filename
: 判断文件是否存在,并且是否为字符设备文件。-d filename
: 判断文件是否存在,并且是否为目录文件。-e filename
: 判断文件是否存在。-f filename
: 判断文件是否存在,且是否为普通文件。-L filename
: 判断文件是否存在,并且是否为符号链接文件。-p filename
: 判断文件是否存在,并且是否为管道文件。-s filename
: 判断文件是否存在,并且是否为非空。-S filename
: 判断文件是否存在,并且是否为套接字文件。
(2) 文件权限判断
-r filename
: 判断文件是否存在,并且是否拥有读权限。-w filename
: 判断文件是否存在,并且是否拥有写权限。-x filename
: 判断文件是否存在,并且是否拥有执行权限。-u filename
: 判断文件是否存在,并且是否拥有 SUID 权限。-g filename
: 判断文件是否存在,并且是否拥有 SGID 权限。-k filename
: 判断文件是否存在,并且是否拥有 SBIT 权限。
(3) 文件比较
filename1 -nt filename2
: 判断filename1
的修改时间是否比filename2
新。filename1 -ot filename2
: 判断filename1
的修改时间是否比filename2
旧。filename1 -ef filename2
: 判断filename1
是否和filename2
的 inode 号一致,即两个文件是否为同一个文件。
3. 与数值比较相关的 test
选项
num1 -eq num2
: 判断num1
是否等于num2
。num1 -ne num2
: 判断num1
是否不等于num2
。num1 -gt num2
: 判断num1
是否大于num2
。num1 -lt num2
: 判断num1
是否小于num2
。num1 -ge num2
: 判断num1
是否大于等于num2
。num1 -le num2
: 判断num1
是否小于等于num2
。
4. 与字符串判断相关的 test
选项
-z str
: 判断字符串str
是否为空。-n str
: 判断字符串str
是否为非空。str1 = str2
或str1 == str2
: 判断str1
是否等于str2
。str1 != str2
: 判断str1
是否不等于str2
。str1 \> str2
: 判断str1
是否大于str2
。str1 \< str2
: 判断str1
是否小于str2
。
5. 与逻辑运算相关的 test
选项
expression1 -a expression2
: 逻辑与,当expression1
和expression2
都成立时,结果才成立。expression1 -o expression2
: 逻辑或,当expression1
和expression2
中有一个成立时,结果就成立。!expression
: 逻辑非,对expression
进行取反
以上是对 test
命令及其相关选项的基本介绍和示例。在实际使用中,根据具体情况选择合适的选项和组合条件,确保脚本逻辑正确且清晰易懂。
判断语句🤣🤣🤣
if
|
case
|
进阶版:
|
在Shell脚本中,$2
表示命令行参数中的第二个参数。在命令行中,参数通过位置标识符($1、$2、$3,依此类推)来获取。
例如,如果你运行一个脚本的命令是:
./myscript.sh -i filename.txt |
在这个命令中,$1
是 -i
,而 $2
是 filename.txt
。所以在你的脚本中,$2
用于表示第二个命令行参数,即文件名。
练习😋
九九乘法表
|
结果如下:
显示1~100偶数
|
循环语句
其它语句
变量 | 功能 | 解释 |
---|---|---|
$# |
存储Shell程序中命令行参数的个数 | 例如,如果你运行脚本时使用了 ./myscript.sh arg1 arg2 ,那么$# 将是2。 |
$? |
存储上一个执行命令的返回值 | 如果上一个命令执行成功,$? 将是0,否则是非零值。 |
$0 |
存储Shell程序的程序名 | 即脚本本身的名称。 |
$* |
存储Shell程序的所有参数 | 例如,如果你运行脚本时使用了 ./myscript.sh arg1 arg2 ,那么$* 将是一个包含所有参数的单个字符串,即arg1 arg2 。 |
$@ |
存储所有命令行输入的参数 | 例如,如果你运行脚本时使用了 ./myscript.sh arg1 arg2 ,那么$@ 将是一个包含两个元素的数组,分别是arg1 和arg2 。 |
$$ |
存储Shell程序的PID | 这个变量是唯一标识正在运行的Shell脚本的数字。 |
$! |
存储上一个后台执行命令的PID | 如果你将一个命令放到后台运行(例如使用command & ),那么$! 将包含这个命令的进程ID。 |
while
|
until
until
是 Bash shell 中用于创建循环的关键字,它与 while
有点相反。
|
在这个例子中,until [ $count -ge 5 ]
意味着只有当 count
不再小于 5 时,循环才会结束。所以,count
从 0 递增到 4,循环体中的语句会一直执行。
shift
|
它可以处理 -i
和 -o
选项,并分别指定输入和输出文件。如果有未识别的选项,脚本会输出错误信息并退出。最后,它使用 tr
命令将输入文件中的小写字母转换为大写字母,并将结果输出到指定的输出文件。运行命令是:./Shift.sh -i a.txt -o b.out
break与continue
用法与其他语言一样
函数使用
|
运行命令如下:
./max_script.sh 1 5 3 8 2 |
课后测试
LINUX 系统的连接文件都有哪些,什么特点。
在Linux系统中,连接文件主要分为硬链接和符号链接(软链接)两种。
硬链接:
- 特点:硬链接是文件系统中同一个文件的不同文件名,它们共享相同的inode和数据块。硬链接只能在同一个文件系统中创建,不能跨越文件系统。
- 创建命令:
ln source_file target_link
符号链接(软链接):
- 特点:符号链接是一个特殊的文件,它包含了另一文件的路径。可以跨越文件系统,并且可以链接目录。
- 创建命令:
ln -s source_file target_link
vi 有几种工作模式,他们之间怎么切换。
vi
编辑器有三种主要的工作模式:- 命令模式(Command Mode): 这是默认的模式,用于执行编辑器命令。在命令模式下,你可以移动光标、删除字符等。
- 插入模式(Insert Mode): 在插入模式下,你可以输入或编辑文本。切换到插入模式的方式是按下
i
键。 - 底行模式(Ex Mode): 在底行模式下,你可以保存文件、退出编辑器等。切换到底行模式的方式是按下
:
键。
在命令模式下,按下
i
键可以进入插入模式,按下:
键可以进入底行模式。什么是脚本程序(SHELL),什么是系统变量、举出至少5个系统变量。
脚本程序(SHELL): 脚本是一种包含一系列命令的文本文件,通过解释器执行。在Linux中,常用的脚本语言是Bash Shell,它可以用于编写Shell脚本。
系统变量: 系统变量是在Shell中预先定义的一些变量,用于存储系统信息、用户信息等。一些常见的系统变量包括:
$HOME
:当前用户的主目录。$USER
:当前用户名。$PATH
:用于指定可执行文件的搜索路径。$PWD
:当前工作目录。$SHELL
:当前使用的Shell解释器。
一个文件都有哪些用户,每个用户都对这个文件有哪些权限。
在Linux中,每个文件都有三类用户及其对应的权限:
- 所有者(Owner): 文件的创建者,拥有最高权限。
- 组用户(Group): 文件所属的用户组的成员。
- 其他用户(Others): 不是文件所有者也不是文件所属用户组的其他用户。
对每个用户,有三种基本权限:
- 读权限(r): 允许查看文件内容和属性。
- 写权限(w): 允许修改文件内容。
- 执行权限(x): 对于可执行文件,允许运行;对于目录,允许进入。
脚本程序中,哪些语句能够控制分支循环,哪些语句控制循环流程。
控制分支:
if
语句:用于条件判断,根据条件执行不同的语句块。case
语句:用于多条件分支判断。
控制循环:
for
循环:用于按照指定次数循环执行一段代码。while
循环:在条件为真时,重复执行一段代码。until
循环:在条件为假时,重复执行一段代码。
压缩与解压缩指令都有哪些?
压缩指令:
gzip
:使用gzip进行压缩,例如:gzip filename
。bzip2
:使用bzip2进行压缩,例如:bzip2 filename
。tar
:打包文件并结合其他压缩算法,例如:tar czvf archive.tar.gz file1 file2
。
解压缩指令:
gunzip
:解压缩gzip压缩的文件,例如:gunzip filename.gz
。bunzip2
:解压缩bzip2压缩的文件,例如:bunzip2 filename.bz2
。tar
:解压缩tar打包的文件,例如:tar xzvf archive.tar.gz
。
find
指令、grep
指令有什么区别。find
指令: 用于在文件系统中搜索文件和目录。它支持复杂的条件和操作,可以搜索文件名、大小、权限等。- 例子:
find /path/to/search -name "pattern"
- 例子:
grep
指令: 用于在文本文件中搜索指定的文本模式。它基
于行进行搜索,可以用于查找文件中包含特定字符串的行。
- 例子:grep "pattern" filename
区别:find
主要用于搜索文件和目录,而grep
用于搜索文本内容。
对于一个目录文件,读写执行三个权限,代表了用户能对该目录做什么操作。
- 读权限(r): 允许用户列出目录下的文件和子目录。
- 写权限(w): 允许用户在目录中创建、删除文件和子目录。
- 执行权限(x): 允许用户进入(cd)目录。
组合权限可以进行更多操作,例如,有读权限和执行权限但没有写权限的用户可以列出目录内容和进入目录,但不能在目录中创建或删除文件。
第三节
其它
如何连接自己的虚拟机
前言提示
:使用Linux有2种方式,第一种方式:打开虚拟机,像windows一样玩,第二种方式:使用终端连接软件
连接虚拟机终端进行操作。
终端连接软件-XShell
- 在虚拟机终端输入 ip addr show
- 拿到ip地址 ens33 下面ip地址
新建文件->配置文件
在xshell中需要输入用户名和密码
Linux基础命令🤣
vim修改配置
- 退出vim
- 电脑左上角按钮
Esc
- 电脑左上角按钮
- 保存退出
:wq
- 强制退出
:q!
输入I,进入插入模式,然后你就可以愉快的输入文本了。
退出时,按下Esc
按钮,输入:wq
进行保存退出
Linux常用命令
- ls list 查看当前目录下的内容
- pwd print work directory,查看当期那所在目录
- touch [文件名] 如果文件不存在,新建文件
- rm [文件名] 删除指定文件
- rmdir -rf [文件名] 删除文件夹
在执行Linux时,显示乱码,修改其编码模式。
默认语言为英语(美国)并使用UTF-8编码。
echo ‘LANG =”en_US.UTF-8”‘ >> /etc/profile
重新加载配置文件
source /etc/profile
命令使用技巧
Tab键 自动补全
使用上下键调出曾经使用过的命令
ctrl+l 实现清屏的效果
ls
- -a 显示所有文件及其目录
- -l 显示文件详细信息
- -al 上面两个的综合
简化:ll
cat
cat [文件] 显示文件内容
cat -n [文件] 显示文件内容,并且显示行号
more
如果文件太多,分页看
more [文件]
回车键 向下滚动一行
空格键 向下滚动一屏
b 返回上一屏
q 退出
tail
查看文件末尾内容
tail [-n] filename
显示文件最后n行内容,通常用于 log 查询
mkdir
创建双层目录
mkdir -p it/test
-p选项表示递归创建目录,即如果父级目录不存在,则同时创建父级目录和子级目录。
rmdir
rmdir是一个用于删除空目录的命令。它只能删除空目录,如果目录中包含文件或其他子目录,则无法删除。
rm
删除文件或者目录
-r 把目录中的所有文件逐一删除
-f 强制删除
-rf 随便删除 使用频率最多
rm -rf directory
cp
复制文件或者目录
cp [-r] src tar
- -r 代表着复制的是文件夹
- cp -r it/ ./it1 把it目录下的所有文件复制到it1下面
- cp -r it/ ./it1 把it目录和其目录下的内容复制到it1下面
mv
重命名或者移动位置
mv src tar
- mv 1.txt 2.txt
把1.txt 该名成 2.txt
- mv 1.txt it/
把1.txt 移动到 it目录下面
- mv it/ it1/
把it目录移动到it1目录中
- mv 1.txt it/2.txt
把1.txt移动到it目录中,并且改名为2.txt
- mv 1.txt it/
把1.txt 移动到it目录下面
tar
tar [-zcxvf] filename [files]
打包命令,十分重要
包文件后缀是.tar 只是对文件进行了打包,并没有压缩
后缀是 .tar.gz 表示打包的时候还进行了压缩
- z 对文件进行压缩或者解压
- c 打包
- x 解包
- v 显示命令的执行过程
- f 指定包文件名称
常用组合 :
- cvf 打包
- zcvf 打包且压缩
- xvf 解包
- zxvf 解压缩包
vi 和 vim
vim 是从vi 进化的
yum install vim
命令模式
插入模式
按下a i o 任意一个键即可
底行模式
可以对文件内容进行查找,显示行号,退出等操作
在命令模式下按下[:,/]就可以进入底行模式
按下/ ,可以对文件内容进行查找
按下: wq 保存退出 q! 不保存退出 set nu 显示行号
find
查找命令
- find . -name ".java" 在当前文件夹下面找java文件
- find /it -name ".java" 在 it 文件夹下面找java文件
grep
从指定文件中查找指定的文本内容
- grep hello 1.txt 查找1.txt文件中出现hello 字符串的位置
- grep hello .java 查找当前目录中所有.java结尾的文件中包含 hello 的位置