Linux开发环境及应用·第四周·文件管理和目录管理(一)
本文整理了Linux文件与目录的管理相关知识
ls命令
ls命令用于列出目录下的文件与目录
基本用法
- 不加任何参数,列出当前目录下的所有文件和目录,如:
$ ls 1.txt dir
- 参数为文件时,列出文件,如:
$ ls 1.txt 1.txt
- 参数为目录时,列出目录下的所有文件和目录,如:
$ tmp ls dir 2.txt 3.txt
常用选项
选项-F(flag)
目录后加/
,可执行文件后加*
,符号链接文件后加@
,普通文件后无任何标记,如:
$ls / -F
bin@ dev/ home/ lib64@ mnt/ proc/ run/ srv/ System/ usr/
boot/ etc/ lib@ lost+found/ opt/ root/ sbin@ sys/ tmp/ var/
长格式列表-l
看下面例子:
$ ls -l
总用量 4
-rw-r--r-- 1 featherm featherm 0 6月 16 22:30 1.txt
drwxr-xr-x 2 featherm featherm 4096 6月 16 22:34 dir
第1列:前面10个字符代表的意义如下:
- 第1个字符
-
=>普通文件,b
=>块设备文件(Block),d
=>目录文件(Dir),l
=>符号连接文件(Link),c
=>字符设备文件(Char),p
=>命名管道文件(Pipe) - 文件的访问权限:r(Read)=>读权限,w(Write)=>写权限,x(eXecutable)=>可执行权限
- 2-4字符:文件所有者对文件的访问权限
- 5-7字符:同组用户对文件的访问权限
- 8-10字符:其它用户对文件的访问权限
第2列:文件的link数,涉及到此文件的目录项数
第3,4列:文件主的名字和组名
第5列:
- 普通磁盘文件:文件大小(单位为字节)
- 目录:目录项的数目
- 符号连接文件:符号连接文件自身的大小
- 字符设备和块设备文件:主设备号和次设备号
- 管道文件:管道内数据的长度
第6-8列:文件最后一次被修改的日期和时间+ 符号连接文件:符号连接文件自身的大小
- 字符设备和块设备文件:主设备号和次设备号
- 管道文件:管道内数据的长度
最后一列:文件名或目录名,对于符号连接文件附带连接文件的内容
选项 -h
以便于人阅读的方式打印数值,如文件大小1K,123M,1G等
$ ls -l -h
总用量 4.0K
-rw-r--r-- 1 featherm featherm 0 6月 16 22:30 1.txt
drwxr-xr-x 2 featherm featherm 4.0K 6月 16 22:34 dir
选项-d
当ls的参数是目时,不列出目录下的项目,而是列出目录本身的信息
不加-d选项:
$ ls -l /
总用量 56
lrwxrwxrwx 1 root root 7 9月 30 2018 bin -> usr/bin
drwxr-xr-x 4 root root 4096 6月 12 13:32 boot
drwxr-xr-x 20 root root 3480 6月 16 21:48 dev
drwxr-xr-x 94 root root 4096 6月 16 21:34 etc
drwxr-xr-x 4 root root 4096 4月 20 13:42 home
lrwxrwxrwx 1 root root 7 9月 30 2018 lib -> usr/lib
lrwxrwxrwx 1 root root 7 9月 30 2018 lib64 -> usr/lib
drwx------ 2 root root 16384 4月 20 13:21 lost+found
drwxr-xr-x 2 root root 4096 9月 30 2018 mnt
drwxr-xr-x 6 root root 4096 5月 26 13:54 opt
dr-xr-xr-x 172 root root 0 6月 16 21:34 proc
drwxr-xr-x 7 root root 4096 5月 1 16:48 root
drwxr-xr-x 25 root root 660 6月 16 21:35 run
lrwxrwxrwx 1 root root 7 9月 30 2018 sbin -> usr/bin
drwxr-xr-x 4 root root 4096 4月 20 13:31 srv
dr-xr-xr-x 13 root root 0 6月 16 21:34 sys
drwxr-xr-x 4 root root 4096 5月 19 13:46 System
drwxrwxrwt 16 root root 420 6月 16 22:26 tmp
drwxr-xr-x 9 root root 4096 6月 12 15:35 usr
drwxr-xr-x 12 root root 4096 6月 16 11:40 var
加上-d选项
$ ls -l -d /
drwxr-xr-x 18 root root 4096 5月 19 13:46 /
选项-a
列出所有文件和目录,包括名字为圆点开头的项(默认隐藏不列出)
$ ls -a
. .. 1.txt dir
文件操作命令
文件复制命令cp
第一种用法:cp file1 file2
将文件file1复制为file2,文件file2若存在则覆盖
第二种用法:cp file1 file2 ... filen dir
将文件file1,file2,……,filen复制到目录dir下,目录dir必须存在
复制目录的正确用法(-r选项):cp -r dir1 dir2
若目录dir2存在,则将目录dir1整体复制到目录dir2下;若目录dir2不存在,则将目录dir1复制为目录dir2
移动文件命令mv
用法一:mv file1 file2
将文件file1移动( 更名)为file2
用法二:mv file1 file2 ... filen dir
将文件file1,file2,……,filen移动到目录dir下
用法三:mv dir1 dir2
若dir2不存在,则将目录dir1 更名 为dir2;若dir2存在,则将目录dir1整体移动到dir2下
删除命令rm
用法:rm file1 file2 ... filen
选项:
- -r 若参数是目录,则递归(Recursive)删除目录
- -i 每删除一个文件前询问是否确认
- -f 强迫(Force)删除
注意:正在运行的可执行程序文件不能被删除
例子
假设一目录tmp下有文件1.txt和目录dir:
$ ls -l tmp
总用量 8
-rw-r--r-- 1 featherm featherm 6 6月 17 11:01 1.txt
drwxr-xr-x 2 featherm featherm 4096 6月 17 11:03 dir
复制文件1.txt为2.txt:
$ cp tmp/1.txt tmp/2.txt
$ ls tmp
1.txt 2.txt dir
复制文件1.txt,2.txt到目录dir下:
$ cp tmp/1.txt tmp/2.txt tmp/dir
$ ls tmp
1.txt 2.txt dir
$ ls tmp/dir
1.txt 2.txt
将文件1.txt更名为3.txt:
$ ls tmp
2.txt 3.txt dir
将文件3.txt移动到dir下:
$ mv tmp/3.txt tmp/dir
$ ls tmp
2.txt dir
$ ls tmp/dir
1.txt 2.txt 3.txt
复制目录dir为dir2:
$ cp -r tmp/dir tmp/dir2
$ ls tmp
2.txt dir dir2
$ ls tmp/dir
1.txt 2.txt 3.txt
$ ls tmp/dir2
1.txt 2.txt 3.txt
将目录dir更名为dir3:
$ mv tmp/dir tmp/dir3
$ ls tmp
2.txt dir2 dir3
将目录dir3整体移动到目录dir2下:
$ mv tmp/dir tmp/dir3
$ ls tmp
2.txt dir2 dir3
$ mv tmp/dir3 tmp/dir2
$ ls tmp
2.txt dir2
$ ls tmp/dir2
1.txt 2.txt 3.txt dir3
删除目录tmp下的2.txt:
$ rm tmp/2.txt
$ ls tmp
dir2
删除tmp下的dir2整个目录:
$ rm -r tmp/dir2
$ ls tmp
$
显式区分命令选项和处理对象
假设当前目录下有文件1.txt和2.txt:
$ ls
1.txt 2.txt
利用管道创建一个名为-i
的文件:
$ ls > -i
$ ls
1.txt 2.txt -i
现打算执行rm *
删除所有文件:
$ rm *
rm:是否删除普通文件 '1.txt'?y
rm:是否删除普通文件 '2.txt'?y
$ ls
-i
上面例子实际上执行了命令rm 1.txt 2.txt -i
,因为Linux中通配符是由shell展开后再传递展开后的参数给命令的,然而文件-i被rm命令解释成选项而不是操作的对象,所以-i文件没有成功删除
$ rm -i
rm: 缺少操作数
请尝试执行 "rm --help" 来获取更多信息。
同样的,直接执行rm -i
也无法删除文件-i,因为-i被rm命令解释成选项了
解决问题的方法很简单,许多Linux命令如cp,ls,mv等,都支持用--
显式地标记命令行选项的结束:
$ rm -- -i
$ ls
$