今天ICT考得依托答辩,想到明天还要考试,只能继续复习操作系统实验的内容🙃
操作系统中常常使用一些简单的UNIX命令,下面是比较常见的:
cat
:连接文件并将内容显示到标准输出,也可以用来查看文件内容或创建新文件。man
:查看 UNIX 命令的手册页,提供命令的用法和选项等信息。who
:找出谁登录到系统,显示用户的登录名、终端、登录时间等。ls
:列出文件和目录,可以使用不同的选项来显示更多的信息,如 -a
显示隐藏文件,-l
显示长格式,-R
显示子目录等。cp
:复制文件或目录,可以使用 -i
选项来在覆盖前询问,-r
选项来递归复制子目录等。mv
:重命名或移动文件或目录,可以使用 -i
选项来在覆盖前询问,-f
选项来强制执行等。rm
:删除文件或目录,可以使用 -i
选项来在删除前询问,-r
选项来递归删除子目录等。touch
:更新文件的访问和修改时间,如果文件不存在则创建空文件。mkdir
:创建新目录,可以使用 -p
选项来创建多级目录。cd
:改变当前目录,可以使用 .
表示当前目录,..
表示上级目录,~
表示用户的主目录等。rmdir
:删除空目录,如果目录不为空则无法删除。pwd
:打印当前目录的绝对路径。chmod
:更改文件或目录的访问权限,可以使用数字或符号来表示不同的权限,如 r
表示读,w
表示写,x
表示执行等。Linux 中的权限是用来限制对文件或目录的访问和操作的机制,权限分为三种类型:读 (r)、写 (w)、执行 (x)。每种类型的权限可以用一个数字来表示,如下:
Linux 中的权限还分为三种属组:用户 (u)、组 (g)、其他 (o)。每个文件或目录都有一个拥有者 (user) 和一个所属组 (group),还有其他以外的用户 (other)。每个属组都可以设置不同的权限,用三个数字来表示,如下:
chmod有两种模式:Symbolic Mode 和 Absolute Mode。
Symbolic Mode 是使用字母和符号来表示权限的变更,例如:
chmod u+x file
表示为文件的拥有者增加执行权限chmod g-w file
表示为文件的所属群组取消写入权限chmod o=r file
表示为其他用户设定唯一的读取权限chmod a+rwx file
表示为所有用户增加读、写、执行权限Absolute Mode 是使用数字来表示权限的设定,每个数字代表一组权限,数字的范围是 0 到 7。例如:
chmod 777 file
表示为所有用户设定读、写、执行权限,相当于 chmod a+rwx file
chmod 755 file
表示为文件的拥有者设定读、写、执行权限,为文件的所属群组和其他用户设定读、执行权限,相当于 chmod u=rwx,g=rx,o=rx file
chmod 644 file
表示为文件的拥有者设定读、写权限,为文件的所属群组和其他用户设定读权限,相当于 chmod u=rw,g=r,o=r file
Linux之外,Unix还有一些重定向符号,例如:
>
符号是输出重定向符号,表示将一个命令的标准输出重定向到一个文件中,如果文件不存在则创建,如果文件已存在则覆盖。>>
符号也是输出重定向符号,表示将一个命令的标准输出追加到一个文件的末尾,如果文件不存在则创建,如果文件已存在则不覆盖。<
符号是输入重定向符号,表示将一个文件的内容作为一个命令的标准输入,相当于从文件中读取数据。<<
符号也是输入重定向符号,表示将一段文本作为一个命令的标准输入,直到遇到指定的结束符为止,相当于从键盘输入数据。例如:
echo "Hello World" > file.txt
表示将字符串 “Hello World” 输出到 file.txt 文件中,覆盖原有内容。echo "Hello World" >> file.txt
表示将字符串 “Hello World” 追加到 file.txt 文件的末尾,不覆盖原有内容。cat < file.txt
表示将 file.txt 文件的内容作为 cat 命令的输入,相当于 cat file.txt
。cat << EOF
表示将接下来的文本作为 cat 命令的输入,直到遇到 EOF 为止,相当于从键盘输入文本。在Linux中,我们经常bash 命令来执行shell脚本。一般以bash语法编写的脚本文件,应该在第一行声明:#!/bin/bash
在shell中,使用等号 =
将变量名和值连接起来,如 name="Tom"
,注意等号两边不能有空格。
还可以使用 unset
命令删除变量,删除后的变量不能再被使用,如 unset name
。
如果变量包含换行符,可以使用转义符\n
表示,或者使用\ (\空格)
表示。
在引用变量时,可以使用
$
加上变量名,如 echo $name
。{}
包围变量名,如 echo ${name}
。`
或者 $()
包围命令,表示命令替换,即先执行命令,然后将结果赋值给变量,如 date=`date +%Y-%m-%d`
或 date=$(date +%Y-%m-%d)
。当然,其中最后的命令替换,还有如下功能:
echo ($data)
是将括号中的变量 $data 的值输出到标准输出,如果 $data 没有定义或为空,那么就什么也不输出。例如,如果 $data=hello,那么 echo ($data)
就会输出 hello,如果 $data 没有赋值,那么 echo ($data) 就不会输出任何内容。echo `data`
是将反引号中的 data 作为一个命令执行,然后将执行结果输出到标准输出,如果 data 不是一个有效的命令,那么就会报错。例如,如果 data=date,那么 echo data
就会输出当前的日期和时间,如果 data=abc,那么 echo `data`
就会提示 abc: command not found。使用花括号引用变量时,可以对变量进行一些操作,如截取、替换、赋值等。
${var:n}
表示从变量 var
的第 n
个字符开始截取,直到末尾。例如,如果 var=hello
,那么 ${var:1}
就是 ello
。${var:n:m}
表示从变量 var
的第 n
个字符开始截取,长度为 m
。例如,如果 var=hello
,那么 ${var:1:2}
就是 el
。${var/pattern/replacement}
表示将变量 var
中第一个匹配 pattern
的部分替换为 replacement
。例如,如果 var=hello
,那么 ${var/l/x}
就是 hexlo
。${var//pattern/replacement}
表示将变量 var
中所有匹配 pattern
的部分替换为 replacement
。例如,如果 var=hello
,那么 ${var//l/x}
就是 hexxo
。${var:-string}
表示如果变量 var
为空或未定义,那么用 string
替换,否则保持不变。例如,如果 var=hello
,那么 ${var:-world}
就是 hello
,如果 var
为空,那么 ${var:-world}
就是 world
。${var:=string}
表示如果变量 var
为空或未定义,那么用 string
替换,并且将 string
赋值给 var
,否则保持不变。例如,如果 var=hello
,那么 ${var:=world}
就是 hello
,如果 var
为空,那么 ${var:=world}
就是 world
,并且 var
的值也变为 world
。单双引号引用变量时,有以下区别:
'
表示引用的内容是固定的,不会进行变量替换、命令替换、转义等操作。例如,如果 var=hello
,那么 echo '$var'
就是 $var
,而不是 hello
。"
表示引用的内容是可变的,会进行变量替换、命令替换、转义等操作。例如,如果 var=hello
,那么 echo "$var"
就是 hello
,而不是 $var
。read
命令是用来从标准输入或其他文件描述符中读取一行数据,并赋值给一个或多个变量。read 命令有一些选项,可以控制读取的方式,如-p
可以显示提示信息,-s
可以隐藏输入的内容, -t
可以设置输入的时间限制等。
expr
运算是用来执行整数或字符串的运算,它需要用空格分隔每个参数,用反斜杠转义特殊字符,用双引号括起字符串。例如,expr 2 + 3
表示整数加法,expr length "hello"
表示计算字符串长度,expr substr "hello" 2 3
表示截取字符串。$(( ))
运算是用来执行数学运算和逻辑运算,它可以使用 C 语言的语法,不需要空格或转义,可以直接引用变量。例如,((a=2+3))
表示赋值运算,((a++))
表示自增运算,((a>5 && b<10))
表示逻辑运算。$[ ]
运算也是用来进行数学运算和逻辑运算函数的定义如下:
[ function ] funname [()]
{
action;
[return int;]
}
同删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,unset .f function_name
。
if…then 语句是用来进行条件判断和控制流程的,它的基本语法如下:
if [ 条件判断式 ]; then
# 在条件为真时执行的命令
fi
常见的条件有:
-eq
:等于。例如:if [ "$a" -eq "$b" ]; then
-ne
:不等于。例如:if [ "$a" -ne "$b" ]; then
-gt
:大于。例如:if [ "$a" -gt "$b" ]; then
-lt
:小于。例如:if [ "$a" -lt "$b" ]; then
-ge
:大于等于。例如:if [ "$a" -ge "$b" ]; then
-le
:小于等于。例如:if [ "$a" -le "$b" ]; then
与文件有关是可以有:
-e
:文件存在。例如:if [ -e "$file" ]; then
-f
:文件是普通文件。例如:if [ -f "$file" ]; then
-d
:文件是目录。例如:if [ -d "$dir" ]; then
-r
:文件可读。例如:if [ -r "$file" ]; then
-w
:文件可写。例如:if [ -w "$file" ]; then
-x
:文件可执行。例如:if [ -x "$file" ]; then
case 语句是用来根据变量的不同取值,执行不同的命令序列的。它的语法如下:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
...
*)
默认命令序列
;;
esac
while 语句是用来重复执行一组命令,直到条件为假时停止的。它的语法如下:
while [ 条件判断式 ]
do
命令序列
done
for 语句是用来遍历一个列表中的每个元素,并执行相应的命令的。它的语法如下:
for 变量名 in 列表
do
命令序列
done
在列表中可以使用seq
,seq
命令是用来生成一个数字序列的,可以用在 for 语句中,指定循环的范围和步长。它的语法如下:
seq [选项]... [首数] [步长] [尾数]
例如:
seq 5
表示输出从 1 到 5 的连续整数,每个数占一行。seq 2 5
表示输出从 2 到 5 的连续整数,每个数占一行。seq 2 2 10
表示输出从 2 到 10 的整数,每次增加 2,每个数占一行。它的表达式也可以使用C格式:
for ((i=1;i<=3;i++))
do
命令序列
done