【常用命令】
who:查看最近谁登陆了主机
mkdir -p fileName:递归创建目录
rmdir -p fileName:递归删除目录
rm -rf fileName:递归删除目录和文件,注意使用这个命令时一定要注意,万一删除根目录的文件就over了
which rm
mv bb aa:移动文件、文件重命名,当目标文件存在,目标文件将会成为目录,如果目标文件是文本,将内容复制到目标文件
cat -n -A fileName:显示行号和特殊字符
tac fileName:反向显示文件
【文件所属主和所属组】
一个linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。
Linux这样设置文件属性的目的是为了文件的安全。例如,test文件的所属主是user0 而test1文件的所属主是user1,那么user1是不能查看test文件的,
相应的user0也不能查看test1文件。然后有这样一个应用,我想创建一个文件同时让user0和user1来查看怎么办呢?
Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user)、所属组(group)以及其他用户(others)对该文件的权限。
你可以通过ls -l 来查看这些属性。
【linux文件属性】
上例中,用ls –l 查看当前目录下的文件时,共显示了9列内容(用空格划分列),都代表了什么含义呢?
第1列,包含的东西有该文件类型和所属主、所属组以及其他用户对该文件的权限。第一列共10位。其中第一位用来描述该文件的类型。上例中,我们看到的类型有”d”, “-“ ,其实除了这两种外还有”l”, “b”, “c”,”s”等。
d 表示该文件为目录;
- 表示该文件为普通文件;
l 表示该文件为连接文件(linux file),上边提到的软连接即为该类型;
b 表示该文件为块设备文件,比如磁盘分区;
c 表示该文件为串行端口设备,例如键盘、鼠标;
s 表示该文件为套接字文件(socket),用于进程间通信。
后边的9位,每三个为一组。均为rwx 三个参数的组合。其中r 代表可读,w代表可写,x代表可执行。前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。下面拿一个具体的例子来述说一下。一个文件的属性为-rwxr-xr-- ,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读。对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有x权限才能打开并查看该目录。例如一个目录的属性为 drwxr--r-- 其所属主为root,那么除了root外的其他用户是不能打开这个目录的。
第2列,表示为连接占用的节点(inode),若为目录时,通常与该目录地下还有多少目录有关系,关于连接(link)在以后章节详细介绍。
第3列,表示该文件的所属主。
第4列,表示该文件的所属组。
第5列,表示该文件的大小。
第6列、第7列和第8列为该文件的创建日期或者最近的修改日期,分别为月份日期以及时间。
第9列,文件名。如果前面有一个. 则表示该文件为隐藏文件。
相关命令:
- chgrp [组名] [文件名] 改变文件的所属组
- groupadd [组名] 创建组
- chown [ -R ] 账户名 文件名 这里的-R选项只作用于目录,作用是级联更改,即不仅更改当前目录,连目录里的目录或者文件全部更改。
- useradd 用户名 添加用户
- chmod [-R] xyz 文件名 (这里的xyz,表示数字)
umask
上边也提到了默认情况下,目录权限值为766,普通文件权限值为644。那么这个值是由谁规定呢?追究其原因就涉及到了umask。
umask语法: umask xxx (这里的xxx代表三个数字)
查看umask值只要输入umask然后回车。 umask预设是0022,其代表什么含义?先看一下下面的规则:
1)若用户建立为普通文件,则预设“没有可执行权限”,只有rw两个权限。最大为666(-rw-rw-rw-)
2)若用户建立为目录,则预设所有权限均开放,即777(drwxrwxrwx)
umask数值代表的含义为,上边两条规则中的默认值(文件为666,目录为777)需要减掉的权限。所以目录的权限为(rwxrwxrwx) – (----w--w-) = (rwxr-xr-x),普通文件的权限为(rw-rw-rw-) – (----w--w-) = (rw-r--r--)。umask的值是可以自定义的,比如设定umask 为 002,你再创建目录或者文件时,默认权限分别为(rwxrwxrwx) – (-------w-) = (rwxrwxr-x)和(rw-rw-rw-) – (-------w-) = (rw-rw-r--)。
umask 可以在/etc/bashrc里面更改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限。
【在linux下搜索一个文件】
which 用来查找可执行文件的绝对路径。
在前面章节中已经多次用到该命令,需要注意的一点是,which只能用来查找PATH环境变量中出现的路径下的可执行文件。这个命令用的也是蛮多的,有时候我们不知道某个命令的绝对路径,which一下很容易就知道了。
whereis 通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件。
语法: whereis [-bmsu] [文件名称]
-b:只找binary 文件
-m:只找在说明文件manual路径下的文件
-s:只找source来源文件
-u:没有说明档的文件
find 这个搜索工具是笔者用的最多的一个,所以请你务必要熟悉它。
语法: find [路径] [参数] 下面介绍几个笔者经常用的参数
-atime +n :访问或执行时间大于n天的文件
-ctime +n :写入、更改inode属性(例如更改所有者、权限或者连接)时间大于n天的文件
-mtime +n :写入时间大于n天的文件
看到这里,你对这三个time是不是有些晕了,那笔者就先给你介绍一下这三个time属性。
文件的 Access time,atime 是在读取文件或者执行文件时更改的。文件的 Modified time,mtime 是在写入文件时随文件内容的更改而更改的。文件的 Create time,ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。 因此,更改文件的内容即会更改 mtime 和 ctime,但是文件的 ctime 可能会在 mtime 未发生任何变化时更改,例如,更改了文件的权限,但是文件内容没有变化。 如何获得一个文件的atime mtime 以及ctime ?
ls -l 命令可用来列出文件的 atime、ctime 和 mtime。
ls -lc filename 列出文件的 ctime
ls -lu filename 列出文件的 atime
ls -l filename 列出文件的 mtime
atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息。而这是加了 noatime 取消了, 不代表真实情況。反正, 這三個 time stamp 都放在 inode 中。若 mtime, atime 修改inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟著要改了。
继续讲find常用的参数。
-name filename 直接查找该文件名的文件,这个使用最多了。
-type type :通过文件类型查找。文件类型在前面部分已经简单介绍过,相信你已经大体上了解了。type 包含了 f, b, c, d, l, s 等等。
【linux文件类型】
在前面的内容中简单介绍了普通文件(-),目录(d)等,在linux文件系统中,主要有以下几种类型的文件。
1)正规文件(regular file):就是一般类型的文件,当用ls –l 查看某个目录时,第一个属性为”-“的文件就是正规文件,或者叫普通文件。正规文件又可分成纯文字文件(ascii)和二进制文件(binary)。纯文本文件是可以通过cat, more, less等工具直接查看内容的,而二进制文件并不能。例如我们用的命令/bin/ls 这就是一个二进制文件。
2)目录(directory):这个很容易理解,就是目录,跟windows下的文件夹一个意思,只不过在linux中我们不叫文件夹,而是叫做目录。ls –l 查看第一个属性为”d”。
3)连接档(link):ls –l 查看第一个属性为 “l”,类似windows下的快捷方式。这种文件在linux中很常见,而且笔者在日常的系统运维工作中用的很多,所以你要特意留意一下这种类型的文件。在后续章节笔者会介绍。
4)设备档(device):与系统周边相关的一些档案,通常都集中在 /dev 这个目录之下!通常又分为两种:区块 (block) 设备档 :就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘啦!例如你的一号硬盘的代码是 /dev/hda1 等等的档案啦!第一个属性为 “ b “;字符 (character) 设备档 :亦即是一些串行端口的接口设备,例如键盘、鼠标等等!第一个属性为 “ c “。
* linux 文件后缀名
对于后缀名这个概念,相信你不陌生吧。在linux系统中,文件的后缀名并没有具体意义,也就是说,你加或者不加,都无所谓。但是为了容易区分,linux爱好者们都习惯给文件加一个后缀名,这样当用户看到这个文件名时就会很快想到它到底是一个什么文件。例如1.sh, 2.tar.gz, my.cnf, test.zip等等,如果你首次接触这些文件,你也许会感到很晕,没有关系,随着学习的深入,你就会逐渐的了解这些文件了。笔者所列举的几个文件名中1.sh代表它是一个shell script ,2.tar.gz 代表它是一个压缩包,my.cnf 代表它是一个配置文件,test.zip 代表它是一个压缩文件。
另外需要你知道的是,早期Unix系统文件名最多允许14个字符,而新的Unix或者linux系统中,文件名最长可以到达 256 个字符!