Linux学习笔记(2)

164 阅读7分钟

1. 文件系统

  1. df : 列出文件系统的磁盘使用量
root@maoxh-pc:/home/maoxh# df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            3.9G     0  3.9G    0% /dev
tmpfs           787M  1.9M  785M    1% /run
/dev/sda2       457G   15G  420G    4% /
tmpfs           3.9G  4.0K  3.9G    1% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/loop0      128K  128K     0  100% /snap/bare/5
/dev/loop2       66M   66M     0  100% /snap/gtk-common-themes/1519
/dev/loop1      249M  249M     0  100% /snap/gnome-3-38-2004/99
/dev/loop4       55M   55M     0  100% /snap/snap-store/558
/dev/sda1       511M  5.3M  506M    2% /boot/efi
tmpfs           787M   52K  787M    1% /run/user/1000
/dev/loop8       82M   82M     0  100% /snap/gtk-common-themes/1534
tmpfs           787M   20K  787M    1% /run/user/125
/dev/loop9       45M   45M     0  100% /snap/snapd/15904
/dev/loop6       62M   62M     0  100% /snap/core20/1494
/dev/loop7      255M  255M     0  100% /snap/gnome-3-38-2004/106
/dev/loop10      62M   62M     0  100% /snap/core20/1518
/dev/loop3       47M   47M     0  100% /snap/snapd/16010

  1. du : 常用与查看目录所占容量
root@maoxh-pc:/home/maoxh# du -h /data/nacos
122M    /data/nacos/target
101M    /data/nacos/logs
8.0K    /data/nacos/data/protocol/raft/naming_service_metadata/meta-data
12K     /data/nacos/data/protocol/raft/naming_service_metadata/snapshot/snapshot_3
16K     /data/nacos/data/protocol/raft/naming_service_metadata/snapshot
261M    /data/nacos/data/protocol/raft/naming_service_metadata/log
261M    /data/nacos/data/protocol/raft/naming_service_metadata
8.0K    /data/nacos/data/protocol/raft/naming_instance_metadata/meta-data
12K     /data/nacos/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_3
16K     /data/nacos/data/protocol/raft/naming_instance_metadata/snapshot
261M    /data/nacos/data/protocol/raft/naming_instance_metadata/log
261M    /data/nacos/data/protocol/raft/naming_instance_metadata
8.0K    /data/nacos/data/protocol/raft/naming_persistent_service_v2/meta-data
12K     /data/nacos/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_3
16K     /data/nacos/data/protocol/raft/naming_persistent_service_v2/snapshot
261M    /data/nacos/data/protocol/raft/naming_persistent_service_v2/log
261M    /data/nacos/data/protocol/raft/naming_persistent_service_v2
781M    /data/nacos/data/protocol/raft
781M    /data/nacos/data/protocol
4.0K    /data/nacos/data/loader
4.0K    /data/nacos/data/naming/data
8.0K    /data/nacos/data/naming
4.0K    /data/nacos/data/tps
4.0K    /data/nacos/data/derby-data/tmp
2.2M    /data/nacos/data/derby-data/seg0
1.1M    /data/nacos/data/derby-data/log
3.3M    /data/nacos/data/derby-data
784M    /data/nacos/data
92K     /data/nacos/conf
2.4M    /data/nacos/bin/logs
4.0K    /data/nacos/bin/work/Tomcat/localhost/nacos
8.0K    /data/nacos/bin/work/Tomcat/localhost
12K     /data/nacos/bin/work/Tomcat
16K     /data/nacos/bin/work
2.4M    /data/nacos/bin
1009M   /data/nacos

2. vi编辑器

vi一共有三种模式,分别是

  • 一般指令模式(command mode)

    以vi打开一个文件,直接进入指令模式。一般指令模式下无法进行编辑。需要按下i,I,o,O,a,A,r,R等任何一个字母可以进入编辑模式。

  • 编辑模式(insert mode)

    编辑模式按esc可以退出编辑模式进入一般指令模式

  • 命令行命令模式(command-line mode)

    在一般模式下,输入:/?三个中的任何一个,可以进入命令行模式

