在 Linux 系统的世界里,文件与目录操作是最基础也是最重要的技能之一。无论是系统管理员管理服务器,还是开发者搭建开发环境,亦或是普通用户日常使用 Linux 系统,都离不开对文件和目录的熟练操作。今天,就让我们一同深入学习 Linux 文件与目录操作,轻松掌握这些关键技能。
在深入学习文件与目录操作之前,先来了解一下 Linux 文件系统的基本结构。Linux 采用树形目录结构,以根目录 “/” 为起点,像一棵大树一样向各个分支延伸。根目录下包含了众多重要的子目录,每个子目录都有其特定的用途。
snow@hxstrive:/$ ls bin dev home lib lib64 lost+found mnt proc run snap sys usr boot etc init lib32 libx32 media opt root sbin srv tmp var
比如:
“/bin” 目录存放着二进制可执行文件,系统中的许多常用命令就存放在这里,像我们后面会频繁用到的 “ls”、“cd” 等命令。
“/etc” 目录用于存放系统的配置文件,几乎所有系统服务和应用程序的配置信息都能在这里找到。
“/home” 目录是普通用户的主目录所在地,每个用户在这个目录下都有一个属于自己的文件夹,用于存放个人文件。
“/var” 目录,通常用于存放系统运行过程中不断变化的数据,如日志文件等。
理解这种树形结构,对于我们准确找到所需文件和目录,以及合理组织自己的文件非常有帮助。
“ls” 命令是我们在 Linux 系统中使用频率极高的一个命令,它用于列出指定目录的内容。默认情况下,“ls” 命令只会列出当前目录下的非隐藏文件和目录。例如,在终端中输入 “ls”,系统会立即列出当前目录下的所有文件和目录名称。
snow@hxstrive:/$ ls bin dev home lib lib64 lost+found mnt proc run snap sys usr boot etc init lib32 libx32 media opt root sbin srv tmp var
如果我们想要查看更多详细信息,可以使用 “ls -l” 命令。这个选项会以长格式显示文件和目录的详细信息,包括文件的权限、所有者、大小、修改时间等。例如:
snow@hxstrive:/$ ls -l total 2436 lrwxrwxrwx 1 root root 7 Jan 7 05:35 bin -> usr/bin drwxr-xr-x 2 root root 4096 Apr 18 2022 boot drwxr-xr-x 16 root root 3560 Apr 10 09:43 dev drwxr-xr-x 85 root root 4096 Apr 10 09:43 etc drwxr-xr-x 3 root root 4096 Mar 20 14:41 home -rwxrwxrwx 1 root root 2424984 Mar 5 11:12 init lrwxrwxrwx 1 root root 7 Jan 7 05:35 lib -> usr/lib lrwxrwxrwx 1 root root 9 Jan 7 05:35 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 9 Jan 7 05:35 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 10 Jan 7 05:35 libx32 -> usr/libx32 drwx------ 2 root root 16384 Mar 20 14:28 lost+found drwxr-xr-x 2 root root 4096 Jan 7 05:35 media drwxr-xr-x 8 root root 4096 Mar 20 14:28 mnt ...
第一列表示文件的权限,“d” 开头表示这是一个目录,“-” 开头表示普通文件。接下来的三组字符分别表示所有者、所属组以及其他用户对该文件或目录的权限。第二列的数字表示链接数,第三列是所有者,第四列是所属组,第五列是文件大小,第六列和第七列分别是修改时间和文件名。例如:
drwxr-xr-x 2 root root 4096 Apr 18 2022 boot d | rwx | r-x | r-x | 2 | root | root | 4096 | Apr 18 2022 | boot 文件类型 | 所有者权限 | 所属组权限 | 其他用户权限 | 链接数 | 所属用户 | 所属组 | 文件大小 | 修改时间 | 文件名
如果想要查看包括隐藏文件在内的所有文件,可以使用 “ls -a” 命令。隐藏文件是以点 “.” 开头的文件,在日常操作中,这些文件通常包含一些系统或应用程序的配置信息,一般不需要用户直接干预,但在某些情况下,我们可能需要查看它们。
“cd” 命令用于切换当前工作目录。通过这个命令,我们可以在 Linux 的文件系统树形结构中自由穿梭。比如,要进入 “/home/user” 目录,可以在终端中输入 “cd /home/user”。
如果想要返回上一级目录,只需输入 “cd ..” 即可。另外,如果想要快速回到用户的主目录,直接输入 “cd”,无需任何参数,系统会自动将当前目录切换到用户的主目录。例如:
snow@hxstrive:/$ cd /home/snow snow@hxstrive:~$ cd .. snow@hxstrive:/home$ cd
当我们需要创建新的目录时,就会用到 “mkdir” 命令。例如,要在当前目录下创建一个名为 “newdir” 的新目录,只需在终端中输入 “mkdir newdir”。如下:
snow@hxstrive:~$ mkdir newdir snow@hxstrive:~$ ls newdir
如果想要一次性创建多个目录,或者创建嵌套目录,可以使用 “mkdir -p” 选项。例如,要创建一个名为 “parent/child” 的嵌套目录结构,如果直接使用 “mkdir parent/child”,系统会提示找不到 “parent” 目录,因为它还不存在。而使用 “mkdir -p parent/child”,系统会自动创建 “parent” 目录,并在其下创建 “child” 目录。例如:
snow@hxstrive:~$ mkdir parent/child mkdir: cannot create directory ‘parent/child’: No such file or directory snow@hxstrive:~$ mkdir -p parent/child snow@hxstrive:~$ ls newdir parent
“rmdir” 命令用于删除空目录。比如,要删除当前目录下名为 “emptydir” 的空目录,可以输入 “rmdir emptydir”。例如:
snow@hxstrive:~$ rmdir emptydir/ snow@hxstrive:~$ rmdir parent/ rmdir: failed to remove 'parent/': Directory not empty
需要注意的是,“rmdir” 只能删除空目录,如果目录中包含文件或子目录,该命令将无法执行。如果要删除非空目录及其内容,需要使用 “rm -r” 命令,不过这个命令要谨慎使用,因为它会递归删除目录及其下的所有文件和子目录,一旦误操作,可能会造成不可挽回的损失。
“cp” 命令用于复制文件或目录。复制单个文件时,基本语法为 “cp source_file destination_file”。例如,要将当前目录下的 “file.txt” 文件复制为 “file_backup.txt”,可以输入 “cp file.txt file_backup.txt”。例如:
snow@hxstrive:~$ cp file.txt file_backup.txt snow@hxstrive:~$ ls file.txt file_backup.txt newdir parent
如果要复制目录,则需要使用 “-r” 选项,以递归复制目录及其所有内容。例如,要将 “mydir” 目录复制到 “new_location” 目录下,可以输入 “cp -r mydir new_location”。例如:
snow@hxstrive:~$ cp -r parent/ parent_backup/ snow@hxstrive:~$ ls file.txt file_backup.txt newdir parent parent_backup
“mv” 命令既可以用于移动文件或目录,也可以用于重命名文件或目录。移动文件或目录时,语法为 “mv source destination”。例如,要将 “file.txt” 文件移动到 “/home/snow/newdir” 目录下,例如:
snow@hxstrive:~$ mv file.txt /home/snow/newdir/ snow@hxstrive:~$ ls newdir/ file.txt
当用于重命名时,只需将目标路径指定为新的文件名即可。例如,要将 “file.txt” 文件重命名为 “newfile.txt”,可以输入 “mv file.txt newfile.txt”,例如:
snow@hxstrive:~$ mv file.txt newfile.txt snow@hxstrive:~$ ls file_backup.txt newdir newfile.txt parent parent_backup
同样的道理,对于目录的重命名也是如此操作。
“rm” 命令用于删除文件或目录。删除文件时,直接使用 “rm file.txt” 即可删除当前目录下的 “file.txt” 文件。例如:
snow@hxstrive:~$ rm file.txt
如果要删除目录及其所有内容,需要使用 “-r” 选项,即 “rm -r parent_backup”,这会将 “parent_backup” 目录及其下的所有文件和子目录全部删除,例如:
snow@hxstrive:~$ tree parent_backup/ parent_backup/ ├── a.txt └── child └── a.txt 1 directory, 2 files snow@hxstrive:~$ rm -fr parent_backup/ snow@hxstrive:~$ ls file_backup.txt newdir parent
再次强调,使用 “rm -r” 命令时一定要格外小心,确保操作的正确性,避免误删重要数据。
在 Linux 系统中,权限管理至关重要。通过合理设置文件和目录的权限,可以确保系统的安全性和数据的完整性。每个文件和目录都有三组权限,分别对应所有者(owner)、所属组(group)和其他用户(others)。权限分为读(r)、写(w)和执行(x)三种。
使用 “ls -l” 命令查看文件和目录详细信息时,第一列的字符就表示了权限。例如:
“-rw-r--r--” 表示这是一个普通文件,所有者有读和写的权限,所属组和其他用户只有读的权限。
“drwxr-xr-x” 表示这是一个目录,所有者有读、写和执行的权限,所属组和其他用户有读和执行的权限。
要修改文件或目录的权限,可以使用 “chmod” 命令。“chmod” 命令有两种常见的用法,一种是使用数字表示权限,另一种是使用符号表示权限。
读权限用数字 4 表示,写权限用数字 2 表示,执行权限用数字 1 表示。你可以通过下面表格理解 4、2、1三个数字的来历(0 表示没有权限,1-表示有权限):
注意,如果要获得一个完整的权限值,需要将这三个数字相加。例如,所有者有读、写、执行权限(4 + 2 + 1 = 7),所属组有读和执行权限(4 + 1 = 5),其他用户有读和执行权限(4 + 1 = 5),那么这个文件的权限值就是 755。要将 “file.txt” 文件的权限设置为 755,可以输入 “chmod 755 file.txt”,例如:
snow@hxstrive:~$ ls -l total 12 -rwxrwxr-x 1 snow snow 6 Apr 10 18:37 file.txt drwxr-xr-x 2 snow snow 4096 Apr 10 18:39 newdir drwxr-xr-x 3 snow snow 4096 Apr 10 15:34 parent snow@hxstrive:~$ chmod 755 file.txt snow@hxstrive:~$ ls -l total 12 -rwxr-xr-x 1 snow snow 6 Apr 10 18:37 file.txt drwxr-xr-x 2 snow snow 4096 Apr 10 18:39 newdir drwxr-xr-x 3 snow snow 4096 Apr 10 15:34 parent
使用符号表示法时,可用符号如下:
“u” 表示所有者
“g” 表示所属组
“o” 表示其他用户
“a” 表示所有用户
“+” 表示增加权限
“-” 表示去除权限
“=” 表示设置权限
例如,要给 “file.txt” 文件的所有者增加执行权限,可以输入 “chmod u+x file.txt”,例如:
snow@hxstrive:~$ chmod u+x file.txt snow@hxstrive:~$ ls -l total 12 -rwxr-xr-x 1 snow snow 6 Apr 10 18:37 file.txt drwxr-xr-x 2 snow snow 4096 Apr 10 18:39 newdir drwxr-xr-x 3 snow snow 4096 Apr 10 15:34 parent
如果要将 “mydir” 目录的所属组的权限设置为读和写,可以输入 “chmod g=rw mydir”。
通过本文的学习,我们对 Linux 文件与目录操作有了全面的了解。从文件系统的基础结构,到常用的文件与目录操作命令,再到关键的权限管理,这些都是我们在 Linux 系统中工作和学习的必备技能。希望大家能够通过不断地实践,熟练掌握这些操作,充分发挥 Linux 系统的强大功能。在后续的学习和使用中,你会发现这些基础技能将为你打开 Linux 世界的大门,让你能够更加高效地使用和管理 Linux 系统。