十、文件管理、属性、查找和软硬链接

一、文件和目录的创建和删除

1、文件创建:touch
如:touch /tmp/aa.txt 在/tmp目录创建aa.txt文件
如:touch /tmp/aa{1..10} 在/tmp目录批量创建文件
touch /tmp/{aa,bb,cc}.txt

2、目录创建:mkdir
如:mkdir /tmp/centos 在/tmp目录下创建centos目录
如:mkdir -p /tmp/linux/centos -p递归创建目录

3、删除文件和文件
rm
-r 递归删除目录及其内容
-d 删除空目录
-f 不询问直接删除
如:rm -f aa.txt 不询问直接删除aa.txt文件
如:rm -rf /tmp/centos 不询问直接递归删除centos目录及其内容

二、文件的查看与编辑

1、cat
用法:
1)查看文件内容
cat /etc/issue 查看/etc/目录下issue文件里的内容
2)通过>和>>把内容加入到文件
cat /etc/redhat-release >> /tmp/cc.txt 把/etc/redhat-release里的内容追加到/tmp/cc.txt结尾
cat /etc/redhat-release >> /tmp/cc.txt 先清空/tmp/cc.txt文件再把/etc/redhat-release里的内容添加到里面
3)合并查看多个文件
cat a.txt cc.txt 合并查看a.txt和cc.txt两个文件
4)创建文件并添加多行内容
cat >>dd.txt<<EOF
如:[root@localhost.localdomain /tmp]# cat >>dd.txt<<EOF
> hellow world!
> centos7
> nginx
> apache
> php
> EOF
[root@localhost.localdomain /tmp]# cat dd.txt
hellow world!
centos7
nginx
apache
php

2、head head 命令主要用于查看文件内容
head -10 /var/log/messages 查看该文件前10行内容
head -c 显示每个文件的前k 字节内容,如果附加“-”参数,则除了每个文件的最后k字节数据外显示剩余全部内容
head -n 显示每个文件的前k行内容,则除了每个文件的最后k行外显示剩余全部内容
例如:
head -n 1 显示文件前1行内容
head -n -1 显示文件除了最后1行的内容
head -c 5 显示文件前n个字节
head -c -5 显示文件除了最后5个字节的内容

3、tail
tail +20 notes.log 显示文件 notes.log 的内容,从第 20 行至文件末尾
tail -c 10 notes.log 显示文件 notes.log 的最后 10 个字符:
tail -f追踪文件信息时: 文件被删除或移动走, 需要进行重新追踪
tail -F追踪文件信息时: 文件被删除或移动轴, 不需要进行重新追踪,只要文件恢复回来会继续追踪

日志文件: 文件数据会不断增加,历史悠久的日志文件会清空
tail -F 日志信息

4、less 查看文件内容
less 1.log 查看档案内容
history  | less 查看history,通过less来分页
less 1.log test.txt 通过less查看多个文件

5、tr 命令用于转换或删除文件中的字符
cat testfile |tr a-z A-Z 将文件testfile中的小写字母全部转换成大写字母

6、vi和vim 编辑文件
vim需要单独通过yum install vim -y安装才能使用

三、文件类型和文件属性 

1、文类型
在Linux中无论压缩文件file.tar.gz还是file.txt 都称为普通文件,后缀对Linux中没多大的意义
在Linux中,可以说一切设备(包括目录、普通文件)皆为文件
Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;

[root@iter ~]# ll /
total 158
-rw-r--r-- 1 root root 39 Jul 27 12:14 =
drwxr-xr-x 2 root root 4096 Jul 26 12:32 bin
drwxr-xr-x 4 root root 1024 Jul 26 12:01 boot
drwxr-xr-x 12 root root 4300 Jul 26 11:24 dev
drwxr-xr-x 84 root root 4096 Jul 27 13:13 etc

l表示一个符号链接文件 d表示一个目录 -表示这是一个普通文件 c字符设备

d(directory) 表示这是一个目录,如/etc 在ext2fs中,目录是一个特殊的文件
-(regularfile) 表示这是一个普通的文件,如dingjian
l(link) 表示这是一个符号链接文件,实际上它指向另一个文件,如win的快捷方式
b(block) 表示块设备和其他的外围设备,是一个特殊类型的文件
c(character) 表示字符设备文件
s(socket) 表示Socket文件
p(named pipe) 表示管道文件