一般模式下的相关操作
h 或 向左方向键( ←)光标向左移动一个字符
j 或 向下方向键( ↓)光标向下移动一个字符
k 或 向上方向键( ↑)光标向上移动一个字符
l 或 向右方向键( →)光标向右移动一个字符
如果想要进行 多次移动的话, 例如向下移动 30 列, 可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数( 数字) 后, 按下动作即可!
[Ctrl] + [f]屏幕“向下”移动一页, 相当于 [Page Down]按 键 ( 常用)
[Ctrl] + [b]屏幕“向上”移动一页, 相当于 [Page Up] 按键 ( 常用)
[Ctrl] + [d]屏幕“向下”移动半页
[Ctrl] + [u]屏幕“向上”移动半页
+光标移动到非空白字符的下一列
-光标移动到非空白字符的上一列
0 或功能键[Home]这是数字“ 0 ”: 移动到这一列的最前面字符处 ( 常用)
$ 或功能键[End]移动到这一列的最后面字符处( 常用)
H光标移动到这个屏幕的最上方那一列的第一 个字符
M光标移动到这个屏幕的中央那一列的第一个 字符
L光标移动到这个屏幕的最下方那一列的第一 个字符
G移动到这个文件的最后一列( 常用)
nGn 为数字。 移动到这个文件的第 n 列。 例如 20G 则会移动到这个文件的第 20 列( 可配合 :set nu)
gg移动到这个文件的第一列, 相当于 1G 啊! ( 常用)
搜寻与取代
/word向光标之下寻找一个名称为 word 的字串。 例 如要在文件内搜寻 vbird 这个字串, 就输入 /vbird 即可! ( 常用)
?word向光标之上寻找一个字串名称为 word 的字 串。
n这个 n 是英文按键。 代表“重复前一个搜 寻的动作”。 举例来说, 如果刚刚我们执 行 /vbird 去向下搜寻 vbird 这个字串, 则按下 n 后, 会向下继续搜寻下一个名称为 vbird 的 字串。 如果是执行 ?vbird 的话, 那么按下 n 则会向上继续搜寻名称为 vbird 的字串!
N这个 N 是英文按键。 与 n 刚好相反, 为“反 向”进行前一个搜寻动作。 例如 /vbird 后, 按 下 N 则表示“向上”搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助 的! 可以让你重复的找到一些你搜寻的 关键字!
:n1,n2s/word1/word2/gn1 与 n2 为数字。 在第 n1 与 n2 列之间寻找 word1 这个字串, 并将该字串取代为 word2 ! 举例来说, 在 100 到 200 列之间搜寻 vbird 并取代为 VBIRD 则: “:100,200s/vbird/VBIRD/g”。 ( 常用)
:1,$s/word1/word2/g从第一列到最后一列寻找 word1 字串, 并将 该字串取代为 word2 ! ( 常用)
:1,$s/word1/word2/gc从第一列到最后一列寻找 word1 字串, 并将 该字串取代为 word2 ! 且在取代前显示提示 字符给使用者确认 ( confirm) 是否需要取 代! ( 常用)
删除、 复制与贴上
x, X在一列字当中, x 为向后删除一个字符 ( 相 当于 [del] 按键) , X 为向前删除一个字符 ( 相当于 [backspace] 亦即是倒退键) ( 常 用)
nxn 为数字, 连续向后删除 n 个字符。 举例来 说, 我要连续删除 10 个字符, “10x”。
dd删除光标所在的那一整列( 常用)
nddn 为数字。 删除光标所在的向下 n 列, 例如 20dd 则是删除 20 列 ( 常用)
d0那个是数字的 0 , 删除光标所在处, 到该列 的最前面一个字符
yy复制光标所在的那一列( 常用)
nyyn 为数字。 复制光标所在的向下 n 列, 例如 20yy 则是复制 20 列( 常用)
y1G复制光标所在列到第一列的所有数据
yG复制光标所在列到最后一列的所有数据
y0复制光标所在的那个字符到该列行首的所有 数据
y$复制光标所在的那个字符到该列行尾的所有 数据
p, Pp 为将已复制的数据在光标下一列贴上, P 则 为贴在光标上一列! 举例来说, 我目前光标 在第 20 列, 且已经复制了 10 列数据。 则按 下 p 后, 那 10 列数据会贴在原本的 20 列之 后, 亦即由 21 列开始贴。 但如果是按下 P 呢? 那么原本的第 20 列会被推到变成 30 列。 ( 常用)
J将光标所在列与下一列的数据结合成同一列
u复原前一个动作。相当于撤销 ( 常用)
[Ctrl]+r重做上一个动作。相当于反撤销 ( 常用)
.不要怀疑! 这就是小数点! 意思是重复前一 个动作的意思。 如果你想要重复删除、 重复 贴上等等动作, 按下小数点“.”就好了! ( 常 用)
命令行界面的储存、 离开等 指令
:w将编辑的数据写入硬盘文件中( 常用)
:w!若文件属性为“只读”时, 强制写入该文件。 不过, 到底能 不能写入, 还是跟你对该文件的文件权限有关啊!
:q离开 vi ( 常用)
:q!若曾修改过文件, 又不想储存, 使用 ! 为强制离开不储存 盘案。
注意一下啊, 那个惊叹号 ( !) 在 vi 当中, 常常具 有“强制”的意思~
:wq储存后离开, 若为 :wq! 则为强制储存后离开 ( 常用)
ZZ这是大写的 Z 喔! 若文件没有更动, 则不储存离开, 若 文件已经被更动过, 则储存后离开!
:w [filename]将编辑的数据储存成另一个文件( 类似另存新文件)
:r [filename]在编辑的数据中, 读入另一个文件的数据。 亦即将 “filename” 这个文件内容加到光标所在列后面
:n1,n2 w [filename]将 n1 到 n2 的内容储存成 filename 这个文件。
:! command暂时离开 vi 到命令行界面下执行 command 的显示结 果! 例如 “:! ls /home”即可在 vi 当中察看 /home 下面以 ls 输出的文件信息!
vim 环境的变更
:set nu显示行号, 设置之后, 会在每一列的字首显示该列的行 号
:set nonu与 set nu 相反, 为取消行号!

