文章目录
Shell 可以看作是一个命令解释器,为我们提供了交互式的文本控制台界面。我们可以通过终端控制台来输入命令,由 shell 进行解释并最终交给内核执行。 本文就分类介绍常用的基本 shell 命令。
命令介绍
Linux命令:
- 用于实现某一类功能的指令或程序
- 命令的执行依赖于解释器程序(例如: /bin/bash)
Linux命令的分类:
- 内部命令:属于Shell解释器的一部分
- 外部命令:独立于Shell解释器之外的程序文件
Linux命令的通用命令格式
Linux命令的通用命令格式
命令字 [选项] [参数]
选项及参数的含义:
-
选项:用于调节命令的具体功能。以
“-”
引导短格式选项(单个字
符),例如“-l”
, 以“--”
引导长格式选项(多个字符),例如“--color”
多个短格式选项可以写在一起,只用一个“-”
引导,例如“-al”
-
参数:命令操作的对象,如文件、目录名等
帮助命令
man:获得帮助信息
用于查看Linux系统的手册,是Linux中使用最为广泛的帮助形式。
基本语法
man [命令或配置文件] (功能描述:获得帮助信息)
例如我们查看一下ls 命令的帮助信息:
[root@hadoop101 ~]# man ls
显示说明
若一页显示不完,可以按空格键翻页,也可按上下键滚动。按Q键退出
help:获得 shell 内置命令的帮助信息
一部分基础功能的系统命令是直接内嵌在 shell 中的,系统加载启动之后会随着 shell 一起加载,常驻系统内存中。这部分命令被称为“内置(built-in)命令”;相应的其它命令被称为“外部命令”
Linux中的帮助命令分两种:
-
一种是内建命令:是shell程序的一部分,写在bash的源码builtins里面的,通常在shell程序被加载驻留在系统内存中,解析内部命令不需要创建子进程,因此执行速度快于下面的外部命令,比如history、cd、exit。
-
一种是外部命令:是Linux实用程序的一部分,功能比较强大,不随系统一起被加载到内存中,外部命令虽然不在shell中,但其命令的调用时由shell程序控制的,外部命令是在bash之后额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等。比如:ls、vi 等。
我们可以实用type来区分是外部命令还是内建命令:
$ type exit
#显示 exit is a shell builtin
#得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
$ type vim
#显示 vim is /usr/bin/vim
#得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
$ type ls
#显示 ls is an alias for ls --color=tty
#若是得到alias的结果,说明该指令为命令别名所设定的名称;
基本语法
help 命令(功能描述:获得 shell 内置命令的帮助信息)
例如我们查看cd命令的帮助信息:
[root@hadoop101 ~]# help cd
help命令不带任何参数的话只用于显示内建命令的帮助信息,需要进入到bash中使用(上面有讲过内建命令都在bash源码中)
注意:因此help只能显示内建命令的相关帮助信息显示查询命令的简要说明以及一些参数的使用以及说明,如果加上–help的参数就可以查看外部命令的帮助信息了
$ bash
#进入bash
$ help ls
#不会显示帮助信息
$ ls --help
#建议 ls --help|less 便于查看
#成功查询
常用快捷键
ctrl+c
:停止进程ctrl+l
:清屏,等同于clear,彻底清屏式resettab
:提示上下键
:查找执行过的命令
文件目录类命令
pwd:显示当前工作目录的绝对路径
pwd
:print working directory 打印工作目录
基本语法
pwd (功能描述:显示当前工作目录的绝对路径)
例如显示当前工作目录的绝对路径
[root@hadoop101 ~]# pwd
/root
ls:列出目录的内容
ls
:list 列出目录内容
基本语法
ls [选项] [目录或是文件]
选项说明
例如我们现在查看当前目录的所有内容信息:
每行列出的信息依次是:
- 文件类型与权限
- 链接数
- 文件属主
- 文件属组
- 文件大小(用byte来表示)
- 建立或最近修改的时间
- 名字
拓展:
- -k 以k字节的形式表示文件的大小;
- -t 以时间排序
- -b 把文件名中不可输出的字符用反斜杠加字符编号的形式列出;
- -d 将目录像文件一样显示,而不是显示其中所包含的文件;
- -e 输出时间的全部信息﹐而不是输出简略信息
- -m 横向输出文件名,并以“,”作分格符
- -n 用数字的UID、GID代替名称在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文
- -p或-F:“/”表示目录;“@”表示符号链接;“|”表示FIFOs;“一”表示套接字
- -r 对目录反向排序
- -s 在每个文件名后输出该文件的大小
- -u 以文件上次被访问的时间排序版-x按列输出,横向排序:,
- -1 一行只输出一个文件
- –color=no不显示彩色文件名
cd:切换目录
cd
:Change Directory 切换路径
基本语法
cd [参数]
参数说明:
案例实操
(1)使用绝对路径切换到 root 目录
[root@hadoop101 ~]# cd /root/
(2)使用相对路径切换到“公共的”目录
[root@hadoop101 ~]# cd 公共的/
(3)表示回到自己的家目录,亦即是 /root 这个目录
[root@hadoop101 公共的]# cd ~
(4)cd- 回到上一次所在目录
[root@hadoop101 ~]# cd -
(5)表示回到当前目录的上一级目录,亦即是 “/root/公共的”的上一级目录的意思;
[root@hadoop101 公共的]# cd ..
mkdir:创建一个新的目录
mkdir
:Make directory 建立目录
基本语法
mkdir [选项] 要创建的目录
选项说明
-p
:创建多层目录
接下来我们尝试使用此命令:
- 创建一个目录
- 创建一个多级目录
rmdir:删除一个空的目录
rmdir
:Remove directory 移除目录
基本语法
rmdir 要删除的空目录
删除文件夹即使多级也可以直接删
例如我们把刚才创建的文件夹删除:
touch:创建空文件
基本语法
touch [选项] 文件名称
例如:
touch还有一个功能就是修改文件时间标签
常用参数选项如下。
- -d yyyymmdd:把文件的存取和修改时间改为yyyy年mm月dd日。
- -a:只把文件的存取时间改为当前时间。
- -m:只把文件的修改时间改为当前时间。
例如:
[root@server1 ~]# touch -d 20180808 aa //将aa文件的存取和修改时间改为2018年8月8日
rm:删除文件或目录
基本语法
rm [选项] deleteFile (功能描述:递归删除目录中所有内容)
选项说明
- -i:删除文件或目录时提示用户。
例如:
cp:复制文件或目录
基本语法
cp [选项] 源文件或目录 目标文件或目录
选项说明
-r
:递归复制整个文件夹(也就是说你只复制一个文件不需要用这个)- -a:尽可能将文件状态、权限等属性照原状予以复制。
- -f:如果目标文件或目录存在,先删除它们再进行复制(即覆盖),并且不提示用户。
- -i:如果目标文件或目录存在,提示是否覆盖已有的文件。
强制覆盖不提示的方法:\cp
例如:
mv:移动文件与目录或重命名
基本语法
mv [选项] 源文件或目录 目标文件或目录
mv oldNameFile newNameFile (功能描述:重命名)
mv /temp/movefile /targetFolder (功能描述:移动文件)
常用选项
- -i:如果目标文件或目录存在,则提示是否覆盖目标文件或目录。
- -f:无论目标文件或目录是否存在,直接覆盖目标文件或目录,不提示。
例如:
cat:查看文件内容
查看文件内容,从第一行开始显示
基本语法
cat [选项] 要查看的文件
选项说明
-n
:显示所有行的行号,包括空行- -b: 和 -n 相似,只不过对于空白行不编号。
- -s:当遇到有连续两行以上的空白行,就代换为一行的空白行。
一般查看比较小的文件,一屏幕能显示全的。
例如:
利用cat命令还可以合并多个文件。如把file1和file2文件的内容合并为file3,
且file2文件的内容在file1文件的内容前面,则命令为:
[root@server1 ~]# cat file2 file1>file3
//如果file3文件存在,则此命令的执行结果会覆盖file3文件中原有内容
more:文件内容分屏查看器
more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more 指令中内置了若干快捷键,详见操作说明。
基本语法
more [选项] 要查看的文件
操作说明
space
:代表向下翻一页Enter
:代表向下翻一行q
:代表立刻离开more,不再显示该文件内容Ctrl+F
:向下滚动一屏Ctrl+B
:返回上一屏=
:输出当前行的行号:f
:输出文件名和当前行的行号
选项说明
less:分屏显示文件内容
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
基本语法
less [选项] 要查看的文件
操作说明
用SecureCRT时[pagedown]和[pageup]可能会出现无法识别的问题。
选项说明
echo:输出内容到控制台
基本语法
echo [选项] [输出内容]
基本选项
-e
:支持反斜线控制的字符转换
例如:
此命令一般搭配
>
,>>
使用
> 、>>:输出重定向和追加
基本语法
head:显示文件头部内容
head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容。
基本语法
head 文件 (功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数)
选项说明
- -c num:显示指定文件的前num个字符。
- -num:从倒数第num行开始显示指定文件的内容
tail:输出文件尾部内容
tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后10行内容。
基本语法
(1)tail 文件 (功能描述:查看文件尾部10行内容)
(2)tail -n 5 文件 (功能描述:查看文件尾部5行内容,5可以是任意行数)
(3)tail -f 文件 (功能描述:实时追踪该文档的所有更新)
选项说明
- -c num:显示指定文件的末尾num个字符。
- +num:从第num行开始显示指定文件的内容
ln:软链接
软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径。
基本语法
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
删除软链接: rm -rf 软链接名,而不是 rm -rf 软链接名/
如果使用 rm -rf 软链接名/ 删除,会把软链接对应的真实目录下内容删掉
查询:通过 ll 就可以查看,列表属性第 1 位是 l,尾部会有位置指向
如果此时用pwd显示的是虚拟文件路径,我们可以使用
pwd -P
来显示实际的物理路径
例如:
(1)创建软连接
[root@hadoop101 ~]# mv houge.txt xiyou/dssz/
[root@hadoop101 ~]# ln -s xiyou/dssz/houge.txt ./houzi
[root@hadoop101 ~]# ll
lrwxrwxrwx. 1 root root 20 6 月 17 12:56 houzi ->
xiyou/dssz/houge.txt
(2)删除软连接(注意不要写最后的/)
[root@hadoop101 ~]# rm -rf houzi
(3)进入软连接实际物理路径
[root@hadoop101 ~]# ln -s xiyou/dssz/ ./dssz
[root@hadoop101 ~]# cd -P dssz/
history:查看已经执行过历史命令
基本语法
history (功能描述:查看已经执行过历史命令)
例如:
sort:文件内容排序
基本语法
sort [选项] 文件列表
选项说明
例1:将/etc/passwd中的内容以:来分隔,并按照第3栏排序
[liu@localhost yum.repos.d]$ cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
liu:x:1000:1000:liu:/home/liu:/bin/bash
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
例2:将/etc/passwd中的内容以:来分隔,并按照第3栏数字大小排序
[liu@localhost yum.repos.d]$ cat /etc/passwd | sort -t ":" -nk 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
diff:文件比较
用于比较两个文件内容的不同,主要是纯文本文件
基本语法
diff [参数] 源文件 目标文件
常用参数选项
- -a:将所有的文件当作文本文件处理。
- -b:忽略空格造成的不同。
- -B:忽略空行造成的不同。
- -q:只报告什么地方不同,不报告具体的不同信息。
- -i:忽略大小写的变化。
wc:统计指定文件的字节数、字数、行数
基本语法
wc [选项] 文件
常用选项
- -c: 统计字节数
- -l: 统计行数
- -m:统计字符数
- -w:统计字数
时间日期类命令
基本语法
date [OPTION]... [+FORMAT]
选项以及参数说明
date:显示当前时间
基本语法
(1)date (功能描述:显示当前时间)
(2)date +%Y (功能描述:显示当前年份)
(3)date +%m (功能描述:显示当前月份)
(4)date +%d (功能描述:显示当前是哪一天)
(5)date "+%Y-%m-%d %H:%M:%S" (功能描述:显示年月日时分秒)
例如:
date:显示非当前时间
基本语法
(1)date -d '1 days ago' (功能描述:显示前一天时间)
(2)date -d '-1 days ago' (功能描述:显示明天时间)
例如:
date:设置系统时间
基本语法
date -s 字符串时间
(1)设置系统当前时间
[root@hadoop101 ~]# date -s "2017-06-19 20:52:18
cal:查看日历
基本语法
cal [选项] (功能描述:不加选项,显示本月日历)
选项说明
例如:
用户管理类命令
useradd:添加新用户
基本语法
useradd 用户名 (功能描述:添加新用户)
useradd -g 组名 用户名 (功能描述:添加新用户到某个组)
用户名最好不要使用大写,会出问题
passwd:设置用户密码
基本语法
passwd 用户名 (功能描述:设置用户密码)
id:查看用户是否存在
基本语法
id 用户名
cat /etc/passwd:查看创建了哪些用户
基本语法
cat /etc/passwd
例如:
su:切换用户
su
: swith user 切换用户
基本语法
su 用户名称 (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)
例如:
[root@hadoop101 ~]#su tangseng
[root@hadoop101 ~]#echo $PATH
/usr/lib64/qt3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/b
in
[root@hadoop101 ~]#exit
[root@hadoop101 ~]#su - tangseng
[root@hadoop101 ~]#echo $PATH
/usr/lib64/qt3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/t
angseng/bin
userdel:删除用户
基本语法
(1)userdel 用户名 (功能描述:删除用户但保存用户主目录)
(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)
例如:
(1)删除用户但保存用户主目录
[root@hadoop101 ~]#userdel tangseng
[root@hadoop101 ~]#ll /home/
(2)删除用户和用户主目录,都删除
[root@hadoop101 ~]#useradd zhubajie
[root@hadoop101 ~]#ll /home/
[root@hadoop101 ~]#userdel -r zhubajie
[root@hadoop101 ~]#ll /home/
who:查看登录用户信息
基本语法
(1)whoami (功能描述:显示自身用户名称)
(2)who am i (功能描述:显示登录用户的用户名以及登陆时间)
who am i
debian用不了
sudo:设置普通用户具有 root 权限
要使用root用户身份来进行操作
步骤如下:
[root@hadoop101 ~]#vi /etc/sudoers
修改 /etc/sudoers 文件,找到下面一行(91 行),在 root 下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
anthony ALL=(ALL) ALL
或者配置成采用 sudo 命令时,不需要输入密码:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
anthony ALL=(ALL) NOPASSWD:ALL
修改完毕,现在可以用 anthony 帐号登录,然后用命令 sudo ,即可获得 root 权限进行操作。
或者我们可以直接把该用户放入到sudo组中(这个组不一定是叫sudo要根据文件中写的来,每个发行版本中的名字不一样):
%
代表组,也就是说只要处于sudo组中的用户都可以获得等同于root管理员的权限
usermod:修改用户
基本语法
usermod -g 用户组 用户名
选项说明
例如
(1)将用户加入到用户组
[root@hadoop101 opt]# usermod -g root zhubaji
用户组管理类命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
groupadd:新增组
基本语法
groupadd 组名
groupdel:删除组
基本语法
groupdel 组
groupmod:修改组
基本语法
groupmod -n 新组名 老组名
选项说明
例如:
(1)修改atguigu组名称为atguigu1
[root@hadoop101 ~]#groupadd xitianqujing
[root@hadoop101 ~]# groupmod -n xitian xitianqujin
cat /etc/group:查看创建了哪些组
基本语法
[root@hadoop101 atguigu]# cat /etc/group
文件权限类命令
文件属性概述
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用如下两条命令来显示一个文件的属性以及文件所属的用户和组:
ll
ls -l
我们随便查看当前目录的文件属性:
文件基本属性介绍:
- 如果查看的是文件:链接数指的是硬链接个数。
- 如果查看的是文件夹:链接数指的是子文件夹个数。
这里的链接数表示有多少文件名连结到此节点(i-node):
每个文件都会将其权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件来记录,因此每个文件名就会连接到一个i-node。这个属性记录的就是有多少不同的文件名连接到相同的一个i-node。
注意:
- 文件大小的单位是bytes
- 文件名字:如果文件名之前多一个
“.”
,则代表这个文件为隐藏文件。使用ls –a
可以查看隐藏文件
从左到右的 10 个字符表示,如下图所示:
如果没有权限,就会出现减号[ - ]
从左至右用0-9这些数字来表示:
-
0 首位表示类型:在Linux中第一个字符代表这个文件是目录、文件或链接文件等等
-
代表普通文件d
代表目录l
链接文档(link file);- b、c:分别表示该文件为区块设备或其他的外围设备,是特殊类型的文件。
- s、p:这些文件关系到系统的数据结构和管道,通常很少见到。
-
第1-3位确定属主(该文件的所有者)拥有该文件的权限。—User
-
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,—Group
在Linux系统下,账号会附属于一个或多个的群组中。举例来说明:class1、class2、class3均属于projecta这个群组,假设某个文件所属的群为projecta,且该文件的权限为(-rwxrwx—),则class1、class2、class3 3人对于该文件都具有可读、可写、可执行的权限(看群组权限)。但如果是不属于projecta的其他账号,对于此文件就不具有任何权限了
-
第7-9位确定其他用户拥有该文件的权限 —Other
rwx 对于文件和目录的不同解释
(1)作用到文件:
- [ r ]代表可读(read): 可以读取,查看
- [ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
- [ x ]代表可执行(execute):可以被系统执行
(2)作用到目录:
- [ r ]代表可读(read): 可以读取,ls查看目录内容
- [ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
- [ x ]代表可执行(execute):可以进入该目录
chmod:改变权限
基本语法
第一种方式变更权限:
chmod [{ugoa}{+-=}{rwx}] 文件或目录
可能不好理解,我们举几个例子:
+
代表添加,例如现有g的权限为---
,使用g+r
后变为r--
-
代表撤销,例如现有o的权限为r-x
,使用o-r
后变为--x
=
代表赋予,例如现有u的权限为---
,使用u=rw
后变为rw-
第二种方式变更权限:
chmod [mode=421 ] [文件或目录]
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)
r=4 w=2 x=1 rwx=4+2+1=7
例如:
(1)修改文件使其所属主用户具有执行权限
[root@hadoop101 ~]# chmod u+x houge.txt
(2)修改文件使其所属组用户具有执行权限
[root@hadoop101 ~]# chmod g+x houge.txt
(3)修改文件所属主用户执行权限,并使其他用户具有执行权限
[root@hadoop101 ~]# chmod u-x,o+x houge.txt
(4)采用数字的方式,设置文件所有者、所属组、其他用户都具有可读可写可执行权限。
[root@hadoop101 ~]# chmod 777 houge.txt
(5)修改整个文件夹里面的所有文件的所有者、所属组、其他用户都具有可读可写可执行权限。
[root@hadoop101 ~]# chmod -R 777 xiyou/
chown:改变所有者
仅root用户可使用
基本语法
chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)
选项说明:
-R
:递归操作
例如:
chown命令可以同时修改文件的所有者和属组,用“:”
分隔。
例如:
将/yy/file文件的所有者和属组都改为test的命令如下所示:
chown test:test /yy/file
如果只修改文件的属组可以使用下列命令:
chown :test /yy/file
修改文件的属组也可以使用chgrp命令。命令范例如下所示:
chgrp test /yy/file
chgrp:改变所属组
基本语法
chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)
umask:文件默认权限修改
Umask 命令用于指定用户在建立文件和目录时的权限默认值,umask值称作权限掩码。
查看默认权限命令: umask
设置默认权限命令: umask 数字权限
文件、目录默认权限修改方法:
文件的预设权限为-rw-rw-rw-,目录的预设权限为-rwxrwxrwx,普通用户umask默认值为002,root用户为022, 创建文件时在预设权限中减掉umask值对应的权限。
例:umask为002的普通用户创建文件,user、group都没有变化,但others用户要减掉2对应的‘写权限’,变为-rw-rw-r–
SUID、SGID、SBIT:文件特殊权限
SUID
当s这个标志出现在文件所有者的x权限上时,如“-rwsr-xr-x"简称:Set UID
SUID权限仅对二进制程序有效
执行者对该程序需要具有x的可执行权限
执行者将具有该程序所有者的权限
本权限仅在执行该程序的过程中有效
例:tester 用户是如何利用 SUID 权限完成密码修改的:
- tester 用户对于 /usr/bin/passwd 这个程序具有执行权限,因此可以执行passwd 程序
- passwd 程序的所有者为 root
- tester 用户执行 passwd 程序的过程中会暂时获得 root 权限
- 因此 tester 用户在执行 passwd 程序的过程中可以修改 /etc/shadow 文件
SGID
SGID权限仅对二进制程序有效
程序执行者对于该程序来说,需要有x的执行权
执行者在执行过程中将会获得用户组的支持
目录功能:
用户若对于此目录具有r与x权限时,该用户能够进入目录;
用户在此目录下的有效群组,将会变成该目录的群组;
用途:若用户在此目录有w权限,则使用者所建立的新文件,该新文件的群组与此
目录的群组相同。
总结:当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用 SGID 修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。
SBIT
用户对该目录具有w、x权限
SBIT 目前只对目录有效,用来阻止非文件的所有者删除文件。
当用户在该目录下创建文件或是目录时,仅有自己和root才有权力删除该文件。
SUID、SGID、SBIT的权限设置
使用更改权限chmod的命令,使用数字更改,原本的权限是三组数字,要设置特殊权限,只需在加上一组数字即可。
-
SUID:4
-
SGID: 2
-
SBIT: 1
符号权限设置法
suid u+s, sgid g+s, SBIT o+t
suid rwsr-xr-x
suid/sgid rwsr-sr-x
sbit rwxr-xr-t
没有执行权限时: suid/sgid rwSr-Sr-T
注意:
设置过程中,我们可能得到设置的结果为 S,T;这个 S, T 代表的就是“空的”!什么意思呢?
SUID 是表示“该文件在执行的时候, 具有文件拥有者的权限”, 但是文件 拥有者都无法执行了, 哪里来的权限给其他人使用? 当然就是空的啦
数字权限设置法:
加上特殊权限SUID: chmod 4755 文件名
加上特殊权限SGID: chmod 2755 文件名
加上特殊权限SBIT: chmod 1755 文件名
加上特殊权限SUID和SGID: chmod 6755 文件名
若仍存疑问,可以看以下文章:
Linux 权限管理篇(五),文件特殊权限: SUID, SGID, SBIT
搜索查找类命令
文件通配符概述
-
星号
*
:
匹配任意长度的文件名字符串(包括空字符串) -
问号
?
:
匹配任一单字符 -
点字符
.
:
当它作为文件名或路径名分量的第一个字符时,必须显式匹配
例:*file
匹配file,makefile,不匹配.profile文件
try*c
匹配try1.c
、try.c
、try.basic
-
方括号
[ ]
匹配括号内任一字符,也可以用减号指定一个范围
例:[A-Z]*
、*.[ch]
、[Mm]akefile
-
[^]
若中括号内的第一个字符为“^”
,则表示反向选择
例:[^abc]
表示一定有一个字符,只要是非a、b、c即可
文件名通配符规则与正则表达式的规则不同,应用场合不同。不同种类shell通配符规则会略有些差别
- 假设当前目录下只有
try.c
,zap.c
,arc.c
三文件
键入内容cat *.c
,实际执行cat arc.c try.c zap.c
(按字典序) - 假设当前目录下有名为
makefile
的文件
键入rm m*e
, 实际执行rm makefile
find:查找文件或者目录
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端
基本语法
find [搜索范围] [选项] [-print -exec -ok]
选项说明
- -group grpname:查找属于指定组的文件。
- -inum n:查找索引节点号为n的文件。
- -type:查找指定类型的文件。文件类型有:
- b(块设备文件)
- c(字符设备文件)
- d(目录)
- p(管道文件)
- l(符号链接文件)
- f(普通文件)
- -atime n:查找n天前被访问过的文件。“+n”表示超过n天前被访问的文件;“-n”表示n天内被访问的文件,n表示n天之前的[一天之内]被访问过的文件。
- -mtime n:类似于atime,但检查的是文件内容被修改的时间。
- -ctime n:类似于atime,但检查的是文件索引节点被改变的时间。
- -perm mode:查找与给定权限匹配的文件,必须以八进制的形式给出访问权限。
mode表示权限为mode,-mode搜索权限包括mode的文件(范围比mode大),/mode表示搜索符合任何一个权限的文件(范围比mode小)。 - -newer file:查找比指定文件新的文件,即最后修改时间离现在较近。
- -exec command {} ;:对匹配指定条件的文件执行command命令。
- -ok command {} ;:与exec相同,但执行command命令时请求用户确认。
- -print:显示查找结果。
例如:
(1)按文件名:根据名称查找/目录下的filename.txt文件。
[root@hadoop101 ~]# find xiyou/ -name "*.txt"
(2)按拥有者:查找/opt目录下,用户名称为-user的文件
[root@hadoop101 ~]# find xiyou/ -user atguigu
(3)按文件大小:在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)
[root@hadoop101 ~]# find /home -size +204800
locate:快速定位文件路径
locate 指令利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。Locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 。
基本语法
locate 搜索文件
由于 locate 指令基于数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库
例如:
whereis:寻找命令的可执行文件所在的位置
基本语法
whereis [选项] [文件名]
选项说明
- -b:只查找二进制文件。
- -m:只查找命令的联机帮助手册部分。
- -s:只查找源代码文件。
grep过滤查找及“|”管道符
管道符
|
表示将前一个命令的处理结果输出传递给后面的命令处理
grep与locate、find的区别在于:
locate、find偏重于使用文件名查找文件
grep偏重于按照文件内容查找文件
基本语法
grep 选项 查找内容 源文件
选项说明
-n
:显示匹配行及行号- -v:列出不匹配的行。
- -c:对匹配的行计数。
- -l:只显示包含匹配模式的文件名。
- -i:对匹配模式不区分大小写。
- -h:查询多文件时不显示文件名;
- -s:不显示不存在或无匹配文本的错误信息;
例如:
拓:wc命令
打印对每个给定文件的新行、单词和字节计数的结果
压缩和解压类命令
gzip/gunzip:压缩
基本语法
gzip [参数] 待压缩文件名
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
参数说明
- -c:将压缩的数据输出到屏幕上
- -d:解压缩
- -t: 检验压缩文件的完整性
- -v:显示出源文件/压缩文件的压缩比等信息
- -num:数字代表压缩等级-1最快,压缩比最差,预设为-6.
注意:
- 只能压缩文件不能压缩目录
- 不保留原来的文件
- 同时多个文件会产生多个压缩包
例如:
查看纯文本文件压缩内容:
zcat
zmore
zless
bzip2:压缩
基本语法
bzip2 [参数] 待压缩文件名
也是生成.gz文件
参数说明
- -d:解压缩
- -k: 在压缩或解压缩时保留输入文件(不删除这些文件)
- -v:显示出源文件/压缩文件的压缩比等信息
- -num:数字代表压缩等级-1最快,压缩比最差,预设为6.
查看纯文本文件压缩内容:
bzcat
bzmore
bzless
xz:压缩
基本语法
xz [参数] 待压缩文件名
也是生成.gz文件
参数说明
- -d:解压缩
- -v:显示出源文件/压缩文件的压缩比等信息
- -num:数字代表压缩等级-1最快,压缩比最差,预设为6.
- -t: 测试压缩文件的完整性
- -l: 列出压缩文件中的相关信息
- -k:压缩但不删除,输入文件
- -f:解压强制覆盖文件
查看纯文本文件压缩内容:
xzcat
xzmore
xzcat
zip/unzip:压缩
基本语法
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
选项说明
zip 压缩命令在windows/linux都通用,可以压缩目录且保留源文件。
例如:
(1)压缩 houge.txt 和bailongma.txt,压缩后的名称为mypackage.zip
[root@hadoop101 opt]# touch bailongma.txt
[root@hadoop101 ~]# zip mypackage.zip houge.txt bailongma.txt
adding: houge.txt (stored 0%)
adding: bailongma.txt (stored 0%)
[root@hadoop101 opt]# ls
houge.txt bailongma.txt mypackage.zip
(2)解压 mypackage.zip
[root@hadoop101 ~]# unzip mypackage.zip
Archive: houma.zip
extracting: houge.txt
extracting: bailongma.txt
[root@hadoop101 ~]# ls
houge.txt bailongma.txt mypackage.zip
(3)解压mypackage.zip到指定目录-d
[root@hadoop101 ~]# unzip mypackage.zip -d /opt
[root@hadoop101 ~]# ls /opt/
tar:打包
功能:将多个文件或目录打包在一个文件里,便于传输和保持。
基本语法
tar [options] 包名 file-list(待归档文件或目录列表)
选项说明
- -t: 列出备份文件的内容,查看已经备份的文件。
- -r:添加文件到归档包文件的尾部
例如:
(1)压缩多个文件
[root@hadoop101 opt]# tar -zcvf houma.tar.gz houge.txt bailongma.txt
houge.txt
bailongma.txt
[root@hadoop101 opt]# ls
houma.tar.gz houge.txt bailongma.txt
(2)压缩目录
[root@hadoop101 ~]# tar -zcvf xiyou.tar.gz xiyou/
xiyou/
xiyou/mingjie/
xiyou/dssz/
xiyou/dssz/houge.txt
(3)解压到当前目录
[root@hadoop101 ~]# tar -zxvf houma.tar.gz (4)解压到指定目录
[root@hadoop101 ~]# tar -zxvf xiyou.tar.gz -C /opt
[root@hadoop101 ~]# ll /opt/
拓:打包和压缩的区别
打包
:也称为归档,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。
压缩
:是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了 “C语言中文网”,那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。
对文件进行压缩,很可能损坏文件中的内容,因此,压缩又可以分为有损压缩和无损压缩。无损压缩很好理解,指的是压缩数据必须准确无误;有损压缩指的是即便丢失个别的数据,对文件也不会造成太大的影响。有损压缩广泛应用于动画、声音和图像文件中,典型代表就是影碟文件格式 mpeg、音乐文件格式 mp3 以及图像文件格式 jpg。采用压缩工具对文件进行压缩,生成的文件称为压缩包,该文件的体积通常只有原文件的一半甚至更小。需要注意的是,压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称解压缩。
区别:
- 归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小。
- Linux 下,常用归档命令有 2 个,分别是 tar 和 dd(相对而言,tar 的使用更为广泛);常用的压缩命令有很多,比如 gzip、zip、bzip2 等。*
注意,tar 命令也可以作为压缩命令,也很常用
拓:常见的压缩文件扩展名
Linux中有很多可以用于压缩的命令。Linux中常见的压缩文件扩展名如图:
磁盘查看和分区类命令
du:查看文件和目录占用的磁盘空间
du
: disk usage 磁盘占用情况
基本语法
du 目录/文件 (功能描述:显示目录下每个子目录的磁盘使用情况)
选项说明
例如:
df:查看磁盘空间使用情况
df
: disk free 空余磁盘
基本语法
df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
选项说明
-h
:以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示
lsblk:查看设备挂载情况
基本语法
lsblk (功能描述:查看设备挂载情况)
选项说明
-f
:查看详细的设备挂载情况,显示文件系统信息
例如:
mount/umount:挂载/卸载
对于Linux用户来讲,不论有几个分区,分别分给哪一个目录使用,它总归就是一个根目录、一个独立且唯一的文件结构。
Linux中每个分区都是用来组成整个文件系统的一部分,它在用一种叫做“挂载”的处理方法,它整个文件系统中包含了一整套的文件和目录,并将一个分区和一个目录联系起来,要载入的那个分区将使它的存储空间在这个目录下获得。
挂载前准备(必须要有光盘或者已经连接镜像文件)
基本语法
mount [-t vfstype] [-o options] device dir (功能描述:挂载设备)
umount 设备文件名或挂载点 (功能描述:卸载设备)
参数说明
(1)挂载光盘镜像文件
[root@hadoop101 ~]# mkdir /mnt/cdrom/ 建立挂载点
[root@hadoop101 ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/ 设备/dev/cdrom 挂载到 挂载点 : /mnt/cdrom 中
[root@hadoop101 ~]# ll /mnt/cdrom/
(2)卸载光盘镜像文件
[root@hadoop101 ~]# umount /mnt/cdrom
设置开机自动挂载
[root@hadoop101 ~]# vi /etc/fstab
添加红框中内容,保存退出:
fdisk:分区
基本语法
fdisk -l (功能描述:查看磁盘分区详情)
fdisk 硬盘设备名 (功能描述:对新增硬盘进行分区操作)
选项说明
-l
:显示所有硬盘的分区列表
该命令必须在 root 用户下才能使用
功能说明
(1)Linux 分区
- Device:分区序列
- Boot:引导
- Start:从X磁柱开始
- End:到Y磁柱结束
- Blocks:容量
- Id:分区类型ID
- System:分区类型
(2)分区操作按键说明
- m:显示命令列表
- p:显示当前磁盘分区
- n:新增分区
- w:写入分区信息并退出
- q:不保存分区信息直接退出
例如我们查看一下系统分区情况:
进程管理类命令
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
ps:查看当前系统进程状态
ps
:process status 进程状态
基本语法
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
选项说明
ps aux 显示信息说明
USER
:该进程是由哪个用户产生的PID
:进程的 ID 号%CPU
:该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;%MEM
:该进程占用物理内存的百分比,占用越高,进程越耗费资源;VSZ
:该进程占用虚拟内存的大小,单位 KB;RSS
:该进程占用实际物理内存的大小,单位 KB;TTY
:该进程是在哪个终端中运行的。对于 CentOS 来说,tty1 是图形化终端,tty2-tty6 是本地的字符界面终端。pts/0-255 代表虚拟终端。STAT
:进程状态。常见的状态有:R:运行状态、S:睡眠状态、T:暂停状态、Z:僵尸状态、s:包含子进程、l:多线程、+:前台显示START
:该进程的启动时间TIME
:该进程占用 CPU 的运算时间,注意不是系统时间COMMAND
:产生此进程的命令名
ps -ef 显示信息说明
UID
:用户 IDPID
:进程 IDPPID
:父进程 IDC
:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高STIME
:进程启动的时间TTY
:完整的终端名称TIME
:CPU 时间CMD
:启动进程所用的命令和参数
如果想查看进程的 CPU 占用率和内存占用率,可以使用
aux
如果想查看进程的父进程 ID 可以使用-ef
kill:终止进程
基本语法
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
选项说明
-9
:表示强迫进程立即停止
pstree:查看进程树
kill:终止进程
基本语法
pstree [选项]
选项说明
例如:
top:实时监控系统进程状态
基本语法
top [选项]
选项说明
-d秒数
:指定 top 命令每隔几秒更新。默认是 3 秒在 top 命令的交互模式当中可以执行的命令-i
:使 top 不显示任何闲置或者僵死进程-p
:通过指定监控进程 ID 来仅仅监控某个进程的状态。
操作说明
查询结果字段解释
第一行信息为任务队列信息
第二行为进程信息
第三行为 CPU 信息
第四行为物理内存信息
第五行为交换分区(swap)信息
[root@hadoop101 ~]# top -d 1
[root@hadoop101 ~]# top -i
[root@hadoop101 ~]# top -p 2575
执行上述命令后,可以按 P、M、N 对查询出的进程结果进行
netstat:显示网络状态和端口占用信息
基本语法
netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)
netstat –nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
选项说明
例如:
(1)通过进程号查看sshd进程的网络信息
[root@hadoop101 hadoop-2.7.2]# netstat -anp | grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
951/sshd
tcp 0 0 192.168.202.100:22 192.168.202.1:57741
ESTABLISHED 3380/sshd: root@pts
tcp 0 52 192.168.202.100:22 192.168.202.1:57783
ESTABLISHED 3568/sshd: root@pts
tcp 0 0 192.168.202.100:22 192.168.202.1:57679
ESTABLISHED 3142/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN
951/sshd
unix 2 [ ] DGRAM 39574 3568/sshd:
root@pts
unix 2 [ ] DGRAM 37452 3142/sshd:
root@pts
unix 2 [ ] DGRAM 48651 3380/sshd:
root@pts
unix 3 [ ] STREAM CONNECTED 21224 951/ssh
(2)查看某端口号是否被占用
[root@hadoop101 桌面]# netstat -nltp | grep 22
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
1324/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
951/sshd
tcp6 0 0 :::22 :::* LISTEN
951/sshd
crontab系统定时类命令
我们使用之前可以先查看服务是否开启:
# systemctl status crond
ubuntu用户不一样:
# systemctl status cron
重新启动 crond 服务
[root@hadoop101 ~]# systemctl restart crond
crontab:定时任务设置
基本语法
crontab [选项]
选项说明
进入 crontab 编辑界面。会打开 vim 编辑你的工作
切换编辑器使用
select-editor
。
例如我们可以使用nano编辑器他对新手更加的友好
* * * * *
执行的任务
特殊符号
特定时间执行命令
例如:
每隔 1 分钟,向/root/bailongma.txt 文件中添加一个 11 的数字
*/1 * * * * /bin/echo ”11” >> /root/bailongma.txt
关机重启类命令
在 linux 领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
基本语法
(1)sync (功能描述:将数据由内存同步到硬盘中)
(2)halt (功能描述:停机,关闭系统,但不断电)
因为不断电,所以我们内存中的数据还保存着。我们可以使用这种方式让系统处于一个低水平的维护状态。你可以简单地理解为睡眠模式
(3)poweroff (功能描述:关机,断电)
(3)reboot (功能描述:就是重启,等同于 shutdown -r now)
(4)shutdown [选项] 时间
补充选项:
-h/-P
关机
注意:Linux 系统中为了提高磁盘的读写效率,对磁盘采取了 “预读迟写”操作方式。当用户保存文件时,Linux 核心并不一定立即将保存数据写入物理磁盘中,而是将数据保存在缓冲区中,等缓冲区满时再写入磁盘,这种方式可以极大的提高磁盘写入数据的效率。但是,也带来了安全隐患,如果数据还未写入磁盘时,系统掉电或者其他严重问题出现,则将导致数据丢失。使用 sync 指令可以立即将缓冲区的数据写入磁盘。
使用
(1)将数据由内存同步到硬盘中
[root@hadoop100 桌面]#sync
(2)重启
[root@hadoop100 桌面]# reboot
(3)停机(不断电)
[root@hadoop100 桌面]#halt
(4)计算机将在 1 分钟后关机,并且会显示在登录用户的当前屏幕中
[root@hadoop100 桌面]#shutdown -h 1
(5)立马关机(等同于 poweroff)
[root@hadoop100 桌面]# shutdown -h now
(6)系统立马重启(等同于 reboot)
[root@hadoop100 桌面]# shutdown -r now
(7)系统取消关机
[root@hadoop100 桌面]# shutdown -c
(8)系统在15点关机
[root@hadoop100 桌面]# shutdown 15:00
(9)reboot相关操作
[root@study ~]# shutdown -h now
立刻关机,其中 now 相当于时间为 0 的状态
[root@study ~]# shutdown -h 20:25
系统在今天的 20:25 分会关机,若在21:25才下达此指令,则隔天才关机
[root@study ~]# shutdown -h +10
系统再过十分钟后自动关机
[root@study ~]# shutdown -r now
系统立刻重新开机
[root@study ~]# shutdown -r +30 'The system will reboot'
再过三十分钟系统会重新开机,并显示后面的讯息给所有在线上的使用者
[root@study ~]# shutdown -k now 'This system will reboot'
仅发出警告信件的参数!系统并不会关机