Skip to content

08 文件与目录管理

目录堆栈(Stack)

是经常切换长路径工作目录者的福音!!! 参考:https://wangdoc.com/bash/stack

查看文件夹占用空间

bash
du -sh <path/to/directory>

系统临时文件

它们在 /tmp 目录下,用于存储临时文件。这些文件在系统重启后会被清空。 研究一下它们存在的时间

第一天

binzz@C7VF:~$ ls /tmp --time=birth -hl
总计 48K
-rw------- 1 binzz binzz    0  6月 15 09:46 gdm3-config-err-OwhaKC
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-bluetooth.service-p7DY4c
drwx------ 3 root  root  4.0K  6月 15 09:54 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-bolt.service-BFWdqY
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-colord.service-oS8vRK
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-ModemManager.service-7JyE4N
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-polkit.service-nSajQ9
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-power-profiles-daemon.service-TFXKF1
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-switcheroo-control.service-sd4YET
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-logind.service-liIiCc
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-oomd.service-jBSHL0
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-resolved.service-QbV5ba
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-timesyncd.service-vB8QOs
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-upower.service-8a3MZE
binzz@C7VF:~$ ls /tmp  -hl
总计 48K
-rw------- 1 binzz binzz    0  6月 15 09:46 gdm3-config-err-OwhaKC
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-bluetooth.service-p7DY4c
drwx------ 3 root  root  4.0K  6月 15 09:54 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-bolt.service-BFWdqY
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-colord.service-oS8vRK
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-ModemManager.service-7JyE4N
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-polkit.service-nSajQ9
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-power-profiles-daemon.service-TFXKF1
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-switcheroo-control.service-sd4YET
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-logind.service-liIiCc
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-oomd.service-jBSHL0
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-resolved.service-QbV5ba
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-systemd-timesyncd.service-vB8QOs
drwx------ 3 root  root  4.0K  6月 15 09:45 systemd-private-85fb8d26877a485e9e0dfbca84148f4c-upower.service-8a3MZE
binzz@C7VF:~$

常见文件操作

市面上的教程已经介绍得很完备了,我只进行补充,或者讲一些容易弄错的地方。

复制目录

bash
cp -r <source_dir> <dest_dir>

假设:<source_dir>可以表示为/dirname1/basename1。那么:

  • <dest_dir>不存在时,复制后得到的新目录到底是<dest_dir>本身(在<dest_dir>看到的是<source_dir>目录下的内容)。
  • <dest_dir>存在时,复制后得到的新目录是<dest_dir>/basename1(在<dest_dir>看到的是名为basename1的目录)。

文件传输scp

scp命令基于SSH协议,用于在本地和远程主机之间传输文件。

username@remote中,username是远程主机的用户名,remote是远程主机的IP地址。执行scp命令时,需要输入远程主机的密码。

上传

bash
scp /local/path/to/file username@remote:/path/to/file

下载

bash
scp username@remote:/path/to/file /local/path/to/file

错误提示

bash
binzz@MSI713:~$ scp install_yolo_librealsense.sh binzz@192.168.49.88:/home/binzz/Desktop
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:zdwcD7PwaIn8P4rZVzVJZA3xq96gLv1viRsLlElTomA.
Please contact your system administrator.
Add correct host key in /home/binzz/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/binzz/.ssh/known_hosts:3
  remove with:
  ssh-keygen -f '/home/binzz/.ssh/known_hosts' -R '192.168.49.88'
Host key for 192.168.49.88 has changed and you have requested strict checking.
Host key verification failed.
scp: Connection closed
binzz@MSI713:~$

这个IP的主机的SSH公钥发生了变化,有一种原因是这个主机被重新安装了系统。当然,不管是什么原因导致的公钥变化,都可以按这个报错提示,执行:、

bash
ssh-keygen -f '/home/binzz/.ssh/known_hosts' -R '192.168.49.88'

来删除旧的公钥,然后再次执行scp命令,即可解决这个报错。

压缩与解压 tar

归档实用程序。 通常与压缩方法结合使用,例如 gzipbzip2。 更多信息:https://www.gnu.org/software/tar/manual/tar.html。

压缩

  • 创建存档并将其写入文件:
    bash
    tar - cf 目标文件.tar 路径/到/文件1 路径/到/文件2 ...
  • 创建一个 gzip 压缩文件并将其写入文件:
    bash
    tar - czf 目标文件.tar.gz 路径/到/文件1 路径/到/文件2 ...
  • 使用相对路径从目录创建一个 gzip 压缩文件:
    bash
    tar - czf 目标文件.tar.gz --directory 路径/到/目录 .
  • 创建压缩存档并将其写入文件,使用文件扩展名自动确定压缩程序:
    bash
    tar - caf 目标文件.tar.xz 路径/到/文件1 路径/到/文件2 ...

解压

以下操作,解压后压缩包依然存在。

  • 解压到 当前目录/文件名目录中:
    bash
    tar -xvf 文件名.tar[.gz|.bz2|.xz]
  • 解压到目标目录中:
    bash
    tar -xf 文件名.tar[.gz|.bz2|.xz] --directory 目标目录

非解压式读取

  • 详细列出 tar 文件的内容:
    bash
    tar - tvf 源文件.tar
  • 从存档文件中提取与模式匹配的文件:
    bash
    tar - xf 源文件.tar --wildcards "*.html"

回收站

Linux本身没有直接支持回收站的功能,可以通过trash-cli工具来实现。当然可以通过改变rm命令的行为来实现,但个人认为,最好不要改变rm这样系统的内置命令。

bash
sudo apt install trash-cli

移动到回收站

bash
trash path/to/file

列出回收站中所有的文件

bash
trash-list

会显示文件原路径,示例:

bash
username@DeviceName:~$ trash-list
2025-04-03 21:31:55 /home/username/sources.list
2025-04-03 21:31:54 /home/username/source.tar.gz

还原

  1. 还原回收站中的某个文件,或者原目录是所给目录的文件
    bash
    trash-restore original/path/to/file/or/directory
  2. 还原原目录在当前目录下的文件
    bash
    trash-restore
    示例:
    bash
    username@DeviceName:~$ trash-restore
    No files trashed from current dir ('/home/username')

永久删除

  1. 永久删除回收站中的某个文件,或者目录是所给目录的文件
    bash
    trash-rm path/to/file/or/directory
  2. 永久删除匹配所给正则表达式(Regex)的文件
    bash
    trash-rm <Regex>
  3. 永久删除回收站中的所有文件
    bash
    trash-empty
  4. 永久删除回收站中早于10天前的文件
    bash
    trash-empty 10