ls -l|grep ^d 过滤并以长模式列出当前目录中属性为d的文件

[root@localhost.localdomain ~]# ls -l / |grep ^d
dr-xr-xr-x. 5 root root 4096 Sep 16 03:11 boot
drwxr-xr-x. 19 root root 3180 Sep 21 21:22 dev
drwxr-xr-x. 75 root root 8192 Sep 24 12:50 etc
drwxr-xr-x. 3 root root 17 Sep 22 16:29 home
drwxr-xr-x. 2 root root 6 Apr 11 2018 media

ls –F|grep / 过滤出当前目录中属性为d的文件

[root@localhost.localdomain ~]# ls -F /|grep /
boot/
dev/
etc/
home/
media/
mnt/

Linux下扩展名的作用
在linux中,虽然扩展名没什么实际意义,但习惯通过扩展名来表示不同的文件类型,
.tar、.tar.gz、.tgz、.zip、.tar.bz 表示压缩文件,创建命令一般为tar,gzip,unzip等
.sh表示shell脚本文件,通过shell语言开发的程序
.pl表示perl语言文件,通过perl语言开发的程序
.py 表示python语言文件,通过python语言开发的程序
.html、.htm、.php、.jsp、.do表示网页语言的文件
.conf表示系统的配置文件
.rpm表示rpm安装包文件

2、文件属性
inux系统中文件或目录的属性主要包括:文件或目录的索引节点(inode)、类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容
ls –lhi /etc i索引号 h显示常用大小 l显示长列表格式

[root@dingjian ~]# ls -lhi /etc
total 1.3M
658494 drwxr-xr-x. 3 root root 4.0K Nov 5 05:48 abrt
660078 -rw-r--r--. 1 root root 49 Nov 8 01:58 adjtime
654098 -rw-r--r--. 1 root root 1.5K Jan 12 2010 aliases
661160 -rw-r--r--. 1 root root 12K Nov 7 02:24 aliases.db
654162 drwxr-xr-x. 2 root root 4.0K Nov 7 02:24 alternatives

455171 -rw-r--r-- 1 root root 3.8K Jul 24 17:39 install.log.syslog
Indoe 文件类型 硬链 属主及 文件或 最近修改 文件或目录名称
节点号 及权限 接数 所属组 目录大小 时间

inode 的值是:2408949
文件类型:文件类型是-,表示这是一个普通文件; 关于文件的类型,
文件权限:文件权限是rwxr-xr-x ,表示文件属主可读、可写、可执行,文件所归属的用户组可读可执行,其它用户可读可执行;
硬链接个数: lsfile.sh这个文件没有硬链接;因为数值是1,就是他本身;
文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root;
文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组;
文件大小:文件大小是7个字节;
访问可修改时间 :这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的;

四、文件查找

find 查找文件命令
-type 查找文件类型

[root@localhost.localdomain ~]# find /dev/ -type b |xargs ls -l
brw-rw----. 1 root disk 8, 0 Sep 21 21:22 /dev/sda
brw-rw----. 1 root disk 8, 1 Sep 21 21:22 /dev/sda1
brw-rw----. 1 root disk 8, 2 Sep 21 21:22 /dev/sda2
brw-rw----. 1 root disk 8, 3 Sep 21 21:22 /dev/sda3
brw-rw----. 1 root cdrom 11, 0 Sep 21 21:22 /dev/sr0
[root@localhost.localdomain ~]# find /root -type f -exec ls -l {} ;
-rw-r--r--. 1 root root 18 Dec 29 2013 /root/.bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 /root/.bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 /root/.cshrc
-rw-r--r--. 1 root root 129 Dec 29 2013 /root/.tcshrc
-rw-------. 1 root root 1487 Sep 16 03:10 /root/anaconda-ks.cfg
-rw-------. 1 root root 3131 Sep 22 19:38 /root/.bash_history

-name 查找文件名称

[root@localhost.localdomain ~]# find / -name redhat-release
/etc/redhat-release
/usr/share/doc/redhat-release
/usr/share/redhat-release

五、软链接和硬链接

