笔记目录
- Linux隐藏权限和显示权限
- 文件特殊权限suid/sgid/stickybit
- 软连接和硬链接
- Linux四剑客之一find
- Linux文件及文件名后缀
- Linux和window文件系统文件互传rz,sz
一.Linux隐藏权限和显示权限
语法:chattr [+-=] [Asaci] [文件或者目录名]
oot@sdc ~]#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处理能力(标识)的进程能够施加该选项。
------查看时需要使用lsattr命令------
lsattr命令格式:
[root@sdc ~]#lsattr [-RVadlv] [files...]
参数或选项说明:
-R:递归列示目录及文件属性。
-V:显示程序版本号。
-a:显示所有文件属性,包括隐藏文件(.)、当时目录(./)及上层目录(../)。
-d:仅列示目录属性。
-l:(此参数目前没有任何作用)。
-v:显示文件或目录版本。
隐藏权限lsattr_chattr
语法:chattr [+-=] [Asaci] [文件或者目录名]
# i 增加后,文件不能删除、重命名、设定链接、写入或者增加数据 [root@chy002 tmp]# ls -l 1.txt -rw-rw-rw-. 1 chy002 chy002 0 10月 25 06:08 1.txt [root@chy002 tmp]# chattr +i 1.txt [root@chy002 tmp]# ls -l 1.txt -rw-rw-rw-. 1 chy002 chy002 0 10月 25 06:08 1.txt [root@chy002 tmp]# vi 1.txt
[No write since last change] [root@chy002 tmp]# head -n2 /etc/passwd > 1.txt -bash: 1.txt: 权限不够 [root@chy002 tmp]# lsattr 1.txt #查看隐藏权限 ----i----------- 1.txt<br>#不能touch,因为会修改创建时间;不能rm;不能mv |
# a只能追加,不能删除,非root用户不能设定该属性 [root@chy002 tmp]# chattr +a 2.txt [root@chy002 tmp]# lsattr 2.txt -----a---------- 2.txt [root@chy002 tmp]# rm -f 2.txt rm: 无法删除"2.txt": 不允许的操作 [root@chy002 tmp]# mv 2.txt 20.txt mv: 无法将"2.txt" 移动至"20.txt": 不允许的操作 [root@chy002 tmp]# touch 2.txt [root@chy002 tmp]# !l lsattr 2.txt -----a---------- 2.txt [root@chy002 tmp]# head -n2 /etc/passwd > 2.txt -bash: 2.txt: 不允许的操作 [root@chy002 tmp]# head -n2 /etc/passwd >> 2.txt [root@chy002 tmp]# 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
2.6 文件特殊权限:SUID/SGID/StickyBit
2.1 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),而且对目录无效。
[root@chy002 chy]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@chy002 chy]# su user
[user@chy002 chy]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[user@chy002 chy]$ su
密码:
[root@chy002 chy]# chmod u+s /usr/bin/ls
[root@chy002 chy]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls
[root@chy002 chy]# su user
[user@chy002 chy]$ ls /root/
anaconda-ks.cfg
2. 特殊权限set_gid
可以应用在文件上同样可以作用在目录上。设置在文件上和set_uid类似,前提这个文件必须是可执行的二进制文件。设置set_gid后,执行该文件的用户会临时以该文件所属组的身份执行。若目录被设置这个权限后,任何用户在此目录下创建的文件或者目录都具有和该目录所属组相同的组。
[root@chyuanliu-01 tmp]# ls -ld chy0826/ drwxr-xr-x. 2 root root 30 8月 27 02:13 chy0826/ [root@chyuanliu-01 tmp]# chown :chy chy0826/ [root@chyuanliu-01 tmp]# ls -ld chy0826/ drwxr-xr-x. 2 root chy 30 8月 27 02:13 chy0826/ [root@chyuanliu-01 tmp]# touch chy0826/iii.txt [root@chyuanliu-01 tmp]# ls -ld chy0826/iii.txt -rw-r--r--. 1 root root 0 8月 27 02:17 chy0826/iii.txt [root@chyuanliu-01 tmp]# chmod g+s chy0826/ [root@chyuanliu-01 tmp]# touch chy0826/ii.txt [root@chyuanliu-01 tmp]# ls -ld chy0826/ii.txt -rw-r--r--. 1 root chy 0 8月 27 02:17 chy0826/ii.txt |
如果s的权限是在用户组,那么就是Set GID,简称SGID。SGID可以用在两个方面:
1 文件:如果SGID设置在二进制文件上,无论用户是谁,在执行该程序的时候,它的有效用户组将会变成该程序的用户组所有者;
2 目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
3.Sticky Bit
SBit一般用于目录上,对文件的意义不大。SBit对目录的作用是:在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权利删除。SBit可以理解为防删除位。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用SBit位。设置该位后,就算用户对该文件的父目录具有写权限,也不能删除文件。
一个文件能否被删除,取决于该文件的父目录的权限,/tmp/目录是777,任何人都可写的,所以理论上任何人都可以删除/tmp/下的所有文件,但是,user2是不可以删除user1的文件的,可以修改,只有user1和root可以删除,这就是因为/tmp/目录有一个stick_bit。
chmod o+t 目录 #防止其他用户删除自己文件,root用户除外 |
二.文件特殊权限suid/sgid/stickybit
2.1 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),而且对目录无效。
[root@chy002 chy]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@chy002 chy]# su user
[user@chy002 chy]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[user@chy002 chy]$ su
密码:
[root@chy002 chy]# chmod u+s /usr/bin/ls
[root@chy002 chy]# ls -l /usr/bin/ls
-rwsr-xr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls
[root@chy002 chy]# su user
[user@chy002 chy]$ ls /root/
anaconda-ks.cfg
2. 特殊权限set_gid
可以应用在文件上同样可以作用在目录上。设置在文件上和set_uid类似,前提这个文件必须是可执行的二进制文件。设置set_gid后,执行该文件的用户会临时以该文件所属组的身份执行。若目录被设置这个权限后,任何用户在此目录下创建的文件或者目录都具有和该目录所属组相同的组。
[root@chyuanliu-01 tmp]# ls -ld chy0826/ drwxr-xr-x. 2 root root 30 8月 27 02:13 chy0826/ [root@chyuanliu-01 tmp]# chown :chy chy0826/ [root@chyuanliu-01 tmp]# ls -ld chy0826/ drwxr-xr-x. 2 root chy 30 8月 27 02:13 chy0826/ [root@chyuanliu-01 tmp]# touch chy0826/iii.txt [root@chyuanliu-01 tmp]# ls -ld chy0826/iii.txt -rw-r--r--. 1 root root 0 8月 27 02:17 chy0826/iii.txt [root@chyuanliu-01 tmp]# chmod g+s chy0826/ [root@chyuanliu-01 tmp]# touch chy0826/ii.txt [root@chyuanliu-01 tmp]# ls -ld chy0826/ii.txt -rw-r--r--. 1 root chy 0 8月 27 02:17 chy0826/ii.txt |
如果s的权限是在用户组,那么就是Set GID,简称SGID。SGID可以用在两个方面:
1 文件:如果SGID设置在二进制文件上,无论用户是谁,在执行该程序的时候,它的有效用户组将会变成该程序的用户组所有者;
2 目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
3.Sticky Bit
SBit一般用于目录上,对文件的意义不大。SBit对目录的作用是:在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权利删除。SBit可以理解为防删除位。如果希望用户能够添加文件但同时不能删除文件,则可以对文件使用SBit位。设置该位后,就算用户对该文件的父目录具有写权限,也不能删除文件。
一个文件能否被删除,取决于该文件的父目录的权限,/tmp/目录是777,任何人都可写的,所以理论上任何人都可以删除/tmp/下的所有文件,但是,user2是不可以删除user1的文件的,可以修改,只有user1和root可以删除,这就是因为/tmp/目录有一个stick_bit。
chmod o+t 目录 #防止其他用户删除自己文件,root用户除外 |
三.软连接和硬链接
- inode是什么?
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
- inode的内容
inode包含文件的元信息,具体来说有以下内容:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
可以用stat命令,查看某个文件的inode信息:
stat example.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。
- 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已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
- inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。
表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。
使用ls -i命令,可以看到文件名对应的inode号码:
ls -i example.txt
- 目录文件
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)。
- 硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。
但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。
这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。
ln命令可以创建硬链接:
ln 源文件 目标文件
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。
反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2(某一目录的目录名和该目录的当前目录名)
- 软链接
除了硬链接以外,还有一种特殊情况。
文件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"链接数"不会因此发生变化。
ln -s命令可以创建软链接。
ln -s 源文文件或目录 目标文件或目录
- inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。
附加:
- 硬链接和软链接
其中每个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. 删除软链接不会影响被指向的文件,但若指向的原文件被删除,则成死链接,但重新创建指向 的路径即可恢复为正常的软链接,只是源文件的内容可能变了。
四.Linux四剑客之一find
- 四剑客之Find工具实战,Find工具主要用于操作系统文件、目录的查找,其语法参数格式为:
find path -option [ -print ] [ -exec -ok command ] { } /;
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print 将查找到的文件输出到标准输出
#-exec command {} \; —–将查到的文件执行command操作,{} 和 \;之间有空格
option 选项:
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px">
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
(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/ -
-30 -name "*.txt" #查找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文件及文件名后缀
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 目录; [root@localhost ~]# 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操作系统中的快捷方式有点相似。 符号链接文件的创建方法举例; [root@localhost ~]# 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 [root@localhost ~]# ln -s kernel-2.6.15-1.2025_FC5.i686.rpm kernel.rpm [root@localhost ~]# 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和window文件系统文件互传rz,sz
一般来说,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 : 你要设置的路径