3. 重定向

  • 标准输入(stdin):代码为0,使用< 或者 <<

  • 标准输出(stdout):代码为1,使用> 或者 >>

    以下示例,将ll的输出内容 重定向到当前文件夹的ll.txt文件中,当文件不存在会自动创建。当文件存在,系统会自动清空,然后写入文件。也可以使用>>来进行追加内容

    maoxh@maoxh-pc:/data$ ll . > ./ll.txt
    maoxh@maoxh-pc:/data$ cat ll.txt 
    总用量 269300
    drwxrwxrwx  6 root  root       4096 712 21:47 ./
    drwxr-xr-x 25 root  root       4096 619 17:22 ../
    -rw-rw-r--  1 maoxh maoxh      7745 5月  26 11:13 dub-declare-nb-service.sh
    drwxr-xr-x  4 www   avahi      4096 712 11:06 frp_0.42.0_linux_386/
    -rw-rw-r--  1 maoxh maoxh   9159907 5月  15 20:19 frp_0.42.0_linux_386.tar.gz
    drwxr-xr-x  8 10143 10143      4096 426 14:03 jdk1.8.0_333/
    -rw-rw-r--  1 maoxh maoxh 148003421 5月  19 21:59 jdk-8u333-linux-x64.tar.gz
    -rw-rw-r--  1 maoxh maoxh         0 7月  12 21:47 ll.txt
    drwxr-xr-x  7 root  root       4096 519 22:24 nacos/
    -rw-rw-r--  1 maoxh maoxh 117482791 5月  19 22:23 nacos-server-2.0.4.zip
    drwxr-xr-x  9 www   www        4096 526 13:56 nginx-1.21.6/
    -rw-rw-r--  1 maoxh maoxh   1073364 5月  26 13:53 nginx-1.21.6.tar.gz
    maoxh@maoxh-pc:/data$ 
    
  • 标准错误输出(stderr):代码为2,使用2> 或者 2>>

    1> : 以覆盖的方法将“正确的数据”输出到指定的文件或设备上
    1>>: 以累加的方法将“正确的数据”输出到指定的文件或设备上
    2> : 以覆盖的方法将“错误的数据”输出到指定的文件或设备上
    2>>: 以累加的方法将“错误的数据”输出到指定的文件或设备上
    

    由于权限问题,进行find的时候,会显示权限不足,以下案例将结果输出到right.txt,然后将错误信息输入到error.txt,这样屏幕上 就看不到烦恼的错误信息了

    maoxh@maoxh-pc:/data$ find / -name .bashrc
    find: ‘/boot/efi’: 权限不够
    find: ‘/etc/polkit-1/localauthority’: 权限不够
    /etc/skel/.bashrc
    find: ‘/etc/ssl/private’: 权限不够
    find: ‘/etc/redis’: 权限不够
    find: ‘/etc/cups/ssl’: 权限不够
    ...
    
    maoxh@maoxh-pc:/data$ find / -name .bashrc > right.txt 2>  error.txt
    maoxh@maoxh-pc:/data$ less error.txt 
    maoxh@maoxh-pc:/data$ less right.txt 
    

    如果我们不想要错误信息,也不想展示到屏幕,可以使用/dev/null 垃圾桶黑洞设备,它可以吃掉任何重定向到它的信息。

    maoxh@maoxh-pc:/data$ find / -name .bashrc > right.txt 2>  /dev/null 
    

    如何将错误与正确数据,输出到同一个文件(以下两种方式都可以)

    maoxh@maoxh-pc:/data$ find / -name .bashrc > right.txt 2>&1
    maoxh@maoxh-pc:/data$ find / -name .bashrc &> right1.txt
    

4. 管道

image.png

管道命令 | ,它用来组合多个命令,以下的案例展示将ls /etc的结果集,输入到less,这样我们能用less的命令来前后翻动信息。

  • 管道命令只处理标准输出(standard output),对于标准错误输出(standard error output)会自动忽略
  • 管道命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。
maoxh@maoxh-pc:/data$ ls /etc/ | less