说明:作者linux完全小白,大佬可以直接跳过~zq老师教的很好,但上课基本没听过,从0开始学linux,会在这里整理一下老师画的重点,错题和我自己的整理笔记,求考过~
(如果有之前考试的真题请联系我!我会整理之后发出来!)
6.15现在还没有整理格式,现在很乱,6.16会更新整理好的版本
6.17更新:(要背的命令就这么多,再多就听天由命吧,欢迎大家在评论区补充!)(有一些文本内容集合了从其他班的大佬那里搜集的也可参考参考)温馨提示:命令题真的要自己打,很多地方要不要空格或者符号问题背真的很难背出来
6.18 一起打题!
目录
题型:
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]
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
命令的例子:
-
挂载一个设备到一个目录:
mount /dev/sda1 /mnt/mydisk
这个命令将设备
/dev/sda1
挂载到/mnt/mydisk
目录。/dev/sda1
通常表示第一个分区在第一块SCSI或SATA硬盘上。你需要使用sudo
或者以root用户身份运行这个命令,因为挂载操作通常需要管理员权限。 -
使用文件系统类型挂载设备:
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的系统中,有多种类型的文件。你提到的这些文件类型是:
-
简单/普通文件(Simple/ordinary file):这是最常见的文件类型。它可以包含文本、二进制数据,或者程序的源代码。
-
目录(Directory):目录是一个文件,其内容是其他文件和目录的列表。
-
符号链接(Symbolic/soft link):符号链接是一个特殊的文件,它指向另一个文件或目录。它是一个指向实际文件或目录的引用,类似于Windows中的快捷方式。
-
特殊文件(Special/device files):特殊文件用于表示设备(如硬盘,终端,打印机等)。它们分为两种:
- 块设备文件(Block device files):这种类型的文件用于与块设备进行交互,如硬盘或CD-ROM驱动器。
- 字符设备文件(Character device files):这种类型的文件用于与字符设备进行交互,如键盘或鼠标。
-
命名管道(Named pipe/FIFO):命名管道是一种特殊类型的文件,它提供了进程间的通信机制。数据可以从管道的一端输入,然后从另一端输出。
-
套接字(Socket):套接字是一种特殊的文件类型,主要用于进程间通信和网络通信。
你可以使用 ls -l
命令查看文件的类型。命令输出的第一个字符表示文件类型(比如 -
表示普通文件,d
表示目录,l
表示符号链接,b
表示块设备文件,c
表示字符设备文件,p
表示命名管道,s
表示套接字)。
课件提到常用命令
-
检查系统存储:
df
:这个命令用于显示系统中所有已挂载文件系统的磁盘空间使用情况。du
:这个命令用于显示文件或目录占用的磁盘空间。
-
操作目录:
pwd
:这个命令用于打印当前工作目录的完整路径。cd
:这个命令用于更改当前工作目录。例如,cd /home
将把当前工作目录更改为/home
。mkdir
:这个命令用于创建新的目录。例如,mkdir newdir
将在当前工作目录下创建一个名为newdir
的新目录。rmdir
:这个命令用于删除空目录。如果目录非空,则需要使用rm -r
命令。ls
:这个命令用于列出目录的内容。
-
操作文件:
rm
:这个命令用于删除文件或目录。使用-r
选项可以递归删除目录及其内容。cp
:这个命令用于复制文件或目录。例如,cp file1 file2
将复制file1
并创建名为file2
的新文件。mv
:这个命令用于移动或重命名文件或目录。例如,mv file1 file2
将重命名file1
为file2
,或者将file1
移动到file2
,这取决于file2
是否存在。file
:这个命令用于确定文件的类型。touch
:这个命令用于改变文件的访问和修改时间。如果文件不存在,它将创建一个新的空文件。
第六章 文件管理
文件匹配和正则表达式:常用元字符
-
*
:星号在文件管理中用于匹配任意数量的任意字符。例如,ls *.txt
会列出所有以.txt
结尾的文件。 -
^
:在正则表达式中,插入符号代表字符串的开始。例如,^Hello
将匹配以"Hello"开头的所有行。 -
$
:在正则表达式中,美元符号代表字符串的结束。例如,World$
将匹配以"World"结束的所有行。 -
.
:在正则表达式中,点号匹配任何单个字符。例如,h.t
可以匹配 "hit", "hot", "hat"等。 -
()
:在正则表达式中,括号用于分组。例如,h(i|a)t
可以匹配 "hit" 或 "hat"。 -
[]
:在正则表达式中,方括号用于指定一个字符集。在方括号内的任何字符都可以匹配。例如,h[ioa]t
可以匹配 "hit", "hot", "hat"。 -
[^]
:在正则表达式中,插入符号和方括号一起使用表示除指定字符集之外的任何字符。例如,h[^ioa]t
可以匹配除"hit", "hot", "hat"之外的任何单词。 -
\<
和\>
:在正则表达式中,这些是单词边界匹配符号,它们分别匹配单词的开始和结束。例如,\<hit\>
将只匹配"hit"这个单词,而不会匹配包含"hit"的更长的单词,如 "hitting" 或 "chit"。
常用命令整理
grep grep '' /tmp/student
-
-i
:此选项使搜索对大小写不敏感。也就是说,无论字母是大写还是小写,都会被视为匹配。 -
-n
:此选项打印出匹配行及其行号。 -
-v
:此选项打印出没有匹配到模式的所有行。 -
-c
:此选项仅打印出匹配到模式的行数,而不打印匹配的行本身。 -
-w
:此选项将模式视为一个完整的单词,而不是一个子串。例如,如果模式是 "test",那么 "test" 和 "retest" 将会匹配,但 "testing" 和 "tested" 不会匹配。 grep ‘test’ grep -w ‘test’ -
-l
:在多个文件之间搜索时,此选项仅打印包含匹配行的文件名。 -
egrep
:这是grep
的扩展版本,它支持扩展正则表达式,例如,可以使用|
作为或运算符来匹配多个模式。例如,egrep –w ‘CS|MBA’ student_record
将匹配 "CS" 或 "MBA"。
sed '//' /tmp/record
小测易混题:匹配一整行or单个子串,
-
sed 's/Jose/JOSE HAS RETIRED/' /tmp/databook
这个命令会在/tmp/databook
文件中查找 'Jose' 并将其替换为 'JOSE HAS RETIRED'。如果一行中有多个 'Jose',只有第一个会被替换。g为全局替换 -
整行替换:sed 's/.*Jose.*/HOSE HAS RE/'
和sed '/Jose/c JOSE'
这个命令会在文本流中查找包含 'Jose' 的行并将整行替换为 'HOSE HAS RE'。 -
查找后替换:sed '/Popeye/s/[0-9]*\/[0-9]*\/[0-9]*/11\/14\/46/'
这个命令会查找包含 'Popeye' 的行,并在这些行中查找匹配日期格式的字符串,然后将其替换为 '11/14/46'。 -
查找后替换(分隔符也可用@):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
-
print
: 用于输出一行文本。例如,{print}
会打印当前处理的每一行。 -
NF
: 代表当前行的字段数量。例如,{print NF}
会打印每一行的字段数量。 -
NR
: 代表当前行的行号。例如,{print NR}
会打印每一行的行号。 -
FS
: 定义输入字段的分隔符。例如,BEGIN{FS=":"}
会将冒号设为分隔符。 -
$
: 用于访问字段。例如,{print $1}
会打印每一行的第一个字段。
其他常见文本命令
-
cat
: 查看文件全部内容。例如,cat file1 file2
将把file1和file2的内容打印出来。 -
nl
: 对文件的内容进行行号处理。例如,nl file1
会显示file1的内容,并为每一行加上行号。 -
more
: 分页显示文本文件内容。例如,more file1
会一页一页地显示file1的内容。 -
wc
: 计算文本文件的行数、字数、字符数。例如,wc file1
会显示file1的行数、字数和字符数。-l 只看行数,-w 单词, -c字符 -
cut
: 从文件的每一行中"提取"或"显示"出一部分内容,而不是删除它。例如,cut -d':' -f1 file1
将显示文件file1的第一列。-d为指定分割符为“:” -f1第一个字段 -
paste
: 合并文件的行。例如,paste file1 file2
将合并file1和file2的内容。 -
sort
: 对文本文件的行进行排序。例如,sort file1
将按照字母顺序排列file1的行。 -
uniq
: 把文件中连续的重复的行进行去重。例如,uniq file1
将只显示file1中独特的行。与sort结合使用 -
grep
: 根据模式搜索文件。例如,grep 'pattern' file1
将显示在file1中包含'pattern'的行。 -
sed
: 是一个流编辑器,用来执行基本的文本转换。例如,sed 's/pattern/replacement/g' file1
将在file1中替换所有的'pattern'。 -
awk
: 是一个强大的文本分析工具。例如,awk '{print $1}' file1
将打印file1中的第一列。 -
tr
: 转换或删除文件中的字符。例如,tr 'a-z' 'A-Z' < file1
将把file1中的所有小写字母转换为大写字母。 -
od :以进制的方式查看文件所有内容 -c 以字符显示 -h 以16进制显示
-
head:head -5 查看前五行
-
tail: tail -5 查看倒数5行,+5 从第五行到文件末尾,-f 实时查看文件新增内容
-
diff 比较两个文件 这么用:diff file1.txt file2.txt -d 可以看到删除历史 -c 可以看到修改历史 -a 可以看到增加历史
-
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