零.一般命令:
0.echo
输出到终端
可选参数:
-n 不换行输出
-e 启用转义,像是\n(换行)
1.cd
cd ~
命令返回/home
cd -
命令可以在当前目录和上一个目录之前来回切换
2.ls
zl@LAPTOP-ZL ~/rust_learn> ls -l |
- 首字母 d 表示是一个 directory(目录)
- 前三个字母组,表示 owner of the file 的权限(拥有者)
- 中间三个字母组,表示 group of the file 的权限(所在的组)
- 最后三个字母组,表示 anyone else 的权限(其他人)
后边的第一个 zl 表示 owner(显示的就是名字),第二个 zl 表示 group(那个用户所在的组)。
三个字母的意思:
read (读,可以用cat,less,more等命令来查看其内容)
write(写,对于目录,就是可以创建,删除和重命名,但是你必须同时也有那个文件的权限。对于文件,可以使用文本编辑器(vim,nano等)来修改它,也可以删除它(实际上是修改目录信息))
execute(执行,对于目录来说,就是否可以打开它)。
注意:即使对目录有读权限,如果没有执行权限,也无法进入目录,并且会收到
Permission denied
的错误。
举个例子:
-rwxr-xr--
表示:
- 这是一个普通文件。
- 文件所有者具有读、写、执行权限。
- 文件所属组具有读、执行权限,但没有写权限。
- 其他用户仅具有读权限。
3.rmdir
删除文件夹,只用为空时才可以
4.cat/tac
打开文件/逆序打开文件
格式有:
cat filename
, cat < filename
此时可能会出现
cat < main.rs > test.rs |
其中>
是重定向了该命令
它会将前面命令的输出写入到指向的文件(会清空原有内容,是覆盖操作)
如果文件不存在,这会创建一个新的文件
如果不想覆盖,使用>>
来追加重定向,此时内容只会追加到指向文件的末尾
tac可选参数
-b 指定分隔符,默认换行符
-r 将分隔符解释为正则表达式
-s 指定分割符的字符串,覆盖默认的换行符
//不指定文件时,tac会从键盘获取,输入后按ctrl + D
,即可逆序显示
5.rm
删除
6.mv
移动&重命名,注意实际上这是个覆盖操作
7.touch
主要功能是修改文件的时间戳,若指定的文件不存在,它会创建空文件
同时创建多个,空格分隔
可选参数:
-a 仅修改访问时间
-m 仅修改修改时间
-c 不存在时也不创建
-d 修改当前时间戳,格式xxxx-xx-xx xx:xx:xx
-t 修改文件时间,格式xxxxxxxxxxxxxx
例如: 202412312359
代表 2024 年 12 月 31 日 23 时 59 分
一.工具,或是脚本用命令:
1.赋值与输出
赋值:foo=bar
可以使用指令输出赋值,比如: foo=$(pwd)
//pwd
显示当前工作目录
输出:echo $foo
或者 echo "$foo"
,以及tee
//tee
要用|,因为它后面跟的的要输出到的文件
例如:
echo "Hello world" | tee test.rs |
//但是不能echo '$foo'
,因为单引号内的全部都会被视为字面值。
2.source
执行文件内的指令,同时也将里面的函数添加到shell中
例如:
# mcd.sh |
3.bash中的特定变量
!!
显示完整的上一条指令
$1 ~ $9
第一个和之后的变量
$_
上一条命令的最后一个变量,使用快捷键Esc+.
自动输入这玩意
(注意:每条命令自身前面有$,说明其也是一个变量)
$?
前一条指令的退出状态码
//成功执行为0,1是一般错误(包括参数错误等),2是语法错误,127是不存在该命令
$$
当前脚本的PID
$0
当前脚本名称
$@
所有参数
它会传递该脚本或函数的所有参数列表,用于遍历和操作。它和
$*
的意义类似,但是当使用“ ”
时,$*
会当作整体字符串,但是$@
是单独的。(
$*
的整体字符串的分割符是$IFS (内部字段分隔符,默认为空格) )
4.字符匹配
?
只匹配任意一个字符
*
通配符
5.diff
展示两个文件的不同
diff file1 file2 |
6.使用环境变量来解析脚本
写在脚本首行
#!/usr/bin/env python |
7.find/fd
find . -name src -type d |
8.grep/ripgrep/rg
grep foobar mcd.sh //在mcd.sh中搜索 |
grep
的可选参数:
-v 反检索,只显示不匹配的行
-c 只显示匹配的行数,但是不输出内容
-l/L 打印匹配/不匹配模板的文件清单
-s 不显示错误信息
-A/B/C 查找某些字符的内容,并下/上/下和上延伸指定行数。
例如:
grep 'test' file.txt:在 file.txt 中查找包含 test 的行。 |
9.fzf
模糊搜索
cat example.sh | fzf |
绑定ctrl + R
后才能在历史搜索中找到它
10.more/less
more
分页显示大文本文件的内容,逐页阅读。
less
分页显示文本文件内容,可前后移动、搜索和编辑,处理大文件性能好。
more
的可选参数:
-num 一次显示的行数
-d 显示提示信息(如果操作错误)
-l 遇见特殊字符^L时不会再暂停
-f 计算行数时用实际上的行数
-p 显示前先清屏
-c 显示后清除其他旧资料
-s 多空行只显示一行
-u 不显示行号
+/pattern 显示前搜寻该字串,从它之后开始显示
+number 从第num行开始显示
less
的可选参数:
-N 显示行号
-S 禁止水平滚动(会截断长行)
-F 内容少于一屏就直接退出
-X 不适用终端配置,用于脚本
-i 忽略大小写搜索
-m 显示剩余行数
-r 显示特殊字符
-z -4 设置每屏最小行数
-b num 设置缓冲区大小
-e 显示后自动退出
-g 只标记最后搜索的关键词
-o filename 将内容输出到文件
-Q 不使用警告音
-s 含义同more
中
-x num 规定Tab键为num个空格
(大多数应该是通用的)
例如:
more -s testfile:逐页显示 testfile 的内容,连续空白行合并。 |
11.head/tail
head
显示文件开头部分
tail
显示文件末尾部分,一般用于看日志
head可选参数:
-n 指定行数
-c 指定字节数
例如:
head file.txt:默认显示文件的前 10 行。 |
tail另外的可选参数:
-f 循环读取,追踪更新
-q/v 不显示/显示详细处理信息
–pid=pid 与-f合用,和该进程一起挂掉
-s 与-f合用,每次循环读取间隔s秒
12.sleep
让脚本或程序暂停执行一段时间,起到延时的作用
可选单位:
s
:秒m
:分钟h
:小时d
:天默认是秒
二.命令符:
1.>和>>
见cat命令
2.|(pipe)
管道符
将左侧的程序的输出当作右侧的程序的输入
例如:
ls -l | tail -n2 //tail -n +<N> 表示输出从第N行开始的内容 |
常常配合grep使用
例如:
curl --head --silent baidu.com | grep Server |
以及
pstree -ap | grep fish |
注意:
对于需要更高权限才能操作的文件,|之后的命令需要提权
比如
sudo echo 3 > brightness //这样不行 |
三.快捷键:
1.ctrl + l(clean)
等同于命令clean
,相当于windows下的cls
,清屏
2.ctrl + R(history)
等同于命令history
,显示历史指令
history n //展示最后n条结果,通常会和grep配合 |
四.Vim(先留空)
五.Nano
比较重要的:
- 移动光标,如果要使用方向键,要按着
ctrl
- 大多数快捷键,下面都有显示,自己看
- nano -Y 启用语法高亮和自带缩进
六.学长的奇怪要求(?)
学长的奇妙问题:
问题一:目录符号都有哪些?用途是啥?
. 当前目录
.. 父目录
~ 主目录
/ 路径分隔符
*和?也算(AI是这么说的)
问题二:什么是绝对目录?什么是相对目录?
从根目录开始就是绝对目录
从当前文件夹开始就是相对
问题三:管道符?重定向命令?他们是啥?有何作用?
上面有
问题四:如何查看当前所在目录?如何切换目录?如何查看目录下都有什么内容?
pwd,cd,ls
问题五:如何创建文件?如何移动文件?如何重命名文件?如何删除文件?如何查看文件内容?如何运行可执行文件?
使用管道符(?)/touch,mv,mv,rm,cat/less/more/head/tail/tac,
./
前缀(实际上就是给个路径?脚本可以用source)
问题六:如何创建文件夹?如何删除空文件夹?如何删除非空文件夹?
mkdir,rmdir,rm -r/R -f(windows下才是rd /s)
问题七:tac
命令?echo
命令?sleep
命令?
见上
学长的奇妙作业:
- 在根目录创建一个
flag
文件 - 向刚刚创建的
flag
文件写入flag{test_flag}
- 向
flag
文件追加写入flag{test_flag2}
- 最后再向
flag
文件覆盖写入flag{really_flag}
- 查看当前工作目录
- 移动当前工作目录至根目录
- 查看根目录下都有什么文件夹和文件
- 移动
flag
文件至根目录下的home
文件夹并重命名为fllllll4g
- 查看
fllllll4g
文件内容 - 查看
fllllll4g
文件以base64编码后的结果 - 删除
fllllll4g
文件
base64
base64编码,可以直接用base64命令(确实有这玩意儿)
//使用-d参数改为解码
所以可以。。。。。。
echo "这里替换为Base64编码字符串" | base64 -d > decoded_fllllll4g |
七.其他东西
1.od
用于以八进制、十进制、十六进制等不同格式显示文件的内容,常用于查看二进制文件,也能查看文本文件。通过不同选项可以指定输出格式和显示范围。
可选参数:
-t 指定格式,c是字符格式,x是十六进制,d是十进制
注意要写为类似于-tc
的格式
2.hexdump
专门用于以十六进制格式显示文件内容,同时会显示对应的 ASCII 字符,对于分析二进制文件、查看文件的十六进制编码很有帮助。
可选参数:
-C 以标准16进制和ASCll码对照格式输出
实际效果类似于od -tc
3.grep
是的,这东西真的可以,瞎搜就行
例如:
grep -n 'server' config.txt |
4.awk
一种强大的文本处理工具,可以按行读取文件,对每行内容进行处理和分析。它支持对字段进行分割、提取、计算等操作,常用于数据处理和报表生成。
格式:
awk '模式 {动作}' 文件名 |
示例:假设 data.txt
文件内容是用空格分隔的表格数据,要输出每行的第一个字段,可以使用以下命令:
awk '{print $1}' data.txt |
可以用条件过滤行:
awk '$3 > 80 {print}' score.txt |
可以求列和:
awk '{sum += $2} END {print sum}' sales.txt |
//END
是一个特殊的模式,表示在处理完所有行后执行相应的动作,这里用于输出总和。
5.sed
一个文本处理工具
格式
sed '命令' 文件名 |
替换文本
sed 's/apple/banana/g' text.txt |
删除指定行
sed '5,10d' log.txt |
插入文本
sed '3a New line' info.txt |
然而如果只是像输出其内容,命令留空
或者
sed 'p' example.txt
为了避免输出重复,用-n
sed -n 'p' example.txt
这样可以进一步,显示指定行
sed -n '5p' example.txt
多行
sed -n '3,5p' example.txt
还可以匹配内容,类型于grep
sed -n '/error/p' log.txt |