#Linux系统基础
文件与目录管理
一、常用命令
文件、目录操作 | 命令 | 说明 |
---|---|---|
cd(cd …/ cd ~/ cd/ cd path) | 切换目录 cd ~等于 cd /root | |
ls | 显示目录文件 | |
ls -l 或者 ll | 以详细信息的方式显示目录文件 | |
pwd | 查看当前工作目录 | |
cp (-i -r) | 复制文件或目录 | |
mkdir | 创建目录,可以同时创建多个 | |
mkdir -p | 创建有层次结构的目录 | |
rmdir | 删除目录,只能删除空目录 | |
rmdir -p | 删除有层次结构的目录 | |
mkdir -m 711 test2 | 建立权限为 rwx–x–x 的目录 | |
mv ,mv -i(交互提示) | 移动文件或目录(前后路径不同),重命名(只要前后两个文件名不同) 命令格式为 mv [被移动文件1] [被移动文件2] [...] [本次移动的目的目录] |
|
mv -u | -u :若目标文件已经存在,且 source 比较新,才会更新 (update) | |
rm ,rm -i(交互提示) | 删除文件或目录▲ | |
rm -r | 递归删除(删除目录必选)删除要谨慎▲ | |
rm -f | 强制(force)删除,会覆盖-i选项 | |
rm -rf | 强制删除,无法恢复 | |
\rm -r ./test/ | 忽略系统提示,直接删除 | |
du(du -sh; du -sk;du -sm) | 查看文件或目录的磁盘使用情况 |
- LS、tree命令
命令 | 说明 |
---|---|
ls [option] [file/directory] | 显示指定目录下的所有文件 |
ls | 显示当前目录的所有文件 |
ls -l | 显示目录的详细信息 |
ls -a | 显示包括隐藏文件在内的所有文件 |
ls *.txt | 显示当前目录下所有TXT文件 |
ls /opt/learn | 显示指定目录的所有文件 |
ls -R /opt/ | 列出opt的所有目录及其子目录 |
tree /opt | 用树状结构显示目录及文件 |
- pwd命令:显示当前所在目录
二、执行文件的路径变量 $PATH
$PATH
是一个特殊的环境变量,它定义了系统在查找可执行文件时会搜索的目录列表。当你在命令行输入一个命令(例如 ls
或 python
)时,系统会按照 PATH
变量中列出的目录顺序搜索该命令的可执行文件。有了这个变量的设置,我们在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令
- 当我们在执行一个指令的时候,举例来说
ls
好了,系统会依照 PATH 的设定去每个 PATH 定义的目录下搜寻文件名为 ls 的可执行文件,如果在 PATH 定义的目录中含有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行
输入 echo $PATH
命令,可以查看当前$PATH环境变量的设置
[root@localhost /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
这里列出了当前用户可以执行的指令分别存放在什么地方,如果你的用户权限比较低,会与上述root用户的环境变量值有区别
三、cp命令
[root@study ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
[root@study ~]# cp [options] source1 source2 source3 .... directory
选项与参数:
-a :相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明;(常用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l :进行硬式连结(hard link)的连结档建立,而非复制文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份常用);
-r :递归持续复制,用于目录的复制行为;(常用)
-s :复制成为符号链接文件 (symbolic link),即『快捷方式』文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了。
最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是『目录』才行!
在预设的条件中, cp 的来源目录与目的目录的权限是不同的,目的目录的拥有者通常会是指令操作者本身。
⭐️注意:举例来说, 由于我是 root 的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了。所以在实际的复制文件过程中要特别注意这一点。某些需要特别注意的特殊权限文件, 例如密码文件 (/etc/shadow) 以及一些配置文件,就不能直接以 cp 来复制,而必须要加上 -a
或者是 -p
等等可以完整复制文件权限的选项才行!另外,如果你想要复制文件给其他的使用者, 也必须要注意到文件的权限(包含读、写、执行以及文件拥有者等等), 否则,其他人是无法针对你给予的文件进行修订的动作
hard link和symbolic link的区别
在Linux系统中,硬链接(hard link)和符号链接(symbolic link,也称为软链接)是两种不同的文件链接方式。它们在行为和实现上有明显的区别。以下是硬链接和符号链接之间的主要区别:
1.硬链接(Hard Link)
指向同一文件数据:
- 硬链接是指向同一文件数据块的多个目录项。硬链接和原文件共享相同的inode号和数据块,因此它们完全等同于源文件。
文件删除:
- 只有当所有硬链接被删除后,文件的数据才会被删除。删除其中一个硬链接不会影响其他硬链接或源文件。
不允许跨文件系统:
- 硬链接只能创建在同一个文件系统内,不能跨越不同的文件系统。
不能链接目录:
- 普通用户不能创建指向目录的硬链接(这会破坏文件系统的完整性)。只有超级用户可以在某些情况下创建目录的硬链接。
空间占用:
- 创建硬链接不会占用额外的磁盘空间,因为多个链接共享同一个数据块。
2.符号链接(Symbolic Link)
指向路径:
- 符号链接是一个独立的文件,它包含指向另一个文件或目录的路径。符号链接本身有独立的inode号和数据块。
文件删除:
- 如果删除了符号链接指向的原文件,符号链接将变为悬挂链接(dangling link),指向一个不存在的路径。
允许跨文件系统:
- 符号链接可以跨越不同的文件系统,因为它只是一个包含路径的文件。
可以链接目录:
- 符号链接可以指向目录,因此可以方便地创建指向不同目录的快捷方式。
空间占用:
- 符号链接占用少量的磁盘空间来存储路径信息。
3.创建和管理链接
创建硬链接:
ln source_file hard_link_name
创建符号链接:
ln -s source_file symbolic_link_name
查看链接信息:
使用 ls -l
命令可以查看文件和链接的信息:
ls -l
硬链接示例:
$ ln file1 hardlink1
$ ls -li
12345 -rw-r--r-- 2 user user 100 Jan 1 12:00 file1
12345 -rw-r--r-- 2 user user 100 Jan 1 12:00 hardlink1
在这个例子中,file1
和 hardlink1
共享相同的 inode 号 12345
,表示它们是同一文件的硬链接。
符号链接示例:
$ ln -s file1 symlink1
$ ls -li
12345 -rw-r--r-- 1 user user 100 Jan 1 12:00 file1
12346 lrwxrwxrwx 1 user user 6 Jan 1 12:01 symlink1 -> file1
在这个例子中,symlink1
是一个指向 file1
的符号链接,symlink1
有不同的 inode 号 12346
,表示它是一个独立的文件。
4.总结
- 硬链接 是同一文件的多个目录项,指向相同的inode和数据块,不能跨文件系统,不能链接目录。
- 符号链接 是一个独立的文件,包含指向另一个文件或目录的路径,允许跨文件系统,能够链接目录。
通过理解硬链接和符号链接的区别,你可以根据需要选择适当的链接方式来管理文件和目录。
三、basename和dirname命令
[root@study ~]# basename /etc/sysconfig/network
network <== 很简单!就取得最后的文件名~
[root@study ~]# dirname /etc/sysconfig/network
/etc/sysconfig <== 取得的变成目录名了!