广外操作系统实践考前4天期末复习小白上手【shell】

说明:作者linux完全小白,大佬可以直接跳过~zq老师教的很好,但上课基本没听过,从0开始学linux,会在这里整理一下老师画的重点,错题和我自己的整理笔记,求考过~

(如果有之前考试的真题请联系我!我会整理之后发出来!)

6.15现在还没有整理格式,现在很乱,6.16会更新整理好的版本

6.17更新:(要背的命令就这么多,再多就听天由命吧,欢迎大家在评论区补充!)(有一些文本内容集合了从其他班的大佬那里搜集的也可参考参考)温馨提示:命令题真的要自己打,很多地方要不要空格或者符号问题背真的很难背出来

6.18 一起打题!

目录

题型:

复习计划:

 ppt重点

unit 2

正则课后题

chmod 修改权限

umask 权限掩码

 ​编辑

特殊权限位

第四章

如何访问分区​编辑

挂载的概念

 文件结构(必考)​编辑

 6个文件类型

课件提到常用命令

第六章 文件管理

常用命令整理

grep grep '' /tmp/student

sed '//' /tmp/record

小测易混题:匹配一整行or单个子串,

其他

参数说明

动作说明

自己解释一下这些命令的意思吧

awk

其他常见文本命令

练习题

第七章

重定向

操作

进程状态切换

第八章

文件压缩

第九章

11章脚本编程

文件执行

test命令

流程控制

运算符

 数字运算

逻辑运算

参数处理

命令题

PTA 错题


题型:

1. 选择

2. 命令

3. 脚本编程

复习计划:

1. 在这个中文网站快速过基础概念 Shell 基本运算符 | 菜鸟教程 (runoob.com)

2. 不建议按zq提示复习zq的ppt(全英理解起来有困难)(选择)+chat辅助

3. pta和putty上面做过的题目,作业题!(看命令题+脚本)

现在开始

这个小测考过!

 ppt重点

unit 2

  • $PATH:这是一个系统变量,它指定了系统在哪些目录中查找可执行文件。当你键入一个命令时,系统会从左到右依次查找这些目录,直到找到相应的可执行文件。

  • $HOME:这个变量通常指向当前用户的主目录。例如,对于名为"john"的用户,$HOME通常会是 /home/john

  • $PS1:这是命令行提示符变量。你可以修改这个变量来改变命令行提示符的外观。例如,你可以设置它包含当前目录,当前用户,当前时间等。

  • $LANGUAGE:这个变量控制了程序的语言设置。例如,你可以将其设置为 "en_US.UTF-8" 以使用美式英语,并以 UTF-8 编码显示字符。

你可以使用 echo 命令查看这些变量的当前值。例如,输入 echo $PATH 会显示当前的 PATH。你也可以使用 export 命令修改这些变量的值。例如,export PATH=/usr/local/bin:$PATH 会将 /usr/local/bin 添加到 PATH 的开头。

  • 用户信息存放文件夹 /etc/passwd
    用户密码存放文件夹 /etc/shadow
    启动文件 /etc/profile  配置系统所有人的环境信息  只能超级用户修改 sudo vi /etc/profile
    环境变量:$PATH $HOME $PS1 $LANG
    创建别名 alias bjyx=“grep”查看所有别名 alias 删除别名 unalias bjyx
    shell元字符:$ 访问变量值 “”括住字符串 与‘’的区别在于“”可以括内输出变量的值 另外一个是直接输出括起来的文本内容
                         * 可以用作任意个数的字符 ?只能用作1个字符  ~ 家目录 
    查看系统信息  whoami ->用户信息  hostname->主机名 
                           uname->查看操作系统信息 uname -r 看版本 -a 看全部信息
                           free 看内存信息 free -h 能看到内存大小 -l 显示详细信息  date  查看系统date

正则课后题

Give the command to list the following files

1. end with .o, like a.o abc.o

 [填空1]

2. start with a, end with b, like a1b acb acdb

 [填空2]

3. only two characters, first is a lower letter, second is a digital, like a1 b3 c9

 [填空3]

4. all the files whose name contains only two characters your home directory

 [填空4]

5. all the files whose name don't start with a

 [填空5]

chmod 修改权限

 

umask 权限掩码

umask 查看当前的权限掩码

umask 022 表示

在 Unix 和 Linux 系统中,文件和目录的权限是由三组数字来表示的:用户(owner)、组(group)和其他(others)。每组都有三种权限:读(4)、写(2)和执行(1)。

对于文件来说:

  • 读权限(r):允许读取文件的内容。
  • 写权限(w):允许修改文件的内容。
  • 执行权限(x):允许执行文件(如果它是一个程序或脚本)。

