本文均来自《鸟哥的Linux私房菜》的学习整理,仅供学习使用
·一、基础命令
1.1 date日期
[root@iZbp1fki8n8k5f1j3acuhzZ ~]# date
Tue Jul 20 21:46:55 CST 2021
格式化:
[root@iZbp1fki8n8k5f1j3acuhzZ ~]# date '+%Y-%m-%d %H:%m'
2021-07-20 21:07
1.2 man
查看命令帮助
输入man ls会出现关于ls命令的说明
LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort is
specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all
do not ignore entries starting with .
...............
其中,第一行LS(1)中的1代表一般用户可以使用的命令。
其他数字说明如下,这里列举比较重要的几个
序号 | 说明 |
---|---|
1 | 用户载shell环境中可以操作的命令或可执行文件 |
2 | 系统内核可调用的函数与工具 |
3 | 一些常用的函数与函数库 |
8 | 系统管理有可用的管理命令 |
在man中,可通过以下命令查找关键词:
-
/string
向【下】查找string
-
?string
向【上】查找string
-
n或N
用 / 或 ? 查找时,n代表向下查找一个,N代表反向查找一个
man -f man -- 列举和man有关的命令
man -k man -- 只要包含man这个关键词的说明文件就列出来
1.3 info page
与man类似,但是内容以段落形式列出来,有目录,点击目录可以跳到指定段落
-
n
到下个节点 翻页
-
p
到上个节点
-
u
向上移动一层,到上层的总览画面
-
s 或 /
在当前page查找
1.4 关机相关
1.4.1 sync
将内存数据写入到磁盘。当前的关机命令如shutdown、reboot等都会执行sync命令。
普通用户执行sync命令时,只能刷新自己账户下的数据。
1.4.2 shutdown
相关参数:
-
-k
只发送警告信息,非真关机
shutdown -k now '我要关机啦,都注意保存数据'
-
-r
将系统服务停掉后就重启
-
-h
将系统服务停掉后就立即关机
-
-c
取消shutdown内容
-
时间
指定多少分钟后进行关机,默认1分钟,now或0为立即关机
1.4.3 重启
reboot
halt
poweroff
三个命令都差不多,为重启操作
su - 切换到root
二、文件权限相关
2.1 权限基础
[root@iZbp1fki8n8k5f1j3acuhzZ softwares]# ls -al
total 0
drwxr-xr-x 5 root root 49 Jul 4 16:20 .
drwxr-xr-x. 19 root root 239 Jan 1 2021 ..
drwxr-xr-x 6 root root 107 Dec 8 2020 fastdfs
drwxr-xr-x 3 root root 23 Dec 25 2020 node
-rw-r--r-- 1 root root 0 Jul 20 22:18 test1
drwxr-xr-x 8 root root 158 Jan 1 2021 zkServer
其中,第一列第一个字符代表文件类型
-
【d】
目录
-
【-】
文件
-
【l】
链接文件
-
【b】
设备文件,周边设备
-
【c】
设备文件里面的串行端口设备
后面紧跟着的数字每三个一组共三组代表文件权限。
-
第一组
文件拥有者权限
-
第二组
用户组的权限
-
第三组
其他人的权限
每组权限由**读(r)、写(w)和可执行(x)**三个权限组成,分别对应数字4(r)2(w)1(x)
第二列的数字表示有多少文件名链接到此节点(inode)
第三列表示该文件的拥有者账户
第四列表示该文件的所属用户组名
第五列:文件大小【bytes】
第六列:创建时间或修改时间
2.2 修改文件属性和权限
2.2.1 修改用户组chgrp
格式:chgrp -R groupName fileName/dirName
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZWdItPnZ-1629598798326)(/Users/xiaoyunshi/Library/Application Support/typora-user-images/image-20210721211013637.png)]
所有用户组都可在 /etc/group 查询
2.2.2 修改文件拥有者chown
格式:
chown [-R] username fileName/dirName
,将fileName的拥有者改为username,或通过-R将目录dirName联通子目录下的所有文件的拥有者更改为username
chown也可以直接修改用户组:chown [-R] username:groupName fileName/dirName
[root@localhost ~]# chown xiaoyunshi testtxt
[root@localhost ~]# ls -l
总用量 4
-rw-------. 1 root root 1417 7月 13 21:28 anaconda-ks.cfg
drwxr-xr-x. 2 root test 17 7月 21 21:09 testdir
-rw-r--r--. 1 xiaoyunshi root 0 7月 21 21:08 testtxt
2.2.3 修改文件权限chmod
基本语法:chmod [-R] num1num2num3 文件或目录
前面讲到,文件权限分为 r(4)、w(2)和x(1),其中numx就表示这几个数字之和。num1为文件拥有者权限,num2为所属用户组权限,num3为其他用户权限
如:给testtxt文件权限为文件拥有者:可读、可写、可执行,用户组:可读和可写,其他用户只能读
[root@localhost ~]# chmod 764 testtxt
[root@localhost ~]# ls -l
-rwxrw-r--. 1 xiaoyunshi root 0 7月 21 21:08 testtxt
另外,权限的三个身份:user、group、others,可分别使用 u 、g、o代替,加上 a(所有者)共四个身份类型。就可借助ugoa代表四个身份进行权限修改。
上面的示例改为用户:读写,用户组:只读,其他人:只读,则可用如下方式修改:
[root@localhost ~]# chmod u=rw,go=r testtxt
[root@localhost ~]# ls -l
-rw-r--r--. 1 xiaoyunshi root 0 7月 21 21:08 testtxt
如果只想给文件加上或去掉某个权限,则可以将 =
替换为 +
或 -
:
# 给文件拥有者添加可执行权限
[root@localhost ~]# chmod u+x testtxt
[root@localhost ~]# ls -l
-rwxr--r--. 1 xiaoyunshi root 0 7月 21 21:08 testtxt
#给用户组添加写权限
[root@localhost ~]# chmod g+w testtxt
[root@localhost ~]# ls -l
-rwxrw-r--. 1 xiaoyunshi root 0 7月 21 21:08 testtxt
#给其他用户去掉读权限
[root@localhost ~]# chmod o-r testtxt
[root@localhost ~]# ls -l
-rwxrw----. 1 xiaoyunshi root 0 7月 21 21:08 testtxt
# 给所有用户添加可执行权限
[root@localhost ~]# chmod a+x testtxt
[root@localhost ~]# ls -l
-rwxrwx--x. 1 xiaoyunshi root 0 7月 21 21:08 testtxt
2.3 权限的作用
2.3.1权限对于文件的作用
-
r
可以读取文件实际内容
-
w
可以对文件进行编辑(写入、修改等),但不能删除!
-
x
被系统执行的权限,与文件名无关,只与文件内容相关
2.3.2 权限对于目录的作用
目录主要是记录文件的列表
-
r
可以读取目录文件列表。即,可以使用ls这样的命令查看目录中文件列表内容
-
w
- 建立新的文件与目录
- 删除已存在的文件与目录(无论文件的权限是什么)
- 重命名已存在的文件或目录
- 移动目录内文件与目录的位置
-
x
决定能否将当前目录作为工作目录,即能否通过 cd 进入到该目录
即,对于一个目录来说,即使拥有w权限,但是没有x权限,依然无法对目录内文件和目录进行操作。
[xiaoyunshi@localhost local]$ ls -l
drwxr-xr--. 2 root root 6 7月 21 22:03 test
[xiaoyunshi@localhost local]$ ls test/
[xiaoyunshi@localhost local]$ cd test/
-bash: cd: test/: 权限不够
如上,test目录对于其他用户来说只有读权限,因此可以对test进行 ls,但是无法cd进入到该目录
三、目录与路径
3.1 目录操作
3.1.1 pwd
pwd:显示当前所在的目录
[root@localhost test]# pwd
/usr/local/test
3.1.2 mkdir
mkdir:创建目录
格式:mkdir -[mp] [权限] dirName
-
-m
创建目录,同时自定权限
[root@localhost test]# mkdir -m 721 dir1 [root@localhost test]# ls -l drwx-w---x. 2 root root 6 7月 22 17:39 dir1
创建一个权限为
rwx-w---x
的目录 -
-p
递归创建,如:
[root@localhost test]# mkdir -p dir2/dir21/dir22
则在当前目录下创建了dir2目录,并且dir2包含了dir21目录,dir21包含了dir22目录
如果不指定权限,则采用默认权限,目录默认权限跟umask相关【后面介绍】
3.1.3 rmdir
删除目录
同mkdir语法一样,但只能删除非空目录。
[root@localhost test]# rmdir -p dir2/dir21/dir22/
想要删除目录和目录下所有内容的话,就直接rm -rf dir
吧,强制删除。
3.1.4 ls
列举目录内容,默认按文件名排序
选项与参数:
-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来
-A :全部的文件,连同隐藏文件,但不包括 . 与 … 这两个目录
-F :根据文件、目录等信息,给予附加数据结构,例如::代表可可执行文件; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;
-h :将文件大小以友好的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 号【后面讲】;
-l :包含文件的属性与权限等等数据;(常用)
-n :列出 UID 与 GID 而非使用者与群组的名称
-r :文件反向排序
-R :递归列举出目录下所有文件;
-S :以文件大小大小排序*
-t :依时间排序
3.2 复制删除和移动相关
3.2.1 cp
cp:复制文件用
-
-i
目标文件存在,要覆盖时会先询问
-
-p
连同文件的属性(权限、用户和时间)一同复制,而非使用默认属性
-
-r
递归复制
-
-s
复制成为符号链接文件
-
-u
目标文件不存在才复制,目标文件存在但比源文件旧才更新(覆盖)【备份用】
-
-a
相当于 -dr,–preserve=all
--preserve=all
:除了 -p 包含的权限外,还加入了SELinux属性,links和xattr等也复制 -
-l
进行硬链接的【后面讲】链接文件建立
-
-d
若源文件为链接文件属性,则复制链接文件属性而非文件本身
【例:-p】
默认情况下,即不加任何选项cp操作时,会修改目标文件的权限、时间等属性为当前操作者。
如下,有一个文件拥有者为xiaoyunshi的文件 testcp,使用root用户执行cp操作后,发现复制后的目标文件的拥有者变为了root。
[root@localhost test]# ls -l
总用量 0
-rw-rw-r--. 1 xiaoyunshi xiaoyunshi 0 7月 22 21:11 testcp
[root@localhost test]# cp testcp /home/xiaoyunshi/
[root@localhost test]# cd /home/xiaoyunshi/
[root@localhost xiaoyunshi]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 7月 22 21:12 testcp
如果想要连同权限等一同复制,就可以使用 -p 或 -a选项:
[root@localhost test]# cp -p testcp /home/xiaoyunshi/testcp2
[root@localhost test]# cd /home/xiaoyunshi/
[root@localhost xiaoyunshi]# ls -l
-rw-rw-r--. 1 xiaoyunshi xiaoyunshi 0 7月 22 21:11 testcp2
这样就给考屁过来了
【链接例子:-s、-l、-d】
对testcp建立一个符号链接文件(可以理解为windows里的快捷方式,非文件本身,其通过 -> 指向文件本身)
[root@localhost test]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 7月 22 21:21 testcp
[root@localhost test]# cp -s testcp testcplink
[root@localhost test]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 7月 22 21:21 testcp
lrwxrwxrwx. 1 root root 6 7月 22 21:29 testcplink -> testcp # 建立好的指向testcp的链接文件
-d:若源文件为链接文件属性,则复制链接文件属性而非文件本身,否则复制文件本身
# 1:使用-d复制testcp为testcp2:因为testcp非链接文件,因此复制出来的testcp2也是非链接文件
[root@localhost test]# cp -d testcp testcp2
[root@localhost test]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 7月 22 21:21 testcp
-rw-r--r--. 1 root root 0 7月 22 21:32 testcp2
lrwxrwxrwx. 1 root root 6 7月 22 21:29 testcplink -> testcp
#2:使用-d复制testcplink为testcplink2:因为testcplink为链接文件,因此复制出来的testcplink2也是链接文件,且指向原文件
[root@localhost test]# cp -d testcplink testcplink2
[root@localhost test]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 7月 22 21:21 testcp
-rw-r--r--. 1 root root 0 7月 22 21:32 testcp2
lrwxrwxrwx. 1 root root 6 7月 22 21:29 testcplink -> testcp
lrwxrwxrwx. 1 root root 6 7月 22 21:32 testcplink2 -> testcp # 指向testcp
#3:复制testcplink为testcp3:因为未使用-d,默认情况下cp只会复制文件本身,无论源文件是否为链接文件
[root@localhost test]# cp testcplink testcp3
[root@localhost test]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 7月 22 21:21 testcp
-rw-r--r--. 1 root root 0 7月 22 21:32 testcp2
-rw-r--r--. 1 root root 0 7月 22 21:32 testcp3 # 复制链接文件的结果仍然是文件本身
lrwxrwxrwx. 1 root root 6 7月 22 21:29 testcplink -> testcp
lrwxrwxrwx. 1 root root 6 7月 22 21:32 testcplink2 -> testcp
3.2.2 rm
rm为删除操作。
参数:
-
-r
递归删除
-
-f
强制删除
-
-i
会提示是否删除
3.2.3 mv
移动文件或修改文件名
参数:
-
-f
强制,目标文件存在时强行覆盖
-
-i
会问你以下
-
-u
目标文件存在且较旧时才覆盖
获取文件名:basename 文件
获取文件所在目录名:dirname 文件
3.3 查看文件内容
3.3.1 cat、tac
cat比较有用的参数:
- -b:列出行号
- -n:列出行号,包括空白行
- -T: Tab键以^T显示出来
tac就是反向查看
这两个命令都是一次查看完,因此在线上查看时,如果文件比较大就要谨慎些。
3.3.2 more
翻页查看
- 空格:翻页
- 回车:下一行
- /string:当前显示的内容中查找string
- q:退出
3.3.3 less
同more,但支持更多功能。
- /string:向下查找string
- ?string:向上查找string
- pageUp/Down:翻页
- n/N:n:正向重复/或?查找,N:反向查找
- g:定位到数据第一行
- G:定位到数据最后一行
3.3.4 head
格式:head [-n number] 文件
head默认从头展示文件的前10行
head -n number 则展示前number行
number为负数:不展示后面number行,即最后number行以前的都列出来,如一共50行, head -n -20 ,则只会列出第1到30行
3.3.5 tail
从尾部展示number行,不指定则默认10行
tail [-n number] 文件
-f:持续刷新最后的内容
3.4 文件的时间及修改mtime、ctime、atime
文件的时间分为三类:
- 修改时间(mtime):文件内容被修改时更新
- 状态时间(ctime):文件权限属性被修改时更新
- 访问时间(atime):如读取文件时就会更新
ll默认展示的是修改时间,想要查看其他时间可以通过:ls -l --time=ctime
指定.
可以通过touch创建空文件或修改文件时间
touch:
参数:
- -a:修改atime
- -c:仅修改文件时间,文件不存在则不建立新文件
- -t:自定义时间 格式YYYYMMDDhhmm
- -m:修改mtime
- -d:同时修改atime与mtime,格式可以为:'2021-07-22 11:11’这样 or **‘2 days ago’**这样
但无论如何,文件的ctime无法更改
3.5 文件与目录的默认权限和隐藏权限
3.5.1 默认权限umask
如果在创建文件或权限时未指定权限,如 mkdir -m ,则会采用默认权限,默认权限是啥呢?具体可以通过umask命令查看:
[root@localhost test]# umask
0022
[root@localhost test]# umask -S
u=rwx,g=rx,o=rx
其中,umask -S
会将默认权限格式化输出,展示的就是具体的默认权限,如上,默认权限 u为读写和可执行,用户组和其他用户都只有读和可执行,没有写权限。
而umask
单独的命令输出了4位,第一位为特殊权限暂不看,与权限相关的是后三位,即022,这个数字对应的是默认权限需要减去的权限:
- 0:文件拥有者权限一个都不去掉,为:r(4)、w(2)、x(1)
- 2:用户组和其他用户的权限都去掉写权限,因为
w->2
,因此默认权限为:r(4)和可执行x(1)
那么默认权限是什么呢?文件和目录的默认权限是不一样的:
-
文件
因为文件大多数不需要可执行的权限,因此默认为 666 : -rw-rw-rw-
-
目录
而目录必须要有可执行权限才能进入,因此默认为777 : drwxrwxrwx
因此,文件和目录减去umask中要减去的权限后,实际的默认权限为:
-
文件实际权限
-rw-rw-rw 减去 -----w–w- 结果为: -rw-r–r--
-
目录实际权限
drwxrwxrwx 减去 -----w–w- 结果为: drwxr-xr-x
测试:
可以看到和我们计算的一致。
#创建目录
[root@localhost test]# mkdir defaulDir
[root@localhost test]# ls -l
总用量 0
drwxr-xr-x. 2 root root 6 7月 23 14:28 defaulDir
# 创建文件
[root@localhost test]# touch defaultTxt
[root@localhost test]# ls -l
-rw-r--r--. 1 root root 0 7月 23 14:30 defaultTxt
默认权限的修改
修改默认权限也很简单,直接在 umask后加上要要去掉的权限对应的数字即可,如:
[root@localhost test]# umask 0002
[root@localhost test]# rm -rf ./*
[root@localhost test]# touch test
[root@localhost test]# mkdir dir
[root@localhost test]# ls -l
总用量 0
drwxrwxr-x. 2 root root 6 7月 23 14:42 dir
-rw-rw-r--. 1 root root 0 7月 23 14:42 test
我们只把其他用户去掉写权限,其余都保留,如上,新建文件和目录权限也确实如此。
3.5.2 文件隐藏属性chattr
文件 的隐藏属性有哪些呢?可通过 chattr[+-=][AaSscditu] 文件or目录
来修改。
具体参数如下:
-
[±=]
这个和chmod修改权限的作用是类似的。+就是加上一个特殊参数,-就是减去一个特殊参数,=就是接固定参数
-
A
该参数可保证读取文件或目录时==不修改访问时间(atime)==
-
a
只能增加数据,不可修改或删除数据,只能root进行设置该参数
-
S
同步写入磁盘 (一般都是非同步写入,在关机时会执行sync进行刷新磁盘,或手动执行sync进行刷新磁盘)
-
s
删除时完全移除磁盘空间,不可挽回
-
u
与s相反,被删除后仍保留在磁盘,可通过x挽回
-
c
对文件自动进行压缩,读取时自动解压,存储时先压缩再存储
-
d
dump时避免被dump
-
i
让文件不可被删除、改名、建立链接、新增数据(仅root可操作)
【示例】-i :
# 添加 i 属性
[root@localhost test]# chattr +i test
[root@localhost test]# lsattr test
----i----------- test
[root@localhost test]# rm -rf test
rm: 无法删除"test": 不允许的操作
# 移除该隐藏属性
[root@localhost test]# chattr -i test
[root@localhost test]# lsattr test
---------------- test
# 可正常删除
[root@localhost test]# rm test
rm:是否删除普通空文件 "test"?y
lsattr为查看隐藏属性
【示例】 -a:
[root@localhost test]# echo "haha" -> testtxt
[root@localhost test]# cat testtxt
haha -
# 添加 a 属性
[root@localhost test]# chattr +a testtxt
[root@localhost test]# rm testtxt
rm:是否删除普通文件 "testtxt"?y
rm: 无法删除"testtxt": 不允许的操作
[root@localhost test]# echo "hehei" -> testtxt
-bash: testtxt: 不允许的操作
[root@localhost test]# echo "hahahehei" -> testtxt
-bash: testtxt: 不允许的操作
添加后无法修改和删除
3.5.3 文件特殊权限
SUID、SGID、SBIT
3.6 命令和文件的查找
3.6.1 which
which用于查找脚本文件,是根据PATH环境变量规范的路径,查找执行文件的文件名。如查找ls命令的位置
格式:which [-a] command
-a : 把所有由PATH目录中可以找到的命令都列出
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
但是如果是内置命令,如 history 就不可以用which查找,这里可以使用type查找【后面讲】
[root@localhost ~]# which history
/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@localhost ~]# type history
history 是 shell 内嵌
3.6.2 文件查找
通常用whereis和locate命令。
whereis
格式:whereis [-bmsu] 文件或目录
whereis查找很快,因为其只查找几个特定目录
-
-l
列出会去查询的几个主要目录
-
-b
只找二进制文件
-
-m
只找在说明文件manual路径下的文件
-
-s
只找source源文件
-
-u
查找不在上述三个项目当中的其他特殊文件
[root@localhost ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
find
语法:find [PATH] [option] [action]
其中option有以下参数:
1.时间相关
-mtime、-atime和-ctime,以mtime为例:
- -mtime n : n天前的那天(当天内)被修改过的文件
- -mtime +n: n天以前(不包括第n天当天)的被修改过的文件
- -mtime -n : n天内(包括第n天)的被修改过的文件
例:n=4:
-------(+4)----|--(4)--|----------(-4)----------
---7-----6-----5-------4-----3-----2-----1-----now
2.使用者或用户组相关
-
-uid n
与账户名称对应的数字
-
-gid n
与用户组ID对应的数字
-
-user name
name为使用者账号
-
-group name
name为用户组名
-
-nouser
查找文件的拥有者不在/etc/passwd的
-
-nogroup
查找文件所属用户组不在/etc/group的
查找/home目录下所有拥有者为xiaoyunshi的文件
[root@localhost ~]# find /home -user xiaoyunshi
/home/xiaoyunshi
/home/xiaoyunshi/.bash_logout
/home/xiaoyunshi/.bash_profile
/home/xiaoyunshi/.bashrc
/home/xiaoyunshi/.bash_history
/home/xiaoyunshi/testcp2
3.与文件权限和名称有关的
- Name : 查找文件名为fileName的文件
-size [+-]SIZE : 查SIZE(单位:c->Bytes,k->1024Bytes)大(+)或小(-)的文件
-type TYPE : 查找文件类型为TYPE【正规文件(f)、设备文件(b,c)、目录(d)、链接文件(l)、socket文件(s)、FIFO(p)等属性】
-perm mode :查找文件属性等于mode 的文件
-perm -mode : 查找文件属性全部包括mode的文件
-perm /mode : 查找文件属性包括mode的文件(不用全部都包括)
如果要查询关键词,则使用如下方式:
在关键词前后加上 :星号*
[root@localhost ~]# find /home -name "*test*"
/home/wangmaolin/testcp
/home/wangmaolin/testcp2
/home/wangmaolin/test
/home/wangmaolin/test/testtxt
/home/wangmaolin/test/.testtxt.swp
/home/wangmaolin/test/testtxt~
/home/wangmaolin/test/testtxz~
4.额外进行的操作
-exec command
可对查询结果做额外操作,如:
find /home -name "test" -exec ls -l {} \;
查找/home目录下名为test的文件,将查询结果放到 {} 内 执行ls -l 命令。
[root@localhost ~]# find /home -name testtxt -exec ls -l {} \;
-rw-rw-r--. 1 root root 7 7月 23 15:11 /home/wangmaolin/test/testtxt