Bash¶
Bash是什么¶
- Bash = Bourne Again SHell
- 本质是一个shell,即命令解释器,当用户在终端输入命令,Bash会读取你输入的内容,再调用系统执行
- Linux以及macOS使用Bash,Windows使用CMD和powershell
基础命令¶
pwd¶
-
作用:输出你当前所在文件夹以及其绝对路径
-
输入:
pwd - 输出:
/home/song372
ls¶
-
作用:列出当前目录下的内容
-
常见写法:
ls # 列出当前文件夹包含的文件 ls home # 列出home文件夹包含的文件 ls -l # 列出详细信息 ls -a # 显示隐藏文件(以. 开头) ls -la # 列出详细信息和隐藏文件 - 输出:
A02.BashIntroduction/ A06.Make/ P104.RedBlackTree/ A03.JUnit/ A07.Lambda/ P105.CodeReview/ A04.FirstGit/ junit5.jar P106.Iterator/ A05.SecondGit/ P103.RoleCode/ P107.Integration/
cd¶
-
作用:切换目录
-
常见写法:
cd A06.Make/ # 切换到指定的A06.Make文件夹 cd .. # 回到上级文件夹 cd ~ # 回到家目录(home directory, 等价于cd /home/你的用户名) cd - # 回到上一次所在目录
touch¶
-
作用:创建文件
-
常见写法
touch ../list.txt # 在父目录创建文档list.txt
mkdir¶
-
作用:创建目录
-
常见写法:
mkdir folder # 新建folder文件夹 mkdir grandpa/father/son # 沿改路径新建son文件夹,但是如果中间目录不存在会报错 mkdir -p grandpa/father/son # -p 解决了中间路径不存在会报错的问题,当grandpa或father不存在时,会一起创建
cp¶
-
作用:复制文件或目录
-
常见用法:
cp old.txt new.txt # 复制old.txt并改名new.txt,new内容与old相同,若new.txt已存在,则用复制来的内容覆盖new原内容 cp -i old.txt new.txt # 与上面作用相同,-i用来防止覆盖,若有同名会询问是否override cp important.txt backup/ # 复制important.txt到目录backup/,文件名不变 cp -r src_dir dst_dir # 复制目录要加-r
mv¶
-
作用:移动文件,或重命名
-
常见用法:
mv old.txt new.txt # 重命名old为new mv file.txt folder/ # 将file.txt移入folder文件夹
rm¶
-
作用:删除文件
-
常见用法:
rm file.txt # 删除file.txt文件 rm -r folder # 删除文件夹,-r表示递归删除 rm -rf folder # 强制删除,-f代表强制删除,不提示确认
cat¶
-
作用:直接输出文件内容
-
常见用法:
cat file.txt # 会输出file.txt里的具体内容
less¶
-
作用:分页读长文件,catch适合读短文件,less适合读长文件
-
常见用法
less bigFile.txt # 分页读取bigFile.txt -
分页后操作,less bigFile.txt之后,终端会显示具体代码界面,底部可以输入进行一些操作:
- 空格:往下翻一整页
- b:往上翻一整页
- Enter:下一行
- ↓/↑:下一行/上一行
- /关键词:标注所有关键词,没找到会显示not found
- n:搜索完之后按n会跳转到下一个搜索结果
- N:搜索完之后按N会跳转到上一个搜索结果
- q:退出less界面
head/tail¶
-
作用:看文件开头或结尾
-
常见用法:
head file.txt # 显示文件开头,默认前10行 tail file.txt # 显示文件结尾,默认最后10行 head -n 20 file.txt # 显示前20行,-n代表自定义行数 tail -n 30 file.txt # 显示最后30行,-n表示自定义行数 tail -f logfile.txt # 先输出最后10行然后持续跟踪输出,-f用于持续跟踪输出,可以用于查看log,Ctrl+C退出tail -f
grep¶
-
作用:按关键词搜索文本
-
常见用法:
grep "main" file.txt # 默认用法 grep -n "main" file.txt # 显示file.txt中有“main”的行和行号,-H强制显示文件路径 grep -r "TODO" folder/ #递归搜索folder文件夹中所有带“TODO”的行,输出会显示文件路径,-h强制隐藏文件路径 grep -i "error" log.txt # 忽略大小写搜索log.txt里的“error”
find¶
-
作用:按条件查找文件
-
常见用法:
find . -name "*.java" # 找到从当前文件夹开始名字带".java"的文件然后输出文件路径,"."代表从当前文件夹开始,它可以替换成其他起始位置(如果上级的目录要写绝对路径),-name是查找条件 find . -name "Makefile" # 从当前文件夹开始找到叫"Makefile"的文件,这里和grep不同,无需-r就能递归查找 find . -type d # 查找当前文件夹开始下的文件夹 find . -type f # 查找当前文件夹开始下的普通文件
重定向和管道(redirection & pipe)¶
">"输出重定向¶
-
作用:把命令输出写到文件里,覆盖原内容。
-
常见用法:
ls > files.txt # 把ls输出写到files.txt,若原来有内容则会覆盖;终端不会有输出
">>"追加重定向¶
-
作用:把输出追加到文件末尾,不覆盖原内容。
-
常见用法:
echo "new line" >> files.txt # 在files.txt原本的文本末尾加一行"new line",echo是用来打印文本的
"<" 输入重定向¶
-
作用:将文件作为命令输入
-
常见用法:
program < input.txt # 将input.txt的内容输入program运行,比如program是计算两数之和,input.txt是3和5,那执行该命令可以不用在终端手动输数字就能得到计算结果8 - Tips:输入、输出重定向可以一起用
program < input.txt > output.txt # 输入来自 input.txt, 输出写入 output.txt
"|"管道¶
-
作用:将左边命令的输出,直接作为右边命令的输入
-
常见用法:
find . -name "*.java" | less # 找所有 Java 文件并分页 cat log.txt | grep error # 查找包含 error 的日志 -
Tips: 管道可以连续使用
- 例子:
ls | grep ".java" | wc -l # 输出当前目录 java 文件数量 - 流程:
ls 列出文件 ↓ grep 只保留 .java ↓ wc -l 统计行数 # wc即word count,默认输出"行数 单词数 字节数 文件名", -l表示显示行数,-w显示单词数,-c显示字节数
- 例子:
常见符号¶
.- 当前目录..- 父目录~- home目录/- 根目录