Linux文件与目录管理

包括在不同的目录间切换,建立与删除目录,建立与删除文件,查看文件内容等

一.目录与路径

1.相对路径与绝对路径

绝对路径:路径写法一定由根目录/写起,例如:/usr/share/doc这个目录

相对路径:路径写法不是由根目录写起,指相对于当前工作目录的路径,例如:cd ../usr

2.目录的相关操作

(1)切换目录:cd命令

1
2
3
4
5
6
cd [相对路径或绝对路径]
cd . #代表此层目录
cd .. #代表上一层目录
cd ~ #代表目前使用者身份所在的家目录
cd - #代表前一个工作目录
cd ~account #代表account这个使用者的家目录

(2)显示当前所在目录:pwd命令

1
2
root@ubuntu:/var/www# pwd
/var/www

(3)建立新目录:mkdir命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@ubuntu:/tmp# mkdir test
root@ubuntu:/tmp# ls -dl test
drwxr-xr-x 2 root root 4096 Mar 7 05:37 test

root@ubuntu:/tmp# mkdir -p test1/test2/test3/test4 #-p代表递归建立目录
root@ubuntu:/tmp# ls -dl test*
drwxr-xr-x 2 root root 4096 Mar 7 05:37 test
drwxr-xr-x 3 root root 4096 Mar 7 05:42 test1

root@ubuntu:/tmp# mkdir -m 711 test2 #-m代表指定目录权限
root@ubuntu:/tmp# ls -dl test*
drwxr-xr-x 2 root root 4096 Mar 7 05:37 test
drwxr-xr-x 3 root root 4096 Mar 7 05:42 test1
drwx--x--x 2 root root 4096 Mar 7 05:43 test2

(4)删除目录:rmdir命令

1
2
3
4
5
6
7
8
9
10
11
root@ubuntu:/tmp# rmdir test
root@ubuntu:/tmp# ls -dl test*
drwxr-xr-x 3 root root 4096 Mar 7 05:42 test1
drwx--x--x 2 root root 4096 Mar 7 05:43 test2

root@ubuntu:/tmp# rmdir test1
rmdir: failed to remove `test1': Directory not empty #test1目录尚有内容,无法删除

root@ubuntu:/tmp# rmdir -p test1/test2/test3/test4 #-p连通上层目录一起删除
root@ubuntu:/tmp# ls -dl test*
drwx--x--x 2 root root 4096 Mar 7 05:43 test2

二.文件与目录管理

1.文件与目录的查看:ls命令

1
2
3
ls -a 显示全部文件,包括隐藏文件
ls -d 仅列出目录本身,而不是列出目录内的文件数据
ls -l 详细信息显示,包括文件的属性与权限等数据

2.文件或目录的复制命令:cp命令

1
2
3
4
5
6
7
8
9
10
root@ubuntu:~# cp .bashrc /tmp/test/bashrc
root@ubuntu:~# ls /tmp/test
bashrc
root@ubuntu:~# cp -i .bashrc /tmp/test/bashrc #-i:若目标文件以及存在时,在覆盖时会先询问操作的进行
cp: overwrite `/tmp/test/bashrc'? y

root@ubuntu:~# cp -a .bashrc /tmp/test/bashrc2 #-a:连同文件属性也一起复制过去
root@ubuntu:~# ls -l /tmp/test/bashrc2 .bashrc
-rw-r--r-- 1 root root 3106 Apr 19 2012 .bashrc
-rw-r--r-- 1 root root 3106 Apr 19 2012 /tmp/test/bashrc2
1
2
3
4
5
6
7
8
9
10
11
root@ubuntu:/tmp# ls -dl test*
drwxr-xr-x 2 root root 4096 Mar 7 06:07 test
drwxr-xr-x 2 root root 4096 Mar 7 18:11 test1
root@ubuntu:/tmp# ls test1
root@ubuntu:/tmp# cp test test1
cp: omitting directory `test'
root@ubuntu:/tmp# cp -r test test1 #-r:如果是目录的复制需要加上-r的选项
root@ubuntu:/tmp# ls test1
test
root@ubuntu:/tmp# ls test1/test
bashrc bashrc1 bashrc2

3.文件或目录的删除命令:rm命令

1
2
3
4
5
6
7
8
9
root@ubuntu:/tmp# rm test2
rm: cannot remove `test2': Is a directory
root@ubuntu:/tmp# rm -r test2 #当删除目录时,需要加上-r选项
root@ubuntu:/tmp# ls -dl test*
drwxr-xr-x 2 root root 4096 Mar 7 06:07 test
drwxr-xr-x 3 root root 4096 Mar 7 18:12 test1