对于目录来说:

  • 读权限(r):允许读取目录中的文件名。
  • 写权限(w):允许在目录中创建或删除文件。
  • 执行权限(x):允许访问目录中的文件。

因此,对于文件来说,最大的权限是 666(读和写权限),而对于目录来说,最大的权限是 777(读、写和执行权限)。

在这里,执行权限对于目录的含义是可以访问目录内的文件和子目录,而对于文件来说,如果没有执行权限,那么这个文件就不能被作为程序来执行。这就是为什么文件的默认权限是 666,而目录的默认权限是 777 的原因。

注意,虽然 777 和 666 是最大的权限,但这并不意味着所有的文件和目录都应该设置为这样的权限。为了安全,你应该总是尽可能地限制权限,只给需要的用户和组提供必要的权限。

 

首先,让我们理解字符表示 "drwxr-xr-x":

  • 第一个字符表示文件类型。"d" 表示这是一个目录,"-" 表示这是一个普通文件,"l" 表示这是一个链接。

  • 接下来的三个字符表示所有者(owner)的权限。在这个例子中,"rwx" 表示所有者具有读(r)、写(w)和执行(x)权限。

  • 再接下来的三个字符表示组(group)的权限。在这个例子中,"r-x" 表示组成员具有读(r)和执行(x)权限,但没有写(w)权限。

  • 最后三个字符表示其他人(others)的权限。在这个例子中,"r-x" 同样表示其他人具有读(r)和执行(x)权限,但没有写(w)权限。

数字表示 "755" 是这样计算的:

  • 所有者的权限是 "rwx",分别对应数字 4(读)、2(写)和 1(执行)。将这三个数字相加,得到 7。

  • 组的权限是 "r-x",分别对应数字 4(读)、0(无写权限)和 1(执行)。将这三个数字相加,得到 5。

  • 其他人的权限同样是 "r-x",同样对应数字 5。

所以,字符表示 "drwxr-xr-x" 对应的数字表示就是 "755"。

而你提到的 "777-022=755" 是这样计算的:首先,"777" 是目录的最大权限(所有者、组和其他人都有读、写和执行权限)。然后,我们使用 umask 的值 "022" 作为掩码,移除对应的写权限("2" 表示写权限)。"777-022" 的结果就是 "755",这就是新创建的目录的默认权限。

特殊权限位

SUID 有用户所有者权限

SGID 

Sticky

例如,"rwsr-xr-x" 表示 SUID 被设置,"rwxr-sr-x" 表示 SGID 被设置,"rwxr-xr-t" 表示 Sticky 位被设置。

第四章

如何访问分区

挂载的概念

在Linux和类Unix系统中,mount命令用于挂载文件系统。当你挂载了一个存储设备(比如硬盘,CD-ROM,或者USB驱动器)到你的系统时,你就能够访问它的内容。

挂载操作将存储设备连接到一个已存在的目录树上,这个连接点被称为挂载点。

下面是一些mount命令的例子:

  1. 挂载一个设备到一个目录:

    mount /dev/sda1 /mnt/mydisk

    这个命令将设备/dev/sda1挂载到/mnt/mydisk目录。/dev/sda1通常表示第一个分区在第一块SCSI或SATA硬盘上。你需要使用sudo或者以root用户身份运行这个命令,因为挂载操作通常需要管理员权限。

  2. 使用文件系统类型挂载设备:

    mount -t vfat /dev/sdb1 /mnt/myusb

    这个命令将vfat文件系统类型的设备(通常是USB驱动器或者SD卡)/dev/sdb1挂载到/mnt/myusb目录。

要查看系统中已经挂载的设备,你可以使用mount命令而不带任何参数。

你可以使用umount命令来卸载一个已经挂载的设备,比如umount /mnt/mydisk

注意:在挂载之前,你需要创建挂载点目录,比如mkdir /mnt/mydisk

 文件结构(必考)

win分区:盘符:c盘d盘

Linux 目录区分不同分区,没有盘符

/etc 系统配置文件 ,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin 二进制文件这个目录存放着最经常使用的命令  系统预设的执行文件的放置目录 比如 ls 就是在 /bin/ls 目录下的

home一般该目录名是以用户的账号命名的

lib 库函数

proc 操作系统相关信息 版本

usr 用户自定义文件 下载的软件等 

  • /usr/bin:
    系统用户使用的应用程序。

var 大小容易变化的文件 log日志等,创建服务器,网站等

启动文件 /etc/profile  配置系统所有人的环境信息  只能超级用户修改 sudo vi /etc/profile
 

 6个文件类型

