Linux笔记(一)
1 Linux简介
1.1 Linux/unix的区别
都是操作系统。Unix为OS鼻祖,先于Linux产生,Unix为商用,付费;Linux开源,免费,具有Unix的全部功能。
1.2UNIX/Linux系统结构
Linux使用注意事项
Linux 严格区分大小写;Linux 中所有内容以文件形式保存,包括硬件设备;Linux 不靠扩展名区分文件类型;Linux中所有的存储设备都必须在挂载之后才能使用;Windows下的程序不能直接在Linux中使用。
Linux命令
linux ls命令:显示当前目录下的文件
ls 是最常见的目录操作命令,主要作用是显示目录下的内容。这个命令的基本信息如下:
命令名称:ls。
英文原意:list。
所在路径:/bin/ls。
执行权限:所有用户。
功能描述:显示目录下的内容。
选项:
-a:显示所有文件,包括隐藏文件;
–color=when:支持颜色输出,when 的值默认是 always(总显示颜色),也可以是 never(从不显示颜色)和 auto(自动);
-d:显示目录信息,而不是目录下的文件;
-h:人性化显示,按照我们习惯的单位显示文件大小;
-i:显示文件的 i 节点号;
-l:长格式显示;
注意:Linux中以 . 开始的文件为隐藏文件,只有通过-a才能查看。隐藏文件不是为了把文件藏起来不让其他用户找到,而是为了告诉用户这些文件都是重要的系统文件,如非必要,不要乱动!
Linux cd命令:切换目录
cd 是切换所在目录的命令,这个命令的基本信息如下。
命令名称:cd。
英文原意:change directory。
所在路径:Shell 内置命令。
执行权限:所有用户。
功能描述:切换所在目录。
cd 命令是非常简单的命令,仅有的两个选项 -P 和 -L 的作用非常有限,很少使用:
-P(大写)是指如果切换的目录是软链接目录,则进入其原始的物理目录,而不是进入软链接目录;
-L(大写)是指如果切换的目录是软链接目录,则直接进入软链接目录。
-
d 命令可以识别一些特殊符号,用于决速切换所在目录。
- 代表用户的家目录。- 代表上次所在目录。 . 代表当前目录。 .. 代表上级目录
绝对路径和相对路径
Linux 有最高目录,也就是根目录。如果路径是从根目录开始,一级一级指定的,那使用的就是绝对路径。
相对路径,就是只从当前所在目录开始,切换目录。
Linux mkdir命令:创建目录(文件夹)
mkdir 是创建目录的命令,其基本信息如下:
命令名称:mkdir。
英文原意:make directories。
所在路径:/bin/mkdir。
执行权限:所有用户。
功能描述:创建空目录。
如果想建立一串空目录,结果这条命令报错,没有正确执行。这是因为这几个目录都是不存在的,mkdir 默认只能在已经存在的目录中建立新目录。如果需要建立一系列的新目录,则需要加入"-p"选项,递归建立才可以
Linux rmdir命令:删除空目录
既然有建立目录的命令,就一定会有刪除目录的命令 rmdir,其基本信息如下:
命令名称:rmdir。
英文原意:remove empty directories。
所在路径:/bin/rmdir。
执行权限:所有用户。
功能描述:删除空目录。注意:只能删除空目录,否则会报错(故一般不用)
Linux touch命令:修改文件的时间戳
touch 的意思是触摸,如果文件不存在,则会建立空文件;如果文件已经存在,则会修改文件的时间戳(访问时间、数据修改时间、状态修改时间都会改变)。
千万不要把 touch 命令当成新建文件的命令,牢牢记住这是触摸的意思。这个命令的基本信息如下:
命令名称:touch。
英文原意:change file timestamps。
所在路径:/bin/touch。
执行权限:所有用户。
功能描述:修改文件的时间戳。
选项:
-a:只修改文件的访问时间(Access Time)
-c:如果文件不存在,则不建立新文件
-d:把文件的时间改为指定的时间
-m:只修改文件的数据修改时间(Modify Time)
注意:Linux 中的每个文件都有三个时间,分别是 访问时间(Access Time)、数据修改时间(Modify Time)和状态修改时间(Change Time)。这三个时间可以通过 stat 命令来进行査看。
Linux stat命令:显示文件或文件系统的详细信息
在 Linux 中,文件有访问时间、数据修改时间、状态修改时间这三个时间,而没有创建时间。stat 是査看文件详细信息的命令,而且可以看到文件的这三个时间,其基本信息如下。
命令名称:stat。
英文原意:display file or file system status。
所在路径:/usr/bin/stat。
执行权限:所有用户。
功能描述:显示文件或文件系统的详细信息。
选项:
-f:査看文件所在的文件系统信息,而不是査看文件的信息。
Linux cat命令:连接文件并打印输出到标准输出设备
cat 命令用来査看文件内容。査询 cat 命令的帮助,这个命令是 concatenate(连接、连续)的简写,和猫没有一点关系。
cat 命令的基本信息如下。
命令名称:cat。
英文原意:concatenate files and print on the standard output。
所在路径:/bin/cat。
执行权限:所有用户。
功能描述:连接文件并打印输出到标准输出。
选项:
-A:相当于 -vET 选项的整合,用于列出所有隐藏符号,包括回车符 ($)、Tab 键 (^I) 等;
-E:列出每行结尾的回车符 $;
-n:显示行号;
-T:把 Tab 键 ^I 显示出来;
-V:列出特殊字符;
注意:cat 命令适合査看不太大的文件。
Linux more命令:分屏显示文件内容
如果文件过大,则 cat 命令会有心无力,这时 more 命令的作用更加明显。more 是分屏显示文件的命令,其基本信息如下。
命令名称:more。
英文原意:file perusal filter for crt viewin。
所在路径:/bin/more。
执行权限:所有用户。
功能描述:分屏显示文件内容。
more 命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下。
空格键:向下翻页。
b:向上翻页。
回车键:向下滚动一行。
/ 字符串:搜索指定的字符串。
q:退出。
Linux head命令:显示文件开头的内容
head 是用来显示文件开头的命令,其基本信息如下。
命令名称:head。
英文原意:output the first part of files。
所在路径:/usr/bin/head。
执行权限:所有用户。
功能描述:显示文件开头的内容。
选项:
-n 行数: 从文件头开始,显示指定行数;
-v:显示文件名;
注意:head 命令默认显示文件的开头 10 行内容。如果想显示指定的行数,则只需使用"-n"选项即可。
Linux tail命令:显示文件结尾的内容
ail 命令的基本信息如下:
命令名称:tail。
英文原意:output the last part of files。
所在路径:/usr/bin/tail。
执行权限:所有用户。
功能描述:显示文件结尾的内容。
选项:
-n 行数:从文條尾开始,显示指定行数
-f:监听文件的新増内容
Linux ln命令:在文件之间建立链接(硬链接和软链接)详解版
如果要想说清楚 ln 命令,则必须先解释下 ext 文件系统是如何工作的。我们在前面讲解了分区的格式化就是写入文件系统,而我们的 Linux 目前使用的是 ext4 文件系统。如果用一张示意图来描述 ext4 文件系统,则可以参考图 1。
ext4 文件系统示意图
ext4 文件系统会把分区主要分为两大部分(暂时不提超级块):小部分用于保存文件的 inode (i 节点)信息;剩余的大部分用于保存 block 信息。
inode 的默认大小为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。大家如果仔细查看,就会发现 inode 中是不记录文件名的,那是因为文件名记录在文件所在目录的 block 中。
block 的大小可以是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,如果一个 block 放不下数据,则可以占用多个 block。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block,虽然最后一个 block 不能占满,但也不能再放入其他文件的数据。这 3 个 block 有可能是连续的,也有可能是分散的。
ln 命令的基本信息:
命令名称:ln。
英文原意:make links between file0
所在路径:/bin/ln。
执行权限:所有用户。
功能描述:在文件之间建立链接。
选项:
-s:建立软链接文件。如果不加"-s"选项,则建立硬链接文件;
-f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;
注意 : 软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接文件会报错。这是初学者非常容易犯的错误。
硬链接
图 2 硬链接示意图
注意:在 inode 信息中,是不会记录文件名称的,而是把文件名记录在上级目录的 block 中。也就是说,目录的 block 中记录的是这个目录下所有一级子文件和子目录的文件名及 inode 的对应;而文件的 block 中记录的才是文件实际的数据。
当我们查找一个文件,比如 /root/test 时,要经过以下步骤:
首先找到根目录的 inode(根目录的 inode 是系统已知的,inode 号是 2),然后判断用户是否有权限访问根目录的 block。
如果有权限,则可以在根目录的 block 中访问到 /root 的文件名及对应的 inode 号。
通过 /root/ 目录的 inode 号,可以查找到 /root/ 目录的 inode 信息,接着判断用户是否有权限访问 /root/ 目录的 block。
如果有权限,则可以从 /root/ 目录的 block 中读取到 test 文件的文件名及对应的 inode 号。
通过 test 文件的 inode 号,就可以找到 test 文件的 inode 信息,接着判断用户是否有权限访问 test 文件的 block。
如果有权限,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问。
按照这个步骤,在给源文件 /root/test 建立了硬链接文件 /tmp/test-hard 之后,在 /root/ 目录和 /tmp/ 目录的 block 中就会建立 test 和 test-hard 的信息,这个信息主要就是文件名和对应的 inode 号。但是我们会发现 test 和 test-hard 的 inode 信息居然是一样的,那么,我们无论访问哪个文件,最终都会访问 inode 号是 262147 的文件信息。
这就是硬链接的原理。硬链接的特点如下:
不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。
不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 262147 的文件)都可以被访问。
硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。
硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除 inode 号是一样的之外,没有其他明显的特征。这些特征都使得硬链接并不常用,大家有所了解就好。
软链接
链接也称作符号链接,相比硬链接来讲,软链接就要常用多了。我们先建立一个软链接,再来看看软链接的特点。再强调一下,软链接的源文件必须写绝对路径,否则建立的软链接文件就会报错,无法正常使用。软链接完全可以当作 Windows 的快捷方式来对待,它的特点和快捷方式一样,我们更推荐大家使用软链接,而不是硬链接。
软链接和硬链接在原理上最主要的不同在于:硬链接不会建立自己的 inode 索引和 block(数据块),而是直接指向源文件的 inode 信息和 block,所以硬链接和源文件的 inode 号是一致的;而软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的,而且在软链接的 block 中,写的不是真正的数据,而仅仅是源文件的文件名及 inode 号。
我们来看看访问软链接的步骤和访问硬链接的步骤有什么不同。
首先找到根目录的 inode 索引信息,然后判断用户是否有权限访问根目录的 block。
如果有权限访问根目录的 block,就会在 block 中查找到 /tmp/ 目录的 inode 号。
接着访问 /tmp/ 目录的 inode 信息,判断用户是否有权限访问 /tmp/ 目录的 block。
如果有权限,就会在 block 中读取到软链接文件 check-soft 的 inode 号。因为软链接文件会真正建立自己的 inode 索引和 block,所以软链接文件和源文件的 inode 号是不一样的。
通过软链接文件的 inode 号,找到了 check-soft 文件 inode 信息,判断用户是否有权限访问 block。
如果有权限,就会发现 check-soft 文件的 block 中没有实际数据,仅有源文件 check 的 inode 号。
接着通过源文件的 inode 号,访问到源文件 check 的 inode 信息,判断用户是否有权限访问 block。
如果有权限,就会在 check 文件的 block 中读取到真正的数据,从而完成数据访问。
通过这个过程,我们就可以总结出软链接的特点(软链接的特点和 Windows 中的快捷方式完全一致):
1. 不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变。
2. 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。
3. 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及
inode 号。
4. 软链接可以链接目录。
5. 软链接可以跨分区。
Linux rm命令:删除文件或目录
rm 是强大的删除命令,不仅可以删除文件,也可以删除目录。这个命令的基本信息如下。
命令名称:rm
英文原意:remove files or directories。
所在路径:/bin/rm。
执行权限:所有用户。
功能描述:删除文件或目录。
选项:
-f:强制删除(force);比较常用
-i:交互删除,在删除之前会询问用户
-r:递归删除,可以删除目录(recursive)。删除目录时每次都要进行确认,比较麻烦;
rm 命令如果任何选项都不加,则默认执行的是"rm -i 文件名",也就是在删除一个文件之前会先询问是否删除。
Linux cp命令:复制文件和目录
cp 是用于复制的命令,其基本信息如下:
命令名称:cp;
英文原意:copy files and directories;
所在路径:/bin/cp;
执行权限:所有用户;
功能描述:复制文件和目录;
选项:
-a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
-i:询问,如果目标文件已经存在,则会询问是否覆盖;
-l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
-s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
-r:递归复制,用于复制目录;
注意:如果在复制软链接文件时不使用"-d"选项,则 cp 命令复制的是源文件,而不是软链接文件;只有加入了"-d"选项,才会复制软链接文件。请大家注意,"-d"选项对硬链接是无效的。
“d"选项要求源文件必须是软链接,目标文件才会复制为软链接;而”-l"和"-s"选项的源文件只需是普通文件,目标文件就可以直接复制为硬链接和软链接。
Linux mv命令:移动文件或改名
mv 是用来剪切的命令,其基本信息如下。
命令名称:mv。
英文原意:move(rename)files。
所在路径:/bin/mv。
执行权限:所有用户。
功能描述:移动文件或改名。
选项:
-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
-n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
-v:显示详细信息;
和 rm、cp 不同的是,mv 移动目录不需要加入"-r"选项;如果源文件和目标文件在同一目录中,那就是改名
Linux文件权限(所有者,所属组)及含义详解
文件的所有者就是这个文件的建立者,而系统中绝大多数系统文件都是由 root 建立的,所以大多数系统文件的所有者都是 root。
所属组就是一组用户的集合,类似于大学里的各种社团。那为什么要把用户放入一个用户组中呢?
当然是为了方便管理。大家想想,如果我有 100 位用户,而这 100 位用户对同一个文件的权限是一致的,那我是一位用户一位用户地分配权限方便,还是把 100 位用户加入一个用户组中,然后给这个用户组分配权限方便呢?不言而喻,一定是给一个用户组分配权限更加方便。
Linux权限位(超详细)
第 1 位代表文件类型。Linux 不像 Windows 使用扩展名表示文件类型,而是使用权限位的第 1 位表示文件类型。虽然 Linux 文件的种类不像 Windows 中那么多,但是分类也不少,详细情况可以使用"info ls"命令查看。这里只讲一些常见的文件类型:
"-":普通文件。
"b":块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件 /dev/sda1 就是这种文件。
"c":字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等。
"d":目录文件。Linux 中一切皆文件,所以目录也是文件的一种。
"l":软链接文件。
"p":管道符文件。这是一种非常少见的特殊设备文件。
"s":套接字文件。这也是一种特殊设备文件,一些服务支持 Socket 访问,就会产生这样的文件。
第 2~4 位代表文件所有者的权限。
-r:代表 read,是读取权限。
-w:代表 write,是写权限。
-x:代表 execute,是执行权限。
注意:如果有字母,则代表拥有对应的权限;如果是"-",则代表没有对应的权限。
第 5~7 位代表文件所属组的权限,同样拥有"rwx"权限。
第 8~10 位代表其他人的权限,同样拥有"rwx"权限。
点的含义:如果在文件的权限位中含有".",则表示这个文件受 SELinux 的安全规则管理。
Linux chmod命令:修改文件或目录的权限
chmod 是修改权限的命令,其基本信息如下:
命令名称:chmod。
英文原意:change file mode bits。
所在路径:/bin/chmod。
执行权限:所有用户。
功能描述:修改文件的权限模式。
选项:
-R:递归设置权限,也就是给子目录中的所有文件设定权限
数字权限
数字权限的赋予方式是最简单的,但是不如之前的字母权限好记、直观。我们来看看这些数字权限的含义:
4:代表"r"权限。
2:代表"w"权限。
1:代表"x"权限。
Linux读写执行权限(-r、-w、-x)完全攻略
其实,权限的含义不像表面上这么明显,下面我们就来讲讲这些权限到底是什么含义。
权限对文件的作用。
-读(r):对文件有读(r)权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读(r)权限,就可以对文件执行 cat、more、less、head、tail 等文件查看命令。
-写(w):对文件有写(w)权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写(w)权限,就可以对文件执行 vim、echo 等修改文件数据的命令。注意,对文件有写权限,是不能删除文件本身的,只能修改文件中的数据。如果要想删除文件,则需要对文件的上级目录拥有写权限。
-执行(x):对文件有执行(x)权限,代表文件拥有了执行权限,可以运行。在 Linux 中,只要文件有执行(x)权限,这个文件就是执行文件了。只是这个文件到底能不能正确执行,不仅需要执行(x)权限,还要看文件中的代码是不是正确的语言代码。对文件来说,执行(x)权限是最高权限。
权限对目录的作用
-读®:对目录有读 (r)权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些子文件和子目录。如果把权限对应到命令上,那么一旦对目录拥有了读(r)权限,就可以在目录下执行 ls 命令,查看目录下的内容了。
-写(w):对目录有写(r)权限,代表可以修改目录下的数据,也就是可以在目录中新建、删除、复制、剪切子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写(w)权限,就可以在目录下执行 touch、rm、cp、mv 命令。对目录来说,写(w)权限是最高权限。
-执行(x):目录是不能运行的,那么对目录拥有执行(x)权限,代表可以进入目录。如果把权限对应到命令上,那么一旦对目录拥有了执行(x)权限,就可以对目录执行 cd 命令,进入目录。
注意事项
1) 为什么对文件有写权限,却不能删除文件?
这需要通过分区的格式化来讲解。我们之前讲过,分区的格式化可以理解为给分区打入隔断,这样才可以存储数据。
在 Linux 的 ext 文件系统中,格式化可以理解为把分区分成两大部分:
一部分占用空间较小,用于保存 inode(i 节点)信息;
绝大部分格式化为 block(数据块),用于保存文件中的实际数据。
在 Linux 中,默认 inode 的大小为 128 Byte,用于记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件中的数据真正保存的 block 编号。每个文件需要占用一个 inode。
仔细观察,在 inode 中并没有记录文件的文件名。那是因为文件名是记录在文件上级目录的 block 中的。我们画一张示意图看看,假设有这样一个文件 /test/cangls,如图 1 所示。
我们可以看到,在 /test/ 目录的 block 中会记录这个目录下所有的一级子文件或一级子目录的文件名及其对应的 inode 好。也就是说,系统读取 cangls 文件的过程是这样的:
- 通过 /test/ 目录的 inode 信息,找到 /test/ 目录的 block。
- 在 /test/ 目录的 block 中,查看到 cangls 文件的 inode 号。
- 通过 cangls 文件的 inode 号,找到了 cangls 文件的 inode 信息。
- 确定是否有权限访问 cangls 文件的内容。
- 通过 inode 信息中 block 的位置,找到 cangls 文件实际的 block。
- 读取 block 数据,从而读取出 cangls 文件的内容。
既然如此,那么 /test/ 目录的文件名放在哪里呢?当然放在 / 目录的 block 中了,而/目录的 inode 号(/ 目录的 inode 号是 2)是系统已知的。也就是说,在系统中读取任意一个文件,都要先通过 / 目录的 inode 信息找到 / 目录的 block,再查看 / 目录的 block,从而可以确定一级目录的 inode 信息。然后一级一级地查找到最终文件的 block 信息,从而读取数据。
总结:因为文件名保留在上级目录的 block 中,所以对文件拥有写权限,是不能删除文件本身的,只能删除文件中的数据(也就是文件 block 中的内容)。要想删除文件名,需要对文件所在目录拥有写权限。
- 目录的可用权限。
对目录来讲,如果只赋予只读(r)权限,则是不可以使用的。大家想想,要想读取目录下的文件,你怎么也要进入目录才可以吧?而进入目录,对目录来讲,需要执行(x)权限的支持。
目录的可用权限其实只有以下几个。
0:任何权都不赋予。
5:基本的目录浏览和进入权限。
7:完全权限。
Linux chown命令:修改文件和目录的所有者和所属组
chown 是修改文件和目录的所有者和所属组的命令,其基本信息如下。
命令名称:chown。
文原意:change file owner and group。
所在路径:/bin/chown。
执行权限:所有用户。
功能描述:修改文件和目录的所有者和所属组。
选项:
-R: 递归设置权限,也就是给子目录中的所有文件设置权限
- 修改文件的所有者。
之所以需要修改文件的所有者,是因为赋予权限的需要。当普通用户需要对某个文件拥有最高权限的时候,是不能把其他人的权限修改为最高权限的,也就是不能出现 777 的权限,这是非常不安全的做法。
合理的做法是修改文件的所有者,这样既能让普通用户拥有最高权限,又不影响其他普通用户。 - 修改文件的所属组。
chown 命令不仅可以修改文件的所有者,也可以修改文件的所属组
修改所属组,也是为了调整文件的权限。只是我们目前还没有学习如何把用户加入用户组中,如果可以把用户加入同一个组当中,然后直接调整所属组的权限,那当然要比用户赋予权限要简单方便。
Linux 中用户组的建立与 Windows 中是不同的。在 Windows 中,新建的用户都属于 users 这个组,而不会建立更多的新组。但是在 Linux 中,每个用户建立之后,都会建立和用户名同名的用户组,作为这个用户的初始组,user 用户组是自动建立的。
3. 普通用户修改权限
并不是只有 root 用户才可以修改文件的权限,而是超级用户可以修改任何文件的权限,普通用户只能修改自己文件的权限。也就是说,只有普通用户是这个文件的所有者,才可以修改文件的权限。
Linux chgrp命令:修改文件和目录的所属组
chgrp 是修改文件和目录的所属组的命令,其基本信息如下:
命令名称:chgrp。
英文原意:change group ownership。
所在路径:/bin/chgrp。
执行权限:所有用户。
功能描述:修改文件和目录的所属组。
Linux umask详解:令新建文件和目录拥有默认权限
umask 默认权限是 Linux 权限的一种,主要用于让 Linux 中的新建文件和目录拥有默认权限。Linux 是一个比较安全的操作系统,而安全的基础就是权限,所以,在 Linux 中所有的文件和目录都要有基本的权限,新建的文件和目录当然也要有默认的权限。
在 Linux 中,通过 umask 默认权限来给所有新建立的文件和目录赋予初始权限,这一点和 Windows 不太一样,Windows 是通过继承上级目录的权限来给文件和目录赋予初始权限的。
选项:
-S :用字母来表示文件和目录的初始权限。
注意:我们看到文件和目录的权限是4 位数字"0022",其中第一个数字"0"代表的是文件的特殊权限(SetUID、SetGID、Sticky BIT),后 3 位数字"022"才是真正的 umask 默认权限。
umask默认权限的计算方法
在学习 umask 默认权限的计算方法之前,我们需要先了解一下新建文件和目录的默认最大权限。
对文件来讲,新建文件的默认最大权限是 666,没有执行(x)权限。这是因为执行权限对文件来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予。
对目录来讲,新建目录的默认最大权限是 777。这是因为对目录而言,执行(x)权限仅仅代表进入目录,所以即使建立新文件时直接默认赋予,也没有什么危险。
接下来我们学习如何计算 umask 默认权限。按照官方的标准算法,umask 默认权限需要使用二进制进行逻辑与和逻辑非联合运算才可以得到正确的新建文件和目录的默认权限。这种方法既不好计算,也不好理解,笔者并不推荐。
我们在这里还是按照权限字母来讲解 umask 权限的计算方法。我们就按照默认的 umask 值是 022 来分别计算一下新建文件和目录的默认权限吧。
文件的默认权限最大只能是 666,换算成字母就是"-rw-rw-rw-";而 umask 的值是 022,也换算成字母就是"-----w–w-"。把两个字母权限相减,得到的就是新建文件的默认权限:(-rw-rw-rw-) - (-----w–w-)=(-rw-r–r--)。
目录的默认权限最大可以是 777,换算成字母就是"drwxrwxrwx";而 umask 的值是022,也换算成
字母就是"d----w–w-"。也把两个字母权限相减,得到的就是新建目录的默认权限:(drwxrwxrwx) - (d----w–w-)=(drwx-r-xr-x)。
目录或文件的默认权限 = 目录或文件的最大权限(666) - 目录或文件的初始权限(不固定)
umask 默认权限的修改方法
umask 默认权限可以直接通过命令来进行修改,如[root@localhost ~]# umask 003
不过,通过命令进行的修改只能临时生效,一旦重启或重新登录就会失效。如果想让修改永久生效,则需要修改对应的环境变量配置文件 /etc/profile。
Linux man命令:显示联机帮助手册
man 是最常见的帮助命令,也是 Linux 最主要的帮助命令,其基本信息如下。
命令名称:man。
英文原意:format and display the on-line manual pages。
所在路径:/usr/bin/man。
执行权限:所有用户。
功能描述:显示联机帮助手册。
选项:
-f:査看命令拥有哪个级别的帮助
-k: 査看和命令相关的所有帮助
在执行 man 命令时,命令的开头会有一个数字标识这个命令的帮助级别,如:
LS(1) User Commands LS(1)
"-k"选项,它的作用是査看命令名中包含指定字符串的所有相关命令的帮助,这条命令适合你只记得命令的几个字符,用来査找相关命令的情况。
Linux find命令:在目录中查找文件(超详解)
ind 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode 号等来搜索文件。但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以,在使用 find 命令搜索时,不要指定过大的搜索范围。
find 命令的基本信息如下:
命令名称:find。
英文原意:search for files in a directory hierarchy.
所在路径:/bin/find。
执行权限:所有用户。
功能描述:在目录中查找文件。
find 是比较特殊的命令,它有两个参数:
第一个参数用来指定搜索路径;
第二个参数用来指定搜索内容。
按照文件名搜索
选项:
-name: 按照文件名搜索;
-iname: 按照文件名搜索,不区分文件名大小;
-inum: 按照 inode 号搜索;
注意:find 命令是完全匹配的,必须和搜索关键字一模一样才会列出
按照文件大小搜索
选项:
-size[±]大小:按照指定大小搜索文件
这里的"+“的意思是搜索比指定大小还要大的文件,”-" 的意思是搜索比指定大小还要小的文件。
按照修改时间搜索
选项:
-atime [±]时间: 按照文件访问时间搜索
-mtime [±]时间: 按照文改时间搜索
-ctime [±]时间: 按照文件修改时间搜索
这三个时间的区别我们在 stat 命令中已经解释过了,这里用 mtime 数据修改时间来举例,重点说说 "[±]"时间的含义。
-5:代表5天前修改的文件。
5:代表前5~6天那一天修改的文件。
+5:代表6天前修改的文件。
find 不仅可以按照 atmie、mtime、ctime 来査找文件的时间,也可以按照 amin、mmin 和 cmin 来査找文件的时间,区别只是所有 time 选项的默认单位是天,而 min 选项的默认单位是分钟。
按照权限搜索
选项:
-perm 权限模式:査找文件权限刚好等于"权限模式"的文件
-perm -权限模式:査找文件权限全部包含"权限模式"的文件
-perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件
注意:"-perm-权限模式"是必须完全包含,才能找到;而"-perm+权限模式"是只要包含任意一个指定权限,就可以找到
按照所有者和所属组搜索
选项:
-uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
-gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
-user 用户名:按照用户名査找所有者是指定用户的文件
-group 组名:按照组名査找所属组是指定用户组的文件
-nouser:査找没有所有者的文件
按照所有者和所属组搜索时,**"-nouser"选项比较常用,主要用于査找垃圾文件。在 Linux 中,所有的文件都有所有者,只有一种情况例外,那就是外来文件。**比如光盘和 U 盘中的文件如果是由 Windows 复制的,在 Linux 中査看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者。
按照文件类型搜索
选项:
-type d:查找目录
-type f:查找普通文件
-type l:查找软链接文件
逻辑运算符
选项:
-a:and逻辑与
-o:or逻辑或
-not:not逻辑非
其它选项:
Linux zip命令:压缩文件或目录
.zip"格式文件的压缩命令就是 zip,其基本信息如下。
命令名称:zip。
英文原意:package and compress(archive)files。
所在路径:/usr/bin/zip。
执行权限:所有用户。
功能描述:压缩文件或目录。
选项:
-r:压缩目录
zip 压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以便解压缩时使用。
Linux unzip命令:解压zip格式的压缩包
".zip"格式的解压缩命令是 unzip,其基本信息如下:
命令名称:unzip。
英文原意:list, test and extract compressed files in a ZIP archive。
所在路径:/usr/bin/unzip.
执行权限:所有用户。
功能描述:列表、测试和提取压缩文件中的文件。
选项:
-d: 指定解压缩位置
Linux gzip命令:压缩文件或目录
".gz"格式是 Linux 中最常用的压缩格式,使用 gzip 命令进行压缩,其基本信息如下:
命令名称:gzip。
英文原意:compress or expand files。
所在路径:/bin/gzip。
执行权限:所有用户。
功能描述:压缩文件或目录。
选项:
-c:将压缩数据输出到标准输出中,可以用于保留源文件;
-d:解压缩;
-r:压缩目录;
-v:显示压缩文件的信息;
-数字:用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6;
注意:在 Linux 中,打包和压缩是分开处理的。而 gzip 命令只会压缩,不能打包,所以才会出现没有打包目录,而只把目录下的文件进行压缩的情况。
Linux gunzip命令:解压缩文件或目录
我们先看看 gunzip 命令的基本信息。
命令名称:gunzip。
英文原意:compress or expand files。
所在路径:/bin/gunzip。
执行权限:所有用户。
功能描述:解压缩文件或目录。
查看".gz"格式压缩的文本文件内容
如果我们压缩的是一个纯文本文件,则可以直接使用 zcat 命令在不解压缩的情况下査看这个文本文件中的内容。
Linux bzip2命令:bz2格式的压缩命令
“.bz2"格式是 Linux 的另一种压缩格式,从理论上来讲,”.bz2"格式的算法更先进、压缩比更好;而 ".gz"格式相对来讲的时间更快。
".bz2"格式的压缩命令是 bzip2,我们来看看这个命令的基本信息。
命令名称:bzip2。
英文原意:a block-sorting file compressor。
所在路径:/usr/bin/bzip2。
执行权限:所有用户。
功能描述:.bz格式的压缩命令。
选项:
-d:解压缩。
-k:压缩时,保留源文件。
-v:显示压缩的详细信息。
-数字:这个参数和 gzip 命令的作用一样,用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。
注意:gzip 只是不会打包目录,但是如果使用“-r”选项,则可以分别压缩目录下的每个文件;而 bzip2 命令则根本不支持压缩目录,也没有“-r”选项。
这个压缩命令依然会在压缩的同时删除源文件。bzip 命令可以直接使用"-k"选项来保留源文件,而不用像 gzip 命令一样使用输出重定向来保留源文件。
Linux bunzip命令:bz2格式的解压缩命令
".bz2"格式可以使用"bzip2 -d 压缩包"命令来进行解压缩,也可以使用"bunzip2 压缩包"命令来进行解压缩。
bunzip2 命令的基本信息
命令名称:bunzip2。
英文原意:a block-sorting file compressor。
所在路径:/usr/bin/bunzip2。
执行权限:所有用户。
功能描述:.bz2格式的解压缩命令。
选项:
-k:解压缩时,保留源文件
注意:和".gz"格式一样,".bz2"格式压缩的纯文本文件也可以不解压缩直接査看,使用的命令是 bzcat。
Linux tar压缩命令:打包与解打包命令
.tar"格式的打包和解打包都使用 tar 命令,区别只是选项不同。tar 命令的基本信息。
命令名称:tar。
英文原意:tar。
所在路径:/bin/tar。
执行权限:所有用户。
功能描述:打包与解打包命令。
选项:
-c:打包;
-f:指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
-v:显示打包文件过程;
解打包命令格式
“.tar"格式的解打包也需要使用 tar 命令,但是选项不太一样。命令格式如下:
[root@localhost ~]#tar [选项] 压缩包
选项:
-x:解打包;
-f:指定压缩包的文件名;
-v:显示打包文件过程;
-t:测试,就是不解打包,只是査看包中有哪些文件;
-C 目录:指定解打包位置;
其实解打包和打包相比,只是把打包选项”-cvf"更换为"-xvf"。如果使用"-xvf"选项,则会把包中的文件解压到当前目录下。如果想要指定解压位置,则需要使用"-C(大写)“选项。 如果只想査看文件包中有哪些文件,则可以把解打包选项”-x"更换为测试选项"-t"。
“.tar.gz"和”.tar.bz2" 格式
你可能会觉得 Linux 实在太不智能了,一个打包压缩,居然还要先打包成".tar"格式,再压缩成".tar.gz"或".tar.bz2"格式。其实 tar 命令是可以同时打包压缩的,前面的讲解之所打包和压缩分开,是为了让大家了解在 Linux 中打包和压缩的不同。
选项:
-z:压缩和解压缩 ".tar.gz"格式
-j:压缩和解压缩 ".tar.bz2"格式
Linux sync命令:刷新文件系统缓冲区
当我们在计算机上保存数据的时候,其实是先在内存中保存一定时间,再写入硬盘。这其实是一种缓存机制,当在内存中保存的数据需要被读取的时候,从内存中读取要比从硬盘中读取快得多。
不过,这也会带来一些问题,如果数据还没有来得及保存到硬盘中,就发生了突然岩机(比如断电)的情况,数据就会丟失。
sync 命令的作用就是把内存中的数据强制向硬盘中保存。这个命令在常规关机的命令中其实会自动执行,但如果不放心,则应该在关机或重启之前手工执行几次,避免数据丟失。
sync 命令的信息如下:
命令名称:sync。
英文原意:flush file system buffers。
所在路径:/bin/sync。
执行权限:所有用户。
功能描述:刷新文件系统缓冲区。
sync 命令直接执行就可以了,不需要任何选项。
Linux shutdown命令:关机和重启
shutdown 命令的基本信息如下。
命令名称:shutdown。
英文原意:bring the system down。
所在路径:/sbin/shutdown。
执行权限:超级用户。
功能描述:关机和重启
选项:
-c:取消已经执行的 shutdown 命令;
-h:关机;
-r:重启;
在现在的系统中,reboot 命令也是安全的,而且不需要加入过多的选项。
halt和poweroff命令
这两个都是关机命令,直接执行即可。
init命令
init 是修改 Linux 运行级别的命令,也可以用于关机和重启。
Linux setup命令:系统配置工具
Linux 当然也需要配置 IP 地址才可以正常使用网络。其实 Linux 主要是通过修改网卡配置文件来永久修改 IP 地址的。setup 是一个简化命令,是 Red Hat 系列专有的命令,其他的 Linux 系列不一定有此命令。
setup 命令的基本信息如下。
命令名称:setup。
英文原意:A text mode system configuration tool。
所在路径:/usr/bin/setup。
执行权限:所有用户。
功能描述:系统配置工具。
Linux ifconfig命令:配置网络接口
ifconfig 是 Linux 中査看和临时修改 IP 地址的命令,其基本信息如下:
命令名称:ifconfig。
英文原意:configure a network interface。
所在路径:/sbin/ifconfig。
执行权限:超级用户。
功能描述:配置网络接口。
Linux ping命令:向网络主机发送ICMP请求
ping 是常用的网络命令,主要通过 ICMP 协议进行网络探测,测试网络中主机的通信情况。
ping 命令的基本信息如下:
命令名称:ping。
英文原意:send ICMP ECHO_REQUEST to network hosts。
所在路径:/bin/ping。
执行权限:所有用户。
功能描述:向网络主机发送 ICMP 请求。
选项:
-b: 后面加入广播地址,用于对整个网段进行探测;
-c 次数: 用于指定 ping 的次数;
-s 字节: 指定探测包的大小;
在 ping 命令中,可以使用-b选项,后面加入广播地址,探测整个网段。我们可以使用这个选项知道整个网络中有多少主机是可以和我们通信的,而不用一个一个 IP 进行探测。
linux netstat命令:网络状态查看命令
netstat 是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。netstat 命令的基本信息:
命令名称:netstat。
英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships。
所在路径:/bin/netstat.
执行权限:所有用户。
功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。
选项:
-a:列出所有网络状态,包括 Socket 程序;
-c秒数:指定每隔几秒刷新一次网络状态;
-n:使用 IP 地址和端口号显示,不使用域名与服务名;
-p:显示 PID 和程序名;
-t:显示使用 TCP 协议端口的连接状况;
-u:显示使用 UDP 协议端口的连接状况;
-I:仅显示监听状态的连接;
-r:显示路由表;
如果使用"-p"选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的 PID。
使用选项"-an"可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socke 程序连接等。因为连接较多,所以输出的内容有很多。
Linux write命令:向其他用户发送信息
write 命令的信息如下:
命令名称:write。
英文原意:send a message to another user。
所在路径:/usr/bin/write。
执行权限:所有用户。
功能描述:向其他用户发送信息。
Linux mail命令:发送和接收电子邮件
mail 命令的基本信息如下。
命令名称:mail。
英文原意:send and receive Internet mail。
所在路径:/bin/mail。
执行权限:所有用户。
功能描述:发送和接收电子邮件。
选项:
-s: 指定邮件标题
我们在写脚本时,有时需要脚本自动发送一些信息给指定用户,把要发送的信息预先写到文件中,是一个非常不错的选择。