对于操作系统来说,个人觉得408当中的操作系统进行相关的了解就差不多了,这边进行简要的介绍(笔者,操作系统学的也不咋样,在新建文件夹了,在新建文件夹了。)
首先引用一张很经典的图来阐述操作系统,一目了然:
而操作系统实际上就是管理各种计算机硬件资源,并为用户提供一个简单的接口,方便用户使用的一个东西
ctrl a 回到行首 ctrl e 回到行尾
在linux下有俩种用户:超级用户(root)、普通用户
su [用户名]
例子:
值得关注的是使用sudo的时候输入的密码是user的密码,不是root的密码
useradd 用户名
例子: 在root用户下,或者在sudo组的user下使用这个指令,使用该指令,并且加上-m 之后,系统会在‘/home’下创建一个名为user的目录。
cat /etc/passwd 查看当前系统的用户。
而创建完角色之后,登录该角色发现只有一个$符号,原因就在于useradd当中需要加-s参数,指向调用/bin/bash 不指示的可能会指向/bin/sh,导致解析异常。
passwd 用户名
需要关注的是只有root用户才可以给新创建的用户配置密码。 或者使用sudo passwd。
userdel 用户名
删除用户之后,其对应的家的目录并不会消失,如果想要删除其家的目录,就需要 userdel -r 用户名
PS 对于删除用户的时候报错,实际上可能就是由于此用户仍处于运行状态(可能中间切换用户,切换到该用户了,并且没有进行exit),需要手动将其运行状态关掉,才能让其删除。
ls [选项] [目录或者文件]
对于目录来说,该命令列出该目录下的所有子目录以及文件
对于文件来说,列出文件名以及其他的信息。
选项 | 解释 |
---|---|
-a | 显示指定目录下所有的子目录与文件 |
-l | 列出指定目录下所有子目录与文件的详细信息 |
补充:
在linux下以.开头的文件是隐藏文件,只有使用ls -a才可以显示出来
一般配置文件都以.开头 隐藏文件处理
补充:
关于-l的详细信息进行相关的补充:
从前往后分别是 文件类型与权限 硬连接数(实际上就是绑定相同的inode节点的对象的个数) 文件所有者 文件所属组 文件大小 最近修改时间 文件名字。
而对于文件类型与权限的介绍(第1个字符是文件类型,后面9个字符分为三组,分别表示创建者 同组用户 其他用户的权限):
文件类型 | 解释 |
---|---|
- | 普通文件 |
d | 目录 |
l | 符号链接 |
b | 块设备文件 |
c | 字符设备文件 |
p | 命名管道 |
s | socket文件 |
文件权限 | 解释 |
---|---|
r | 可读 |
w | 写 |
x | 执行 |
_ | 没有设置该权限 |
而每一组都可以由一个数字表示,比如rwx就对应111也就是7,r_x对应101也就是5.
cd 目录名
功能如名字所示
常用的简写:
cd … 到父目录
cd / 到根目录
cd ~ 到用户的主目录下 与直接执行cd 效果一样
cd - 到上一次的目录
pwd
功能:显示当前的绝对路径。
mkdir [选项] 目录名
rmdir [选项] dirname
删除该工作目录下的空子目录,如果该目录下有文件,用之后介绍的命令进行删除。
cp [选项] 源文件或者目录 目标文件或者目录
把指定的源文件或者目录复制到目标文件或者目录中。
选项 | 解释 |
---|---|
-f | 若目标文件目录存在同名的文件,直接覆盖,不提示 |
-i | 与上面相反,遇到相同名的文件,会进行提示是否覆盖 |
-r | 拷贝的是一个目录,此时会将此目录下所有文件及目录拷贝到对应的目标目录之下。 |
mv [选项] 源文件或者目录 目标文件或者目录
如果第二个参数是目标文件时,mv操作完成的就是文件重命名,此时源文件只能有一个(也可以是源目录名),他将所指向的源文件或者目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或者目录参数可以有多个,mv操作将各个参数指定的源文件均移动到目标目录当中。
选项 | 解释 |
---|---|
-i | 如果在移动到过程中存在重名,提示是否覆盖 |
-f | 存在重名,直接覆盖,不进行提示 |
rm [选项] 文件或者目录
rm可以删除多个文件或者目录,也可以将某个目录及其下的所有文件全部都进行删除,对于链接文件,只删除链接文件。如果删除时候没有-r 则不会删除目录
选项 | 解释 |
---|---|
-f | 删除过程中不会给出提示 |
-i | 删除过程中会给出交互式的提示 |
-r | 删除目录及其目录下的所有文件 |
chmod进行修改,但是一般存在两种修改方式:文字设定法 数字设定法
who 模块介绍:
who | 解释 |
---|---|
u | user 用户即文件或者目录的所有者 |
g | group 同组成员 |
o | other 其他用户 |
a | all 所有用户 没有写who所指向的就是all |
操作符号:
操作符号 | 解释 |
---|---|
+ | 添加某个权限 |
- | 取消某个权限 |
= | 赋值权限,取消原本的权限 |
mode
mode | 解释 |
---|---|
r | 读 4 |
w | 写 2 |
x | 执行 1 |
chmod [who][+|-|=][mode] 文件名
修改指定文件名中who的权限增加去除赋值为mode
操作对象可以是其中一个也可以是其中的组合。
例子:
chmod ug+r,o+r example 使文件创建者和同组和其他组的成员都对example有读的权限。
chmod [mode] 文件名
实际上就是对于上文的数字的相加
例子:
chmod 750 test
u 可读可写可执行 7=111=4+2+1
g 可读可执行 5 = 101 =4+0+1
o 啥都不行 0 =000
值得关注的是删除文件,看的是对应包含这个文件的目录的权限是否满足,而非看这个文件的权限是否可写。即对于文件的写操作实际上对应着对于文件的写入操作,对于目录的写操作实际上对应着往往文件中添加上文件的功能。
find 起始目录 查找条件 操作
在指定目录结构中搜索文件,并且执行指定的操作
命令的查找条件可以是一个逻辑运算符not and or组成的复合条件
逻辑运算符 | 解释 |
---|---|
-a | and 与 |
-o | or 或 |
! | not 非 |
常用的查找条件
查找条件 | 解释 |
---|---|
-name 字串 | 查找文件名匹配给字串的所有文件,字串内可用通配符* ? [] |
-gid n | 查找属于ID为n的用户组的所有文件 |
-uid n | 查找属于ID为n的用户的所有文件 |
-group 字串 | 查找属于用户组名所给字串的所有的文件 |
-user 字串 | 查找用户的所给的字串的所有文件 |
-empty | 查找空我呢见或目录 |
-perm 权限(数字) | 查找具有指定权限的文件或者目录 |
-size n[bckMG] | 查找指定大小的文件,n后面的字符表示单位 缺省为b 表示512字节,后面的数字需要加上+或者-然后跟着数字然后单位 比如+100G就是大于100G的文件 -100G就是小于100G的文件 |
-type x | 查找类型为x的文件 x:b块设备文件 c字符设备文件 d目录文件 p命名管道(FIFO)f普通文件 l符号链接文件 s socket文件 |
-amin n | 查找n分钟之前被访问过的所有文件(+表示n分钟之前,-表示以内,+/-不能省略) |
-atime n | 查找n天以前被访问过的所有文件 |
-cmin n | 查找n分钟以前文件状态被修改过的所有文件 |
-ctime | 查找n天以前文件状态被修改过的所有文件 |
-mmin n | 查找n分钟以前文件内容被修改过的所有文件 |
-mtime n | 查找n天以前文件内容被修改过的所有文件 |
补充,关于通配符,这边引出我之前的另一篇博客,请移步:
链接
此篇文章的正则表达式,进行浏览
可执行操作
-exec 命名名称 {} ; 或者:| xargs 一般推荐后者
{}实际上就是替换哪一个文件名的地方
例子:
find /home/user -type f -exec cp -i {} /home/user1 ;
find /home/user -type f|xargs -i cp {} /home/user1
df [-h 按照GB KB MB显示] [文件名]
一般直接使用df -h显示整个磁盘的使用情况
du[-h][文件名]
显示目录的每一级的磁盘使用情况,如果只想显示当前的目录,则使用du -h --max-depth=0 /home/user
软链接:
ln -s 链接的对象 取的名字
实际上就是当我们调用这个名字的时候,调用的就是那个链接的对象,相当于搞一个快捷方式出来。
硬链接:
ln 链接的对象 取的名字
实际上就是我们调用这个名字的时候,调用的是和链接对象相同的inode的对象。
关于软连接和硬链接:个人感觉理解起来就相当于,软连接就是指针过程,硬链接就是绑定地址的过程。inode节点就是操作系统来分辨这一块对应的代码所属于的地方的东西。
补充:关于copy和删除的理解,对于copy来说,比如我们将目录1复制到目录2,我们需要将目录二当中复制的文件名的每一个元素都取一个新的inode并且进行分配当中的inode,所以速度会很慢,但是对于删除,我们实际上只是将每个名字都去掉,速度很快,然后此处的数据实际上还是存在的,但是此时inode的连接数为0,所以我们可以对其进行覆盖操作。(引用计数原理)
cat [选项] [文件]
查看目标文件的内容
选项 | 解释 |
---|---|
-b | 对非空输出行进行编号 |
-E | 在每行结束处显示$ |
-n | 对输出的所有行进行编号 |
-s | 不要输出多行空行 |
cat 常常与重定向一起使用。其中>表示创建,>>表示追加,<<表示以什么结束,如果 cat 的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。
文件描述符是一个整数,它代表一个打开的文件,标准的三个描述符号:
标准输入:一般指键盘,描述符为:0
标准输出:一般指屏幕输出,描述符为:1
错误输出:也是屏幕,描述符为:2
重定向符号:
“>”:将命令的输出重定向到指定文件中。如果文件不存在,则会创建该文件;如果文件已存在,则会清空文件内容并将输出写入文件。
“>>”:将命令的输出追加到指定文件的末尾。如果文件不存在,则会创建该文件;如果文件已存在,则将输出追加到文件末尾。
“<”:将指定文件的内容作为命令的输入。
“|”:将一个命令的输出作为另一个命令的输入。这被称为管道(Pipe)操作符。
“2>”:将命令的错误输出重定向到指定文件中。
“&>”:将命令的标准输出和错误输出都重定向到指定文件中。
head -n 行数值 文件名
功能:显示目标文件的前几行。
例如 要显示 当前目录下 main.cc 的前 10 行,则使用
Head -n 10 main.py
tail -n 行数值 文件名。
功能:显示目标文件的最后几行。
例如 要显示“/home/user/0718/”目录下的 main.cc 文件的最
后 10 行。则使用 tail –n 10 /home/user/0718/main.py
more 或者 less 命令
sort 文件名
file 文件名 根据文件内容,判别文件类型
uniq [选项] 文件名
选项 | 解释 |
---|---|
-c | 在输出行前面加上每行在输入文件中出现的次数。 |
-d | 仅显示重复行。 |
-u | 仅显示不重复的行。 |
wc 文件名
选项 | 解释 |
---|---|
-c | 统计字节数 |
-l | 统计行数 |
-m | 统计字符数这个标志不能与 -c 标志一起使用 |
-w | 统计字数。一个字被定义为由空白、跳格(tab)或换行字符分隔的字符串 |
wc main.c | |
[root@ ~/pp]$ wc day3_history.txt | |
318 990 5372 day3_history.txt | |
依次行数,单词数,字符数 |
一般使用的时候:ls|wc -l 实际上就是统计有这个字符串当中存在多少个文件(一个目录也算一个文件)。
命令:grep [选项] [查找模式] [文件名 1,文件名 2,…]
功能:grep 过滤器查找指定字符模式的文件,并显示含有此模式
的所有行。被寻找的模式称为正则表达式。
选项 | 解释 |
---|---|
-F | 每个模式作为固定的字符串对待 |
-c | 只显示匹配行的数量。 |
-i | 比较式不区分大小写。 |
-n | 在输出前加上匹配串所在的行号。 |
如何找到所有 py 文件里是否调用了 print 函数?
find . -name “*.py”|xargs grep print
管道 | :是重定向的一种,就像一个导管一样,将一个程序或命令的输出作为另一个程序或命令的输入,实际上就是使用管道之后前一个的输出,相当于就是一个缓存文件,此时我们就可以继续使用文件查看以及处理命令对其进行相关的处理。
umask 指文件(0666)或目录(0777)创建时在全部权限中要去掉的一些权限,普通用户缺省时 umask 的值为 002,超级用户为 022。002 表示创建目录时所有者的权限不去掉, 所属组权限不去掉,其他组权限写属性去掉创建一文件以后,普通用户缺省的权限为 664,超级用户: 644,创建一目录以后,普通用户缺省的权限为 775,超级用户: 755可以通过 umask 查看默认的缺省的掩码值。通过 umask 对应的三个数值来进行修改掩码值。
tar [主选项+辅选项] 目标文档 源文件或目录
功能:tar 可以为文件和目录创建档案。利用 tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
常用参数:
c:创建新的档案文件。
r: 要把存档的文件追加到档案文件的末尾。
x:从档案文件中释放文件。
f:使用档案文件或设备。
v:在归档过程中显示处理的文件。
z:用 gzip 来压缩/解压缩文件,后缀名为.gz,加上该选项后可
以将档案文件进行压缩。
一般来说我们进行压缩包处理实际上就是:
tar cvfz source.tar.gz /home/user/对应的文件等等
gzip/bzip2 [选项] 压缩或解压缩的文件名
功能:gzip 用来将文件压缩成后缀为.gz 的压缩文件,或者将后缀为.gz 的文件进行解压。Bzip2 用来将文件压缩成后缀名为.bz2 的压缩文件,或者将后缀为.bz2 的压缩文件解压。
常用参数:
-d: 将压缩文件进行解压。
-v:在压缩或解压过程中显示解压或压缩的文件。
例如,将 main.c 进行压缩,则使用
gzip/bzip2 –v main.c。
则就会将 main.c 压缩成 main.c.gz 或者 main.c.bz2 。
如果将刚才的压缩文件解压,则使用
gzip –dv main.c.gz,或者 bzip2 –dv main.c.bz2。
scp filename username@ip:path
filename:文件名称
username:copy 到的目标主机的用户名
ip:目标主机 IP
path:目标主机路径
scp file3 [email protected]:~/ 从本机 copy 到其他机器
scp [email protected]:~/file3 . 从其他机器 copy 到本机
scp file8 [email protected]:~ 无秘钥登录设置
ssh-keygen 一直回车即可
ssh-copy-id [email protected]
sudo apt install vim
VIM(vimsual)是 Linux/UNIX 系列 OS 中通用的全屏编辑器。
vimm 分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理,如:q 代表退出,而编辑状态则是用来编辑文本资料的。当你进入 vim 时,会首先进入命令状态。在命令状态下,按”i”(插入)或”a”(添加)可以进入编辑状态,在编辑状态,按 ESC 键进入命令状态。
在命令状态下,有如下一些命令进入编辑模式:
新增:
a 从光标后面开始添加文本
A 从光标所在行的末尾开始添加文本
插入:
i 从光标前面开始插入文本
I 从光标所在行的开始处插入文本
一般都是用i进入编辑模式即可
功能 | 解释 |
---|---|
x | 删除光标处的字符 |
dd | 删除光标所在的整行 |
3dd | 删除光标所在行以及下面的两行(删除 3 行) |
D | 删除光标到行尾的文本,常用语删除注释语句 (d$) |
yy | 复制光标所在的整行 |
[n]yy | 从光标开始往下复制 n 行,[n]表示一个整数 |
p | 将复制后的文本粘贴到光标处 |
u | 撤销上次操作 |
值得关注的是删除的x实际上是会存在剪贴板中的,所以实际上剪切就是v选中然后x删除,然后p粘贴。
快捷键 | 解释 |
---|---|
^ | 光标移动到行首 |
$ | 光标移动到行尾 |
Ctrl+d | 向下翻半页 |
Ctrl+f | 向下翻一页 |
Ctrl+u | 向上翻半页 |
Ctrl+b | 向上翻一页 |
gg | 光标定位到文档头 |
G | 光标定位到文档尾 |
H | 光标定位到当前页首 |
L | 光标定位到当前页的最后一行的行首 |
w | 光标往后移一个字 |
b | 光标往前移一个字 |
[n]+ | 光标向后移动 n 行,[n]表示一个整数 10+ |
[n]- | 光标向前移动 n 行,[n]表示一个整数 10- |
[n]G | 光标定位到第 n 行行首, [n]表示一个整数 20G |
也可以:50 | 到达第 50 行 |
快捷键 | 解释 |
---|---|
/[str] | 查找字符串 str,[str]表示要查找的字符串,回车后会加亮显示所有找到的字符串,接着,命令 n 移动到下一个找到的字符串,命令 N 移动到上一个找到的字符串 |
补充:
替换
方法:s/[src]/[dst][参数]
功能:就是将文中出现的 src全部替换成dst。
常用参数 | 解释 |
---|---|
/i | 忽略大小写 |
/g | 全部匹配,不加/g实际上就是,只替换光标当前选中的元素 |
常用的例子记忆
:s/hello/world/g : 将本行的world全部替换成hello
:3,6 s/hello/world/g : 将3-6行的world全部替换成hello
:%s/[src]/[dst]/g : 将文档中所有 src 的字符串替换为 dst 字符串
:%s/^ //g : 将文档每一行的行首的空格去掉
v 可视化块选择状态,选中块之后,可以对块进行删除(d),复制(y),此处注意不是yy,剪切(x) 都需要加上p的粘贴
Ctrl +v 竖向选择模式,主要用于批量注释代码,输入步骤如下:
1、首先按 ctrl+v,竖选选中要注释的行
2、输入 I(注意是大写的 I,相当于把光标移动到最前面),然后输入//
3、再输入 esc,就会看到选中的行被注释了。
结束编辑:
:q 在未修改文档的情况下退出
:q! 放弃文档的修改,强行退出
:w 文档存盘
:wq 文档存盘退出
其他:
:%!xxd 十六进制模式
:%!xxd -r 返回文本模式 中间有一个空格的
如果在编辑过程中不小心按了 Ctrl+s,vim 会处于僵死状态,按Ctrl+q 可以恢复。
sed: 管道查找替换程序
-i 参数介绍,实际上就是不加上-i就是给你看个样子,加上才生效。
sed ‘s/aa/bb/’ a.txt > b.txt //将 a.txt 中的 aa 替换成 bb 并重定向输出到 b.txt中。
sed -i “s/print/mysprint/g” *.py
Vimdiff 命令讲解
vimdiff 文件一 文件二
就是使用vim打开俩个文件,进行比较二者的差别,会进行标注对比。
.bashrc 修改 PS1,alias,PATH 配置
永久变色
export PS1="[\e[37;40m][[\e[32;40m]\u[\e[37;40m]@[\e[36;40m]\w[\e[0m]]\$ "
做短命令 alias
alias ll=‘ls -lh’
自己定义的alias实际上就可以直接放到个人的~/.bashrc中,进行缩写使用
执行代码不需要./是因为对应的可执行代码在 PATH 环境变量路径下
在bin目录下添加自己vim写的比如qscp脚本语句来方便使用指令
scp -r $1 c2022@42.192.117.114:~/day$2
1、没有~/.local/bin,就创建.local,和 bin
2、把 qscp 放到 bin 下面
3、export PATH=$PATH:~/.local/bin 添加到~/.bashrc
4、执行 source ~/.bashr