本文整理了Linux文件与目录的管理相关知识
ls命令
ls命令用于列出目录下的文件与目录
基本用法
- 不加任何参数,列出当前目录下的所有文件和目录,如:
1
2ls
1.txt dir - 参数为文件时,列出文件,如:
1
2ls 1.txt
1.txt - 参数为目录时,列出目录下的所有文件和目录,如:
1
2tmp ls dir
2.txt 3.txt
常用选项
选项-F(flag)
目录后加/
,可执行文件后加*
,符号链接文件后加@
,普通文件后无任何标记,如:
1 | ls / -F |
长格式列表-l
看下面例子:
1 | ls -l |
第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等
1 | ls -l -h |
选项-d
当ls的参数是目时,不列出目录下的项目,而是列出目录本身的信息
不加-d选项:
1 | ls -l / |
加上-d选项
1 | ls -l -d / |
选项-a
列出所有文件和目录,包括名字为圆点开头的项(默认隐藏不列出)
1 | ls -a |
文件操作命令
文件复制命令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:
1 | ls -l tmp |
复制文件1.txt为2.txt:
1 | cp tmp/1.txt tmp/2.txt |
复制文件1.txt,2.txt到目录dir下:
1 | cp tmp/1.txt tmp/2.txt tmp/dir |
将文件1.txt更名为3.txt:
1 | ls tmp |
将文件3.txt移动到dir下:
1 | mv tmp/3.txt tmp/dir |
复制目录dir为dir2:
1 | cp -r tmp/dir tmp/dir2 |
将目录dir更名为dir3:
1 | mv tmp/dir tmp/dir3 |
将目录dir3整体移动到目录dir2下:
1 | mv tmp/dir tmp/dir3 |
删除目录tmp下的2.txt:
1 | rm tmp/2.txt |
删除tmp下的dir2整个目录:
1 | rm -r tmp/dir2 |
显式区分命令选项和处理对象
假设当前目录下有文件1.txt和2.txt:
1 | ls |
利用管道创建一个名为-i
的文件:
1 | ls > -i |
现打算执行rm *
删除所有文件:
1 | rm * |
上面例子实际上执行了命令rm 1.txt 2.txt -i
,因为Linux中通配符是由shell展开后再传递展开后的参数给命令的,然而文件-i被rm命令解释成选项而不是操作的对象,所以-i文件没有成功删除
1 | rm -i |
同样的,直接执行rm -i
也无法删除文件-i,因为-i被rm命令解释成选项了
解决问题的方法很简单,许多Linux命令如cp,ls,mv等,都支持用--
显式地标记命令行选项的结束:
1 | rm -- -i |