root@ubuntu:/tmp# rm -ir test #加入-i选项,删除前会询问操作者是否操作,避免误删除
rm: descend into directory `test'? ^C #按下[ctrl]+c中断删除操作

4.移动文件或目录命令或重命名:mv命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
root@ubuntu:~/tmp# mkdir mvtest
root@ubuntu:~/tmp# cp ~/.bashrc bashrc
root@ubuntu:~/tmp# ls
bashrc mvtest
root@ubuntu:~/tmp# mv bashrc mvtest #将bashrc文件移动到mvtest目录下
root@ubuntu:~/tmp# ls
mvtest
root@ubuntu:~/tmp# ls mvtest
bashrc

root@ubuntu:~/tmp# ls
mvtest mvtest2
root@ubuntu:~/tmp# mv mvtest mvtest2 #将mvtest目录移动到mvtest2目录下
root@ubuntu:~/tmp# ls
mvtest2
root@ubuntu:~/tmp# ls mvtest2
mvtest

root@ubuntu:~/tmp# mv mvtest2 mvtest1 #将mvtest2目录重命名为mvtest1目录
root@ubuntu:~/tmp# ls
mvtest1
root@ubuntu:~/tmp# ls mvtest1/
mvtest
root@ubuntu:~/tmp# ls mvtest1/mvtest/
bashrc

5.获取路径的文件名与目录名称:basename命令和dirname命令

1
2
3
4
root@ubuntu:~# basename /etc/sysconfig/network
network #获取最后的文件名
root@ubuntu:~# dirname /etc/sysconfig/network
/etc/sysconfig #获取目录名

三.文件内容查看

1.直接查看文件内容:cat,tac,nl命令

1
2
3
root@ubuntu:~# cat /etc/passwd #从第一行开始显示文件内容
root@ubuntu:~# tac /etc/passwd #从最后一行开始显示文件内容
root@ubuntu:~# nl /etc/passwd #在文件内容前加上行号

2.可翻页查看:more,less命令

cat命令是将文件内容一次性显示出来,没有一页一页翻动的功能,而moreless命令具有一页一页翻动的功能

在more命令按以下键的功能:

1
2
3
4
空格键(space):代表向下翻一页
Enter:代表向下翻一行
b或[ctrl]-b:代表往回翻页
q:代表立刻离开more,不再显示该文件内容

在less命令按以下键的功能:

1
2
3
4
空格键:向下翻动一页
[pagedown]:向下翻动一行
[pageup]:向上翻动一行
q:离开less程序

3.数据截取:head,tail命令

head命令能取出一个文件的前几行,tail则是取出文件的后几行

1
2
3
4
5
6
7
8
9
head [-n number] 文件
root@ubuntu:~# head /etc/manpath.config #默认显示前十行
root@ubuntu:~# head -n 20 /etc/manpath.config #显示前二十行
root@ubuntu:~# head -n -100 /etc/manpath.config #后一百行不会显示出来

tail [-n number]文件
root@ubuntu:~# tail /etc/manpath.config #默认显示最后十行
root@ubuntu:~# tail -n 20 /etc/manpath.config #显示最后二十行
root@ubuntu:~# tail -n +100 /etc/manpath.config #后一百行显示出来

4.非纯文本文件读取:od命令

1
2
od [-t TYPE] 文件
可读取二进制等文件

5.创建文件:touch命令

1
touch 文件名

四.文件默认权限:umask

当我们建立一个新的文件或目录时,它的默认权限与umask有关,它指定了目前用户在建立文件或目录时候的权限默认值,得知umask的方法:

1
2
3
4
root@ubuntu:~/tmp# umask
0022
root@ubuntu:~/tmp# umask -S
u=rwx,g=rx,o=rx

查看的方式有两种,一种可以直接输入umask,就可以看到数字类型的权限设置值,另一种则是加入-S这个选项,就会以符号类型的方式来显示出权限了

但是要注意的是,这里umask的值并不直接是文件或目录的默认权限值,它规定的是是默认值需要减掉的权限,文件的默认权限值为:-rw-rw-rw-,即666;目录的默认权限值为drwxrwxrwx,即777,再减去umask指定的值,那么

1
2
建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

测试一下:

1
2
3
4
5
root@ubuntu:~/tmp# touch test1
root@ubuntu:~/tmp# mkdir test2
root@ubuntu:~/tmp# ls -dl test*
-rw-r--r-- 1 root root 0 Mar 10 06:05 test1
drwxr-xr-x 2 root root 4096 Mar 10 06:05 test2

修改umask值的方式如下:

1
2
3
4
5
6
root@ubuntu:~/tmp# umask 002
root@ubuntu:~/tmp# touch test3
root@ubuntu:~/tmp# mkdir test4
root@ubuntu:~/tmp# ls -dl test[34]
-rw-rw-r-- 1 root root 0 Mar 10 06:16 test3
drwxrwxr-x 2 root root 4096 Mar 10 06:16 test4

五.文件隐藏属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
A  :当设定了 A 这个属性时,若你有存取此档案(或目录)时,他的访问时间 atime
将不会被修改,可避免I/O较慢的机器过度的存取磁盘。这对速度较慢的计算机有帮助
S :一般档案是异步写入磁盘的(原理请参考第五章sync的说明),如果加上 S 这个
属性时,当你进行任何档案的修改,该更动会『同步』写入磁盘中。
a :当设定 a 之后,这个档案将只能增加数据,而不能删除也不能修改数据,只有root
才能设定这个属性。
c :这个属性设定之后,将会自动的将此档案『压缩』,在读取的时候将会自动解压缩,
但是在储存的时候,将会先进行压缩后再储存(看来对于大档案似乎蛮有用的!)
d :当 dump 程序被执行的时候,设定 d 属性将可使该档案(或目录)不会被 dump 备份
i :这个 i 可就很厉害了!他可以让一个档案『不能被删除、改名、设定连结也无法
写入或新增资料!』对于系统安全性有相当大的帮助!只有 root 能设定此属性
s :当档案设定了 s 属性时,如果这个档案被删除,他将会被完全的移除出这个硬盘
空间,所以如果误删了,完全无法救回来了喔!
u :与 s 相反的,当使用 u 来配置文件案时,如果该档案被删除了,则数据内容其实还
存在磁盘中,可以使用来救援该档案喔!

1.设置文件隐藏属性:chattr命令

1
2
3
4
5
chattr [+-=][ASacdistu] 档案或目录名称
选项与参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。
- :移除某一个特殊参数,其他原本存在参数则不动。
= :设定一定,且仅有后面接的参数
1
2
3
root@ubuntu:~/tmp# chattr +i test3
root@ubuntu:~/tmp# rm test3
rm: cannot remove `test3': Operation not permitted

