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等文件系统大小写不敏感
.开头的是隐藏文件
文件有两类数据:
元数据:metadata(ll看到的信息)
数据: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 $OLDPWD,OLDPWD变量存储了上一个目录
echo $PWD 或pwd,查看当前目录
环境变量 PS1,PATH,PWD,OLDPWD,HISTSIZE,SHELL
ls
ls -ld 等于ll -d,显示文件夹本身的信息
目录后边有没有/有区别么?大部分时候没区别,除了目录是软连接的情况。
例如:ll /bin和ll /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仅改变atime和ctime
-m 仅改变mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss]
指定atime和mtime的时间戳
-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个,每个block是4K,最多直接指向48K的数据
间接指针 4M
二重间接指针 4G
三重间接指针 4T
df -i df的inode形式
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,如果f1和f1_link在不同目录,要用相对目录的话是相对于f1_link的目录,不是相对于f1的目录
readlink /etc/grub2.cfg可直接读到源文件的路径
软,硬链接区别:
本质
硬链接:同一个文件多个名字
软链接:一个文件对应快捷方式,不同文件
1、链接数
2、跨分区
3、目录
4、原始和链接文件关系
5、删除
确定文件内容
file file1
检查文件的类型,然后确定适当的打开命令或应用程序使用
文件的头部,又称魔数magic number
hexdump -C file -n 100 显示一个文件的前100个字节
以上是关于Linux-文件管理的主要内容,如果未能解决你的问题,请参考以下文章