Skip to content

Commit 7d74f7f

Browse files
committed
Ch03: Move du, ncdu, tree from Ch05
1 parent a6a3650 commit 7d74f7f

File tree

2 files changed

+81
-76
lines changed

2 files changed

+81
-76
lines changed

docs/Ch03/index.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,47 @@ Ubuntu 官方源位于国外,往往会有速度与延迟上的限制,可以
488488

489489
在 Linux 在进行操作文件与目录是使用 Linux 最基础的一个技能。不像在 Windows 和 macOS 下有图形化界面,拖拽文件即可完成文件的移动,很容易管理文件与目录,Linux 的命令行操作虽然繁琐一些,但一旦上手,就可以通过命令与参数的组合完成通过图形化界面难以实现或者无法实现的功能。
490490

491+
### 查看文件夹内容 {#ls}
492+
493+
[第二章](../Ch02/index.md)已经介绍过 `ls` 的基本用法,这里再补充一些常用的选项。
494+
495+
```console
496+
$ # -l 参数会以列表的形式输出文件的详细信息
497+
$ ls -l [DIRECTORY]
498+
$ # -a 参数会显示所有文件,包括隐藏文件(以 . 开头的文件)
499+
$ ls -a [DIRECTORY]
500+
$ # -h 参数会以人类可读的方式显示文件大小,例如 1K、234M、2G 等
501+
$ ls -h [DIRECTORY]
502+
```
503+
504+
!!! example "ls 示例"
505+
506+
* 以列表的形式显示当前目录下的所有文件(包括隐藏文件)
507+
508+
```console
509+
$ ls -la
510+
```
511+
512+
* 以人类可读的方式显示当前目录下的所有文件(包括隐藏文件)的详细信息
513+
514+
```console
515+
$ ls -lha
516+
```
517+
518+
!!! tip "tree"
519+
520+
`tree` 命令可以以树状图的形式显示目录结构,使用前需要先安装:
521+
522+
```console
523+
$ sudo apt install tree
524+
```
525+
526+
使用方法:
527+
528+
```console
529+
$ tree [DIRECTORY]
530+
```
531+
491532
### 查看文件内容 {#view}
492533