由于对文件test3附加了i的隐藏属性,所以无法删除

2.显示文件隐藏属性:lsattr命令

1
2
3
4
5
lsattr [-adR] 档案或目录
选项与参数:
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!
1
2
root@ubuntu:~/tmp# lsattr test3
----i--------e- test3

六.观察文件类型:file命令

1
2
3
4
root@ubuntu:~/tmp# file ~/.bashrc 
/root/.bashrc: ASCII English text
root@ubuntu:~/tmp# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xc101d30ff4513f2dbad17fcc483dcda4a38e1df0, stripped

七.命令与文件的查找

1.脚本文件的查找:which命令

1
2
3
4
5
6
7
8
9
which [-a] command
选项与参数:
-a:将所有由PATH目录中科院找到的命令均列出,而不止第一个被找到的命令名称

root@ubuntu:~/tmp# which passwd
/usr/bin/passwd
root@ubuntu:~/tmp# which ls
/bin/ls
root@ubuntu:~/tmp# which cd

可以发现有的命令是找不到的,因为which是默认找PATH内所规范的路径,去查找执行文件的文件名

2.文件的查找:whereis,locate/updatedb,find命令

whereis由一些特定的目录查找文件

1
2
3
4
5
6
7
8
9
10
whereis [-bmsu] 文件或目录名

-b  只查找二进制文件。
-B<目录>  只在设置的目录下查找二进制文件。
-f  不显示文件名前的路径名称。
-m  只查找说明文件。
-M<目录>  只在设置的目录下查找说明文件。
-s  只查找原始代码文件。
-S<目录>  只在设置的目录下查找原始代码文件。
-u  查找不包含指定类型的文件。

locate是在已建立的数据库/var/lib/mlocate里面的数据所查找到的,不用再去硬盘当中读取数据,所以较为快速,数据库默认一天更新一次,如果要手动更新数据库,需要输入updatedb命令

1
2
3
4
locate [-ir] keyword

-i:忽略大小写的差异
-l:仅输出几行的意思

find

1
2
3
root@ubuntu:~/tmp# find /var -mtime +4 #+4代表大于等于5天前的文件
root@ubuntu:~/tmp# find /var -mtime -4 #-4代表小于等于4天内的文件
root@ubuntu:~/tmp# find /var -mtime 4 #4-5那一天的文件
文章作者: Somnus
文章链接: https://nikoeurus.github.io/2019/03/07/Linux%E6%96%87%E4%BB%B6%E4%B8%8E%E7%9B%AE%E5%BD%95%E7%AE%A1%E7%90%86/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Somnus's blog