Unix和类Unix的系统中,有多种类型的文件。你提到的这些文件类型是:

  1. 简单/普通文件(Simple/ordinary file):这是最常见的文件类型。它可以包含文本、二进制数据,或者程序的源代码。

  2. 目录(Directory):目录是一个文件,其内容是其他文件和目录的列表。

  3. 符号链接(Symbolic/soft link):符号链接是一个特殊的文件,它指向另一个文件或目录。它是一个指向实际文件或目录的引用,类似于Windows中的快捷方式。

  4. 特殊文件(Special/device files):特殊文件用于表示设备(如硬盘,终端,打印机等)。它们分为两种:

    • 块设备文件(Block device files):这种类型的文件用于与块设备进行交互,如硬盘或CD-ROM驱动器。
    • 字符设备文件(Character device files):这种类型的文件用于与字符设备进行交互,如键盘或鼠标。
  5. 命名管道(Named pipe/FIFO):命名管道是一种特殊类型的文件,它提供了进程间的通信机制。数据可以从管道的一端输入,然后从另一端输出。

  6. 套接字(Socket):套接字是一种特殊的文件类型,主要用于进程间通信和网络通信。

你可以使用 ls -l 命令查看文件的类型。命令输出的第一个字符表示文件类型(比如 - 表示普通文件,d 表示目录,l 表示符号链接,b 表示块设备文件,c 表示字符设备文件,p 表示命名管道,s 表示套接字)。

课件提到常用命令

  1. 检查系统存储:

    • df:这个命令用于显示系统中所有已挂载文件系统的磁盘空间使用情况。
    • du:这个命令用于显示文件或目录占用的磁盘空间。
  2. 操作目录:

    • pwd:这个命令用于打印当前工作目录的完整路径。
    • cd:这个命令用于更改当前工作目录。例如,cd /home 将把当前工作目录更改为 /home
    • mkdir:这个命令用于创建新的目录。例如,mkdir newdir 将在当前工作目录下创建一个名为 newdir 的新目录。
    • rmdir:这个命令用于删除空目录。如果目录非空,则需要使用 rm -r 命令。
    • ls:这个命令用于列出目录的内容。
  3. 操作文件:

    • rm:这个命令用于删除文件或目录。使用 -r 选项可以递归删除目录及其内容。
    • cp:这个命令用于复制文件或目录。例如,cp file1 file2 将复制 file1 并创建名为 file2 的新文件。
    • mv:这个命令用于移动或重命名文件或目录。例如,mv file1 file2 将重命名 file1file2,或者将 file1 移动到 file2,这取决于 file2 是否存在。
    • file:这个命令用于确定文件的类型。
    • touch:这个命令用于改变文件的访问和修改时间。如果文件不存在,它将创建一个新的空文件。

第六章 文件管理

文件匹配和正则表达式:常用元字符

  1. *:星号在文件管理中用于匹配任意数量的任意字符。例如,ls *.txt会列出所有以.txt结尾的文件。

  2. ^:在正则表达式中,插入符号代表字符串的开始。例如,^Hello将匹配以"Hello"开头的所有行。

  3. $:在正则表达式中,美元符号代表字符串的结束。例如,World$将匹配以"World"结束的所有行。

  4. .:在正则表达式中,点号匹配任何单个字符。例如,h.t可以匹配 "hit", "hot", "hat"等。

  5. ():在正则表达式中,括号用于分组。例如,h(i|a)t可以匹配 "hit" 或 "hat"。

  6. []:在正则表达式中,方括号用于指定一个字符集。在方括号内的任何字符都可以匹配。例如,h[ioa]t可以匹配 "hit", "hot", "hat"。

  7. [^]:在正则表达式中,插入符号和方括号一起使用表示除指定字符集之外的任何字符。例如,h[^ioa]t可以匹配除"hit", "hot", "hat"之外的任何单词。

  8. \<\>:在正则表达式中,这些是单词边界匹配符号,它们分别匹配单词的开始和结束。例如,\<hit\>将只匹配"hit"这个单词,而不会匹配包含"hit"的更长的单词,如 "hitting" 或 "chit"。

常用命令整理

grep grep '' /tmp/student

  1. -i:此选项使搜索对大小写不敏感。也就是说,无论字母是大写还是小写,都会被视为匹配。

  2. -n:此选项打印出匹配及其行号

  3. -v:此选项打印出没有匹配到模式的所有行。

  4. -c:此选项仅打印出匹配到模式的行数,而不打印匹配的行本身。

  5. -w:此选项将模式视为一个完整的单词,而不是一个子串。例如,如果模式是 "test",那么 "test" 和 "retest" 将会匹配,但 "testing" 和 "tested" 不会匹配。 grep ‘test’ grep -w ‘test’

  6. -l:在多个文件之间搜索时,此选项仅打印包含匹配行的文件名。

  7. egrep:这是 grep 的扩展版本,它支持扩展正则表达式,例如,可以使用 | 作为或运算符来匹配多个模式。例如,egrep –w ‘CS|MBA’ student_record 将匹配 "CS" 或 "MBA"。

