Linux-文件管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-文件管理相关的知识,希望对你有一定的参考价值。

文件系统分层结构标准

http://www.pathname.com/fhs

http://www.pathname.com/fhs/pub/fhs-2.3.pdf

包括

boot bin sbin etc lib64 tmp usr mnt media dev var home net misc srv proc sys root opt selinux

技术分享图片                                               


ldd /bin/ls     查看ls命令需要的依赖库,一般在/lib64

 

/misc目录,CentOS 6自动有,cd /misc然后cd cd/可自动挂载光盘,不用登管理员帐户

 

/proc     目录里的东西根本不在硬盘中,而是在内存中,所以ll查看文件大小为0

              是个虚拟目录,映射到内存

echo '- - -' > /sys/class/scsi_host/host2/scan      不重启电脑的情况下识别新硬盘

 

ext4文件系统大小写敏感,U盘的FAT32等文件系统大小写不敏感

.开头的是隐藏文件

文件有两类数据:

       元数据:metadatall看到的信息)

       数据:data

 

各种文件的类型, vim /etc/DIR_COLORS可定制颜色

-:普通文件                     白色

d: 目录文件                     深蓝色

b: 块设备                  ×××

c: 字符设备                     ×××

l: 符号链接文件              浅蓝色

p: 管道文件pipe             深×××

s: 套接字文件socket       紫色

  可执行文件           绿色

  压缩包                   红色

 

某些文件名带空格、横杠等字符,要删的话带上路径

rm /root/-a

 

b块设备,如/dev/sda

c字符设备,如/dev/zero

dd if=/dev/zero of=/data/bigfile bs=1M count=1024

 

ll -d /bin/ /usr/bin

ll -d /lib64 /usr/lib64

 

pwd -P   若进入链接目录时显示真实路径

 

带根/的是绝对路径,不带根/的是相对路径

 

basename    文件本身的名称,不带目录


cd ~                     进入当前用户的家目录

cd                 进入当前用户的家目录

cd ~qjy   进某个人的家目录

cd -               进入上一次目录路径,内在机制:echo $OLDPWDOLDPWD变量存储了上一个目录

echo $PWD  pwd,查看当前目录

 

环境变量     PS1PATHPWDOLDPWDHISTSIZESHELL

 

ls

ls -ld             等于ll -d,显示文件夹本身的信息

 

目录后边有没有/有区别么?大部分时候没区别,除了目录是软连接的情况。

例如:ll /binll /bin/,不加/显示的是软链接本身,加/显示的是/bin/下的文件。

技术分享图片

技术分享图片

ls -a 包含隐藏文件

ls -l 显示额外的信息

ls -R 目录递归通过

ls -ld 目录和符号链接信息

ls -1 文件分行显示

ls -S 按从大到小排序

ls -t mtime排序

ls -u 配合-t选项,显示并按atime从新到旧排序

ls -U 按目录存放顺序显示

ls -X 按文件后缀排序

 

ll --time=atime /data/A    访问时间

ll --time=ctime /data/A     元数据发生变化的时间

ll --time=mtime /data/A   修改时间(默认)

 

stat /data/A  可以看到3个时间

 

元数据存放在文件系统中,不是具体文件

有时可以不让更新读时间atime,减少硬盘负担

 

文件通配符

 

*匹配零个或多个字符

?匹配任何单个字符

~ 当前用户家目录

~mage 用户mage家目录

~+ 当前工作目录

~-前一个工作目录

[0-9]匹配数字范围

[a-z]:字母

[A-Z]:字母

[qjy]匹配列表中的任何的一个字符

[^qjy]匹配列表中的所有字符以外的字符

 

预定义的字符类:man 7 glob

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母

[:upper:]: 任意大写字母

[:alpha:]: 任意大小写字母

[:alnum:]:任意数字或字母

[:blank:]:水平空白字符

[:space:]:水平或垂直空白字符

[:punct:]:标点符号

[:print:]:可打印字符

[:cntrl:]:控制(非打印)字符

[:graph:]:图形字符

[:xdigit:]:十六进制字符

 

通配符只通配文件名称,不管内容

[[email protected] data]#touch f{A..Z}

[[email protected] data]#touch f{a..z}

[[email protected] data]#ls f[A-D]

fA  fb  fB  fc  fC  fd  fD

[[email protected] data]#ls f[[:upper:]]

fA  fC  fE  fG  fI  fK  fM  fO  fQ  fS  fU  fW  fY

fB  fD  fF  fH  fJ  fL  fN  fP  fR  fT  fV  fX  fZ

 

