文件管理——当你使用Linux时,大部分时间都会和文件打交道,我们需要了解基本的文件操作,如创建文件、删除文件、复制文件、重命名文件以及为文件创建链接等。
目录
文件的组成
目录结构
文件类型
pwd命令
更改目录 cd
查看文件状态 stat --时间戳
文件通配符
复制文件和目录 cp
未完待续
详细内容
一、文件的组成
①元数据 -- 元数据就是数据的数据,用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息等;
对文件系统元数据的更改都被保存到一份单独的日志里,当发生系统崩溃时可以利用日志正确地恢复数据。除此之外,日志使系统重新启动时不必进行文件系统的检查,从而缩短了恢复时间。
②数据-- 普通文件中的实际数据
二、目录结构
Linux下文件和目录组织成一个单根倒置树结构:
/ 根目录
/boot 引导文件存放目录
/bin 供所有用户使用的基本命令
/sbin 管理类的基本命令
/lib 库文件以及内核模块文件
/lib64 专用于x86_64系统上的辅助共享库文件存放位置
/etc 配置文件目录
/home 普通用户家目录,软件的个性化配置
如用户自己设置的别名就存放在该目录下
/root 管理员家目录
/dev 设备文件,Linux下一切皆文件
/media 便携式移动设备挂载点
/mnt 临时文件系统挂载点
/opt 第三方应用程序的安装位置
/tmp 临时文件存储位置
/usr read-only,以后不发生变化的数据
/var 可变数据文件 如运行程序缓存的数据,日志文件等
/proc 虚拟文件系统
/proc/cpuinfo 查看CPU信息
/proc/meninfo 查看内存信息
/sys 虚拟文件系统
查看根目录下的文件和目录:
以.开头的文件为隐藏文件
文件名最长255个字节(linux没有文件扩展名的概念,这一点和Windows不同)
蓝色->目录
绿色-> 可执行文件
红色-> 压缩文件
浅蓝色-> 链接文件
tree--以树形结构列出目录结构
-d 只列子目录,不列子文件
-L+n 查看n级目录
*******运行tree命令的时候可能会遇到命令不存在等的问题**********
如下图所示操作:
***********************************************************************
三、文件类型
- 普通文件
d 目录文件
b 块设备
c 字符设备
l 软链接
s 套接字文件socker
p 管道文件
四、pwd命令
pwd--显示当前文件所在路径
-p 显示真实物理路径,当目录为软链接时,显示源目录
. 代表当前目录
.. 代表上一级目录 (任何目录下都有. 和..两个目录 ; cd ../.. 代表进入上上一级目录)
basename 显示基名(最后一项)
dirname 显示目录名(除最后一项)
五、更改目录 cd
cd 进入家目录
列出目录内容 ls
-a 显示所有文件
-A 显示所有文件,不包含.和..
-l 显示详细信息
-R 递归展开目录
-d 不列出子目录
-1(数字1) 以一纵列显示
-S 从大到小排列
-t 从今往前的修改时间排序
-ut 从今往前的访问时间排序
-U 按目录存放信息排序
-X 按文件后缀排序
六、查看文件状态 stat
三个时间戳
access time:访问时间 atime
midify time:修改时间 mtime (文件的数据更改的时间)
change time:改变时间 ctime (文件的元数据更改的时间,mtime变ctime一定也跟着变)
touch 当文件存在时,可以更新三个时间戳
当文件不存在时,则创建
touch -a 更新atime 和 ctime
touch -m 更新mtime 和 ctime
touch -t [CC[YY]]MMDDHHmm[.ss] (年月日时分.秒) 更新atime mtime到指定时间
touch -c 当文件已存在时,更新全部时间戳;当文件不存在时,不创建
七、文件通配符
* 0或多个任意字符
? 一个任意字符
~ 当前用户家目录
~name 用户name的家目录
[0-9] 数字范围
[a-Z] 字母范围 注意:ls +字母范围 是按aAbBcCdD....zZ排列的
[任意字符] 匹配方括号内的任何的一个字符
[^任意字符] 匹配方括号内的字符以外的任何字符
[:digit:] 任意数字 例如:ls [[:digit:]]*
[:lower:] 任意小写字母
[:upper:] 任意大写字母
[:alpha:] 任意大小写字母
[:alnum:] 任意字母或数字
[:blank:] 水平空白字符
[:space:] 水平或垂直空白字符
' ' 也可以表示空格
[:punct:] 任意符号
案例:
1、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
ls -d /etc/rc[0-6]*
2、显示/etc目录下,所有以.d结尾的文件或目录
ls -d /etc/*.d
3、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
ls -d /etc/[mnrp]*.conf
4、只显示/root下的隐藏文件和目录(三种写法)
ls -a --ignore=[^.]* /root
ls -a -I "[^.]*" /root
ls -d .* /root
5、只显示/etc下的非隐藏目录
ls -d /etc/*/
6、显示/etc目录下所有以k开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
ls -d /etc/k*[[:digit:]]*[[:lower]]
7、显示/etc目录下,所有以一个大写字母开头,以两个数字结尾的文件或目录
ls -d /etc/[[:upper]]*[0-9][0-9]
8、显示/etc目录下,文件名至少包含一个小写字母和一个数字并以.conf结尾的文件或目录
ls -d /etc/*[[:lower]]*[0-9]*.conf
八、复制文件和目录 cp
cp + source + dest
1、source是单个文件
如果目标不存在,新建dest,并将文件内容填充至dest
如果目标存在且是文件,内容覆盖
如果目标存在且是目录,在dest下新建与源文件名同名的文件,并填充至新文件
2、source是目录——要加选项 -r(此选项下面有说明)
如果目标不存在,则新建指定目录,然后复制source下所有文件至新建目录
如果目标存在,在dest下新建与源目录同名的目录,并复制源目录内容至新建目录
总结如下图
cp
-i:覆盖前提示 –n:不覆盖,注意两者顺序
-r, -R: 递归复制目录及内部的所有内容
-a: 归档,相当于-dR --preserv=all
-d:--no-dereference --preserv=links 不复制原文件,只复制链接名
--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp:
links
xattr
context
all
-p: 等同--preserv=mode,ownership,timestamp
-v: --verbose 显示复制的过程
-f: --force 当普通用户对某目录有rx权限时,使用-f可以将没有修改权限的文件强制覆盖。即删除再创建。
案例
1、定义别名命令baketc,将/etc/目录下所有文件,备份到/testdir独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见
alias baketc='mkdir -p(递归创建) /testdir/backup$(date +%F);cp -av /etc/* /testdir/backup$(date +%F)'
2、创建/testdir/rootdir目录,并复制root下所有文件到该目录内,要求保留原有权限
mkdir -p /testdir/rootdir;cp -a /root/* /testdir/rootdir/rootdir
原文地址:http://blog.51cto.com/13570193/2060506