sed '//' /tmp/record

小测易混题:匹配一整行or单个子串,

  1. sed 's/Jose/JOSE HAS RETIRED/' /tmp/databook 这个命令会在 /tmp/databook 文件中查找 'Jose' 并将其替换为 'JOSE HAS RETIRED'。如果一行中有多个 'Jose',只有第一个会被替换。g为全局替换

  2. 整行替换:sed 's/.*Jose.*/HOSE HAS RE/' 和 sed '/Jose/c JOSE'  这个命令会在文本流中查找包含 'Jose' 的行并将整行替换为 'HOSE HAS RE'。

  3. 查找后替换:sed '/Popeye/s/[0-9]*\/[0-9]*\/[0-9]*/11\/14\/46/' 这个命令会查找包含 'Popeye' 的行,并在这些行中查找匹配日期格式的字符串,然后将其替换为 '11/14/46'。

  4. 查找后替换(分隔符也可用@):sed '/Popeye/s@[0-9]*/[0-9]*/[0-9]*@new_replacement@'。这个命令会查找包含 'Popeye' 的行,并在这些行中查找匹配日期格式的字符串,然后将其替换为 'new_replacement'。

注意,这些命令都只会打印出修改后的内容,不会实际修改文件。如果需要实际修改文件,需要加入 -i 选项,如 sed -i 's/Jose/JOSE HAS RETIRED/' /tmp/databook

其他

删空行
sed '/^$/d'
删回车
sed 's/^M//'  *^M stand for [ctrl+v][ctrl+m]
匹配John 替换对应行中的数字
sed '/^John.*Lee/s/3.64/4.64/' student_record

参数说明

sed [-hnV][-e<script>][-f<script文件>][文本文件]

-h help

-n 显示处理后的结果

动作说明

a 新增

c 取代

d 删除

i  插入

p 打印

s 取代

自己解释一下这些命令的意思吧

sed -e 4a\new testfile 

nl testfile | sed '2,5d'

nl testfile | sed '3,$d'

sed '2a drink tea'  在第二行后

sed '2i drink tea' 在第二行前

整行取代 c

sed -n ‘5,7p’

awk

awk 的格式要记住

awk -F'[ :]' '{print $2}' /record
  1. print: 用于输出一行文本。例如,{print}会打印当前处理的每一行。

  2. NF: 代表当前行的字段数量。例如,{print NF}会打印每一行的字段数量。

  3. NR: 代表当前行的行号。例如,{print NR}会打印每一行的行号。

  4. FS: 定义输入字段的分隔符。例如,BEGIN{FS=":"}会将冒号设为分隔符。

  5. $: 用于访问字段。例如,{print $1}会打印每一行的第一个字段。

其他常见文本命令

  1. cat: 查看文件全部内容。例如,cat file1 file2将把file1和file2的内容打印出来。

  2. nl: 对文件的内容进行行号处理。例如,nl file1会显示file1的内容,并为每一行加上行号。

  3. more: 分页显示文本文件内容。例如,more file1会一页一页地显示file1的内容。

  4. wc: 计算文本文件的行数、字数、字符数。例如,wc file1会显示file1的行数、字数和字符数。-l 只看行数,-w 单词, -c字符

  5. cut: 从文件的每一行中"提取"或"显示"出一部分内容,而不是删除它。例如,cut -d':' -f1 file1将显示文件file1的第一列。-d为指定分割符为“:” -f1第一个字段

  6. paste: 合并文件的行。例如,paste file1 file2将合并file1和file2的内容。

  7. sort: 对文本文件的行进行排序。例如,sort file1将按照字母顺序排列file1的行。

  8. uniq: 把文件中连续的重复的行进行去重。例如,uniq file1将只显示file1中独特的行。与sort结合使用

  9. grep: 根据模式搜索文件。例如,grep 'pattern' file1将显示在file1中包含'pattern'的行。

  10. sed: 是一个流编辑器,用来执行基本的文本转换。例如,sed 's/pattern/replacement/g' file1将在file1中替换所有的'pattern'。

  11. awk: 是一个强大的文本分析工具。例如,awk '{print $1}' file1将打印file1中的第一列。

  12. tr: 转换或删除文件中的字符。例如,tr 'a-z' 'A-Z' < file1将把file1中的所有小写字母转换为大写字母。

  13. od :以进制的方式查看文件所有内容 -c 以字符显示 -h 以16进制显示

  14. head:head -5 查看前五行

  15. tail: tail -5 查看倒数5行,+5 从第五行到文件末尾,-f 实时查看文件新增内容

  16. diff 比较两个文件 这么用:diff file1.txt file2.txt   -d 可以看到删除历史  -c 可以看到修改历史  -a 可以看到增加历史

  17. find : -name 按名查,-size,

