1. Linux中的文件
1.1 【文件属性概述】
Linux里一切皆文件!
Linux系统中的文件或目录属性主要包括:索引节点(inode)、文件类型、权限属性、链接数、所归属的用户和用户组、最近修改时间等内容。
一般用ls -lhi即可查看文件属性:
[root@test testdir]# ls -lhi
total 14M
262270 -rw-r--r--. 1 root root 0 Mar 17 05:24 a.txt
262259 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big10.sh
262275 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big1.sh
262277 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big2.sh
284753 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big3.sh
284754 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big4.sh
284755 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big5.sh
284756 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big6.sh
284757 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big7.sh
284758 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big8.sh
284759 -rw-r--r--. 1 root root 1.3M Mar 21 09:20 big9.sh
262274 -rw-r--r--. 1 root root 1.3M Mar 21 09:18 big.sh
262273 -rw-r--r--. 1 root root 0 Mar 17 05:24 lidao.txt
262279 -rw-r--r--. 1 root root 64 Mar 17 05:36 num.txt
284652 -rw-r--r--. 1 root root 29 Mar 19 17:26 oldboy.txt
284819 drwxr-xr-x. 2 root root 4.0K Mar 21 10:00 scripts
262284 -rw-r--r--. 1 root root 30 Mar 17 05:53 stu.txt
262272 -rw-r--r--. 1 root root 0 Mar 17 05:24 test.txt.txt
[root@test testdir]#
[root@oldboyedu-35 scripts]# ls -lhi /etc/hosts
129822 -rw-r--r--. 2 root root 158 Mar 16 20:07 /etc/hosts
[root@oldboyedu-35 scripts]#
12988 | inode号码(家庭住址) |
- | 文件类型 |
rw-r--r--. | 权限 |
2 | 硬链接数(超市入口数量,可以通过多少个门进入超市) |
root | 属主,文件所有者 |
root | 属组,所有者属于的组 |
Mar 16 20:07 | 文件修改时间 |
/etc/hosts | 文件或目录的名字(不属于属性) |
文字解释:
第一列:inode索引节点编号,每个分区里唯一(相当于人的身份证号 家庭住址,全国唯一);
系统读取文件时首先通过文件名找到inode号码,然后才能读取到文件内容。
第二列:文件类型及权限。第二列共11个字符:其中第一个字符为文件类型,随后的9个字符为文件的对应权限,最后一个字符点好"."是和selinux有关的一个标识;
第三列:硬链接个数(详细参看ln命令的讲解);linux里面文件和程序的存在必须要有用户组满足相应的存在需求。
第四列:文件或目录所属的用户文件的所有者(属主);
第五列:文件或目录所属组(属组)(家庭);
第六列:文件或目录的大小;
第七八九列:文件或目录的修改时间;默认月日时分;
第十列:实际的文件或目录名。
文件名不算文件的属性。
1.2 【索引节点inode】
1.2.1 【inode概述】
预备知识
硬盘的使用过程:
硬盘要存放数据(房子住人),首先要分区(隔断),然后格式化创建文件系统(装修-装修风格),最后挂载(没有挂载:没有门窗的监狱),才能存数据(住人)。
Inode,中文意思是索引节点(index node)。在每个linux存储设备或存储设备(磁盘或硬盘)的分区(存储设备可以是硬盘、软盘、U盘......)格式化为多个ext4(centOS6.7)文件系统后,一般生成两部分:第一部分是Inode(很多个),第二部分是Block(很多个)。
这个Block(块)是用来存储实际数据用用的,例如:照片,视频等普通文件数据。
而inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode属性信息包括不限于文件大小、属主(用户)、归属用户组、文件权限、文件类型,[修改]时间,还包含指向文件实体的指针功能(你的Block的位置,inode节点--block的对应关系)等,但是inode里面唯独不包含文件名本身。(文件的名字不是文件的属性)
Inode:存放的是文件/目录属性信息
Block:实际存放数据的位置/空间
Inode除了记录文件属性信息外,还会为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体。
1.2.2 【linux系统中文件的访问过程】
在linux系统中,文件的访问过程一般是通过文件名找到对应的inode,通过inode存储的文件信息找到对应的block,从而找到对应的文件,如下图:
1.3 【inode与block】
因为inode要存放文件的属性信息,所以每个inode本身是有大小的,centOS5系列inode默认大小是128字节,而centOS6系列inode的默认大小是256字节,inode的大小在分区倍格式化创建文件系统之后定下来,格式化以后就无法更改inode的大小,格式化之前可以通过参数指定inode的大小,但是一般企业工作环境没有这个需求。
查看inode大小:
查看node的大小可以利用dumpe2fs来查看:
[root@test testdir]# dumpe2fs /dev/sda3 |grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
[root@test testdir]# dumpe2fs /dev/sda1 |grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
[root@test testdir]#
inode使用情况:
查看inode的使用情况可以用df -i来查看:
[root@test testdir]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 462384 58428 403956 13% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
[root@test testdir]#
1.3.1 【有关Inode小结】
※来源
磁盘被分区并格式化为ext4文件系统(装潢风格)后会生成一定数量的inode和block。
※意义
inode称为index node索引(目录)节点,它的作用是存放文件的属性信息以及作为文件内容的索引(位置)(指向文件的实体block)。
※特点
ext3/ext4文件系统(centOS5.x/centOS6.x默认的文件系统)下,一个非空的文件至少要占一个inode和一个block。(文件size比较大)。
inode节点号相同的文件,互卫为链接文件,可以认为是一个文件的不同入口。
inode在某一个文件系统(分区),是唯一的。
※使用
ls -i 或者 df -i。
1.3.2 【有关Block的小结】
※来源
磁盘被分区并格式化为ext4文件系统(装潢风格)后会生成一定数量的inode和block。
※意义
block是用来存储实际数据的,每个block的大小一般有1K、2K、4K几种。其中引导分区等为1K,其他普通分区多为4K(C6)。
※特点
磁盘读取时按block为单位读取的。
一个文件可能占用多个block。每读取一个block就会消耗一次磁盘I/O(input/output 磁盘读写)。
一个block剩余空间会被浪费,无论男人多小。
※使用
dunpe2fs /dev/sda3grep -i "block size"
df -h
block大小的查看:
[root@oldboyedu-35 /]# dumpe2fs /dev/sda3 |grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
[root@oldboyedu-35 /]#
block使用情况查看:
[root@oldboyedu-35 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.9G 1.6G 4.9G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
[root@oldboyedu-35 /]#
1.4 【企业案例】
1.4.1 如果向磁盘写入数据提示如下错误:No space left on device,通过df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景什么情况下回导致这个问题发生?
企业案例模拟:
mkdir -p /app/logs
dd if=/dev/zero of=/dev/sdc bs=8K count=10
ls -l /dev/sdc
mkfs.ext4 /dev/sdc
tune2fs -c -1 /dev/sdc
mount -o loop /dev/sdc /app/logs
一般发生这种情况都是inode使用完了引起的。
inode满了:
[root@test ~]# #磁盘空间满了 inode满了
[root@test logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.9G 1.7G 4.9G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 34M 147M 19% /boot
/dev/sdc 73K 14K 55K 21% /app/logs
[root@test logs]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 462384 58765 403619 13% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sdc 16 11 5 69% /app/logs
[root@test logs]# cd /app/logs/
[root@test logs]# touch {1..6}
touch: cannot touch `6': No space left on device
[root@test logs]# touch oldboy.txt
touch: cannot touch `oldboy.txt': No space left on device
[root@test logs]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.9G 1.7G 4.9G 25% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 34M 147M 19% /boot
/dev/sdc 73K 14K 55K 21% /app/logs
[root@test logs]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 462384 58765 403619 13% /
tmpfs 125517 1 125516 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
/dev/sdc 16 16 0 100% /app/logs
一般情况下,发生磁盘空间不足的情况下要检查一下两个方面:
1)检查inode是否用完
2)检查block是否用完
1.4.2 【删除文件名是乱码的文件】
方法一:通过inode来删除文件
#1.查看文件的inode号码
[root@test testdir]# ls -lhi '\-p'
284654 -rw-r--r--. 1 root root 0 Mar 22 02:05 \-p
[root@test testdir]#
#2.通过inode删除文件
[root@test testdir]# rm -f $(find /oldboy/ -inum 284654)
[root@test testdir]# ll '\-p'
ls: cannot access \-p: No such file or directory
[root@test testdir]#
方法二:文件名放在单引号中删除
[root@test testdir]# rm -f '\--p'
[root@test testdir]# ll '\--p'
ls: cannot access \--p: No such file or directory
[root@test testdir]#
方法三:
rm -f --
#--参数的结束标志,--前面的命令的参数,后面是你要处理的文件。
[root@test testdir]# rm -f -- |--o
[root@test testdir]# ll '|--o'
ls: cannot access |--o: No such file or directory
[root@test testdir]#
2. 文件类型及扩展名
2.1 【文件类型介绍】
在Linux系统中,可以说一切(包括目录、普通文件、设备文件)皆文件。文件类型包含有普通文件、目录、字符设备文件、块设备文件、符号/软连接文件、管道文件等等。
Linux下面如何查看一个文件的文件类型:
1)ls -l
2)flie
在ls -l显示文件属性内容后,第一列的第一个字符就是用来区分文件类型的:
文件类型标识符 | 文件类型说明 |
d(directory) | 这是一个目录文件,如上文ext,在ext2fs中,目录是一个特殊文件。 |
-(regular file) | 这是一个普通文件,如上文的oldboy.txt |
l(link) | 这是一个符号/软链接文件,实际上它指向另一个文件。(相当于windows的快捷方式) |
b(block) | 标识块设备和其他的外围设备,是特殊类型的文件。 |
c(character) | 标识字符设备文件。 |
s(socket) | 标识socket(套接字)文件。 |
p(named pipe) | 标识管道文件。 |
find 命令 -type的文件类型的参数:
b block(buffered)special
c character(unbuffered)special
d directory
p named pipe(FIFO)
f regular file
l symbolic link
s socket
D door(Solaris)
2.2 【文件类型分别介绍】
2.2.1 【普通文件(regular file)】
[root@test testdir]# ls -l oldboy.txt
-rw-r--r--. 1 root root 29 Mar 19 17:26 oldboy.txt
[root@test testdir]#
我们通过ls -l来查看oldboy.txt的属性,可以看到第一列的内容为-rw-r-r--,第一个符号-(英文字符减号),在Linux中,以这样的字符开头的文件就表示普通文件。
这些文件一般使用相关的应用程序或系统命令创建,比如touch、cp、tar、echo、cat、>、>>等工具命令......。普通文件的删除可以使用rm命令;
普通文件(regular file):第一个属性为"-",按照文件内容,又可大略分为:
1)(纯)文本文件(ASCII):文件内容可以直接读取到数据,例如:字母、数字、特殊符号等。可以用cat命令读文件,比如配置文件一般都是这种类型的。
2)二进制文件(binary):Linux中的命令程序就是属于这种格式。例如cat命令就是一个二进制文件。
3)数据格式的文件(data):有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件。例如:linux在登陆用户时,都会将登陆的数据巨鹿在/var/log/wtmp(last命令的数据库文件)那个文件内,改文件是一个数据文件。通过last命令读取出来。cat命令读取会出现乱码。因为他属于一种特殊格式的文件。lastlog(/var/log/atlog)
2.2.2 【目录文件(directory)】
[root@test testdir]# ls -ld oldgirl/ scripts/
drwxr-xr-x. 2 root root 4096 Mar 22 02:49 oldgirl/
drwxr-xr-x. 2 root root 4096 Mar 21 10:00 scripts/
[root@test testdir]#
如上,在oldboy目录下执行ls -ld查看目录名是,可以看到第一列的内容为drwxr-xr-x,这种开头带d字符的文件就表示目录,目录在Linux中是比较特殊的文件。
如果仅仅想看到目录属性时,可以使用ls的参数-d,搭配组合为ls -ld 目录名。
创建目录的命令可以用mkdir命令或cp命令带参数(带-r或-a),cp可以把整个目录复制为另一个目录。删除目录用rm -r或rmdir(删空目录才可以)命令。
2.2.3 【字符设备或块设备文件】
在目录/dev/下:
[root@test testdir]# cd /dev/
[root@oldboyedu-35 dev]# ll -al /dev/tty
crw-rw-rw-. 1 root tty 5, 0 Mar 21 08:18 /dev/tty
[root@oldboyedu-35 dev]#
/dev/tty属性是 crw-rw-rw- ,第一个字符是c,这表示字符设备文件。字符设备就是串行端口的解救设备,如猫等串口设备。
[root@oldboyedu-35 dev]# ll -al /dev/sda
brw-rw----. 1 root disk 8, 0 Mar 21 08:18 /dev/sda
[root@oldboyedu-35 dev]#
/dev/sda的属性是brw-rw---- ,第一列的第一个字符是b,者表示块设备,块设备就是存储数据提供系统及程序访问的接口设备,如硬盘,光驱等都属于块设备;
以上种类的文件,一般都可以用mkond(mkond -make block or charater special files)来创建,用rm来删除。
2.2.4 【套接口文件】
当我们启动mysql服务时,会产生一个mysql.scok文件。这个文件的属性的第一个字符是s;
.scok文件也是一类特殊的文件,这类文件通常用在网络之间进程数据连接,如:我们可以启动一个程序来监听客户端的请求,在客户端可以通过套接字来进行数据通信。
2.2.5 【符号链接/软链接文件】
符号链接文件也被称为软链接文件。
[root@test testdir]# echo "I am a oldboy" > oldboy.txt
[root@test testdir]# # ln -s 给谁创建软链接(源文件) 软链接的名字(名字不能存在)
[root@test testdir]# ln -s oldboy.txt oldboy.txt_soft
[root@test testdir]# ll
total 16
-rw-r--r--. 1 root root 14 Mar 22 03:28 oldboy.txt
lrwxrwxrwx. 1 root root 10 Mar 22 03:31 oldboy.txt_soft -> oldboy.txt
drwxr-xr-x. 2 root root 4096 Mar 22 03:27 oldgirl
drwxr-xr-x. 2 root root 4096 Mar 21 10:00 scripts
drwxr-xr-x. 2 root root 4096 Mar 22 03:27 txtfile
[root@test testdir]#
如上所示,当我们查看文件属性时,会看到类似lrwxrwxrwx,第一个字符是l,这类文件标识链接文件(这里的是软链接文件)。
可以通过ln -s 源文件 新文件名 创建(如果不使用-s,则会创建硬链接,但不适用于目录)。软链接的原理图如下:
2.2.6 【管道文件】
FIFO也是一个特殊的文件类型,主要是解决多个程序同时访问一个文件所造成的错误,第一个字符是p。FIFO是fifi - first-in first-out的缩写。
2.3 【文件扩展名】
在Linux中虽然扩展名没有什么实际意义,但是为了兼容windows,同时,便于我们大多数习惯了windows的用户区分文件的不同,所以我们还是习惯通过扩展名来表示不同的文件类型。举例如下:
①.tar、tar.gz、tgz、tgz、tar.bz表示压缩文件,创建命令一般为tar、gzip、zip等。
②.sh表示shell脚本文件,通过shell语言开发的程序。
③.pl表示perl语言文件,通过Perl语言开发的程序。
④.py表示python语言文件,通过python语言开发的程序。
⑤.html、.htm、.jsp、.do表示网页语言文件。
⑥.conf表示系统配置文件
⑦.rpm表示rpm安装包文件。
补充:
(1)系统文件
扩展名 | 说明 |
.conf | 一种配置文件。配置文件有时也有.cfg |
.lock | 锁(lock)文件:用来判定程序或设备是否正在被使用。 |
.rpm | Redhat 用来安装软件的软件包管理文件。 |
(2)压缩和归档文件
文件扩展名 | 说明 |
.bz2 .gz .tar .tbz .rar .zip | 使用bzip2压缩的文件 使用gzip压缩的文件 使用tar(tap archive,磁盘归档的简写) 用tar和bzip压缩的文件 windows中常见,在linux中较少使用 MS-DOS中常见。Linux下使用gzip压缩,而.zip归档较少。 |
(3)编程和脚本文件
文件扩展名 | 说明 |
.c .cpp .h .o .pl .py .so .sh .java .lcss .ctl | C程序语言源码文件 C+程序语言的源码文件 C或C++程序语言的头文件 程序的对象文件 Perl脚本 Python脚本 库文件 shell脚本 java程序源代码 java程序源代码编译后的中间代码文件 TCL脚本 |
3. 文件的权限
3.1 【文件权限概述】
Linux中的文件或目录权限和用户及用户组关系很大,要理解这部分内容,徐亚先了解Linux系统中用户管理方面额知识。
Linux中每个文件或目录都有一组9个基本权限位,每三个字符被分为一组,他们分别是属主权限位(占三个字符)、用户组权限位(占三个字符)、其他用户权限位(占三个字符)。比如rexr-xr-x,在Linux中正式这9个权限(更多权限位会在后面提到)位来控制文件属性、用户组以及其他用户的权限。如下图所示:
3.2 【权限位说明】
Linux文件或目录的权限室友9个权限位来控制,没三位为一组,文件的所有者权限:User Owner的读、写、执行,未见所有者属于的组的权限:Group用户组(Group)的读、写、执行,其他人Other其他用户的读、写、执行:
r(read)可读权限,对应数字4
w(write)可写权限,对应数字2
x(execute)可执行权限,对应数字1;
- 没有任何权限,对应数字0。
[root@test testdir]# ll -d /tmp /usr/bin/passwd `which locate` /bin/ls
-rwxr-xr-x. 1 root root 117048 May 11 2016 /bin/ls
drwxrwxrwt. 8 root root 4096 Mar 28 10:37 /tmp
-rwx--s--x. 1 root slocate 38464 Mar 12 2015 /usr/bin/locate
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
[root@test testdir]#
4. 链接
4.1 【链接的概念】
在Linux系统中,链接可以分为两种:一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link or Soft Link or symlink)。ln命令用来创建链接文件,在默认不带参数的情况下,执行ln命令创建的链接是硬链接。
4.2 【硬链接】
硬链接是指通过索引节点(Inode)来进行链接。在Linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Index Inode)简称Ionde,即在系统中文件的编号。(身份证号码)
在Linux同一个文件系统中,多个文件名指向同一个索引节点(inode号相同)(Inode)是正常且允许的。这种情况的文件就称为硬链接。
在同一个文件系统中(装修风格),多根文件的inode号码相同,这些文件就互为硬链接文件。
硬链接文件就相当于文件的另一个入口。硬链接的作用是允许一个文件拥有多个有效路径名(多个入口相当于超市的多个门),这样用户就可以建立硬链接到重要的文件,防止“误删”元数据(很多硬件存储,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接)。
在Linux系统中,删除静态文件(没有进程调用)(目录也是文件)的调节是与之相关的所有硬链接文件均被删除(暂时可以这样理解)。
硬链接的创建:
直接执行命令“ln 源文件(给谁创建硬链接 目标) 硬链接文件”
4.2.1 【目录的硬链接】
目录本身,以及目录下的"."目录都是其硬链接。
[root@oldboyedu-35 /]# ll -d /oldboydir/ #/oldboy目录两个硬链接
drwxr-xr-x. 2 root root 4096 Mar 23 14:22 /oldboydir/
[root@oldboyedu-35 /]# ll -d /oldboydir/ /oldboydir/.
drwxr-xr-x. 2 root root 4096 Mar 23 14:22 /oldboydir/
drwxr-xr-x. 2 root root 4096 Mar 23 14:22 /oldboydir/.
[root@oldboyedu-35 /]#
目录本身以及其下一级目录中的".."目录也属于其硬链接。(注意:目录的硬链接只能到其下一级目录)
[root@oldboyedu-35 /]# mkdir /oldboydir/test/
[root@oldboyedu-35 /]# ll -d /oldboydir/ #/oldboy目录有三个硬链接
drwxr-xr-x. 3 root root 4096 Mar 23 14:25 /oldboydir/
[root@oldboyedu-35 /]# ll -d /oldboydir/ /oldboydir/. /oldboydir/test/..
drwxr-xr-x. 3 root root 4096 Mar 23 14:25 /oldboydir/
drwxr-xr-x. 3 root root 4096 Mar 23 14:25 /oldboydir/.
drwxr-xr-x. 3 root root 4096 Mar 23 14:25 /oldboydir/test/..
[root@oldboyedu-35 /]#
4.2.2 【硬链接知识小结】
1)来源
a)通过执行“ln 源文件(给谁创建硬链接 目标) 硬链接文件”,即可完成创建硬链接。
b)在同一文件系统中,具有相同的inode节点的多个文件时互为硬链接文件。
2)特点
a)硬链接与删除
i.删除硬链接文件或者删除源文件任何之一,文件实体(block数据 文件内容)并未被删除。
ii.只有删除了源文件及所有对应的硬链接文件(硬链接数为0),文件实体(block 数据 文件内容)才会被删除。(暂不考虑进程调用)
iii.当所有的硬链接文件被删除后,再存放新的数据占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收(养成删除及多套测试环境的好习惯)。
b)硬链接文件就是文件的另一个入口(相当于超市的前后门一样)。
c)可以通过给文件设置硬链接文件,来防止重要文件被误删。
d)硬链接文件是普通文件,因此可以用rm命令删除。
e)文件彻底删除:
i.对于静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0(i_link),文件就被删除。
4.2.3 【查看文件的硬链接数】
1)ls -lhi / stat, i_link的查看方法(ls -lhi结果的第三列就是)。
4.3 【软链接】
4.3.1 【软链接的概念】
软链接(Soft Link)也称为符号链接(Symbolic Link symlink)。Linux里的软链接文件就类似于windows系统中的快捷方式。linux里的软链接实际上是一个特殊的文件,文件类型是l。软链接实际上可以理解为一个文本文件,这个文件中包含有软链接指向另一源文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。
软链接的创建:
执行命令“ln -s 源文件 软链接文件”,即可完成创建软链接。
误区:创建软链接源文件是需要存在的,要创建的软链接文件时不能存在的,是要用ln命令创建的。
4.3.2 【软链接知识小结】
1)创建:
a)执行命令“ln -s 源文件 软链接文件”,即可完成创建软链接。
2)含:
a)软链接类似windows的快捷方式(可以通过readlink查看其指向,ls -l)。
b)软链接类似一个文本文件,里面存放的是源文件的路径/位置(ls -l),指向源文件名/位置。
3)特点:
a)删除源文件,软链接文件依然存在,知识无法访问源文件(但是无妨访问指向源文件路径内容了)。
b)失效的时候一般是白字红底闪烁提示。
c)软链接和源文件是不同类型的文件,也是不同的文件。inode号码也不同。
4)软链接文件的类型为"l(细目L)",可以用rm命令删除。
4.4 【软连与硬链接的区别】
在Linux系统中,链接分为两种:一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link)。
4.4.1 【如何创建:】
1)默认不参数的情况下,ln命令创建的是硬链接,带参数-s的ln命令创建的是软链接。
4.4.2 【含义:】
1)硬链接文件与源文件的inode节点号相同,而软链接相当于windows下面的快捷方式(inode节点号与原文件不同)。
4.4.3 【特点:】
1)不能对目录创建硬链接,但可以创建软链接,对目录的软链接经常会被用到。
2)软链接可以跨文件系统,硬链接不可以跨文件系统。
4.4.4 【删除:】
1)删除软链接文件,对源文件无任何影响;
2)删除文件的硬链接文件,对源文件及软链接无任何影响;
3)删除链接文件的源文件,对硬链接文件无影响,会导致软链接失效(红底白字闪烁状);
4)同时删除源文件及其硬链接文件,整个文件才会被"真正"的删除。
4.5 【企业案例】在配置Apache时,执行了./configure --prefix=/application/apache2.2.17来编译apache,在make instal完成后,希望用户的访问路径更简单,需要给/application/apache2.2.17目录做一个软链接/application/apache,使得内部开发或管理人员通过/application/apache就可以访问到apache的安装目录/appliction/apache2.2.17下的内容,请你给出实现的命令。(提示:apache为一个httpd web服务)
软件的安装位置 /application/apache2.2.17 给开发人员使用 /application/apache2.2.17
升级软件,新的软件安装位置 /application/apache2.4.17
[root@oldboyedu-35 /]# mkdir -p /application/apache2.2.17 /application/apache2.4.17
[root@oldboyedu-35 /]# ln -s /application/apache2.2.17/ /application/apache
[root@oldboyedu-35 /]# ll /application/
total 8
lrwxrwxrwx. 1 root root 26 Mar 21 21:23 apache -> /application/apache2.2.17/
drwxr-xr-x. 2 root root 4096 Mar 21 21:22 apache2.2.17
drwxr-xr-x. 2 root root 4096 Mar 21 21:22 apache2.4.17
[root@oldboyedu-35 /]# \rm -f /application/apache
[root@oldboyedu-35 /]# ln -s /application/apache2.4.17/ /application/apache
[root@oldboyedu-35 /]# ll /application/
total 8
lrwxrwxrwx. 1 root root 26 Mar 21 21:26 apache -> /application/apache2.4.17/
drwxr-xr-x. 2 root root 4096 Mar 21 21:22 apache2.2.17
drwxr-xr-x. 2 root root 4096 Mar 21 21:22 apache2.4.17
[root@oldboyedu-35 /]#
4.6 【链接总结】
4.6.1 【有关文件的链接小结】
①删除软链接文件对源文件及硬链接文件无任何影响;
②删除硬链接文件对源文件及软链接文件无任何影响;
③删除源文件,对硬链接文件没有影响,但会导致软链接文件失效,白字红底闪烁。
④同时删除源文件和硬链接(静态文件),文件会被真正删除。
4.6.2 【有关目录链接的小结】
①对于目录,不可以创建硬链接,但可以创建软链接。
②对于目录的软链接是生产场景运维中常用的技巧。
③由于目录的硬链接不能跨越文件系统(分区)(从硬链接原理理解)。
④每个目录下面都会有一个硬链接"."号,和对应上级目录的硬链接".."。
⑤在父目录里面创建一个子目录,父目录的链接数增加1(每个子目录里面都有..来指向父目录)。但是再父目录里创建文件,父目录的链接数不会增加。
5. 文件的时间属性
5.1 【文件被修改或被访问的时间】
mitme(modify time):文件或目录的修改时间,文件内容修改。
ctime(change time):文件或目录属性的修改时间,大小,硬链接数,权限,所有者,所属于的组,类型。
atime(access time):文件或目录的访问时间,cat查看。
5.1.1 【mitme】
[root@test testdir]# stat oldboy.txt
File: `oldboy.txt'
Size: 246 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 284823 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-24 09:16:43.329297303 +0800 #atime,查看文件内容后,改时间更新,有一定限制
Modify: 2017-03-24 09:16:30.982451900 +0800 #mtime,文件的内容修改后该时间才会更新
Change: 2017-03-24 09:16:30.982451900 +0800 #ctime,文件属性发生改变之后才会更新
[root@test testdir]#
[root@test testdir]# echo "modify time changed." >> /oldboy/oldboy.txt #修改文件内容
[root@test testdir]# stat oldboy.txt
File: `oldboy.txt'
Size: 267 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 284823 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-24 09:16:43.329297303 +0800
Modify: 2017-03-25 11:39:07.776088559 +0800 #文件的mitme更新到最近一次修改内容的时间
Change: 2017-03-25 11:39:07.776088559 +0800
[root@test testdir]#
5.1.2 【ctime】
[root@test testdir]# stat oldboy.txt
File: `oldboy.txt'
Size: 246 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 284823 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-24 09:16:43.329297303 +0800 #atime,查看文件内容后,改时间更新,有一定限制
Modify: 2017-03-24 09:16:30.982451900 +0800 #mtime,文件的内容修改后该时间才会更新
Change: 2017-03-24 09:16:30.982451900 +0800 #ctime,文件属性发生改变之后才会更新
[root@test testdir]#
[root@test testdir]# ln /oldboy/oldboy.txt oldboy.txt_link #修改文件的硬链接数
[root@test testdir]# stat oldboy.txt
File: `oldboy.txt'
Size: 267 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 284823 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-24 09:16:43.329297303 +0800
Modify: 2017-03-25 11:39:07.776088559 +0800
Change: 2017-03-25 11:42:21.192660572 +0800 #文件的ctime更新到最近一次修改文件属性的时间
[root@test testdir]#
5.1.3 【atime】
[root@test testdir]# stat oldboy.txt
File: `oldboy.txt'
Size: 246 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 284823 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-24 09:16:43.329297303 +0800 #atime,查看文件内容后,改时间更新,有一定限制
Modify: 2017-03-24 09:16:30.982451900 +0800 #mtime,文件的内容修改后该时间才会更新
Change: 2017-03-24 09:16:30.982451900 +0800 #ctime,文件属性发生改变之后才会更新
[root@test testdir]#
[root@test testdir]# cat oldboy.txt #查看文件内容
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
modify time changed.
[root@test testdir]# stat oldboy.txt
File: `oldboy.txt'
Size: 267 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 284823 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-03-25 11:44:52.725757426 +0800 #atime更新到最近一次查看文件内容的时间,但是,atime改变有一定时间限制,不能短时间内多次修改
Modify: 2017-03-25 11:39:07.776088559 +0800
Change: 2017-03-25 11:42:21.192660572 +0800
[root@test testdir]#
touch命令可以不修改文件内容来修改文件访问时间。
转载至http://blog.sina.com.cn/s/blog_bea8af1a0102xk4a.html