2022-07-17 Linux入门1
- 我来给简书除除草。看了下,最近的笔记是一年前,搞linux的,笔记留在草稿箱没有发布,当然linux也没学会。再给Linux最后一个机会,🤦🏻♀️🤦🏻♀️🤦🏻♀️ 再不会,我就! 再也不看了!
- 本条笔记来源于https://www.lanqiao.cn/courses/1/learning/?id=2
Chapter1
- Tab,来进行命令、目录的补全
- ctrl+c,强行终止当前程序
- 通配符
ls *.txt
,touch love_{1..10}_shiyanlou.txt
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,相当于Home键
Ctrl+e 将光标移至输入行末,相当于End键
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动
shell常见通配符如下
* 匹配 0 或多个字符
? 匹配任意一个字符
[list] 匹配 list 中的任意单一字符
[^list] 匹配 除 list 中的任意单一字符以外的字符
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9][a-z]
{string1,string2,...} 匹配 string1 或 string2 (或更多)其一字符串
{c1..c2} 匹配 c1-c2 中全部字符 如{1..10}
Chapter2 用户管理和权限
who 命令其它常用参数
-a 打印能打印的全部
-d 打印死掉的进程
-m 同am i,mom likes
-q 打印当前登录用户数及用户名
-u 打印当前登录用户登录信息
-r 打印运行等级
- 创建用户
sudo adduser lilei
su -l lilei #切换用户
exit #退出用户或终端
ctrl+D #退出用户或终端
- 用户组
查看属于哪些用户组
groups user
cat /etc/group | sort
sudo usermod -G sudo lilei #lilei添加到sudo组
sudo deluser lilei --remove-home# 工作目录一并删除了
- 文件权限
每个文件有三组固定的权限,分别对应拥有者,所属用户组,其他用户,记住这个顺序是固定的。文件的读写执行对应字母rwx
,以二进制表示就是111
,用十进制表示就是7
,对进制转换不熟悉的同学可以看看 进制转换。例如我们刚刚新建的文件 iphone11 的权限是rw-rw-rw-
,换成对应的十进制表示就是 666,这就表示这个文件的拥有者,所属用户组和其他用户具有读写权限,不具有执行权限。
表示方法1
文件权限表示方法.png
chmod 600 file # 表示只有自己可读、写、执行
表示方法2
chmod go-rw file
g、o 还有 u 分别表示 group(用户组)、others(其他用户) 和 user(用户),+ 和 - 分别表示增加和去掉相应的权限。
【感觉更简单些】
例子找到 sources.list,改变拥有者和其权限
sudo find /etc -name sources.list
sudo chown shiyanlou /etc/apt/sources.list
sudo chmod 600 /etc/apt/sources.list
Chapter3 Linux目录结构及文件基本操作
FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准)
touch #文件的新建,改时间戳
cp
mv
rename
查看文件
cat, tac, nl,more,less
head, tail
Vim
他来了,他来了...vim 来了。常用vim 的模式又三种,普通模式、插入模式、命令行模式。
vim 启动进入普通模式,处于插入模式或命令行模式时只需要按 Esc 或者 Ctrl+[(这个在 vim 课程环境中可能会不管用)即可进入普通模式。普通模式中按 i(插入)或 a(附加)键都可以进入插入模式,普通模式中按 : 进入命令行模式。命令行模式中输入 wq 回车后保存并退出 vim。
vim1
#插入模式
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置后到一个单词结尾的字符
#命令行模式
:q! 强制退出,不保存
:q 退出
:wq! 强制保存并退出
:w <文件路径> 另存为
:saveas 文件路径 另存为
:x 保存并退出
:wq 保存并退出
#普通模式
普通模式下按下 Shift+zz 即可保存退出 vim
x 删除游标所在的字符
X 删除游标所在前一个字符
Delete 同 x
dd 删除整行
dw 删除一个单词(不适用中文)
d$或D 删除至行尾
d^ 删除至行首
dG 删除到文档结尾处
d1G 删至文档首部
2dd 表示一次删除 2 行
vim2 文档编辑命令
- 游标的快速跳转
#行间跳转
nG(n Shift+g) / ngg 游标移动到第 n 行 (如果默认没有显示行号,请先进入命令模式,输入 :set nu 以显示行号)
gg 游标移动到到第一行
G(Shift+g) 到最后一行
#tips:你在完成依次跳转后,可以使用 Ctrl+o 快速回到上一次(跳转前)光标所在位置
#行内跳转
w 到下一个单词的开头
e 到当前单词的结尾
b 到前一个单词的开头
ge 到前一个单词的结尾
0或^ 到行头
$ 到行尾
f<字母> 向后搜索<字母>并跳转到第一个匹配的位置(非常实用)
F<字母> 向前搜索<字母>并跳转到第一个匹配的位置
t<字母> 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用)
T<字母> 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用)
- 复制粘贴和剪切
普通模式中,yy 复制游标所在的整行(3yy 表示复制 3 行)
普通模式中,y^ 复制至行首,或 y0。不含光标所在处字符。
普通模式中,y$ 复制至行尾。含光标所在处字符。
普通模式中,yw 复制一个单词。
普通模式中,y2w 复制两个单词。
普通模式中,yG 复制至文本末。
普通模式中,y1G 复制至文本开头。
普通模式中使用 p 粘贴
普通模式中,p(小写)代表粘贴至光标后(下)
普通模式中,P(大写)代表粘贴至光标前(上)
打开文件进入普通模式练习上述命令,这会儿你就可以随意 yy 了。
vim3 查找替换
- 替换和撤销命令
r+<待替换字母> 将游标所在字母替换为指定字母
R 连续替换,直到按下 Esc
cc 替换整行,即删除游标所在行,并进入插入模式
cw 替换一个单词,即删除一个单词,并进入插入模式
C(大写) 替换游标以后至行末
~ 反转游标所在字母大小写
{n}u 撤销一次或 n 次操作
U(大写) 撤销当前行的所有修改
Ctrl+r redo,即撤销 undo 的操作
- 快速缩进
普通模式下输入 15G,跳转到 15 行
普通模式下输入 >> 整行将向右缩进(使用,用于格式化代码超爽)
普通模式下输入 << 整行向左回退
普通模式下输入 : 进入命令行模式下对 shiftwidth 值进行设置可以控制缩进和回退的字符数
普通模式下输入 :set shiftwidth=10 #设置缩进为10个字符
#调整文本位置
命令行模式下
:ce(center) 命令使本行内容居中
:ri 靠右
:le 靠左
- 查找
普通模式下输入 / 然后键入需要查找的字符串,按回车后就会进行查找。? 与/ 功能相同,只不过 ? 是向上而 / 是向下查找。
进入查找之后,输入 n 和 N 可以继续查找。n 是查找下一个内容,N 查找上一个内容。
普通模式下输入 /icmp 然后回车即可查找字符串 icmp
普通模式下输入 n 查找下一个 icmp
普通模式下输入 ?tcp 向上查找字符串 tcp
普通模式下输入 N 查找上一个出现的 tcp
命令行模式下输入 noh 然后回车即可取消搜索
普通模式下输入 /icmp 然后回车即可查找字符串 icmp
普通模式下输入 n 查找下一个 icmp
普通模式下输入 ?tcp 向上查找字符串 tcp
普通模式下输入 N 查找上一个出现的 tcp
命令行模式下输入 noh 然后回车即可取消搜索
vim4高级功能
- 多文档编辑
#形式1
默认进入1.txt文件的编辑界面
命令行模式下输入 :n 编辑 2.txt 文件,可以加 ! 即 :n! 强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件
命令行模式下输入 :N 编辑 1.txt 文件,可以加 ! 即 :N! 强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件
#形式2
进入 vim 后打开新文件
命令行模式下输入:e 3.txt 打开新文件 3.txt
命令行模式下输入:e# 回到前一个文件
命令行模式下输入:ls可以列出以前编辑过的文档
命令行模式下输入:b 2.txt(或者编号)可以直接进入文件 2.txt 编辑
命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
命令行模式下输入:e! 4.txt,新打开文件 4.txt,放弃正在编辑的文件
命令行模式下输入:f 显示正在编辑的文件名
命令行模式下输入:f new.txt,改变正在编辑的文件名字为 new.txt
## 假设 1.txt 意外关闭,我们可以输入 vim 然后输入 :recover 1.txt
- 可视模式命令简介
在普通模式下输入 v(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下 v 后就会取消选取。
在普通模式下输入 Shift+v(小写),进入行选择模式,按下 V 之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次 Shift+v 就可以取消选取。
在普通模式下输入 Ctrl+v(小写),这是区域选择模式,可以进行矩形区域选择,再按一次 Ctrl+v 取消选取。
在可视模式下输入 d 删除选取区域内容
在可视模式下输入 y 复制选取区域内容
-视窗模式
命令行模式下输入 :sp 1.txt 打开新的水平分屏视窗来编辑 1.txt
命令行模式下输入 :vsp 2.txt 打开新的垂直分屏视窗来编辑 2.txt
普通模式下 Ctrl+w s 将当前窗口分割成两个水平的窗口
普通模式下 Ctrl+w v 将当前窗口分割成两个垂直的窗口
普通模式下 Ctrl+w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
普通模式下 Ctrl+w o 打开一个视窗并且隐藏之前的所有视窗
普通模式下 Ctrl+w j 移至下面视窗
普通模式下 Ctrl+w k 移至上面视窗
普通模式下 Ctrl+w h 移至左边视窗
普通模式下 Ctrl+w l 移至右边视窗
普通模式下 Ctrl+w J 将当前视窗移至下面
普通模式下 Ctrl+w K 将当前视窗移至上面
普通模式下 Ctrl+w H 将当前视窗移至左边
普通模式下 Ctrl+w L 将当前视窗移至右边
普通模式下 Ctrl+w - 减小视窗的高度
普通模式下 Ctrl+w + 增加视窗的高度
vim -x file1 #创建加密文档
- 在vim执行外部命令
在命令行模式中输入 ! 可以执行外部的 shell 命令。
:!ls 用于显示当前目录的内容
:!rm FILENAME 用于删除名为 FILENAME 的文件
:w FILENAME 可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件
- vim的功能设定
可以在编辑文件的时候进行功能设定,如命令行模式下输入 :set nu(显示行数),设定值退出 vim 后不会保存。要永久保存配置需要修改 vim 配置文件。
vim 的配置文件 ~/.vimrc(实验楼环境中配置文件在 /etc/vim/vimrc),可以打开文件进行修改,不过务必小心不要影响 vim 正常使用。
获取目前的设定
命令行模式下输入 :set 或者 :se 显示所有修改过的配置
命令行模式下输入 :set all 显示所有的设定值
命令行模式下输入 :set <option>? 显示 option 的设定值
命令行模式下输入 :set nooption 取消当前设定值
set 功能的说明
命令行模式下输入 :set autoindent(ai) 设置自动缩进
命令行模式下输入 :set autowrite(aw) 设置自动存档,默认未打开
命令行模式下输入 :set background=dark 或 light,设置背景风格
命令行模式下输入 :set backup(bk) 设置自动备份,默认未打开
命令行模式下输入 : set cindent(cin) 设置 C 语言风格缩进
Chapter4 环境变量与文件查找
环境变量
set 显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。
env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。
export 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。
#tips
在 /etc/profile 里面的是对所有用户永久生效,所以如果想要添加一个永久生效的环境变量,只需要打开 /etc/profile
echo $PATH #查看环境变量的内容
#添加自定义路径到“PATH”
PATH = $PATH:/home/shiyanlou/mybin
#变量修改
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串
unset mypath# 变量删除
source .zshrc #环境变量立刻生效
- 搜索文件
whereis, which, find, locate
whereis 简单快捷。whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)
locate 快而全
使用 locate 命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db 数据库来检索信息。不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。注意这个命令也不是内置的命令,在部分环境中需要手动安装,然后执行更新。
sudo apt-get update
sudo apt-get install locate
sudo updatedb
which 小而精。which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的程序,因为它只从 PATH 环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。
which man
find 精而细。最强大,可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。
find
-atime 最后访问时间
-ctime 最后修改文件内容的时间
-mtime 最后修改文件属性的时间
-mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
-mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
-mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
-newer file:file 为一个已存在的文件,列出比 file 还要新的文件名
高级bash脚本编程指南
Bash(GNU Bourne-Again Shell)是一个为 GNU 计划编写的 Unix shell,它是许多 Linux 平台默认使用的 shell
# 使用shell来执行
sh hello.sh
# 使用bash来执行
bash hello.sh
# 使用.来执行
. ./hello.sh
# 使用source来执行
source hello.sh
# 还可以赋予脚本所有者执行权限,允许该用户执行该脚本
chmod u+rx hello.sh
./hello.sh
- 变量和参数
特殊变量
从命令行传递到脚本的参数:$0,$1,$2,$3...
$0 就是脚本文件自身的名字,$1 是第一个参数,$2 是第二个参数,$3 是第三个参数,然后是第四个。$9 之后的位置参数就必须用大括号括起来了,比如,${10},${11},${12}。
$# : 传递到脚本的参数个数
$* : 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9 个
$$ : 脚本运行的当前进程 ID 号
$! : 后台运行的最后一个进程的进程 ID 号
$@ : 与 $* 相同,但是使用时加引号,并在引号中返回每个参数
$: 显示 shell 使用的当前选项,与 set 命令功能相同
$? : 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。
- 算数运算符
原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
注意使用的反引号(esc 键下边)
表达式和运算符之间要有空格 $a + $b 写成 $a+$b 不行
条件表达式要放在方括号之间,并且要有空格 [ $a == $b ] 写成 [$a==$b] 不行
乘号(*)前边必须加反斜杠(\)才能实现乘法运算
image.png
image.png