练习题

注意:命令都不会改变文件的内容,可以将结果重定向到文件中

echo "hello world" | tr 'a-z' 'A-Z' > output.txt
awk '{print $1","$2}' /tmp/student

第七章

标准输出,标准错误输出

重定向

把文件中的内容替换

tr ':' ' ' < donors
cat file1 file2 > f3 # f1f2合并
cat > /tmp/pipe 不断从屏幕中输

操作

 注意混合命令

第一行命令屏蔽输出

第二行命令屏蔽输出+ 2>&1 屏蔽错误信息 &1指代/dev/null

command  2>/dev/null屏蔽错误信息

command > out-file 2> err-file 输出和错误分开保存

创建管道

mkpipe 

mkfifo

进程状态切换

ps -l 看自己bash相关进程  -e 所有进程  -u user看user用户的进程
top 实时看进程信息
pstree 看进程树
jobs -l 看进程状态  在最后加 &改为后台进程,fg切换为前台,bg切换为后台
ctrl z进程暂停 ctrl c进程终止  fg %任务号(任务号就是[]内数字),切换到前台

kill -1 重新加载 -9 杀死1个进程 

crontab -e 定时(重点)

0 3 * * 1 cp /etc/passwd ~ 每周一3点执行(作业)

 

第八章

软链接

  • 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 2.软链接可以 跨文件系统 ,硬链接不可以(重要)
  • 3.软链接可以对一个不存在的文件名进行链接
  • 4.软链接可以对目录进行链接(重要)

硬链接

  • 1.硬链接,以文件副本的形式存在。但不占用实际空间。
  • 2.不允许给目录创建硬链接
  • 3.硬链接只有在同一个文件系统中才能创建

文件压缩

bzip2 比gzip 压缩比更高

解压

bzip -d passwd

第九章

  • ifconfig 查看网卡配置信息ifconfig | grep inet

  • ping ip地址 检测目标ip地址的链接是否正常 ping 127.0.0.1检测本地,CTRL+c 暂停

11章脚本编程

直接看ppt真的很难理解,对小白不友好,建议直接看菜鸟Shell 教程 | 菜鸟教程 (runoob.com)

#! /bin/bash

文件执行

./test.sh

test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

流程控制

for I in “$@”; do

       echo $i

done

用到的 for ,while,until 都比较简单这里就不列出来了,注意格式和细节就好

case比较新奇,这里重新打一遍

read a
case $a in
    1) echo
    ;; # 表示break
    2) echo
    ;; 
esac

 if else语句

到底用【】还是()这里说清楚

if [$a -eq $b]
then
    echo "a = b"
elif 
then
else
fi

运算符

Shell 基本运算符 | 菜鸟教程 (runoob.com)

 数字运算

expr

var=`expr 2 + 2`

逻辑运算

&&

||

if [[ $a -lt 100 && $b -gt 100 ]] 两个【】

字符串

参数处理


if [ $a = $b ]
then
   
echo "$a = $b : a 等于 b

 脚本例题:

case.sh
prompt user to input a file name
display a menu to input the option to execute the following operation
d or D:delete file
s or S:show file detail infomation
q or Q:quit
output error message if input option not in the menu list
#!/bin/bash

# Prompt the user to input a file name
echo "Please enter a file name:"
read filename

# Loop until user chooses to quit
while true; do
    # Display a menu to input the option
    echo "Please select an operation:"
    echo "d or D: delete file"
    echo "s or S: show file detail information"
    echo "q or Q: quit"
    read option

    # Perform action based on user's input
    case $option in
        [dD] )
            if [ -f $filename ]; then
                rm $filename
                echo "File deleted."
            else
                echo "File does not exist."
            fi
            ;;
        [sS] )
            if [ -f $filename ]; then
                ls -l $filename
            else
                echo "File does not exist."
            fi
            ;;
        [qQ] )
            echo "Exiting the program."
            break
            ;;
        * )
            echo "Invalid option. Please enter d, s or q."
            ;;
    esac
done

命令题

find -name

find -type dfl

PTA 错题

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值