Linux入门篇——常见指令以及权限理解
以centos7为背景,介绍linux入门经常会用到的指令以及权限的讲解
1 文件与目录
1.1 ls指令
语法:ls[选项][目录或文件]
功能:对于目录,该命令列出该目录下所有子目录与文件。对于文件,列出文件名以及其他信息。
选项与参数:
-a :全部的文件,连同隐藏文件(开头为"."的文件)一起列出来
-A :全部的文件,但是不包括"."和".."这两个目录
-d :仅列出目录
-h :将文件容量以人类较易读的方式列出来
-l :详细信息显示,包含文件属性与权限等数据
-n :列出UID和GID而非使用者与用户组的名称
-i :列出inode号码
-f :直接列出结果,不会进行排序(默认会以文件名排序)
-S :按照文件容量大小排序,而不是按照文件名排序
-t :按照时间排序
在Linux当中,这个命令是最常被用到的,下面是使用方法
[chakming@localhost ~]$ ls -l
[chakming@localhost ~]$ ls -a
[chakming@localhost ~]$ ls -al
[chakming@localhost ~]$ ls -al ~
ls其实是list列表的简写,选项前需要加上一个"-"的符号,选项可以一次性选多个,选项后面跟着你要对哪个文件使用这个命令,如果没有写,默认是当前文件下。
1.2 pwd指令
语法:pwd
功能:显示用户当前所在的目录
选项与参数:无
[chakming@localhost ~]$ pwd
1.3 cd指令
语法:cd 目录名
功能:改变当前目录。将当前工作目录改变到指定目录下。
选项与参数:无
在Linux中,这个也是最常用到的目录,Linux系统中,所有的东西都会被映射为文件或者目录。
使用方法:
[chakming@localhost ~]$ cd .. 返回上级目录
[chakming@localhost ~]$ cd /home/chakming 绝对路径
[chakming@localhost ~]$ cd ../day1/ 相对路径
[chakming@localhost ~]$ cd ~ 进入到家目录
[chakming@localhost ~]$ cd - 返回最近访问目录
1.4 touch指令
语法:touch[选项]文件名
功能:可以修改文件或目录的日期时间,包括存取时间和修改时间,或者是新建一个不存在的文件。
选项与参数:
-a :只更改存取时间
-c :不建立任何文档
-d :使用指定日期时间,而非当前的时间
-m :只改变变动时间
1.5 mkdir指令
语法:mkdir[选项]目录名
功能:在当前目录下创建一个目录
选项与参数:
-p :递归建立多个目录
使用方法:
[chakming@localhost ~]$ mkdir test01
[chakming@localhost ~]$ mkdir -p test02/test03
1.6 rmdir指令
rmdir是一个与mkdir相对应的命令。rmdir是删除命令。
语法:rmdir[选项]目录名
功能:删除空目录
选项与参数:
-p :递归删除多个目录
使用方法:
[chakming@localhost ~]$ rmdir test01
[chakming@localhost ~]$ rmdir -p test02/test03
1.7 rm指令
rm命令是可以同时删除文件和目录,经常被使用,可以替代rmdir
语法:rm[选项]目录名/文件名
功能:删除目录或者文件
选项与参数:
-f :即使文件属性为只读,也直接删除
-i :删除前询问是否要删出
-r :删除目录和及其下文件
使用方法:
[chakming@localhost ~]$ rm -rf test.c
[chakming@localhost ~]$ rm -i test
1.8 cp指令
语法:cp[选项] 来源(可以多个) 目标文件
功能:复制文件或者目录
选项与参数:
-r :递归复制,用于目录的复制操作
-p :连同文件的属性一起复制过去,而非使用默认属性
-f :强制复制文件和目录
-i :覆盖文件前询问用户
使用方法:
[chakming@localhost ~]$ cp /var/log/wtmp . 复制指定目录到当前文件
1.9 mv指令
语法:mv[选项] 来源(可以多个) 目标文件
功能:移动文件
选项与参数:
-u:目标文件已存在,如果来源文件比较新,才会进行更新
-f :强制移动文件和目录,如果目标文件已存在,直接覆盖
-i :覆盖文件前询问用户
使用方法:
[chakming@localhost ~]$ mv test01 dir 复制到指定目录
[chakming@localhost ~]$ mv test.c test.cpp 重命名
2 文件内容查看
2.1 cat指令
语法:cat[选项]目标文件
功能:查看文件内容
选项与参数:
-b :列出行号,仅针对非空白行做行号显示
-E :将结尾的换行符用$显示出来
-n :打印出行号,连同空白行
-v :列出一些看不出来的特殊字符
使用方法:
[chakming@localhost ~]$ cat -n test.c
[chakming@localhost ~]$ cat /etc/issue
cat是Concatenate(串联)的简写,如果想用反着查看文件内容,可以用tac,其余选项一样。不过如果文件内容的行数比较多,建议使用more或者less。
2.2 more指令
语法:more[选项]目标文件
功能:查看文件内容
选项与参数:
-f :立刻显示文件名以及目前显示的行数
q :退出more
/字符串:代表在当前显示的内容,向下查找字符串
回车键 :代表向下翻一行
空格键 :代表向下翻一页
使用方法:
[chakming@localhost ~]$ more /etc/man_db.conf
more指令虽然可以查看内容比较多的文件,但是有个弊端,就是没办法往前翻页,只能往后看,也就是看过的内容在想看只能重新进入,并且查找功能也不多,所以我们通常使用less指令。
2.3 less指令
语法:more[选项]目标文件
功能:查看文件内容
选项与参数:
-i :忽略搜索时的大小写
-N :显示每行的行号
/字符串:向下搜索指定字符串
?字符串:向上搜索指定字符串
n :重复前一个搜索
N :反向重复前一个搜索
q :退出
[pagedown]:向下翻动一页
[pageup]:向上翻动一页
2.4 man指令
Linux命令有很多参数,我们没有办法全记住,这时候可以差帮助文档来查询。
语法:man[选项]命令
功能:查询命令相关的帮助文档
选项与参数:
-k :根据关键字搜索联机帮助
num:只在第num章节查找
-a :将所有章节显示出来
章节:帮助手册分为八章
- 普通的命令
- 系统调用,例如open,write之类的
- 库函数,例如printf,大部分为C的函数库
- 设备文件的说明,通常在/dev下的文件
- 配置文件
- 游戏
- 惯例与协议等
- 系统管理员可用的惯例命令
其实,man本质上使用less去查看文档的内容,所以可以使用less里面的按键进行查找和搜索。
3 数据截断
3.1 head指令
语法:head[-n number]文件
功能:查看文件的前几行
选项与参数:
-n number :number是指定要查看的数量,可以不写,默认是10
3.2 tail指令
语法:tail[-n number]文件
功能:查看文件的后面几行
选项与参数:
-n number :number是指定要查看的数量,可以不写,默认是10
这两个命令通常会配合着管道(|)使用,管道的意思是:前面的命令所输出的信息,通过管道交由后续的命令继续使用,如果想要查看某个文件的第十一行到第二十行,可以这样做:
[chakming@localhost ~]$ head -n 20 filename | tail -n 10
4 时间相关的命令
4.1 date指令
语法:date [选项]... [+格式]
功能:根据指定格式显示时间
格式的常用标记列表如下:(必须在格式前加上一个"+"加号)
%H :小时(00..23)
%M :分钟(00..59)
%S :秒(00..59)
%X :相当于%H:%M:%S
%d :日(1..31)
%m :月份(01..12)
%Y :完整年份(0000..9999)
%F :相当于%Y-%m-%d
设定时间方面:
date -s // 设置当前时间,只有root权限才能设置
date -s 20080523 // 设置成20080523,具体时间为00:00:00
date -s 01:01:01 // 设置具体时间,日期不变
date -s "01:01:01 2008-05-23" // 设置日期和时间,顺序可以不一致
时间戳:
Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始经过的秒数,不考虑闰秒。
使用方式:
[chakming@localhost ~]$ date +%s
4.2 cal指令
语法:cal [选项][月份][年份]
功能:可以显示公历的日历。公历是现在国际通用的历法。
选项与参数:
-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天
-y 显示当前年份的日历
使用方法:
[chakming@localhost ~]$ cal -y 2022
5 文件查找
5.1 find指令
语法:find[路径][选项]
功能:查找指定路径下的文件,并作出相应的处理
常用选项:
-name :按照文件名查找文件
-size [+-]SIZE:查找比SIZE大或者小的文件
-type TYPE:查找某种类型的文件
-print :将结果打印到屏幕上,这个是默认操作
使用方式:
[chakming@localhost ~]$ find / -name xxxx.log
这是最常用的查找方式,会在屏幕上输出根目录下所有xxxx.log的文件路径
5.2 whereis指令
语法:whereis [-bmsu] 文件或目录名
功能:只找系统某些特定目录下的文件
常用选项:
-l :可以列出whereis会查询的主要目录
-b :只查找二进制格式的文件
-m :只查找在说明文件manual路径下的文件
-s :只找source源文件
-u :查找不在以上三个项目当中的其他特殊文件
使用方式:
[chakming@localhost ~]$ whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
5.3 grep指令
语法:grep[选项]搜索字符串 文件
功能:在文件中搜索字符串,将找到的行打印出来
常用选项:
-i :忽略大小写
-n :输出行号
-v :反向选择,显示出没有字符串的内容
使用方式:
[chakming@localhost test_08_03]$ grep -n printf test.c
6: printf("%d",a);
6 打包、压缩指令
在Linux环境中,压缩文件的扩展名有很多,比如*.tar,*.tar.gz,*.tgz,*.gz,*.Z
等等。不同的后缀名代表使用的压缩技术不同,对应的命令也不相同,所以下载到某个压缩文件时,需要知道对应的文件是哪个压缩命令。
6.1 tar指令
语法:tar[-cxtzjvf]文件目录[参数]...
功能:在文件中搜索字符串,将找到的行打印出来
常用选项:
-c :建立打包文件
-t :查看打包文件的内容
-x :解包或者解压缩
-z :通过gzip的支持进行压缩或者解压缩
-j :通过bzip2的支持进行压缩或者解压缩
-J :通过xz的支持进行压缩或者解压缩
-v :显示压缩或者解压缩的过程
-f 文件名:-f后面要立刻接要被处理的文件名
-C 目录:解压缩到指定目录
通常,我们可以几个选项配合着使用来进行压缩和解压缩,下面是常用的方法:
压缩:
[chakming@localhost code]$ tar -jcv -f test_08_03.tar.bz2 test_08_03/
test_08_03/
test_08_03/test.c
test_08_03/test1.c
test_08_03/test2.c
查询:
[chakming@localhost code]$ tar -jtv -f test_08_03.tar.bz2
drwxrwxr-x chakming/chakming 0 2022-08-03 18:59 test_08_03/
-rw-rw-r-- chakming/chakming 76 2022-08-03 18:43 test_08_03/test.c
-rw-rw-r-- chakming/chakming 10240 2022-08-03 18:55 test_08_03/test1.c
-rw-rw-r-- chakming/chakming 0 2022-08-03 18:55 test_08_03/test2.c
解压缩:
[chakming@localhost code]$ tar -jxv -f test_08_03.tar.bz2 -C test_08_03
test_08_03/
├── test1.c
├── test2.c
└── test.c
6.2 zip指令
语法:zip 压缩文件.zip 目录或文件
功能:将目录或文件压缩成zip格式
常用选项:
-r :递归处理,一并处理目录下所有文件和子目录
使用方法:
[chakming@localhost test_08_03]$ zip test.zip test.c test1.c
adding: test.c (deflated 5%)
adding: test1.c (deflated 99%)
6.3 unzip指令
语法:unzip 压缩文件.zip
功能:将压缩文件解压缩
使用方法:
[chakming@localhost test_08_03]$ unzip test.zip
其实,还有很多种压缩命令,使用方法其实差距并不大,可以通过man手册去查询对应的指令使用以及选项。
7 权限的概念
Linux有两种用户,一个是root用户,一个是普通用户。
root用户:又被称为超级用户或者管理员,可以在linux下做任何事情(理论上),不受限制。
普通用户:在linux下会被权限所限制,只能做有限的事情。
7.1 su指令
语法:su 用户名
功能:切换用户,默认是root用户,root可以省略
使用方法:
[chakming@localhost test_08_03]$ su root
7.2 ll指令
语法:ll
功能:查看当前文件下的详细信息,其实本质上是ls -l
使用方法:
[chakming@localhost test_08_03]$ ll
总用量 20
drwxrwxr-x 2 chakming chakming 50 8月 3 18:59 test_08_03
-rw-rw-r-- 1 chakming chakming 10240 8月 3 18:55 test1.c
-rw-rw-r-- 1 chakming chakming 0 8月 3 18:55 test2.c
-rw-rw-r-- 1 chakming chakming 76 8月 3 18:43 test.c
-rw-rw-r-- 1 chakming chakming 476 8月 3 19:07 test.zip
7.3 文件类型和访问权限
(1)文件类型:
d :文件夹
- :普通文件
l :软链接(与快捷方式类似)
b :块设备文件
p :管道文件
c :字符设备文件
s :套接口文件
(2)基本权限:
- 拥有者权限,也就是所属用户对应的权限,rw-表示当前拥有者拥有读和写的权限,没有执行的权限。
- 所属组权限,也就是与用户拥有者在同一个所属组内的用户的权限。
- 其他人权限,就是不在用户拥有者的所属组内的用户访问该文件的权限。
- 如果拥有权限就会显示对应权限,如果没有会显示’-’
(3)文件权限值表示方法:
字符表示法:
进制表示法:
每种权限占一个字节,总共三个字节,即2^3-1=7能够表示所有权限,也就是一个八进制位即可表示所有状态。
8 权限的相关指令
8.1 chmod指令
语法:chmod[参数] 权限 文件名
功能:设置文件的访问权限
参数:
u :拥有者
g :拥有组
o :其他用户
a :所有用户
+ :增加权限
- :减少权限
= :赋予权限
使用方法:
[chakming@localhost test_08_03]$ ll test1.c
-rw-rw-r-- 1 chakming chakming 10240 8月 3 18:55 test1.c
[chakming@localhost test_08_03]$ chmod u+x test1.c
[chakming@localhost test_08_03]$ ll test1.c
-rwxrw-r-- 1 chakming chakming 10240 8月 3 18:55 test1.c
[chakming@localhost test_08_03]$ chmod g=rw test1.c
[chakming@localhost test_08_03]$ chmod o-r test1.c
权限符号也可以用对应的八进制来替代,比如:
[chakming@localhost test_08_03]$ chmod 664 test1.c
[chakming@localhost test_08_03]$ chmod u=rw,g=rw,o=r test1.c
8.2 chown指令
语法:chown[-R] 用户名 文件名
功能:修改文件拥有者
参数:
-R :递归修改,连同文件以及子目录下的所有文件拥有者都修改为该用户
使用方法:
[root@localhost test_08_03]# chown root test1.c
-rw-rw-r-- 1 root chakming 10240 8月 3 18:55 test1.c
8.3 chgrp指令
语法:chgrp[-R] 用户名 文件名
功能:修改文件所属用户组
参数:
-R:递归修改,连同文件以及子目录下的所有文件拥有者都修改为该用户
使用方法:
[root@localhost test_08_03]# chown root test1.c
-rw-rw-r-- 1 root root 10240 8月 3 18:55 test1.c
8.4 umask文件掩码
那么,我们已经知道了如何建立或者改变一个目录或者文件的权限,但是当我们建立一个文件或目录的时候,可能会与我们的预期有所差别,这是因为umask有关,umask是指定目录在建立文件或目录时候的权限默认值。
[root@localhost test_08_03]# mkdir test
drwxr-xr-x 2 root root 6 8月 3 21:19 test
[root@localhost test]# touch test
-rw-r--r-- 1 root root 0 8月 3 21:21 test
其实,我们默认创建一个目录的时候,linux系统默认的是777权限,创建一个普通文件时,默认是666权限,但是当我们真的创建了文件夹和普通文件,却发现不是对应的权限,这是因为我们要减去umask的默认权限,才是我们最终得到的真正的权限。
[root@localhost test]# umask
0022
[root@localhost test]# umask -S
u=rwx,g=rx,o=rx
我的linux系统默认权限umask是0022,也就是默认会减去用户组的写权限和其他人的写权限:
建立文件:(-rw-rw-rw-) - (-----w--w-) ==> (-rw-r--r--)
建立目录:(drwxrwxrwx) - (d----w--w-) ==> (drwxr-xr-x)
也可以修改默认的权限值,只需要:
umask 002
8.5 file指令
语法:file[选项] 文件名或目录名
功能:辨识文件类型
参数:
-c :详细显示指令执行过程
-z :尝试去解读压缩文件的内容
8.6 权限的注意事项
- 可执行权限:如果目录没有可执行权限,无法cd进入
- 可读权限:如果目录没有可读权限,无法用ls查看目录下的内容
- 可写权限:如果没有可写权限,就无法创建文件,也无法删除文件