链接的概念
在linux系统中,链接可以分为两种:
一种被称为硬链接(Hard Link),另一种被称为软链接或符号链接(Symbolic Link)。在默认不带参数情况下,执行ln命令创建的链接是硬链接。

硬链接:
硬链接作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,防止“误删”源数据(很多硬件存储,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接。)  保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编吃称为索引节点编号(inode index)或者称为inode,在Linux系统中,多个文件名指向同一个索引节点(即具备相同的Inode数字编号)是正常的。一般这种链接就称为硬链接。
软链接:
软链接也称为符号链接(Symbolic Link) ,类似于windows系统中的快捷方式

ls –li 查看索引节点的信息
硬链接的文件与原文件节点号是相同的,软链接的文件与原文件的节点号是不同的

硬链接和硬链接的创建示例:
示例一:分别创建一个文件的硬链接和软链接

[root@localhost.localdomain ~]# mkdir -p /test/mrxiong    #创建递归目录/test/iter 
[root@localhost.localdomain ~]# touch /test/mrxiong/iterfile     #在/test/iter/目录中创建文件iterfile
[root@localhost.localdomain ~]# ls -l /test/mrxiong/
total 0
-rw-r--r--. 1 root root 0 Sep 24 14:17 iterfile
[root@localhost.localdomain ~]# cd /test/mrxiong/
[root@localhost.localdomain /test/mrxiong]# ln iterfile iterfile_hard_link     #创建iterfile硬链接
[root@localhost.localdomain /test/mrxiong]# ls -l
total 0
-rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile
-rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile_hard_link
[root@localhost.localdomain /test/mrxiong]# ln -s iterfile iterfile_soft_link     #创建iterfile软链接
[root@localhost.localdomain /test/mrxiong]# ls -l
total 0
-rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile
-rw-r--r--. 2 root root 0 Sep 24 14:17 iterfile_hard_link     #己创建的硬链接的属性
lrwxrwxrwx. 1 root root 8 Sep 24 14:19 iterfile_soft_link -> iterfile     #己创建的软链接属性

示例二:分别为目录创建硬链接和软链接

[root@localhost.localdomain ~]# cd /tmp
[root@localhost.localdomain /tmp]# mkdir iterdir    #创建一个目录iterdir
[root@localhost.localdomain /tmp]# ln iterdir iterdir_hard_link #为iterdir目录创建硬链接
ln: ‘iterdir’: hard link not allowed for directory #提示错误目录无法创建硬链接 
[root@localhost.localdomain /tmp]# ln -s iterdir iterdir_soft_link #但目录可以创建软链接
[root@localhost.localdomain /tmp]# ls -lirt
total 0
489387 drwxr-xr-x. 2 root root 6 Sep 24 14:21 iterdir
33554505 lrwxrwxrwx. 1 root root 7 Sep 24 14:23 iterdir_soft_link -> iterdir

总结:ln 命令不能对目录创建硬链接,但可以对目录创建软链接,对于目录的软链接也是生产场景运维中常用的功能
对于一个文件创建硬链接和软链接,我们无论访问其软链接还是硬链接都可以访问其源文件内容

示例三:删除硬链接和软链接
实验一、创建iterfile文件,分别创建iterfile_hard_link 硬链接和iterfile_soft_link软连接 删除iterfile_soft_link

[root@localhost.localdomain /tmp]# touch iterfile
[root@localhost.localdomain /tmp]# echo "i am mary" > iterfile
[root@localhost.localdomain /tmp]# ln -s iterfile iterfile_soft_link
[root@localhost.localdomain /tmp]# ln iterfile iterfile_hard_link
[root@localhost.localdomain /tmp]# ls -li
total 8
33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
33568083 lrwxrwxrwx. 1 root root 8 Sep 24 14:29 iterfile_soft_link -> iterfile
[root@localhost.localdomain /tmp]# rm iterfile_soft_link -f
[root@localhost.localdomain /tmp]# ls -l
total 8
-rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
-rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
[root@localhost.localdomain /tmp]# cat iterfile_hard_link
i am mary

实验二、创建iterfile文件,分别创建iterfile_hard_link 硬链接和iterfile_soft_link软连接 ,删除iterfile_hard_link硬链接

