定义:给源文件在指定位置创建一个软连接(软连接本质就是用来保存源文件绝对地址的一个文件, 可以理解为windows中的快捷方式)
注意: **源文件路径必须写绝对路径**如果删除或者移动源文件,软连接会直接无效
ln -s TARGET, LINK_NAME :创建软连接。 ln -s 后面先加上目标文件的绝对路径, 再加上你给这个软连接新取的名字。
举例:ln -s /root/f/t/u/geci.txt Love
分析: ln -s + /root/f/t/u/geci.txt (绝对路径) + (我给软连接取的名字 Love)
移动到f/t/y中:mv Love f/t/y 移动回去 mv f/t/y/Love ~
删除软连接的方法: unlink link name
rm link name
定义:硬连接是将源文件内容复制一份,不是储存源文件地址。源文件删除,硬连接仍然可用,源文件和硬连接有改动的话会同步改动。
ln 绝对路径 命名 : ln /root//f//t//u/geci.txt Hlove
解释: ln + 目标的绝对路径(/root//f//t//u/geci.txt)+ Hlove (自己的命名)
1. cat shell编程.md :直接打开shell编程这个文件内容
2. cat shell编程.md -n : 打开文件内容时显示每一行的行号
3. head -6 shell编程.md : 展示文件前6行内容
4. tail -6 shell编程.md : 展现文件尾部6行
5. cat shell编程.md|head -6, cat shell编程.md|tail -30, ls -lt|head -6 :
| 是管道符号,后面接head -6, tail -6
less 文件 - 按页显示文件内容(通过快捷键控制内容显示过程; 文件内容不会打印到shell/终端里)
less -N 文件 - 按页显示文件内容,每次翻页的时候翻N行
more 文件 - 按页显示文件内容(通过快捷键控制内容显示过程; 文件内容会打印到shell/终端里)
more -N 文件 - 按页显示文件内容,每次翻页的时候翻N行
```
快捷键:
- 按 j 向下一行
- 按 k 向上一行
- 按 f 向下翻一页
- 按b 向上翻一页
- 按 g 到全文开头
- 按 G 到全文结尾
- 按 Q 退出
sort - 从小到大排序(将一行内容作为一个字符串,按字符串大小对应内容进行排序,默认不区分大小写)
举例: cat 3.txt|sort :将3.txt 的内容按照字符串从小到大排序
sort的参数:
-r - 逆序
-nk 1 - 数值大小排序
-nk 2 - 字符大小排序(默认)
cat a.txt|sort -nk 1 # 对a.txt的文件内容按数字大小从小到大排序
cat a.txt|sort -rnk 1 # 对a.txt的文件内容按数字大小从大到小排序
cat a.txt|sort -nk 2 # 对a.txt的文件内容按字符大小从小到大排序(默认)
cat a.txt|sort -rnk 2 # 对a.txt的文件内容按字符大小从大到小排序
cat 1.txt|sort -nk 1 (数字从小到大)
5 dog
12 apple
32 elegent
233 banana
4433 cat
555334 fat
cat 1.txt|sort -nk 2 (字符排序 首字母)
12 apple
233 banana
32 elegent
4433 cat
555334 fat
5 dog
- 只能将紧挨着的相同行去掉重复的(如果需要去掉所有重复的行,先排序将相同的行放到一起)
```shell
cat a.txt|uniq # 去掉a.txt文件内容中相邻重复的行
cat a.txt|sort|uniq # 去掉a.txt文件内容中所有重复的行
uniq的参数
-c - 重复次数
举例:cat 1.txt|uniq (直接使用只会去重相邻的行)
12 apple
233 banana
4433 cat
5 dog
5 dog (会把这行去除)
32 elegent
555334 fat
如何去除不相邻的行呢?
先进行排序操作,再进行去重: cat 1.txt|sort|uniq
cat 1.txt|sort|uniq -c : -c 是count 计数 告诉我每个词出现的次数
ls -lh | awk '{print $4,$2}' : 取第四列和第二列(取多列就加逗号隔开)
history |awk '{print$3,$4}'|sort|uniq -c|sort -rnk 1|head -3
history |awk '{print $3,$4}' |sort|uniq -c|sort -r -nk1|head -n3 > b.txt : 将指令结果放在b.txt 文件中
history |awk '{print $3,$4}' |sort|uniq -c|sort -r -nk1|head -n3 >> b.txt :
>> 和 > 的区别是 如果源文件有内容的话 , > 会删除源文件内容, 再加入新的数据
>> 则是 将新的数据直接放在源文件内容之后
wc -c/-w/-l 文件地址 - 统计指定文件中字符/单词/行的数量 (注意:统计字符数量的数,会比实际的字符数多1,多的\0这个字符串结束标志)
有打印结果的指令 | wc -c/-w/-l
wc - word count
wc -c 1.txt : 统计bytes 字节数
wc -w 1.txt 统计字数 words
wc -l 1.txt 统计行数lines
ls -lh | wc -l : 也可以作为管道使用
###### grep - 找内容
a. grep 内容 文件地址 - 在指定文件中查找指定内容(返回文件中所有包含指定内容的行)
```shell
grep you a.txt # 获取a.txt中包含you的所有的行
grep的参数:
-n - 显示结果的时候显示行号
-i - 查找内容的时候忽略大小写 i for ignore case
-E - 按正则表达式进行匹配
使用方法: grep -E '正则表达式' 文件
注意: Linux操作系统中正则表达式不支持:\d,\D,\w,\W,\s,\S,\b,\B; 其他语法都支持
-v - 不包含所选字段 grep you a.txt -v # 获取a.txt中不包含you的所有的行
```
b. 执行有打印结果的指令 |grep 内容 - 在指令执行结果中查找指定内容
c. grep -r 内容 文件夹地址 -在指定文件夹中所有的文件中查找指定内容
find 文件夹路径 -name 文件名 - 在指定文件夹下按文件名找指定文件
```shell
# 找指定文件名
find dir1 -name 'test1.py' # 在文件夹dir1找名字是test1.py的文件
find dir1 -name '*.txt' # 在文件夹dir1找后缀是txt的所有文件
find dir1 -name 'test*.txt' # 在文件夹dir1下找已test开头的.txt文件
find dir1 -name 'test*' #在文件夹dir1下找已test开头的文件
find dir1 -name '*c.txt' #
find dir1 -name '*c*.*' #在文件夹dir1下找到文件名中带有c的文件
```
find 文件夹路径 -size +/-文件大小 - 在指定文件夹下找文件大小满足条件的所有的内容(包含文件和文件夹)
```shell
find dir1 -size +4k # 查找在文件夹dir1中所有大于4k的文件
find dir1 -size -4k # 查找在文件夹dir1中所有小于4k的文件
find dir1 -size +5k -size -10k # 查找在文件夹dir1中所有大于5k并且小于10k的文件(文件大小如果是小数,算的时候向上取整)
find dir1 -size +4k -name '*.txt' # 查找在文件夹dir1中所有大于4k的txt文件
```
在指定文件夹中找出txt 文件的个数
find ~ -name '*.txt'|wc -l : 先找到根目录下所有txt文件,然后计算行数
严谨点可以去重:find ~ -name '*.txt'|sort|uniq|wc -l
find ~ -name '*.txt'|sort|uniq|cat -n 这样写可以在前面加上行号
ls |grep .txt| wc -l :也可以