man 7 glob

 

touch     创建空文件或刷新时间

touch [OPTION]... FILE...

-a仅改变atimectime

-m 仅改变mtimectime

-t [[CC]YY]MMDDhhmm[.ss]

指定atimemtime时间戳

-c如果文件不存在,则不予创建

 

cp

cp -a      可以作为备份手段,把数据的所有信息都复制

cp -av    备份同时显示过程,使用-v要小心,文件太大的话终端容易死

cp -u      更新,只复制源比目标更新文件或不存在文件

cp --backup=numbered 可定义到别名里

 

[[email protected] data]#ls

file1.conf  file2.conf  file3.conf  file4.conf  file5.conf

[[email protected] data]#rename "conf" "conf.bak" file*

[[email protected] data]#ls

file1.conf.bak  file3.conf.bak  file5.conf.bak

file2.conf.bak  file4.conf.bak

 

练习

1、定义别名命令baketc,每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为backupYYYY-mm-dd,备份过程可见

[[email protected] data]alias baketc="cp -av /etc /data/backup`date +%F`"

2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限

 [[email protected] ~]cp -a /root/ /data/rootdir/

 

rm

rm -rf /被禁,但rm -rf /*或者 rm -rf /data /*能执行!

强烈建议把rm改名或者定义成别名mv

alias rm='mv -t /data/'

有别人正在使用某文件时释放不了空间,用lsof | grep deleted可查看被删除但未释放空间的文件,方法一是kill掉进程,但不建议,因为有些进程不能kill,方法二是> file先清空,释放空间,再rm删掉。

> bigfile

rm -f bigfile

 

目录操作

tree

tree /boot

tree -L 1 /boot     只显示当前目录下的第一层

tree -d /boot       只显示文件夹

tree -P                 可跟正则表达式

 

mkdir     创建空目录

mkdir -p       /data/dir1/dir2/dir3/dir4 能创建比较深的空目录

mkdir -v /data/dir1/dir2/dir3/dir4 显示详细信息

 

rmdir [-p]     删除空文件夹

 

练习:

(1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b

[[email protected] ~]#mkdir -p /testdir/dir1/{x,y}/{a,b}

(2) 如何创建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b

[[email protected] ~]# mkdir -p /testdir/dir2/{x/{a,b},y}

(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

[[email protected] ~]# mkdir -p /testdir/dir{3,4,5/{6,7}}

 

备份小技巧

cp /etc/hosts{,.bak}

 

索引节点

inode

inode table   节点表

inode在每个分区中唯一

直接指针有12个,每个block4K,最多直接指向48K的数据

间接指针            4M

二重间接指针    4G

三重间接指针    4T

 

df -i        dfinode形式

 

shred -zvu -n 6 /data/hosts      擦除文件,-z最后以0覆盖,-v显示过程,-u删除文件,-n 6覆写6(默认3

 

硬链接

创建硬链接会增加额外的记录项以引用文件

对应于同一文件系统上一个物理文件

每个目录引用相同的inode

创建时链接数递增

删除文件时:

?rm命令递减计数的链接

?文件要存在,至少有一个链接数

?当链接数为零时,该文件被删除

不能跨越驱动器或分区

语法:

ln filename [linkname]

任何文件夹最少有2个链接数,本身和. ,如果还有子文件夹的话,子文件夹的.. 也是他的名字,就有3个以上的链接数

 

软连接(符号链接)

一个符号链接指向另一个文件

ls -l的显示链接的名称和引用的文件

一个符号链接的内容是它引用文件的名称

可以对目录进行

可以跨分区

指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数;

语法:

ln -s filename [linkname]

软连接的文件大小是源文件的文件名大小

软连接ln -s f1 f1_link,如果f1f1_link在不同目录,要用相对目录的话是相对于f1_link的目录,不是相对于f1的目录

readlink /etc/grub2.cfg可直接读到源文件的路径

 

软,硬链接区别:

本质

硬链接:同一个文件多个名字

软链接:一个文件对应快捷方式,不同文件

 

1、链接数

2、跨分区

3、目录

4、原始和链接文件关系

5、删除

 

确定文件内容

file file1

检查文件的类型,然后确定适当的打开命令或应用程序使用

文件的头部,又称魔数magic number

hexdump -C file -n 100     显示一个文件的前100个字节


以上是关于Linux-文件管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux 文件/目录管理(初级)

Linux文件和目录管理理论

Linux 基础——Linux简介目录管理文件管理

Linux权限管理(用户+文件)

Linux文件管理_1

Linux学习系列--如何在Linux中进行文件的管理