Linux命令的数量是非常之多的,想要全部记住不太现实。
这篇讲的是一些常用的命令,建议每条命令都亲身实践一下感受效果。不要去专门背它,而是理解、实践就能自然而然的记住
千万不要被这么多的命令吓到,其实大部分命令都很简单
由于Linux中的命令非常多(以千计),所以这篇文章会持续地更新、补充。
一.前置知识
1.命令提示符
登陆终端之后第一眼看到的就是上面这个界面,其中的qiuker@ubuntu:~$
就是命令提示符
qiuker
表示当前登陆的用户名
@
是分隔符
ubuntu
是当前系统主机名
:~
表明当前所处目录,~
表示当前用户的家目录,相当于/home/qiuker
$
表明用户类型,$
表示普通用户,#
表示管理员
2.命令格式
命令的基本格式为:命令 [-选项] [参数]
其中[]代表可选项,也就是说选项和参数并不是必需的
命令、选项、参数间以空格作为分隔符
1)选项
选项的作用就是调整命令的功能
比如最常用的功能ls
(list files)用于列出当前目录下的文件名(按字典序)
ls -t
则将文件按建立的时间顺序列出
ls -a
则可以显示出所有的文件(包括.
开头的隐藏文件)
选项有完整选项和简化选项之分
完整选项的格式一般为--选项
简化选项的格式一般为-选项
比如-a
就是--all
的简化
由于平时使用的多是简化选项,所以只要知道有完整选项这回事就行,不用特意记忆
顺带一提,Linux中的命令非常多,忘记了可以--help
一下就能查看信息了
2)参数
参数就是命令操作的对象,并且有默认参数
以ls
为例,如果没有参数则默认参数为当前目录
3)注意事项
1)不是所有命令都遵循:命令 [-选项] [参数] 的格式
有些命令可能需要多个参数
2)多个简化选项同时使用时可以组合
比如ls -a -l
等价于ls -la
和ls -al
完整选项一般不可以组合
3)命令写的太多了,可以使用ctrl
+L
键进行清屏或者clear
命令进行清屏
4)按↑
和↓
可以调用之前写过的命令
3.文件通配符
通配符用于模糊搜索文件,如果不知道一个文件的全名或者懒得打一个文件的全名,可以使用文件通配符代替一个或多个字符
1)星号:
*
可以代表任意多个字符,即匹配任意长度的文件名字符串(包括空字符串)
例:
通过*file
可以匹配file
,abcfile
等等
通过*B*
可以匹配AB
、BC
、ABC
、B
等等
2)问号:
?
代表单个字符,比如ab?ndon
可以匹配abandon
3)方括号:
[]
代表[
和]
之间的任一字符,比如[abc]
可以匹配a
或b
或c
也可以使用减号-
指定一个区间,比如[0-8]
可以匹配数字0到8中的任意一个,[c-f]
可以匹配c
、d
、e
、f
中的任意一个
可以用^
或!
表示取反,比如[^txt]
表示不包含txt的文件
二.目录处理命令
1.ls命令
原意: list
功能: 显示文件目录
所处路径: /bin/ls
语法: ls [选项] [文件或目录]
选项:
1)ls -a
ls -a
:a是all的缩写,可以显示出包括.
开头的隐藏文件在内的所有文件。
隐藏文件设计的初衷就是让用户看不见一些系统文件,这些文件一般不需要改动所以干脆隐藏起来防止用户误操作。
2)ls -l
ls -l
:将文件型态、权限、拥有者、文件大小等详细信息也一并列出
l是long 的缩写,可以理解为显示的信息比较长。。。
例:
解释:
①第一部分
第一部分有十个字符
第一个字符代表文件的类型:
常见的有:-
表示普通文件,d
表示目录(directory的缩写),目录其实是一种特殊的文件,可以理解为文件夹,存放的是子文件/目录的信息,l
表示链接文件(link的缩写,相当于windows下的快捷方式)
Windows中的文件类型通过扩展名表示
后面九个字符代表权限:
Linux中文件和用户之间有三种关系:
1.所有者 :只能有一个,一般为文件的创建者,但是所有权是可以转让的
2.所有者的同组成员(所属组)
3.其他人
2-4个字符代表文件所有者的权限
5-7个字符代表文件所属组的权限
8-10个字符代表其他人的权限
r代表读(read)的权限
w代表写(write)的权限
x代表执行(execute)的权限
此外还有一些特殊权限
rwx
代表具备读、写、执行的权限
rw-
代表具备读和写的权限
r--
代表只具备读的权限
也就是第一位代表读、第二位代表写、第三位代表执行,如果有权限就写上对应的字母,如果没有就用-
代替
②第二部分指的是硬链接数
目录的子目录数或者文件的link数
链接之后再讲
③第三部分指的是文件的所有者
解释一下为啥需要给用户分类:我们学习时都是在个人计算机上自己使用,自己就是管理者,有最大的权限,所以用户分类似乎没有必要。但对于服务器来说,权限一定要详细分配的(比如说银行的数据,肯定不能让所有用户具有相同的权限的)
④第四部分指的是文件的所属组
所属组的成员对文件具备相同的权限
⑤第五部分指的是文件的大小
如果觉得4096、4180这种数字看起来费劲,可以使用-lh
选项,4096就会显示为4k,4180就会显示为4.1k
没错-h
的作用就是人性化显示,将表示内存大小的数字转化为更符合人阅读的形式
⑥第六部分指的是文件的上一次修改时间
如果没有修改过,就是创建时间了
⑦第七部分指的是文件名
文件名就是文件的名字咯
3)ls -i
ls -i
:用于查看文件的索引节点(index node,简称inode)
Linux中所有文件(包括目录)都有一个独一无二的索引节点。
4)其他
ls -d
:d是directory的缩写,给出当前目录的信息(这个选项一般和l
搭配,单独使用毫无意义)
ls -h
将文件大小用人性化的方式展示,和l
一起使用
ls -t
将文件按建立的时间顺序列出
ls -r
将文件按相反顺序列出(默认顺序为字典序,r指reverse)
ls -R
将该目录下的文件,以及文件的子文件(子目录)一并列出(这里的R指Recursively,递归)
(注意Linux严格区分大小写的规定,-r和-R不同)
ls -F
将在每个文件名后面附上一个字符用以说明该文件的类型:*
表示可执行的普通文件,/
表示目录,@
表示符号链接
2.mkdir命令
原意: make directories
功能: 创建新目录
所处路径: /bin/mkdir
语法: mkdir [-p] [目录名]
1)文件命名规则
①文件名称严格区分大小写:A
和a
代表两个不同的文件
②目录是特殊的文件,在同一路径下,两个文件不能同名
③文件名可以使用除/
以外的任意字符,但是在Linux的命令解释器中有一些转义字符,如?
、*
、(空格)、
$
、括号等等,应该尽量避免使用这些字符作为名字。还有一个字符\
用于取消转义字符的特殊意义,取其字面值,比如\?
就代表?
字符
④文件名最长不能超过255个字符
⑤以“.”开头的文件为隐藏文件
2) mkdir
目录名的格式为 /……/创建的目录名
例:mkdir /tmp/China
表示在/tmp/
目录下创建一个新的目录,/tmp/
是临时文件存放的地方,是Linux系统中本身就存在的目录,China
是新创建的目录名
ps:建议初学时就在/tmp/
目录下进行创建、删除的练习,避免把系统搞得一团糟
mkdir
具有同时创造多个目录的功能,比如说makdir /tmp/A /tmp/B
就同时在/tmp/目录下创建了两个A
、B两个目录
反例1:mkdir/tmp/A B
,之前虽然说过文件名可以是除了/
的任意字符,但是由于空格是命令中的分割符,所以系统将这句话理解为创建两个目录,一个是/tmp/A
,一个是B
,而且B的前面没有目录名,系统会默认其创建在当前目录下
如果想要创建名字里带空格的文件名,需要用双引号将文件名括起来,但是不建议这么写
反例2:mkdir /tmp/Cap/A
是不合法的,因为Cap
本身就是不存在的目录,换言之,无法通过这种方式连续创建两个目录
3)mkdir -p
选项-p
用于递归创建,p是parent的缩写
下面会遇到很多递归的情况,比如递归复制cp -r
,递归删除rm -r
,为啥这些命令都用选项-r
表示递归,mkdir
要用-p
呢?
个人记忆方法:对于复制和删除命令,如果不加-r
就只能复制/删除文件,加上-r
之后可以操作目录。-p
选项则只是加上后从创建一级目录变成能创建多级目录
之前不合法的句子加上这个选项就合法了:mkdir -p /tmp/Cap/A
3.cd命令
原意: change the current directory
功能: 切换当前目录
所处路径: shell内置命令
语法: cd [目录]
~
表示目录/home
.
表示当前所在的目录
..
表示当前所在的目录的上一级目录
cd ..
等价于返回上一级目录
当前目录位置可以通过命令提示符看到
移动当前目录有什么意义呢?
很多命令都以目录作为参数,而每一次都打绝对路径未免太累了。
假设当前处于目录/tmp/Cap
下,想要进行ls /tmp/Cap/A
操作,其实可以简写为ls A
,这就是相对路径
所谓绝对路径:就是从根目录/
开始一直走到目的地的路径,相对路径则是从当前目录走到目的地的路径
总之怎么方便怎么来
4.cp命令
原意: copy
功能: 复制文件或目录
所处路径: /bin/cp
语法: cp -rp [原文件或目录] [目标目录]
该命令行需要至少两个参数
如果有两个以上的参数,则最后一个参数是目标目录,前面的参数都是被复制的文件/目录
选项:
1.cp -r
如果没有选项-r
,cp只能复制文件,而加上选项-r
后可以复制目录
r是recursively的缩写,即递归,复制目录实际上就是需要递归多次复制
cp-R
在功能上和cp-r
类似,但是还是不同的,具体可以看这里:传送门
2.cp -p
cp -p
:p指Preserve,有维持原状的意思,指复制文件属性,即除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
所以平时拷贝文件/文件夹写成cp -rp
就行
小技巧:
如果想让/tmp/A/apple
文件复制到/tmp/B
目录下,同时改名为boy
,可以这么写命令:
cp -pr /tmp/A/apple /tmp/B/boy
5.rm命令
原意: remove the files
功能: 删除文件
所处路径: /bin/rm
语法: rm [文件]
1.rm -r
-r
这个选项已经在其他命令出现过很多次了,除了在ls
中表示reverse,其他地方都是表示recursively(ls中-R
表示递归)
用这个选项可以删除文件夹
Windows中删除了之后会先收进回收站,回收站中再删除才是彻底删除。而Linux里删了就没了。。。
所以不要用系统文件做练习,No zuo no die
2.rm -f
-f
中是f是force的缩写,表示强制。
即便是权限为只读的文件,也无需确认就可以直接删除,建议谨慎使用
6.其他目录处理命令
1)mv命令
原意: move
功能: 剪切(移动)和改名文件、目录
所处路径: /bin/mv
语法: mv [原文件或目录] [目标目录]
mv
和cp
用法几乎一样,也可以同时复制多个文件/目录,剪切的同时进行改名也和cp
写法一样,区别在于mv
命令不需要加选项就可以剪切目录
本质上来说,剪切和复制一样,无非是前者会在复制的同时删掉原文件而已
2)pwd命令
原意: print the name of the current working directory
功能: 显示当前命令
所处路径: /bin/pwd
语法: pwd
这个功能是用于打印当前所处目录的全名的
PS:可能是因为版本问题吧,我这个版本命令提示符本身就记录了当前所处命令的全名,所以这个命令对我来说有点脱裤子放屁。。。
3)rmdir命令
原意: remove the directory(ies), if they are empty.
功能: 删除空目录
所处路径: /bin/rmdir
语法: rmdir [文件名]
注意事项:
只能删除空目录,所以没啥用,用到的地方不是很多
4)总结
增:mkdir [-p]
、cp [rp]
(注:前者p表示parent 用来递归创建,后者p表示preserve维持属性、r表示recursively 递归)
删:rm [-rf]
移:mv
、cd
查:ls [-l]
三.文件处理命令
Linux中存在着“一切皆文件”的思想。目录本质也是文件,只不过目录中存放的数据比较特殊而已。
下面要讲的文件处理命令指的是对于普通文件的处理
(注:目录处理命令中的rm
、cp
、mv
等也是可以用于处理普通文件的)
1.touch命令
功能: 用于修改文件或目录的时间属性,包括存取时间和更改时间。若文件不存在,则系统会建立一个新的文件。
所处路径: /bin/touch
语法: touch [文件名]
主要记住touch用来创建文件的功能即可
2.cat命令
原意: concatenate file(s) to standard output.
功能: 显示文件内容,从键盘读入内容到文件
所处路径: /bin/cat
语法: cat [文件名]
cat [文件名]是最简单的用法,就是显示文件里的内容
1.cat >
cat A > B
可以将文件A的内容复制到文件B中(注:若文件B中本来就有数据,会被覆盖)
cat > B
命令可以从标准输入(键盘)读取内容,直到ctrl
+D
输入结束,并将内容存储到文件B中
可以这么理解:
由于Linux“一切皆文件”的思想,所以设备键盘其实也是文件,cat A > B
这条命令需要两个文件参数,将数据从A复制到B,如果不写第一个参数,系统会默认该文件参数为键盘文件
2.cat -n
cat -n
:可以对输出的行进行编号,n是number的缩写
效果如下所示:
3.cat -b
注意到上图对于空行也进行编号了,如果不想对空行进行编号,可以使用cat -b
命令,其中b表示number-nonblank(非空行)
效果如下:
注意只是编号,并没有删除空白行
4.cat -s
cat -s
可以将连续两行以上的空白行合并为一行,s是squeeze的缩写
3.tac命令
tac
就是cat
倒过来的样子,所以tac
命令的意思也和tac
相反,即将命令反向显示
感受到了恶趣味。。。
4.more命令
原意: A file perusal filter for CRT viewing.
功能: 分页显示文件内容,便于阅读
所处路径: /bin/more
语法: more [文件名]
和cat一样可以显示文件内容,但是对于那种内容特别多的文件,cat会将它们一次性显示出来,用户根本没法阅读
more是更适合显示文件的命令
子命令:
按空格或者F
键或↓
键进行换页
按B
键或↑
键往回翻页
按回车进行换行
按Q
退出浏览
1)选项
①more -s
:当遇到有连续两行以上的空白行,就代换为一行的空白行
②more -num
:num为一次显示的行数
③more -p
:clean print, 即不以卷动的方式展示文件内容,会清除屏幕后再展示下一页(建议自己实际尝试一下)
④more +num
:从第num行开始显示
2)less、head、tail
除了cat
、more
,还有其他用于查看文件的命令
less
命令和more
命令都是用于分屏阅读的命令,只是浏览的方式不同:
①less 和 more都可以按Q
键退出浏览,空格和F
都是往下翻页,B
键都是往回翻页
②less可以滚动阅读,按↑
、↓
键进行滚动。more则是↑
、↓
键用来翻页,回车键往下滚动。
虽然more命令查看文件时,没法往回滚动,所以less的功能更多一点,less is more
……,再次感受到了设计者的恶趣味
当然more也是有优点的,比如会自动在屏幕的下方显示当前所处的位置处于百分之几
③less选项和more不同:
-m
:显示读取文件的百分比
-N
:在每行前输出行号
——————————————————————————————
head
和tail
命令分别用来显示文件的前几行和后几行
选项head -n num
表示显示文件的前num行,tail同理
或者直接写head -num
就可以达到同样的效果
(应该是因为版本更新,所以有了更简便的写法)
5.重定向符号
插播一下重定向的知识,便于理解
前面其实已经提到过重定向了,就是cat A > B
,作用是将文件A的内容复制到B中
而cat A
的意思则是查看文件A的内容
为啥同一个命令,却有两个看起来没啥关联的效果呢?
cat
的全称是concentrate file to standard output
,即将文件的内容放到标准输出中。这里的标准输出其实指的就是显示屏了
而重定向符号>
则可以将输出的地点变换为文件B
文件B中原先的内容会被清空,如果不想清空而是追加内容则可以使用另一个符号>>
6.sort命令
sort命令用于文件的排序,以一行为一个单位,按ASCII码值升序排列(默认情况下)
语法:sort 文件名
选项:
1)-o
sort的功能其实是将排序后的结果输出到屏幕上,文件本身的内容并没有被改变。而使用重定向符号虽然能将排序结果输出到文件中,但不能输出到原文件(因为会先清空原文件)
使用选项-o
就可以将排序的结果保存到原文件了
2)-r
sort默认的排序方式为升序,使用-r
后则为降序
3)-n
按ASCII码值比较数字时会出现10比2小的情况,因此对数字排序时需要使用选项-n
4)-u
该选项的作用是在排序结果中去掉重复行
5)-t -k
-t
用于设置分隔符(默认为空格),-k
用于指定排序的关键字
例:
-t :
表示以冒号作为分隔符,-k 2
表示以第二列作为排序的关键字。
一个复杂的实例:
sort -k 3nr -k 1.2 facebook.txt
表示对文件facebook.txt进行排序,优先按第三列(或者说第三个域)进行降序排列,若值相同,从第一个域中的第二个字符开始比较
7.文件的压缩打包
打包和压缩的区别:
打包是将几个文件合在一起形成一个包,便于保存、运输
压缩是通过压缩算法(合并文件中相同的信息)减小文件的体积,以节省存储空间。通常压缩前需要进行打包操作
1)tar命令
tar即tape archive的缩写,作用是将某些文件进行备份并合成一个包
语法:tar [选项] [要打包的文件名]
①选项-f:
该选项用于指定操作的对象,是必须要用到的选项,且和其他选项一起使用时应该排在选项的最后面
②选项-cf:
c意味着create,该选项用于创建一个包
例:tar -cf bao1.tar m1 f4
将文件m1
和f4
打包到bao1.tar
中
注:选项后的第一个参数是打包的“包名”,其它参数是被打包的文件名
③选项-tf:
t表示list,该选项用于查看包的内容
例:tar -tf bao1.tar
④选项-xf:
x表示extract(提取),该选项用于解包
例:tar -xf bao1.tar -C /tmp
表示将bao1.tar
里的文件提取到/tmp
中,这里的-C
的作用就是指定包解压的位置,如果不指定位置则默认解压到当前目录
注意解压后包本身不会被删除
⑤选项-uf:
u表示update,该选项用于更新包中的内容
何谓更新呢?包其实是备份文件,如果原文件发生了变化,包中的文件并不会同步更新,所以可以使用该选项进行更新
以tar -uf bao.tar m1
为例,据我的实验,这个更新的效果是这样的:
将m1
中有而包中没有的内容添加到包中,这意味着:
1)若在m1中删除某些内容,进行更新时包中的内容不会被删除。所以这不是严格意义上的更新
2)若m1是一个包中不存在的内容,则会被添加到包的末尾
⑥选项-rf:
这个选项的作用是追加内容到包的末尾
总结:
五条主选项c
、t
、x
、u
、r
分别表示创建、显示、提取、更新、追加,这五个选项必须存在一个,并且至多使用一个。
其他选项的作用都是辅助性质的,比如-cvf
表示在创建包后将包的内容显示到屏幕上
8.链接命令——ln命令
对链接类型的文件命令只有ln
这一条(对链接文件进行删除、查看、移动等命令和普通文件一样)
之前在讲ls -l
命令时,有提到_
代表普通文件、d
代表目录文件、l
就是指的链接文件了(link的缩写)
语法:
ln [原文件][目标文件]
:创建硬链接
选项-s
用于创建软链接
软链接文件:
软链接,又称符号链接,类似于Windows中的快捷方式。运行软链接文件时,它会找到原文件所在位置,然后执行原文件。因此软链接文件只是提供了符号链接的指向而已
用ls -l
命令查看软链接文件:
(我在同一个文件夹创建了一个文件A
,以及文件A的软链接文件,起名为a
)
注:
1)软链接文件的权限都是rwxrwxrwx
,即所有人具备所有权限。因为对软链接文件操作并不会影响原文件,它只是一个快捷方式,所以不用在意权限全开带来的安全性问题
2)软链接文件的文件名会指向原文件
硬链接文件:
硬链接则可理解为和原文件同步更新的拷贝/备份,硬链接文件和原文件的所有属性都是一样的,包括文件的修改时间等等(就像cp -p
的效果)
但是硬链接和复制有一点很大的不同,那就是可以同步更新。如果原文件发生了变动,硬链接文件也会相应变化,反之亦然。
硬链接和软链接文件的区别:
①硬链接文件和原文件共用同一个索引节点(所以才能同步更新),软链接文件则和原文件索引节点不同
②硬链接不能跨分区创建且不能为目录创建链接,但是软链接都可以
③原文件被删除时,硬链接不会被影响,所以硬链接文件相当于备份。但是原文件删除,软链接文件就失效了,因为软链接所指向的文件被删了,它就变成了死链接(dangling link)
四.文件搜索命令
1.find命令
搜索命令是比较占用系统资源的,所以在创建文件时就应该做好文件的分类与规划
语法:-find [搜索范围] [匹配条件]
这里的匹配条件指的就是不同的选项
注意搜索范围越精准越好,避免浪费计算机资源;默认为当前工作目录
1)-name
选项-name即按照文件名查找文件
并且可以使用文件通配符进行模糊搜索
例:find /tmp -name test???
效果:在目录/tmp
下查找文件名长度为7,且前四个字符为test
的文件
结果:
可以发现有很多无用的查询信息也被显示了出来,如果我们只想要查询到的符合条件的内容,可以这么写:
find /tmp -name test??? 2>/dev/null
其中/dev/null
是一个Linux系统中一个特殊的文件,任何存放到该位置的文件都会被立刻丢弃,所以被称为黑洞文件
这句话后面的2>/dev/null
的大概意思就是将无用的信息都丢到黑洞文件中,效果如下:
另外一个与之类似的选项是-iname
,表示不区分大小写的查找
2)-size
根据文件大小进行查找
例:find / -size +1000000 2>/dev/null
在根目录下寻找size大于1000000的文件
+1000
表示寻找大于1000的文件
-1000
表示寻找小于1000的文件
1000
表示寻找等于1000的文件
Linux中文件大小的单位是数据块,占0.5K字节(即512字节)
3)其他查找条件
①-size
:按文件的所有者进行查找
例:find /home -user qiuker
表示在目录/home
下查找所有者为qiuker
的文件
②-group
:按文件的所属组进行查找
③-nogroup
:不跟参数,查找所属组为空的文件
-nouser
:不跟参数,查找所有者为空的文件
④-type
:按文件的类型进行查找
f
表示普通文件,d
表示目录文件,l
表示符号链接文件
4)处理动作
①-ls
:相当于查找到文件后再对文件进行-ls
命令
②-delete
:查找到后删除文件
③-print
:查找到后输出文件的路径到屏幕,这个是默认的处理动作
④-fls file
:将文件的长格式信息保存到file中,相当于-ls > file
2.wc命令
语法:wc file
用于统计文件file的行数、单词数、字节数
注:以空格为分隔符统计单词数、统计字节数时空格和回车也会被计算
若没有文件名,则代表从标准输入文件中获取数据(键盘输入)
可以同时统计多个文件
例:
五.权限管理命令
1.对于权限的理解
回忆一下文件权限的内容:
权限有rwx
三种,分别表示读(read)、写(write)、执行(execute)的权限
文件和用户之间有三种关系:
1)所有者
2)所属组
3)其他人
一个用户对文件具有何种权限,要看这个用户和文件的关系。
我们可以用ls -l
命令查看文件的权限,例:_rwxrw_r__
代表一个普通类型的文件,所有者对该文件具有所有权限,所属组成员对该文件具有读和写的权限,其他人只具备读的权限
对于普通文件的读、写、执行权限比较好理解,那对于目录文件的读、写、执行权限又代表着什么呢?
读:列出目录中内容的权限,即ls
命令
写:修改目录内容的权限,可以创建、删除目录下的文件,即touch
、mkdir
、rmdir
、rm
命令。(这里需要注意下,有些人会觉得对普通文件有写权限就能删除权限,其实不是的,删除权限取决于是否对文件所在的目录有写权限)
执行:进入目录的权限,即cd
命令
注:
如果对目录没有读权限,那对目录下的文件也没有读权限(即便对该文件有读权限)
系统会提示Permission denied
2.chmod 命令
原意: change the permissions mode of a file
功能: 用于更改某个文件/目录的权限
执行权限: 只有管理员root和所有者才能改变文件的权限
语法1: chmod [{ugoa}{±=}{rwx}] [文件/目录]
中间的选项由三部分组成:
1)第一部分在{ugoa}中选一个,指明修改权限的对象:u代表user所属者,g代表group所属组,o代表others其他人,a代表all,即同时修改所有人的权限
2)第二部分在{±=}中选一个,指明修改权限的方式:+代表加上权限,-代表减去权限,=代表赋值
3)第三部分在{rwx}中选一个,指明对哪种权限进行操作
例:chmod a+r 文件X
代表给所有人加上了读取文件X的权限
chmod o=rw 文件X
代表将其他人对该文件的权限变为读和写
chmod g+w,o-r 文件X
:可以用逗号分割,同时进行多次改变权限的操作
更为简便的是数字表示法↓
语法2: chmod [ooo] [文件/目录]
ooo指的是三个八进制数
权限共有三种(rwx),其组合情况共有八种( 2 3 2^3 23),用一个八进制数就可以表示所有的情况,即三个二进制位:
1代表具备权限,0代表不具备
例:
7,转化为二进制111,即代表具备所有权限;
5,转化为二进制101,即代表具备读(r)和执行(x)的权限
2,转化为二进制010,即代表只具备写(w)的权限
3.chown 命令
原意: change file ownership
功能: 改变文件的所有者
执行权限: 只有管理员root(所有者也不行)
语法: chown [用户][文件或目录]
例:chown qiuker /tmp/jili
将文件jili
的所有者变为qiuker
与之类似的一条命令:
chgrp 命令:
chgrp
命令用于修改文件的所属组,grp是group的缩写,用法和chown
命令几乎一样,不做赘述
4.umask命令
原意: the user file-creation mask
功能: 显示/设置文件的默认权限
一个文件在创建时,系统会自动给该文件设置权限,这就叫做文件的默认权限
语法1: umask -S
效果是查看文件的默认权限
u=rwx,g=rwx,o=rx
表示文件的创建者和所属组成员具有所有权限,其他人具备读和执行的权限
此处要注意几点:
1)该默认权限指的其实是目录文件的权限
2)普通文件在创建时不会有执行权限(对所有用户都是这样的),这是出于安全性的考虑。其他默认权限与目录文件相同
3)软链接文件的默认权限就是rwxrwxrwx
语法2: umask
不需要选项-S 也可以查看权限:
显示0002
,这和上面的u=rwx,g=rwx,o=rx
是等价的,第一个0暂不解释,照理来说rwxrwxr-x
翻译成数字应该是775
,怎么会变成后面的002
呢
我们可以由002
和777
进行异或运算就得到了775
也可以理解为777-002=775
看上去很弯弯绕绕,但mask的意思就是掩码,所以umask
命令查到的值是掩码,这很合理
语法3: umask 002
在umask后加上一串数字就可以将文件的默认权限修改成数字对应的权限(注意这串数字是掩码值)
但是不建议去修改文件的默认权限
六.用户管理命令
1.关于用户
所谓用户(User),也就是系统的使用者。
在Linux中不同用户是可以同时操作系统的,所以称之为一个多用户操作系统。
要使用系统资源的用户,首先要向系统管理员申请一个账号,然后以这个账号的身份进入系统。
注意系统的管理者是root
,所以下面的命令都是只有管理员才有权使用的,包括:
用户账号的添加、删除与修改。
用户密码的管理。
用户组的管理。
2.切换到root用户
由于root的权力过大,为了避免误操作平常都是不用root登陆的,但是用户管理命令必须要用root来执行
切换用户的命令为:su - user
注意-
一定要加,如果不加-
虽然也能切换用户,但是会发现Shell环境仍然是原先的用户,当前工作目录也是原用户的工作目录
还有一种方法:
输入命令sudo su
,然后再输入密码即可
可以从命令提示符处发现当前用户已经发生了变化
但是这种写法和su
不加-
是一样的
如果不想切换用户,可以在命令前加上一句sudo
,则即便不是root用户在执行该条命令时也具有了root的权限
3.用户账号的管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
1)useradd命令
该命令用于创建一个新的账号,并为该账号分配用户号(uid)、用户主目录(家目录)、用户的所属组、用户要登录的Shell