493534
#### cat {#cat}
@@ -836,6 +877,46 @@ $ find [OPTION] PATH [EXPRESSION]
836877
(以下省略)
837878
```
838879

880+
### 统计文件或文件夹大小 {#du}
881+
882+
`du` 命令可以统计文件和目录的大小。目录的大小是无法直接获取的,需要统计里面所有的文件和子目录的大小之后加和才能得到。`du` 命令的输出类似这样:
883+
884+
```console
885+
$ du -h /etc/
886+
4.0K /etc/initramfs-tools/hooks
887+
8.0K /etc/initramfs-tools/conf.d
888+
4.0K /etc/initramfs-tools/scripts/local-premount
889+
4.0K /etc/initramfs-tools/scripts/nfs-premount
890+
(中间内容省略)
891+
4.0K /etc/initramfs-tools/scripts/panic
892+
4.0K /etc/initramfs-tools/scripts/local-top
893+
44K /etc/initramfs-tools/scripts
894+
72K /etc/initramfs-tools
895+
12K /etc/udisks2
896+
16K /etc/fonts/conf.d
897+
60K /etc/fonts/conf.avail
898+
84K /etc/fonts
899+
```
900+
901+
由于前面说到的原因,`du` 需要先递归进入子目录,处理完其中所有的项目之后,才能回到上层目录并显示上层目录的总大小。
902+
903+
此外,`ncdu` 命令可以以图形化和交互式的方式显示目录的内容和大小,并可以用左右方向键浏览目录,类似 Windows 的文件资源管理器。这非常便于观察哪个目录占用了较大的磁盘空间。按 `d` 可以删除当前选中的文件或目录,按 `q` 退出。
904+
905+
```plain
906+
ncdu 1.18 ~ Use the arrow keys to navigate, press ? for help
907+
--- /home/example/path -------------------------------------
908+
53.1 MiB [##########] /main
909+
45.4 MiB [######## ] Contents-riscv64.gz
910+
40.6 MiB [####### ] /universe
911+
580.0 KiB [ ] /multiverse
912+
44.0 KiB [ ] /restricted
913+
8.0 KiB [ ] InRelease
914+
8.0 KiB [ ] Release
915+
4.0 KiB [ ] Release.gpg
916+
917+
Total disk usage: 139.7 MiB Apparent size: 139.6 MiB Items: 29
918+
```
919+
839920
### 模式匹配 {#pattern}
840921

841922
许多现代的 shell 都支持一定程度的模式匹配。举个例子,bash 的匹配模式被称为 [glob](https://mywiki.wooledge.org/glob),支持的操作如下:

docs/Ch05/index.md

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -455,82 +455,6 @@ graph LR
455455
- `/var/run`:存储程序运行时的数据(部分发行版会将该目录符号链接到 `/run` 目录)。
456456
- `/var/spool`:存储「等待进一步处理」的程序数据。
457457

458-
## 列出文件系统项目 {#list-objects}
459-
460-
经常我们需要在 Shell 中列出某个目录下的项目(子目录和文件)。`ls` 命令是最常见的用来列出文件系统项目的命令,`ls -la` 则可以显示隐藏文件(`-a`)和更详细的信息(`-l`)。但是,除非添加 `-R` 参数,`ls` 只能显示某个目录下的文件和子目录,并不会深入子目录内部继续检查。下面介绍几个命令,常用于获取这些信息。
461-
462-
### `tree` 命令 {#cmd-tree}
463-
464-
`tree` 命令可以以树状图的形式显示目录的内容。它会递归进入子目录,显示所有的文件和目录:
465-
466-
```text
467-
$ tree /etc/
468-
/etc/
469-
├── NetworkManager
470-
│   ├── NetworkManager.conf
471-
│   ├── conf.d
472-
│   ├── dispatcher.d
473-
│   │   ├── no-wait.d
474-
│   │   ├── pre-down.d
475-
│   │   └── pre-up.d
476-
│   ├── dnsmasq-shared.d
477-
│   ├── dnsmasq.d
478-
│   └── system-connections [error opening dir]
479-
├── UPower
480-
│   └── UPower.conf
481-
├── X11
482-
│   ├── tigervnc
483-
│   │   └── Xsession
484-
│   └── xinit
485-
│   ├── xinitrc
486-
│   ├── xinitrc.d
487-
│   │   ├── 40-libcanberra-gtk-module.sh
488-
(以下省略)
489-
```
490-
491-
### `du` 命令 {#cmd-du}
492-
493-
`du` 命令可以统计文件和目录的大小。目录的大小是无法直接获取的,需要统计里面所有的文件和子目录的大小之后加和才能得到。`du` 命令的输出类似这样:
494-
495-
```shell
496-
$ du -h /etc/
497-
4.0K /etc/initramfs-tools/hooks
498-
8.0K /etc/initramfs-tools/conf.d
499-
4.0K /etc/initramfs-tools/scripts/local-premount
500-
4.0K /etc/initramfs-tools/scripts/nfs-premount
501-
(中间内容省略)
502-
4.0K /etc/initramfs-tools/scripts/panic
503-
4.0K /etc/initramfs-tools/scripts/local-top
504-
44K /etc/initramfs-tools/scripts
505-
72K /etc/initramfs-tools
506-
12K /etc/udisks2
507-
16K /etc/fonts/conf.d
508-
60K /etc/fonts/conf.avail
509-
84K /etc/fonts
510-
```
511-
512-
由于前面说到的原因,`du` 需要先递归进入子目录,处理完其中所有的项目之后,才能回到上层目录并显示上层目录的总大小。类似 `ls -h`,这里的 `-h` 表示以人类可读的方式进行显示,`-b` 则可以显示字节数,`-a` 可以使得输出包含文件的大小(默认只显示各层级目录的大小)。
513-
514-
### `ncdu` 命令 {#cmd-ncdu}
515-
516-
`ncdu` 命令可以以图形化和交互式的方式显示目录的内容和大小,并可以用左右方向键浏览目录,类似 Windows 的文件资源管理器。这非常便于观察哪个目录占用了较大的磁盘空间。
517-
518-
```plain
519-
ncdu 1.18 ~ Use the arrow keys to navigate, press ? for help
520-
--- /home/xxxxxx(略去) -----------------
521-
/..
522-
53.1 MiB [##########] /main
523-
45.4 MiB [######## ] Contents-riscv64.gz
524-
40.6 MiB [####### ] /universe
525-
580.0 KiB [ ] /multiverse
526-
44.0 KiB [ ] /restricted
527-
8.0 KiB [ ] InRelease
528-
8.0 KiB [ ] Release
529-
4.0 KiB [ ] Release.gpg
530-
531-
Total disk usage: 139.7 MiB Apparent size: 139.6 MiB Items: 29
532-
```
533-
534458
## 思考题 {#questions}
535459

536460
!!! question "nobody 用户"

0 commit comments

Comments
 (0)