[root@localhost.localdomain /tmp]# touch iterfile
[root@localhost.localdomain /tmp]# echo "i am mary" > iterfile
[root@localhost.localdomain /tmp]# ln -s iterfile iterfile_soft_link
[root@localhost.localdomain /tmp]# ln iterfile iterfile_hard_link
[root@localhost.localdomain /tmp]# ls -li
total 8
33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
33568083 lrwxrwxrwx. 1 root root 8 Sep 24 14:29 iterfile_soft_link -> iterfile
[root@localhost.localdomain /tmp]# rm -f iterfile_hard_link
[root@localhost.localdomain /tmp]# ls -l
total 4
-rw-r--r--. 1 root root 10 Sep 24 14:29 iterfile
lrwxrwxrwx. 1 root root 8 Sep 24 14:32 iterfile_soft_link -> iterfile
[root@localhost.localdomain /tmp]# cat iterfile iterfile_soft_link
i am mary
i am mary

实验三、创建iterfile文件,分别创建iterfile_hard_link 硬链接和iterfile_soft_link软连接, 删除原文件iterfile

[root@localhost.localdomain /tmp]# touch iterfile
[root@localhost.localdomain /tmp]# echo "i am mary" > iterfile
[root@localhost.localdomain /tmp]# ln -s iterfile iterfile_soft_link
[root@localhost.localdomain /tmp]# ln iterfile iterfile_hard_link
[root@localhost.localdomain /tmp]# ls -li
total 8
33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile
33554505 -rw-r--r--. 2 root root 10 Sep 24 14:29 iterfile_hard_link
33568083 lrwxrwxrwx. 1 root root 8 Sep 24 14:29 iterfile_soft_link -> iterfile    
[root@localhost.localdomain /tmp]# rm -f iterfile
[root@localhost.localdomain /tmp]# ls -l
total 4
-rw-r--r--. 1 root root 10 Sep 24 14:29 iterfile_hard_link # 软链接闪跃证明失效
lrwxrwxrwx. 1 root root 8 Sep 24 14:32 iterfile_soft_link -> iterfile    
[root@localhost.localdomain /tmp]# cat iterfile_hard_link
i am mary

总结:通过上面的测试可以看出:当删除原始文件iterfile后,硬链接iterfile_hard_link不受影响,但是软链接文件iterfile_soft_link失效,显示为闪烁状态
ls lrit   r颠倒顺序的排序  t 看最近更新的文件  i查看索引节点

通过以上的测试,我们可以得到以下几个结论:
删除软链接iterfile_soft_link,对于iterfile,iterfile_hard_link无影响
删除硬链接iterfile_hard_link,对iterfile,iterfile_soft_link也无影响
删除原文件iterfile,对硬链接iterfile_hard_link没有影响,导致软链接失效
同时删除原文件iterfile,硬链接iterfile_hard_link,整个文件会真正的被删除
很多硬件设备中的快照功能,就是利用了硬链接的原理。
源文件和硬链接文件具有相同的索引节点,可以认为是同一个文


对于目录,不可以创建硬链接,但可以创建软链接
对于目录的软链接是生产环景运维中常用的技巧
硬链接不能跨文件系统

链接知识拓展
软链接的生产使用案例:
在编译apache软件时,编译路径带着版本号/application/apache2.2.21(为了区分版本用,因此路径很长),而在访问目录又希望简便,此时就可以通过建立一个简单的链接路径文件
ln –s /application/apache2.2.21 /application/apache 来达到方便访问的目的

硬链接的生产使用案例:
硬件存储的快照功能。或者为备份数据创建多个硬链接,防止误删数据。

描述linux下软链接和硬链接的区别
解答:
在linux系统中,链接分为两种:一种是硬链接(hard link),另一种是软链接或符号链接(symbolic link)
1)默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接
2)硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同
3)ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到
4)删除软链接文件,对源文件和硬链接文件无任何影响
5)删除文件的硬链接文件,对源文件及软链接文件无任何影响
6)删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状态)
7)同时删除源文件及其硬链接文件,整个文件才会被真正的删除
8)很多硬件设备中的快照功能,使用的就类似硬链接的原理
9)软链接可以跨文件系统,硬链接不可以跨文件系统

原文地址:https://www.cnblogs.com/mr-xiong/p/13728879.html