2018-07-31笔记
目录
一、 隐藏权限lsattr_chattr
chattr 设置隐藏权限
查看用法 #man chattr
语法:chattr [+-=] [Asaci] [文件或者目录名]
[aaa@qq.com ~]#chattr –help
Usage: chattr [-RV] [-+=AacDdijsSu] [-v version] files…
参数或选项描述:
-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-V:显示详细过程有版本编号。
-v:设定文件或目录版本(version)。
+ :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。
A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion.
各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。
示例:[aaa@qq.com ~]# chattr +i 22.txt
编辑:[aaa@qq.com ~]# vi 22.txt
提示文件只读
[aaa@qq.com ~]# head -n2 /etc/passwd > 2.txt` -bash: 2.txt: 权限不够
查看权限
[aaa@qq.com ~]# ls -l 2.txt -rw-r--r-- 1 root root 0 5月 13 19:15 2.txt
可以看到root用户是有读写权限的,这时候就要考虑是否有什么隐藏权限
#lsattr`**查看隐藏权限** [aaa@qq.com ~]# lsattr 2.txt ----i----------- 2.txt
知识点:正常情况下新建一个文件是没有任何隐藏权限的
加了i
权限之后 不能mv(重命名) rm
(删除) vi
(编辑) touch
(更改时间) >
(覆盖)
如何去除i
权限? # chattr -i 2.txt
另一种用法 # chattr +a 2.txt
只能追加,不允许其他操作
[aaa@qq.com ~]# chattr +a 2.txt [aaa@qq.com ~]# mv 2.txt 3.txt mv: 无法将"2.txt" 移动至"3.txt": 不允许的操作 [aaa@qq.com ~]# rm 2.txt rm:是否删除普通空文件 "2.txt"?y rm: 无法删除"2.txt": 不允许的操作 [aaa@qq.com ~]# head -n2 /etc/passwd > 2.txt -bash: 2.txt: 不允许的操作 [aaa@qq.com ~]# head -n2 /etc/passwd >> 2.txt [aaa@qq.com ~]# cat 2.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
由上可以看到赋予2.txt a
的隐藏权限后,允许追加,类似于日志,还允许touch
(更改时间),不允许其他操作。
如何去除a
权限? # chattr -a 2.txt
实例
1、用chattr命令防止系统中某个关键文件被修改: #chattr +i /etc/resolv.conf
然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。
vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉:
chattr -i /etc/resolv.conf
使用 lsattr 命令来显示文件属性: # lsattr /etc/resolv.conf
输出结果为:
—-i——– /etc/resolv.conf
2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件: # chattr +a /var/log/messages
lsattr
lsattr命令格式:
[aaa@qq.com ~]#lsattr [-RVadlv] [files…]
参数或选项说明:
-R:递归列示目录及文件属性。
-V:显示程序版本号。
-a:显示所有文件属性,包括隐藏文件(.)、当时目录(./)及上层目录(../)。
-d:仅列示目录属性。
-l:(此参数目前没有任何作用)。
-v:显示文件或目录版本。
#lsattr
可以查看目录下面的子目录和文件,不能查看目录本身
[aaa@qq.com ~]# ls 1 2 [aaa@qq.com ~]# lsattr 1/ ---------------- 1/2
#lsattr -d
可以 查看目录本身,和#ls -d
用法相同
[aaa@qq.com ~]# lsattr -d 1/ ---------------- 1/
知识点:给目录加i
权限和给文件加i
权限,实际上是一样的。但是针对已存在目录下的文件,限制不大,依然可以对目录下的文件进行编辑,a
权限也是,只能限制目录本身。
#lsattr 1
只能查看目录下的权限
[aaa@qq.com ~]# lsattr 1/ ---------------- 1/2
#lsattr -R 1
可以查看目录和目录下子目录里所有的文件权限
[aaa@qq.com ~]# lsattr -R 1 ---------------- 1/2 1/2: ---------------- 1/2/3 1/2/3:
完整的目录
[aaa@qq.com ~]# tree 1 1 └── 2 └── 3 2 directories, 0 files
知识点:#lsattr -a
可以查看隐藏的文件权限
二、特殊权限set_uid
创建s与t权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限。例如,账号和密码的存放文件其实是/etc/passwd与/etc/shadow,它们的拥有者是root。在这个权限中,仅有root可以强制写入。一个普通用户webgod去更新自己的密码时,使用的就是/usr/bin/passwd程序,却可以更新成功,而/usr/bin/passwd的拥有者是root。那么,就是说webgod这个普通用户可以访问/etc/shadow密码文件这既是因为有s权限的帮助。当s权限在user的x时(注意下图的/usr/bin/passwd的相关属性),此处是-rwsr-xr-x,称为Set UID,简称SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。所以,当webgod用户执行/sur/bin/passwd时,他就暂时获取文件拥有者root的权限。
SUID仅可用在二进制文件(binary file),而且对目录无效。
举个栗子:#passwd root
修改root用户密码 passwd
的权限是
[aaa@qq.com ~]# which passwd /usr/bin/passwd [aaa@qq.com ~]# ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
这时候第一权限位是rws,而不是我们常见的rwx
s=set_uid
知识点:改密码的文件路径
/etc/shadow
set_uid权限意味着,除了这个文件的所有者之外,其他所属组、其他用户在执行此命令那一瞬间,拥有所有者的权限。例如更改密码,普通用户应该是不能够更改密码的,但是passwd命令拥有s权限,所有者是root。那么普通用户在执行passwd命令修改密码时,那一瞬间他将拥有root的权限。 要赋予文件
set_uid
权限,那么此文件必须要二进制可执行的,例如ls
、passwd
、vi
。-
拓展
# file 文件路径
可以比ls -l更详细地显示文件的类型信息,查看文件是否是二进制文件
[aaa@qq.com ~]# file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3d705971a4c4544545cb78fd890d27bf792af6d4, stripped [aaa@qq.com ~]# file /bin/yum /bin/yum: Python script, ASCII text executable [aaa@qq.com ~]# file /bin/vi /bin/vi: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=7bc69206715fc2ed5b9fccaabca3a2fa6b08b82c, stripped
A.如何给文件赋予set_uid
权限? # chmod u+s /usr/bin/ls
给ls命令s权限
[aaa@qq.com ~]# which ls alias ls='ls --color=auto' /usr/bin/ls [aaa@qq.com ~]# ls -l /usr/bin/ls -rwxr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls [aaa@qq.com ~]# chmod u+s /usr/bin/ls [aaa@qq.com ~]# !ls ls -l /usr/bin/ls -rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
此时,其他用户使用ls命令可以查看/root用户下目录
B.如何给文件去除set_uid
权限? # chmod u-s /usr/bin/ls
给ls命令去掉s权限
C.另一种形式给文件赋予set_uid
权限 # chmod u=rws /usr/bin/ls
[aaa@qq.com ~]# chmod u=rws !$ chmod u=rws /usr/bin/ls [aaa@qq.com ~]# ls -l /usr/bin/ls -rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
这时看到ls权限是rwS,是因为它没有x可执行权限,但是其实不影响,普通用户还是可以执行,可以在赋予一个x权限,就会S变s。
[aaa@qq.com ~]# chmod u+x !$ chmod u+x /usr/bin/ls [aaa@qq.com ~]# ls -l /usr/bin/ls -rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
为什么没有x权限也可以直接执行?
答:1.s也有执行的含义,所以可以直接执行。2.ls命令普通用户权限本身就有x权限。
知识点:目录也可以加s权限,但是没有意义。
拓展:
set_uid 设定之后会在rwxr-xr-x前面加一位
就是4755
chmod u+s == chmod 4755
变成rwsr-xr-x
三、特殊权限set_gid
可以应用在文件上同样可以作用在目录上。设置在文件上和set_uid类似,前提这个文件必须是可执行的二进制文件。设置set_gid后,执行该文件的用户会临时以该文件所属组的身份执行。若目录被设置这个权限后,任何用户在此目录下创建的文件或者目录都具有和该目录所属组相同的组。
set_git作用在组权限位上
[aaa@qq.com ~]# chmod g+s /usr/bin/ls [aaa@qq.com ~]# ls -l /usr/bin/ls -rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
s权限意味着,除了这个文件的所属组之外,其他用户在执行此命令那一瞬间,拥有所属者的权限。
[aaa@qq.com ~]# ls -ld /root/ dr-xr-x---. 15 root root 4096 5月 13 19:51 /root/
root所属组权限为r-x,可读可执行。所以普通用户拥有set_git权限时,也可以使用root所属组的权限,可以查看/root/下的目录文件
[aaa@qq.com ~]# su huhu [aaa@qq.com root]$ ls -l /root/ 总用量 8 drwx------ 3 root root 15 5月 13 19:53 1 -rw-r--r-- 1 root root 65 5月 13 19:38 2.txt -rw-------. 1 root root 1257 4月 28 04:38 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 4月 27 21:09 Desktop drwxr-xr-x. 2 root root 6 4月 27 21:09 Documents drwxr-xr-x. 2 root root 6 4月 27 21:09 Downloads drwxr-xr-x. 2 root root 6 4月 27 21:09 Music drwxr-xr-x. 2 root root 6 4月 27 21:09 Pictures drwxr-xr-x. 2 root root 6 4月 27 21:09 Public drwxr-xr-x. 2 root root 6 4月 27 21:09 Templates drwxr-xr-x. 2 root root 6 4月 27 21:09 Videos
如果所属组没有set_git权限时,普通用户访问会提示权限不够。
[aaa@qq.com root]$ ls -l /root/ ls: 无法打开目录/root/: 权限不够
set-git权限也可以作用到目录上
给123目录赋予s权限 [aaa@qq.com ~]# chmod g+s 123
查看权限 [aaa@qq.com ~]# ls -ld 123
drwxr-sr-x 2 root root 6 5月 13 21:31 123
更改用户组 [aaa@qq.com ~]# chown :huhu 123
[aaa@qq.com ~]# ls -ld 123
drwxr-sr-x 2 root huhu 6 5月 13 21:31 123
在目录下创建一个文件 [aaa@qq.com ~]# touch 123/2
[aaa@qq.com ~]# ls -ld 123
drwxr-sr-x 2 root huhu 15 5月 13 21:35 123
这是新建的文件所属组也是huhu
知识点:当给一个目录setgit权限时,他下面创建的子目录和文件的所属组会跟着父级目录走,跟创建setgit权限的目录保持一致。
拓展:
set_gid 设定之后会在rwxr-xr-x前面加一位
就是2755
chmod g+s == chmod 2755
变成rwxr-sr-x
如果s的权限是在用户组,那么就是Set GID,简称SGID。SGID可以用在两个方面:
1 文件:如果SGID设置在二进制文件上,无论用户是谁,在执行该程序的时候,它的有效用户组将会变成该程序的用户组所有者;
2 目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
四、 特殊权限stick_bit
SBit一般用于目录上,对文件的意义不大。SBit对目录的作用是:在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权利删除。SBit可以理解为防删除位。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用SBit位。设置该位后,就算用户对该文件的父目录具有写权限,也不能删除文件。
/tmp/目录默认有stick_bit权限,简写为t。
[aaa@qq.com ~]# ls -ld /tmp/ drwxrwxrwt. 16 root root 4096 5月 13 21:44 /tmp/
它的权限位在其他用户上 ,防删除位。防止别人删除自己的文件,root用户除外。
用户在/tmp/下新建一个文件
[aaa@qq.com tmp]$ touch 1 [aaa@qq.com tmp]$ ls -ld 1 -rw-rw-r-- 1 huhu huhu 25 5月 13 21:54 1
她的所属用户和所属组都是huhu,这时其他用户huhu1可以对1进行编辑,但是不可删除,root除外
[aaa@qq.com tmp]$ rm 1 rm:是否删除有写保护的普通文件 "1"?y rm: 无法删除"1": 不允许的操作
增加stick_bit防删除位 #chmod o+t 目录
在/tmp目录下,用户新建一个目录,赋予777权限
[aaa@qq.com tmp]$ mkdir huhu [aaa@qq.com tmp]$ chmod 777 huhu [aaa@qq.com tmp]$ ls -ld huhu drwxrwxrwx 2 huhu huhu 6 5月 13 22:16 huhu
另外一个用户,进入此目录下创建文件和目录
[aaa@qq.com huhu]$ touch 1.txt [aaa@qq.com huhu]$ mkdir 222 [aaa@qq.com huhu]$ ls -ls 总用量 0 0 -rw-rw-r-- 1 huhu1 huhu1 0 5月 13 22:21 1.txt 0 drwxrwxr-x 2 huhu1 huhu1 6 5月 13 22:21 222
这时候到创建主目录的用户下,查看刚才创建的文件和子目录,所属用户和用户组是huhu1
[aaa@qq.com huhu]$ ls -l 总用量 0 -rw-rw-r-- 1 huhu1 huhu1 0 5月 13 22:21 1.txt drwxrwxr-x 2 huhu1 huhu1 6 5月 13 22:21 222
然后删除huhu1创建的文件和目录
[aaa@qq.com huhu]$ rm 1.txt rm:是否删除有写保护的普通空文件 "1.txt"?y [aaa@qq.com huhu]$ rm -r 222 rm:是否删除有写保护的目录 "222"?y [aaa@qq.com huhu]$ ls -l 总用量 0
为什么能够删除?
答:因为删除1.txt和222看的不是他们自身的权限,而是他们所在目录huhu这个文件夹的权限,huhu之前赋予的是777权限,所以用户是可读可写可执行的,当然也可以删除。如果这时候huhu加了防删除位,那么就不能删除他下面的文件和目录了。
一个文件能否被删除,取决于该文件的父目录的权限,/tmp/目录是777,任何人都可写的,所以理论上任何人都可以删除/tmp/下的所有文件,但是,user2是不可以删除user1的文件的,可以修改,只有user1和root可以删除,这就是因为/tmp/目录有一个stick_bit。
拓展:
stick_bit 设定之后会在rwxr-xr-x前面加一位
就是1755
chmod o+t == chmod 1755
变成rwxr-xr-t
五、inode
1.inode是什么?
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
2.inode的内容
inode包含文件的元信息,具体来说有以下内容:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
可以用stat命令,查看某个文件的inode信息:
stat example.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。
3.inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。 df -i
查看每个inode节点的大小,可以用如下命令: sudo dumpe2fs -h /dev/hda | grep "Inode size"
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
4.inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。
表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
使用ls -i命令,可以看到文件名对应的inode号码: ls -i example.txt
5.目录文件
Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。
目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
ls命令只列出目录文件中的所有文件名:
ls /etc
ls -i命令列出整个目录文件,即文件名和inode号码:
ls -i /etc
如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。
ls -l /etc
理解了上面这些知识,就能理解目录的权限。目录文件的读权限(r)和写权限(w),都是针对目录文件本身(即不同用户能以什么权限访问操作对该目录文件,例如这里不同用户对tmp目录文件(d可以查出tmp是目录文件,d表示directory,即目录)分别为rwxr-xr-x,第一组的三个字符,即rwx,表示文件拥有者用户的对该文件的读写权限,第二组的三个字符,即r-x,表示文件拥有者用户所在的用户组里的其他用户对该文件的读写权限,第三组的三个字符,即r-x,表示文件拥有者用户所在的用户组以外的用户对该文件的读写权限。一个某个用户下运行的进程访问操作该目录文件只能以该用户所具有的对该目录文件的权限进行操作)。由于目录文件内只有文件名和inode号码,所以如果只有读权限,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而读取inode节点内的信息需要目录文件的执行权限(x)。
6.inode特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
六、软链接文件
除了硬链接以外,还有一种特殊情况。
文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的”软链接”(soft link)或者”符号链接(symbolic link)。
这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:”No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数”不会因此发生变化。
软链接类似于Windows的快捷方式
拓展 # cat /etc/redhat-release
查看系统版本,只针对Redhat和centos
[aaa@qq.com ~]# ls -l /bin lrwxrwxrwx. 1 root root 7 4月 28 04:33 /bin -> usr/bin
/bin相当于/usr/bin的快捷方式
概念:
链接文件的大小和路径有关,路径越长,文件越大。
软链接可以节省空间,有些文件需要在某个路径下有某个文件,但是这个文件其实是在另一个目录下,这时候就需要用到软链接。
如何创建软链接? #ln -s 源文件 创建软链接的文件
[aaa@qq.com ~]# tree 1 1 └── 2 ├── 1.txt └── 3 └── 1.txt 2 directories, 2 files [aaa@qq.com ~]# ln -s /root/1/2/1.txt /root/1/2/3/2.txt [aaa@qq.com ~]# tree 1 1 └── 2 ├── 1.txt └── 3 ├── 1.txt └── 2.txt -> /root/1/2/1.txt 2 directories, 3 files
软链接也可以链接目录
[aaa@qq.com ~]# ln -s /root/1/2 /root/1/4 [aaa@qq.com ~]# ls -l 1 总用量 0 drwxr-xr-x 3 root root 28 5月 13 22:45 2 lrwxrwxrwx 1 root root 9 5月 13 22:54 4 -> /root/1/2
注意:删除软链接目录时,后面不要加/
相对路径软链接有弊端
之前我们用到的是绝对路径,在同一个路径下创建的软链接是相对路径 [aaa@qq.com tmp]# ln -s ifcfg.log ifcfg.log2
如果复制到另一台机器上或者目录改动,那么软链接就会失效,尽量使用绝对路径。
将ifcfg.log2这个软链接移动到/root/1下,查看
[aaa@qq.com tmp]# mv ifcfg.log2 /root/1 [aaa@qq.com tmp]# ls -l /root/1 总用量 0 drwxr-xr-x 3 root root 28 5月 13 22:45 2 lrwxrwxrwx 1 root root 9 5月 13 22:54 4 -> /root/1/2 lrwxrwxrwx 1 root root 9 5月 13 22:57 ifcfg.log2 -> ifcfg.log
此时ifcfg.log是找不到的,会一直闪烁
新建一个该文件,恢复正常 [aaa@qq.com ~]# touch /root/1/ifcfg.log
软链接的好处
示例:
假设现在有个服务server,会生成一个日志文件run.log
路径在/boot/run.log,但是/boot目录空间快要满了
这时候可以把run.log复制到/目录下 # cp /boot/run.log /run.log
然后删掉/boot下的run.log #rm /boot/run.log
做一个软链接 #ln -s /run.log /boot/run.log
这时,server服务继续使用的是/boot/run.log这个日志文件,但事实上它现在只是一个软链接,真正的位置是在/目录下,有效的解决了/boot空间内存不足的问题
拓展 rsync命令
rsync命令,是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
用法
下次详细在讲……
七、硬链接文件
一般情况下,文件名和inode号码是”一一对应”关系,每个inode号码对应一个文件名。
但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。
这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为”硬链接”(hard link)。
文件的inode号一般都为1,代表没有重复使用inode号的其他文件。
目录的inode号比较特殊,下面有子目录,所以会有相同的inode号。
硬链接:硬链接不支持对目录做硬链接,只支持对文件做硬链接,而且不能跨分区!!! #ln 源文件 硬链接文件
[aaa@qq.com ~]# ln 2.txt 2-1.txt [aaa@qq.com ~]# ls -l 总用量 12 drwx------ 3 root root 59 5月 13 23:06 1 drwxr-xr-t 2 root huhu 15 5月 13 21:35 123 -rw-r--r-- 2 root root 65 5月 13 19:38 2-1.txt -rw-r--r-- 2 root root 65 5月 13 19:38 2.txt
2.txt 和2-1.txt inode号相同
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做”链接数”,记录指向该inode的文件名总数,这时就会增加1。
反过来,删除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的”链接数”。创建目录时,默认会生成两个目录项:”.”和”..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2(某一目录的目录名和该目录的当前目录名)
1.创建的一个新文件和另一个文件inode号相同,那他们互为硬链接。
2.硬链接不受源文件影响,即使源文件被删除,依然有效。而软链接就依赖与源文件。硬链接可以有多个,但是至少要留有一个inode号,不能全部删除
3.硬链接不会占用双份空间,和源文件inode号相同,不多占用内存。
4.分区有独立的inode体系,硬链接不可以跨分区,因为不同分区有相同的inode号
5.AB互为硬链接 ,改了A之后,B会自动变化
拓展
其中每个dentry都有一个唯一的inode,而每个inode则可能有多个dentry,这种情况是由ln硬链接产生的。
硬链接:其实就是同一个文件具有多个别名,具有相同inode,而dentry不同。
1. 文件具有相同的inode和data block;
2. 只能对已存在的文件进行创建;
3. 不能交叉文件系统进行硬链接的创建
4. 不能对目录进行创建,只能对文件创建硬链接
5. 删除一个硬链接并不影响其他具有相同inode号的文件;
软链接:软链接具有自己的inode,即具有自己的文件,只是这个文件中存放的内容是另一个文件的路径名。因此软链接具有自己的inode号以及用户数据块。
1. 软链接有自己的文件属性及权限等;
2. 软链接可以对不存在的文件或目录创建;
3. 软链接可以交叉文件系统;
4. 软链接可以对文件或目录创建;
5. 创建软链接时,链接计数i_nlink不会增加;
6. 删除软链接不会影响被指向的文件,但若指向的原文件被删除,则成死链接,但重新创建指向 的路径即可恢复为正常的软链接,只是源文件的内容可能变了。
八、find命令
# find
搜索文件命令
相似命令还有 #which (选项)(参数)
之前讲过
语法:#whereis (选项)(参数)
选项:
-b:只查找二进制文件;
-B<目录>:只在设置的目录下查找二进制文件;
-f:不显示文件名前的路径名称;
-m:只查找说明文件;
-M<目录>:只在设置的目录下查找说明文件;
-s:只查找原始代码文件;
-S<目录>只在设置的目录下查找原始代码文件;
-u:查找不包含指定类型的文件。
定义:命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。 # locate
定义:locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
示例:
[aaa@qq.com ~]# locate 123 /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/media/dvb-frontends/cx24123.ko.xz /usr/lib64/gconv/IBM1123.so /usr/share/doc/ipxe-roms-qemu-20170123 /usr/share/doc/ipxe-roms-qemu-20170123/COPYING /usr/share/doc/ipxe-roms-qemu-20170123/COPYING.GPLv2 /usr/share/icons/Adwaita/cursors/9081237383d90e509aa00f00170e968f /usr/share/man/man1/perl5123delta.1.gz /usr/share/osinfo/device/pcisig.com/pci-1234-1111.xml /usr/share/perl5/pod/perl5123delta.pod /usr/share/usb_modeswitch/0471:1237 /usr/share/usb_modeswitch/19d2:1232 /usr/share/usb_modeswitch/19d2:1233 /usr/share/usb_modeswitch/19d2:1237 /usr/share/usb_modeswitch/19d2:1238
知识点:Ctrl+u 删除光标前面的 Ctrl+d 删除光标后面的,一个一个删除。光标前后什么都没有,Ctrl+d退出终端 Ctrl+a 光标挪到最前面 Ctrl+e 光标挪到最后
find基本语法
# find(选项)(参数)
find path -option [ -print ] [ -exec -ok command ] { } /;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print 将查找到的文件输出到标准输出
#-exec command {} \; —–将查到的文件执行command操作,{} 和 \;之间有空格
选项
-amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算; -anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录; -atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算; -cmin<分钟>:查找在指定时间之时被更改过的文件或目录; -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; -ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算; -daystart:从本日开始计算时间; -depth:从指定目录下最深层的子目录开始查找; -expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录; -exec<执行指令>:假设find指令的回传值为True,就执行该指令; -false:将find指令的回传值皆设为False; -fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件; -follow:排除符号连接; -fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件; -fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件; -fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件; -fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录; -gid<群组识别码>:查找符合指定之群组识别码的文件或目录; -group<群组名称>:查找符合指定之群组名称的文件或目录; -help或——help:在线帮助; -ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别; -iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别; -inum<inode编号>:查找符合指定的inode编号的文件或目录; -ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别; -iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别; -links<连接数目>:查找符合指定的硬连接数目的文件或目录; -iname<范本样式>:指定字符串作为寻找符号连接的范本样式; -ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出; -maxdepth<目录层级>:设置最大目录层级; -mindepth<目录层级>:设置最小目录层级; -mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算; -mount:此参数的效果和指定“-xdev”相同; -mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算; -name<范本样式>:指定字符串作为寻找文件或目录的范本样式; -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录; -nogroup:找出不属于本地主机群组识别码的文件或目录; -noleaf:不去考虑目录至少需拥有两个硬连接存在; -nouser:找出不属于本地主机用户识别码的文件或目录; -ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令; -path<范本样式>:指定字符串作为寻找目录的范本样式; -perm<权限数值>:查找符合指定的权限数值的文件或目录; -print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串; -print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行; -printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定; -prune:不寻找字符串作为寻找文件或目录的范本样式; -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式; -size<文件大小>:查找符合指定的文件大小的文件; -true:将find指令的回传值皆设为True; -typ<文件类型>:只寻找符合指定的文件类型的文件; -uid<用户识别码>:查找符合指定的用户识别码的文件或目录; -used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算; -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录; -version或——version:显示版本信息; -xdev:将范围局限在先行的文件系统中; -xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。
参数
起始目录:查找文件的起始目录。
实例
列出当前目录及子目录下所有文件和文件夹 #find .
在/home目录下查找以.txt结尾的文件名 # find /home -name "*.txt"
同上,但忽略大小写 # find /home -iname "*.txt"
当前目录及子目录下查找所有以.txt和.pdf结尾的文件 # find . \( -name "*.txt" -o -name "*.pdf" \)
# find . -name "*.txt" -o -name "*.pdf" )
匹配文件路径或者文件 # find /usr/ -path "*local*"
基于正则表达式匹配文件路径 # find . -regex ".*\(\.txt|\.pdf\)$
同上,但忽略大小写 # find . -iregex ".*\(\.txt|\.pdf\)$"
否定参数
找出/home下不是以.txt结尾的文件 # find /home ! -name "*.txt"
根据文件类型进行搜索 # find . -type 类型参数
类型参数列表:
1. f 普通文件
2. l 符号连接
3. d 目录
4. c 字符设备
5. b 块设备
6. s 套接字
7. p Fifo
查找/etc/目录下文件名包含“ssh*”的所有文件 # find /etc/ -type f -name "ssh*"
基于目录深度搜索
向下最大深度限制为3 # find . -maxdepth 3 -type f
搜索出深度距离当前目录至少2个子目录的所有文件 # find . -mindepth 2 -type f
根据文件时间戳进行搜索 # find . -type f 时间戳
可以用#stat
查看文件的三个时间戳
UNIX/Linux文件系统每个文件都有三种时间戳:
- 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
- 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
- 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
搜索最近七天内被访问过的所有文件 # find . -type f -atime -7
搜索恰好在七天前被访问过的所有文件 # find . -type f -atime 7
搜索超过七天内被访问过的所有文件 # find . -type f -atime +7
搜索访问时间超过10分钟的所有文件 # find . -type f -amin +10
搜索最近七天内被访问过文件并且文件名为.conf # find . -type f -atime -7 -name "*.conf"
搜索最近七天内被访问过的文件或者名为.conf # find . -type f -o -atime -7 -o -name "*.conf"
找出比file.log修改时间更长的所有文件 # find . -type f -newer file.log
根据文件大小进行匹配 # find . -type f -size 文件大小单元
文件大小单元:
- b —— 块(512字节)
- c —— 字节
- w —— 字(2字节)
- k —— 千字节
- M —— 兆字节
- G —— 吉字节
搜索大于10KB的文件 # find . -type f -size +10k
搜索小于10KB的文件 # find . -type f -size -10k
搜索等于10KB的文件 # find . -type f -size 10k
删除匹配文件
删除当前目录下所有.txt文件 # find . -type f -name "*.txt" -delete
根据文件权限/所有权进行匹配
当前目录下搜索出权限为777的文件 # find . -type f -perm 777
找出当前目录下权限不是644的php文件 # find . -type f -name "*.php" ! -perm 644
找出当前目录用户tom拥有的所有文件 # find . -type f -user tom
找出当前目录用户组sunk拥有的所有文件 # find . -type f -group sunk
借助-exec选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户tom # find .-type f -user root -exec chown tom {} \;
上例中,{} 用于与-exec选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除 # find $HOME/. -name "*.txt" -ok rm {} \;
上例中,-ok和-exec行为一样,不过它会给出提示,是否执行相应的操作。
查找当前目录下所有.txt文件并把他们拼接起来写入到all.txt文件中 # find . -type f -name "*.txt" -exec cat {} \;> all.txt
将30天前的.log文件移动到old目录中 find . -type f -mtime +30 -name "*.log" -exec cp {} old \;
找出当前目录下所有.txt文件并以“File:文件名”的形式打印出来 # find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
因为单行命令中-exec参数中无法使用多个命令,以下方法可以实现在-exec之后接受多条命令 # -exec ./text.sh {} \;
搜索但跳出指定的目录
查找当前目录或者子目录下所有.txt文件,但是跳过子目录sk # find . -path "./sk" -prune -o -name "*.txt" -print
find其他技巧收集
要列出所有长度为零的文件 # find . -empty
根据inode查找所有相同inode号的文件 # find . -inum 35170257
1.Find工具-name参数案列
find /data/ -name “*.txt” #查找/data/目录以.txt结尾的文件;
find /data/ -name “[A-Z]*” #查找/data/目录以大写字母开头的文件;
find /data/ -name “test*” #查找/data/目录以test开头的文件;
2.Find工具-type参数案列
find /data/ -type d #查找/data/目录下的文件夹;
find /data/ ! -type d #查找/data/目录下的非文件夹;
find /data/ -type l #查找/data/目录下的链接文件。
find /data/ -type d|xargs chmod 755 -R #查目录类型并将权限设置为755;
find /data/ -type f|xargs chmod 644 -R #查文件类型并将权限设置为644;
3.Find工具-size参数案列
find /data/ -size +1M #查文件大小大于1Mb的文件;
find /data/ -size 10M #查文件大小为10M的文件;
find /data/ -size -1M #查文件大小小于1Mb的文件;
4.Find工具-perm参数案列
find /data/ -perm 755 #查找/data/目录权限为755的文件或者目录;
find /data/ -perm -007 #与-perm 777相同,表示所有权限;
find /data/ -perm +644 #文件权限在644以上;
5.Find工具-mtime参数案列
atime,access time 文件被读取或者执行的时间;
ctime,change time 文件状态改变时间;
mtime,modify time 文件内容被修改的时间;
find /data/ -mtime +30 -name “*.log” #查找30天以前的log文件;
find /data/ -mtime +30 -name “*.log” #查找30天以前的log文件;
find /data/ -mtime 30 -name “*.txt”#查找第30天的log文件;
find /data/ -mmin +30-name “*.log” #查找30分钟以前修改的log文件;
find /data/ -cmin 30 -name “*.txt”#查找第30分钟改变的log文件。
6.Find工具参数综合案列:
查找/data目录以.log结尾,文件大于10k的文件,同时cp到/tmp目录; find /data/ -name "*.log" –type f -size +10k -exec cp {} /tmp/ /;
查找/data目录以.txt结尾,文件大于10k的文件,权限为644并删除该文件; find /data/ -name "*.log" –type f -size +10k -m perm 644 -exec rm –rf {} /;
查找/data目录以.log结尾,30天以前的文件,大小大于10M并移动到/tmp目录; find /data/ -name "*.log" –type f -mtime +30 –size +10M -exec mv {} /tmp/ /;
九、文件名后缀
Linux系统是区分大小写的,后缀名并不代表它是什么样的文件
习惯的把相同的文件定义相同的后缀名,方便使用区分和查询 # echo $LANG
查看系统默认语言
1.使用扩展名的背景意义
一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根据
文件的后缀就能判断文件的类型。但在Linux一个文件是否能被执行,和后缀名没有太大的关系,主要看文件的属性有关。但我们了解一下Linux文件的后缀名还是有必要的,
特别是我们自己创建一些文件,最好还是加后缀名,这样做的目的是仅仅是为了我们的在应用时方便。 现在的Linux桌面环境和Windows一样智能化,文件的类型是和相应的程序关联的。在我们打开某个文件时,系统会自动判断用哪个应用程序打开。
如果从这方面来说,Linux桌面环境和Windows桌面没有太大的区别。 在Linux中,带有扩展名的文件,只能代表程序的关联,并不能说明文件是可以执行,从这方面来说,Linux的扩展名没有太大的意义。
2.linux的文件类型
Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等;这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。
2.1 普通文件
[root@localhost ~]# ls -lh install.log
-rw-r--r-- 1 root root 53K 03-16 08:54 install.log
我们用 ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r–r– ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件。
这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具… …. 或 cp工具等。这类文件的删除方式是用rm 命令;
2.2 目录;
[aaa@qq.com ~]# ls -lh
总计 14M
-rw-r--r-- 1 root root 2 03-27 02:00 fonts.scale
-rw-r--r-- 1 root root 53K 03-16 08:54 install.log
-rw-r--r-- 1 root root 14M 03-16 07:53 kernel-2.6.15-1.2025_FC5.i686.rpm
drwxr-xr-x 2 1000 users 4.0K 04-04 23:30 mkuml-2004.07.17
drwxr-xr-x 2 root root 4.0K 04-19 10:53 mydir
drwxr-xr-x 2 root root 4.0K 03-17 04:25 Public
当我们在某个目录下执行,看到有类似 drwxr-xr-x ,这样的文件就是目录,目录在Linux是一个比较特殊的文件。注意它的第一个字符是d。
创建目录的命令可以用 mkdir 命令,或cp命令,cp可以把一个目录复制为另一个目录。删除用rm 或rmdir命令。
2.3 字符设备或块设备文件;
如时您进入/dev目录,列一下文件,会看到类似如下的;
[root@localhost ~]# ls -la /dev/tty
crw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/tty
[root@localhost ~]# ls -la /dev/hda1
brw-r----- 1 root disk 3, 1 2006-04-19 /dev/hda1
我们看到/dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件。比如猫等串口设备; 我们看到 /dev/hda1 的属性是 brw-r—– ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备; 这个种类的文件,是用mknode来创建,用rm来删除。目前在最新的Linux发行版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。
2.4 套接口文件;
当我们启动MySQL服务器时,会产生一个mysql.sock的文件。
[root@localhost ~]# ls -lh /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock
注意这个文件的属性的第一个字符是 s。我们了解一下就行了。
2.5 符号链接文件;
[root@localhost ~]# ls -lh setup.log
lrwxrwxrwx 1 root root 11 04-19 11:18 setup.log -> install.log
当我们查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是链接文件。是通过ln -s 源文件名新文件名。
上面是一个例子,表示setup.log是install.log的软链接文件。怎么理解呢?这和Windows操作系统中的快捷方式有点相似。 符号链接文件的创建方法举例;
[aaa@qq.com ~]# ls -lh kernel-2.6.15-1.2025_FC5.i686.rpm
-rw-r--r-- 1 root root 14M 03-16 07:53 kernel-2.6.15-1.2025_FC5.i686.rpm [aaa@qq.com ~]# ln -s kernel-2.6.15-1.2025_FC5.i686.rpm
kernel.rpm
[aaa@qq.com ~]# ls -lh kernel*
-rw-r--r-- 1 root root 14M 03-16 07:53 kernel-2.6.15-1.2025_FC5.i686.rpm lrwxrwxrwx 1 root root 33 04-19 11:27 kernel.rpm -> kernel-2.6.15-1.2025_FC5.i686.rpm
3.常用的文件后缀名
*.php ------这个大家都知道吧,是能用php语言解释器进行解释,能用浏览器打开的文件;
*.so -------这类是库文件;
*.doc *.obt --------这是OpenOffice 能打开的文件;
.bz2 ------bzip2的压缩文件
.gz ------gzip的压缩文件
.tar ------tar打包文件(是包文件不是压缩文件)
.tbz------tar打包并用bzip压缩文件
.tgz-----tar打包并用gzip压缩的文件
.au -----audio文件
.gif -----gif图象文件
.html/.htm-----HTML文件
.jpg-----JPEG图象文件
.pdf------电子文档(PDF格式的)
.png-----PNG图象文件
.ps------postscinpt文件(打印格式文件)
.txt------纯文本文件
.wav-----audio文件
.xpm-----图象文件
.conf-------配置文件
.lock-------LOCK文件(用来判断一个文件或设备是否被使用)
.rpm------REDHATPackage.Manager文件(套件包或软件包)
.c -------C源程序代码文件
.cpp------C++源程序代码文件
.h -------C或C++程序的头文件
.o------程序目标文件
.pl------perl脚本文件
.so-----类库文件
十、Linux和windows互传文件
在Xshell下使用,或者Securecrt,Putty不可用
安装插件 # yum install -y lrzsz
Linux向Windows传输文件 # sz 2.txt
会弹出窗口,选择位置
Windows向Linux传输文件 # rz
会弹出窗口,选择位置
上传完毕后就会查看到刚才上传的文件(传输到当前目录)
一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地;
与ssh有关的两个命令可以提供很方便的操作:
sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具
windows端需要支持ZModem的telnet/ssh客户端(比如SecureCRT)
运行命令rz,即是接收文件,SecureCRT就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到当前目录
注意:单独用rz会有两个问题:上传中断、上传文件变化(md5不同),解决办法是上传是用rz -be,并且去掉弹出的对话框中“Upload files as ASCII”前的勾选。
-b binary 用binary的方式上传下载,不解释字符为ascii
-e 强制escape 所有控制字符,比如Ctrl+x,DEL等
运行命令sz file1 file2就是发文件到windows上(保存的目录是可以配置) 比ftp命令方便多了,而且服务器不用再开FTP服务了
PS:Linux上rz/sz这两个小工具安装lrzsz-x.x.xx.rpm即可。
当然,还可以设置一下目录了:
在SecureCRT设置一下上传和下载的默认目录
options–>session options–>file transfer 下可以设置上传和下载的目录
剩下的你只要在用SecureCRT登陆linux终端的时候:
发送文件到客户端:sz filename
zmodem接收可以自行启动.
从客户端上传文件到linux服务端:
只要服务端执行 : rz
然后在 SecureCRT 里选文件发送,协议 zmodem
Linux下和Windows之间的文件传输工具rz/sz(lrz/lsz) 介绍
【什么是rz/sz (lsz/lrz)】
简单说就是,可以很方便地用这两个sz/rz工具,实现Linux下和Windows之间的文件传输(发送和接收),速度大概为10KB/s,适合中小文件。rz/sz 通过Zmodem协议传输数据。
【为什么要用rz/sz】
普通Linux和Windows之间的文件共享方法,主要有建立nfs实现文件共享,和tftp之类的方法,但是都很麻烦,而如果只是小文件(几十 K,几百K),那么直接用rz/sz,就显得极其地方便了。大文件的话,还是要考虑上面说得,其他的共享方法了,毕竟,rz/sz速度只有10K左右,传大文件会累死人的。。。
【如何使用】
(1)在Windows下,用SecureCRT(或者Windows自带的超级终端)连接Com端口到开发板,或者ssh等协议连接到Linux服务器上。
(2)在Linux端,安装了rz/sz (lrz/lsz)工具后(嵌入式开发中,多数已经将编译好的rz/sz工具放到rootfs中了,普通的Linux系统,如果没有,可以下载源码,自己安装),就可以直接运行rz/sz,实现和Windows之间的文件传输了:
A、从windows中拷贝/下载文件到Linux(开发板):
运行rz后,会自动弹出WIndows下的文件选择对话框,选择对应文件后,添加,然后确定,就开始传输,将windows中的文件,拷贝到Linux中了。
B、将Linux中的文件拷贝到Windows中某个文件夹:
执行sz file_name 就可以将Linux当前文件夹下的文件file_name拷贝到Windows的对应目录中了,其中,Windows目录是由你当前运行的工具中设定的。
此处我用的是SecureCRT,具体的更改 rz上传/sz下载 的默认的路径的方法:
右键点击当前会话session -> Session Options -> Terminal -> Xmodem/Zmodem ->Directories :
Upload : 你要设置的路径
下一篇: SQLSERVER触发器之临时表