文件管理
1、目录操作
1.1 创建目录
[root@Linux ~]# mkdir contentName
1.2 删除目录
[root@Linux ~]# rmdir contentName
如果不是空目录删除不了,我们要用如下命令删除
[root@Linux ~]# rm -rf contentName # r表示recurse递归, f表示force强制
1.3 切换目录
[root@Linux ~]# cd contentName
1.4 移动目录
[root@Linux ~]# mv contentName1 contentName2
1.5 预览目录
[root@Linux ~]# ls -d dirname
-d 对于目录只列出目录的属性,不显示目录中的内容
-i 显示inode编号,记录文件属性,一个文件占用一个inode,同时记录此文件所在的block编号
-a 显示目录下的隐藏文件 已“.”开头的文件
若无contentName 默认为当前目录, -a 显示所有文件(包括隐藏文件) -l,列表显示详细信息(RedHat系列中可用ll,最新的Ubuntu 14中也可使用)
**
/ 根目录
~ 家目录 同 $HOME root用户默认 /root 普通用户 /home/用户名
. 当前目录
.. 当前目录的父目录
- 之前的目录
2、文件操作
2.1 新建文件
[root@Linux ~]# touch fileName1[ fileName2 fileName3 ..]
2.2 移动文件
[root@Linux ~]# mv fileName contentName/fileName
通过移动文件命令可以作为重命名的命令使用
2.3 复制文件
[root@Linux ~]# cp -r fileName1 contentName
2.4 删除文件
[root@Linux ~]# rm -rf filename
[root@Linux ~]# rm -rf * #删除当前目录下的所有文件
**
在文件和文件夹操作中,可以用通配符来批量选择和删除文件,常见的通配符有:
A:* :任何字符和字符串。
B:? :一个任意字符
C:[abc...] :[]内的任意一个字符。[abc]表示a、b、c任一个字符;有时候也表示范围,如[a-x],表示a到x的任一个字符;[1-9]表示1到9的任一数字。
D:[!abc...]:和上面的相反,表示除[]内的字符外的任意一个字符。
2.5 预览文件
常用的预览文件命令有cat, more, less, head, tail 包括上次我们将的vi -R
2.5.1 cat命令
cat会打印文件的所有内容,直至最后一行,一般用查看较小的文件,最好不超过一页,否在会刷屏,常见用法查看某一行的代码可以使用-n选项
[root@Linux ~]# cat -n fileName | grep 200 #查看第200行的代码
cat命令有一个反向命令就是tac,就是总最后一行开始显现。
2.5.2 more命令
more命令用于分页查看文件内容,但只能向下查看,常用的选项有:
+n 从第n行开始显示
-n 定义显示n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之前开始显示 ** 在more命令之后也可使用/parttern查找字符串,显示方式一样(pattern指正则表达式)
-s 把连续的多个空行显示为一行
常用操作命令:
?查看操作命令提示 很多命令都可以用?来查看操作命令
q 退出预览
空格 或 [ctrl] + F 滚动一屏
[ctrl] + B 返回上一屏
= 输出当前行号
:f 输出文件名和当前行号
2.5.3 less命令
功能上与more相似,最大的区别是可以按up/down键滚动,常用的选项有:
-p pattern 预览文件,从该字串开始显示,匹配最多个 按n跳转
常用操作命令:
/pattern 从该字串前开始显示 匹配最多个 按n跳转
&pattern 只匹配一行
2.5.4 head命令
[root@Linux ~]# head -n 2 fileName #查看fileName这个文件的前2行
2.5.5 tail命令
tail是一个很用的命令,一般用户查看文件代码更新内容,选项-f --follow 可以监控文件,-n 行数可以查看最后n行
[root@Linux ~]# tail -f fileName # 监控fileName文件
[root@Linux ~]# tail -n 200 fileName #查看fileName这个文件的最后200行
2.5.6 nl命令
nl filename 带行号的查看文件命令
2.6 文件搜索
2.6.1 which 命令
which [filename...]
-a 搜索所有$PATH中的匹配的目录
-V 显示版本信息。
[root@Linux ~]# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin
which搜索的方位就是path中的目录
2.6.2 whereis 命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
2.6.3 type 命令
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
2.6.4 locate 命令
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含 有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
2.6.5 find 命令
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
$ find <指定目录> <指定条件> <指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
find的常用的实例:
$ find . -name "my*"
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
$ find . -name "my*" -ls
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
$ find . -type f -mmin -10
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
-type 选项的类型有 - Linux文件类型
-type c
File is of type c:
b block (buffered) special #设备文件
c character (unbuffered) special #字符文件
d directory #目录
p named pipe (FIFO)
f regular file #常规文件
l symbolic link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken. If
you want to search for symbolic links when -L is in effect, use -xtype. #链接
s socket
D door (Solaris)
2.7 查看文件属性
[root@192 ~]# ll crontab
-rw-r--r--. 2 root root 457 Jun 3 2011 crontab
第一个字段为权限:第一个位是文件类型(d--目录 l--连接 - 文件) 后面9位分别是所有者,用户组,其他用户的权限
第二字段为连接数,默认文件连接数为1,目录连接数为2。
修改文件最大连接数:
1,在/etc/rc.local 中增加一行 ulimit -shn 65535
2,在/etc/profile 中增加一行 ulimit -shn 65535
3,在/etc/security/limits.conf最后增加如下两行记录
* soft nofile 65535
* hard nofile 65535查看文件最大连接数:
[weijie@192 ~]$ ulimit -n
1024
第三个字段为所有者
第四个字段为所属用户组
第五个字段为文件大小
第六个字段为修改状态时间(ctime)
第七个字段为文件名称
另外 stat fileName也可查看文件属性。
[root@192 ~]# stat myfile
File: `myfile'
Size: 813 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 916377 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 500/ pais) Gid: ( 500/ pais)
Access: 2015-03-04 11:22:53.180596972 +0800
Modify: 2014-10-15 15:52:33.000000000 +0800
Change: 2015-02-10 12:50:47.582676568 +0800
2.8 查看文件类型
[root@192 ~]#file filename
3.1 修改文件属性和权限
我们可以通过ls -al 查看目录/文件的详细权限信息
修改权限常用有三个命令 chgrp (change group) chown (change owner) chmod (change mode)
chgrp [-R] [groupname] dirname/filename 修改目录或文件的所属用户组
chown [-R] username[:groupname] dirname/filename 修改目录或文件的所属用户或用户组
chmod [-R] u=rwx,g=rwx,o=rwx dirname/filename u代表user用户, g代表group用户组,o代表others,赋予文件三种权限
-R 如果是目录则把目录下的所有文件和目录都赋予权限
详细列表:
u r
g + - = w 文件或目录
o x
a
+/-表示添加或删除相应用户/用户组的权限
或者 chmod [-R] 777 dirname/filename
7= 4 (可读)+ 2 (可写) + 1 (可执行)
ex.对于可执行文件我们一般需要权限是 -rwxr-xr-x
所以计算得u= 4 + 2 +1 (111) g = 4 + 1 (011) o = 4 + 1 (011)
括号中的三位表示用二进制每个权限对应的可读,可写,可执行三位是否enable
因此通常用 chmod 755 .bashrc 给可执行文件赋予权限
3.2 特殊文件权限 SUID SGID STIB
SUID 设置特殊用户标识 只对二进制程序有效,执行过程中当前用户将临时获得文件所有者的权限(文件所有者必须有x权限)
SGID 设置特殊组标识 只对二进制程序有效,执行过程中当前用户将临时成为该用户组的成员并和其组的权限相同(文件所有组必须有x权限)
STIB 位锁 只对目录有效, 只有该目录的创建者和root能在该目录下删除文件,其他用户没有删除权限。
位码 111 三位依次为 SUID SGID STIB 十进制值为4+2+1 = 7
[root@Linux ~]# ls -al /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 17 2012 /usr/bin/passwd
可以看到用户权限有一个s的标识,原来应该是x(execute)权限。但这里s是SET的意思,表示设置特殊权限。
表明其他用户执行此文件的时候临时获得owner的权限,是指每个用户执行这个文件时都具有相同的权限,比如只修改自己的密码。
赋予s权限 chmod 4755 filename 即可。在标准权限数前面加上4
[root@Linux ~]# ls -dl /tmp
drwxrwxrwt. 18 root root 4096 Jan 31 04:24 /tmp
tmp 目录下只有目录所有者和root能在该目录下删除文件,其他用户名只能进行修改和添加操作。
3.3 修改默认新建文件的权限
首先,文件默认权限是666,目录默认权限是777
通过设置umask反遮罩可以改变默认新建文件或目录的默认权限。
[root@Linux ~] # umask #查看默认新建文件/目录的umask002
666可以看成 二进制 110110110 umask 000000010 => 110110100
所以把左边第二位置为0,得664
测试一下
[root@Linux ~] # touch newfile
[root@Linux ~] # ls -al newfile
-rw-rw-r--. 1 root root 0 Jan 31 07:13 newfile
correct!
4、总结
本文主要介绍了Linux下目录和文件的操作以及文件权限的设置,文件权限的设置是难点,主要是要考虑到用二进制的计算方法转换为10进制的设置,尤其是umask的设置在shell脚本编程中经常会用到,《鸟哥的私房菜Linux基础篇》对umask的理解还不到位,本文做了补充。希望对大家有帮助,下一节我们研究一下Linux的用户管理。
5、参考资料
鸟哥的私房菜Linux基础篇