Linux文件目录管理
1.Linux文件系统的架构
文件系统中主要目录的内容
目录 | 内容 |
---|---|
/bin | 构建最小系统所需要的命令(最常用的命令) |
/boot | 内核与启动文件 |
/dev | 各种设备文件 |
/etc | 系统软件的启动和配置文件 |
/home | 用户的主目录 |
/lib | C编译器的库 |
/media | 可移动介质的安装点 |
/opt | 可选的应用软件包(很少使用) |
/proc | 进程的映像 |
/root | 超级用户root的主目录 |
/sbin | 和系统操作有关的命令 |
/tmp | 临时文件存放点 |
/usr | 非系统的程序和命令 |
/var | 系统专用的数据和配置文件 |
2.建立文件和目录
建立目录
mkdir temp # 新建目录
mkdir temp1 temp2 # 创建两个目录
mkdir ~/temp # 用绝对路径创建目录
mkdir -p /temp/file # 完整地建立子目录
建立空文件
touch hello.c # 建立hello.c文件
文件已存在时,touch
命令可以更新其建立日期和时间
touch命令在备份和整理文件时非常实用,可以让程序知道那些文件已经是备份或整理过了
3.文件的移动、复制和删除
3.1 移动和重命名:mv
$ mv hello.c bin/ # 把文件hello.c移动到bin目录下
$ mv photos/ desktop/ # 把目录photo移动到目录desktop
$ mv hello.c hello1.c # 把文件hello.c重命名位hello1.c
-a
选项将在移动重名文件时询问是否覆盖
-b
选项则在文件重名时在同名文件后面加一个"~"符号
3.2 复制文件和目录:cp
$ cp file test/ # 把文件file复制到目录test下
同时,cp命令也是默认不询问覆盖的,可以使用-a
和-b
选项解决覆盖问题
-r
可以将子目录连同其中的文件一并复制,例如
$ cp -r test/ desktop/ # 把目录test和其中的子目录包括文件都复制到目录desktop下
3.3 删除目录和文件:rmdir 和 rm
rmdir
命令用于删除空目录,如果目录有内容,则无法删除
rm
命令用于删除目录和文件,例如
$ rm test # 删除test文件
rm:是否删除 普通空文件“test”?("Y" or "N"?)
$ rm -r test # 不询问默认回答Y
$ rm -f temp/ # 删除目录和目录下所有递归出来的子目录和文件
tips:谨慎使用-rf
,因为该选项会不询问直接删除目录下所有文件
4.文件和目录权限
文件和目录有3种权限:读取(r),写入(w)和执行(x)
4.1 改变文件所有权:chown 和 chgrp
$ ls -l
-rw-rw-r--. 1 daniel daniel 0 7月 4 22:01 file
$ sudo chown daniel:root file # 改变文件属主为daniel属组为root组
-rw-rw-r--. 1 daniel root 0 7月 4 22:01 file
$ sudo chown :daniel file # 改变文件属组为daniel组
-rw-rw-r--. 1 daniel daniel 0 7月 4 22:01 file
chown
提供了**-R**选项,该选项能够更改一个目录下所有文件的所有权
剩下的chgrp只能实现设置文件或目录的属组,同样也有**-R**选项
4.2 改变文件权限:chmod
chmod命令使用**“用户组 +/- 权限”**的表述方式来增加或删除相应的权限
$ chmod u+x file
$ chmod ugo-rwx file
# 其中 u代表用户(usr),g代表用户组(group),o代表其他人(other);
# +或-分别代表增加或删除权限,rwx也就是读权限、写权限和执行权限
$ chmod o=u file # 另外一种写法,表示把u的权限赋给o
4.3 八进制表示权限
$ chmod 777 file
$ ls -l
-rwxrwxrwx. 1 daniel daniel 0 7月 4 22:01 file
5.文件类型
5.1 查看文件类型
ls -l显示的第一个字符就是文件类型
文件类型有以下几种:
5.2 建立链接:ln
Linux中有两种链接,分别为:软连接和硬连接
软连接又称为符号连接,相当于Windows中的快捷方式,原文件被删除了,则连接文件也随之失效
# 为文件创建软连接文件
$ ln -s file mfile
$ ll
-rwxrwxrwx. 1 daniel daniel 0 7月 4 22:01 file
lrwxrwxrwx. 1 daniel daniel 4 7月 4 22:43 mfile -> file # 文件类型为l(链接文件)
硬连接,相当于创建了一个新的文件,该文件相当于跟原文件指向了同一块内存区域的指针,因此,删除其中某一个并不会影响其他文件访问,若想删除整个文件,则必须删除所有有关的硬连接文件
# 为文件创建硬连接文件
$ ln file my_file
$ ll
-rw-rw-r--. 2 daniel daniel 0 7月 4 22:46 file
-rw-rw-r--. 2 daniel daniel 0 7月 4 22:46 my_file # 文件类型为-(普通文件)
实际工作中,一般都是使用符号连接(软连接),硬连接已经很少使用
6.输入输出重定向和管道
6.1 输出重定向
程序在默认情况下输出结果的地方被称为标准输出(stdout)。通常来说,标准输出总是指向显示器
输出重定向符号:">",可以将输出到别的文件中,但会覆盖掉源文件的内容,如果想要追加内容而不覆盖,可以使用输出重定向符号**“>>”**,就会将新内容追加到原有文件内容末尾
6.2 输入重定向
和标准输出类似,程序默认情况下接收输入的地方被称为标准输入(stdin)。通常来说,标准输入总是指向键盘。
输入重定向:“<”或者“<<”,但是输入重定向不常被使用
6.3 管道:|
管道将一条命令的输出连接到另一条命令的输入,例如:
$ history | grep rm # 查找history中和rm字符串匹配的有关的命令
56 apropos system information
57 apropos print system information
65 rm fle
98 rm -r mfile
101 rm -f mmfile
108 rm -f file
110 rm -f mfile
123 rm file
143 history | grep rm
管道在某些场景下很有用,能写出很高效的shell命令,尽管这些命令看起来比较复杂,合理利用管道是提高工作效率的有效手段