0x01 命令的基本格式
[root@localhost ~]# 命令 [选项] [参数]
ls
是最常见的目录操作指令,主要功能是显示目录下的内容
- 命令名称: ls
- 原意: list
- 所在路径: /bin/ls
- 执行权限: 所有用户
- 功能描述: 显示目录下的内容
-a, --all 不隐藏任何以. 开始的项目
-A, --almost-all 列出除. 及.. 以外的任何项目
--author 与-l 同时使用时列出每个文件的作者
-d, --directory 显示目录信息而不是,目录下的文件
-h, --human-readable 与-l 一起,以易于阅读的格式输出文件大小(例如 1K 234M 2G)
-i, --inode 显示文件的i节点号
-l 使用较长格式列出信息
ls显示长格式列出信息
drwxr-xr-x 10 root root 4096 09-17 18:17 jdk1.6.0_16
drwxr-xr-x 16 1016 1016 4096 10-11 03:25 subversion-1.6.1
drwxr-xr-x 9 root root 4096 2011-11-01 tomcat6.0.32
文件类型 | 所有者权限 | 组用户权限 | 其他用户权限 | 文件链接数or子目录数 | 用户名 | 组名 | 文件大小(字节) | 最后修改时间 | 文件名 |
---|---|---|---|---|---|---|---|---|---|
l | rwx | rwx | rwx | 1 | root | root | 7 | Jul 14 18:05 | bin -> usr/bin |
l | rwx | rwx | rwx | 1 | root | root | 7 | Jul 14 18:05 | bin -> usr/bin |
d | r-x | r-x | r-x. | 5 | root | root | 4096 | Jul 14 19:18 | boot |
d | rwx | r-x | r-x | 2 | root | root | 4096 | Apr 15 20:52 | data |
d | rwx | r-x | r-x | 19 | root | root | 3000 | Jul 16 15:42 | dev |
0x02 目录操作命令
0x021 绝对路径和相对路径
绝对路径:从根目录开始的直达目标的路径称为绝对路径
相对路径:从当前目录作为参照,进行目录查找的称为相对路径
0x022 cd
cd是切换所在目录的命令,这个命令基本信息如下
- 命令名称: cd
- 原意: change directory
- 所在路径: shell内置命令
- 执行权限: 所有用户
常用的简化用户
特殊用法 | 作用 |
---|---|
~ | 返回用户目录 |
- | 代表上次所在目录 |
. | 当前目录 |
.. | 上级目录 |
0x023 mkdir
mkdir是创建目录的命令
- 命令名称:mkdir
- 原意: make directories
- 所在路径: /bin/mkdir
- 执行权限: 所有用户
- 功能描述: 创建空目录
-p: 递归创建目录
0x024 rm
强烈建议在服务器中安装extundelete 实现Linux下文件/文件夹数据恢复
0x03 文件操作命令
0x031 touch
创建空文件或修改文件时间,这个命令的基本信息如下
- 命令名称: touch
- 原意: change file timestamps.
- 所在路径: /bin/touch
- 执行权限:所有用户
- 功能描述:修改文件的时间戳
0x032 stat
查看文件详细信息的命令,而且可以看到文件的三个时间(最近访问,最近更改(数据修改),最近改动(状态修改))
- 命令名称: stat
- 原意: display file or file system status.
- 所在路径: /usr/bin/stat
- 执行权限:所有用户
- 功能描述: 显示文件或文件系统的信息
File: ‘anaconda-ks.cfg’
Size: 1260 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 33574979 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2019-11-04 04:34:24.509973513 -0500
Modify: 2019-11-04 04:34:24.514973512 -0500
Change: 2019-11-04 04:34:24.514973512 -0500
Birth: -
0x033 cat
- 命令名称: stat
- 原意: concatenate files and print on the standard output
- 所在路径: /bin/cat
- 执行权限: 所有用户
- 功能描述: 合并文件并答应输出到标准输出
-A 相当于-vET选项的整合,用于列出所有隐藏符号
-E 列出每行结尾的回车符$
-n 显示出行号
-T 把Tab键用^T显示出来
-v 列出特殊字符
0x034 more
分屏显示文件的命令
- 命令名称:more
- 原意: file penusal filter for crt viewin
- 所在路径: /bin/more
- 功能描述:分屏显示内容
more命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下:
- 空格:向下翻页
- b:向上翻页
- 回车:向下滚一行
- /字符串:搜索指定的字符串
- q: 退出
0x035 less
less和more相似,只是More是分屏显示命令而less是分行显示命令,
- 命令名称:less
- 原意: opposite of more
- 所在路径: /usr/bin/less
- 执行权限: 所有用户
- 功能描述: 分行显示文件内容
0x036 head 和 tail
这两个是单独显示文件的头几行和尾几行
- 命令名称 head/tail
- 原意: output the first part of files / output the last part of files
- 所在路径: /usr/bin/head /usr/bin/tail
- 执行权限: 所有用户
- 功能描述: 显示文件头/结尾的内容
-n 行数 从文件头/尾开始,显示指定行数 默认 10
-f 监听更改
0x037 ln
- 命令名称: ln
- 原意: make links between file
- 所在路径: /bin/ln
- 执行权限: 所有用户
- 功能描述: 在文件之间建立链接
-s 建立软连接文件,如果不加 -s选项 则建立硬链接文件
-f 强制,如果目标文件已经存在,则删除目标文件之后再建立链接文件
0x0371 硬链接与软连接特征
硬链接特征
- 源文件和硬文件拥有相同的Inode和Block
- 修改任意一个文件,另一个文件都改变
- 删除任意一个文件,另一个文件都能使用
- 硬链接标签不清,很难确认硬链接文件位置,不建议使用
- 硬链接不能链接目录
- 硬链接不能跨分区
软链接特征(可以理解外快捷方式)
软连接和源文件拥有不同的Inode和Block(软链接文件的block中保存的是源文件的inode)
两个文件修改任意一个,另一个文件都会改变
删除软连接,源文件不受影响,删除源文件,软连接不能使用
软链接最大权限位
1rwxrwxrwx
但是由于没有实际数据,最终访问时需要参考源文件权限软链接可以链接目录
软链接可以跨分区
软链接的特征明显
0x04 目录和文件都能操作的命令
0x041 rm
rm是强大的删除命令,不仅可以删除文件,也可以删除目录。
- 命令名称: rm
- 原意: remove files or directories
- 所在路径: /bin/rm
- 执行权限: 所有用户
- 功能描述: 删除文件或目录
-f : 强制删除(force)
-i : 交互删除,在删除文件之前会询问用户
-r : 递归删除,可以删除目录(recursive)
0x042 cp
cp是用于复制命令
- 命令名称: cp
- 原意: copy files and directories
- 所在路径: /bin/cp
- 执行权限; 所有用户
- 功能描述: 复制文件和目录
-a : 相当于-dpr选项的集合
-d : 如果源文件为软连接(对硬链接无效),则复制出来的文件也为软连接
-i : 询问,如果目标已存在,则会询问是否覆盖。
-p : 复制后目标文件保留源文件的属性(包括所有者,所属组,权限,时间)
-r : 递归复制,用于复制目录
0x043 mv
mv 用来剪切的命令
- 命令名称: mv
- 原意: move(rename) files
- 所在路径: /bin/mv
- 执行权限: 所有用户
- 功能描述: 移动文件或改名
-f : 强制覆盖
-i : 交互移动
-v : 显示详细信息
0x05 基本权限管理
0x051 权限基本概念
Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。这也是Linux有别于Windows的机制,也是基于这个权限机智,Linux可以有效防止病毒自我运行,因为运行的条件是必须要有运行的权限,而这个权限在Linux是用户所赋予的。
Linux的文件权限有以下设定:
- Linux下文件的权限类型一般包括读,写,执行。对应字母为 r、w、x。
- Linux下权限的属组有 拥有者 、群组 、其它组 三种。每个文件都可以针对这三个属组(粒度),设置不同的rwx(读写执行)权限。
- 通常情况下,一个文件只能归属于一个用户和组, 如果其它的用户想有这个文件的权限,则可以将该用户加入具备权限的群组,一个用户可以同时归属于多个组。
如上图所示,以其为例,我们依次来分析各内容代表的含义,
- 第 1 行:
total 16
,表示所列出内容的磁盘占用空间总和值,单位为KB
; - 第 1 列:
dr-xr-x-r-x
,表示文件或目录的类型及权限; - 第 2 列:
4
,表示文件或目录的链接个数; - 第 3 列:
bin.guo
,表示文件或目录的所有者; - 第 4 列:
staff
,表示文件或目录的所在群组; - 第 5 列:
136
,表示文件或目录本身的大小; - 第 6 列:
Nov 24 11:26
,表示文件或目录的最后更新时间; - 第 7 列:
a
,表示文件或目录的名称。
其中 第 1 列 的内容(除total
外)特别丰富,以dr-xr-x-r-x
为例(共 10 个字符),我们对其进一步分析:
第 1 个字符
d
,表示文件或目录的类型,其类型包括
p
,表示命名管道文件;d
,表示目录文件;l
,表示符号连接文件;-
,表示普通文件;s
,表示 Socket 文件;c
,表示字符设备文件;b
,表示块设备文件。
第 2 ~ 4 个字符
r-x
,表示文件或目录的所有者权限;第 5 ~ 7 个字符
r-x
,表示文件或目录的所有者同组用户权限;第 8 ~ 10 个字符
r-x
,表示文件或目录的其他用户权限。
此外,大家可能还注意到有些文件或目录在其显示的权限后面还跟着一个字符,或者为.
或者为@
,具体:
- 在 Mac 终端中显示为
@
- 在 Linux 系统中显示为
.
这表示其所属的文件或目录开启了SELinux
安全上下文标签,如果没有,则表示未开启。
0x052 关于文件和目录的权限解析
0x0521 权限对文件
- 读(r): 可以对文件执行,cat,more,less,head,tail,等查看命令
- 写(w):可以对文件执行,vim,echo等修改文件数据的命令,注意,对文件的写权限,是不能删除文件本身的,只能删除文件中的数据。只有对上级目录含有写权限才能执行删除权限
- 执行(x):对文件的执行权限,表示可以运行,但运行的成功与否还得看文件代码。对于文件来说执行(x)是最高权限
0x0522 权限对目录
- 读(r):代表可查看目录下的内容,可在目录下执行ls命令
- 写(w):代表可以在目录下,增,删,改文件或子目录,可以对目录下执行touch,rm,cp,mv等命令,对目录来说写(W)是最高权限
- 执行(x):目录是不能运行的,对目录添加可执行权限代表着,可以进入到文件目录中才能使用cd指令。
补充:
目录的可用权限其实只有以下几个
0:什么权限都不赋予
5:目录的游览和进入权限
7:所有权限
0x053 基本权限命令
0x0531 chmod
- 命令名称: chmod
- 原意: change file mode bits
- 所在路径: /bin/chmod
- 执行权限: 所有用户
- 功能描述: 修改文件的权限模式
-R : 递归赋予权限
0x0532 权限模式
Chmod 的权限格式为
chmod [ugoa][+-=][perms] 也就是 [用户权限][赋予方式][权限]
用户身份代码包括:
u
:User,即文件或目录的拥有者;g
:Group,即文件或目录的所属群组;o
:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;a
:All,即全部的用户,包含拥有者、所属群组以及其他用户。
赋予方式代码包括:
+
: 加入权限-
:减去权限=
:设置权限
权限的代号包括:
r
:读取权限,数字代号为4
;w
:写入权限,数字代号为2
;x
:执行或切换权限,数字代号为1
;-
:不具任何权限,数字代号为0
;s
:当文件被执行时,根据who
参数指定的用户类型设置文件的setuid
或者setgid
权限。
0x0533 常用权限
664: 文件基本权限: 代表所有者拥有读写权限和其他组只有读权限
755: 这个是文件的执行权限和目录的基本权限 代表所有者用用读写执行权限,而所有组和其他人有读和执行权限
777: 这个是最大权限,在实际的生成服务器中,只要避免给文件或目录赋予这样的权限。
0x0534 chown
- 命令名称: chown
- 原意:change file owner an group
- 所在路径: /bin/chown
- 执行权限: 所有用户
- 功能描述: 修改文件和目录所有者和所属组
-R : 递归设置,给目录中的文件也统一配置
普通用户不能修改文件的所有者,哪怕时自己的文件也不行。
普通用户可以修改所有者的文件的权限
如果只输入单一的参数会默认只修改 用户
chown user1 file
如果使用:连接的两个用户 前面时用户后面时用户组
chown user1:group1 file 这样可以同时修改用户和用户组
0x0535 chgrp
- 命令名称: chgrp
- 原意: change group ownership
- 所在路径: /bin/chgrp
- 执行权限: 所有用户
- 功能描述: 修改文件和目录的所属组
0x0536 umaks 默认权限 (只需要了解,并不需要去修改)
查看系统的umask权限
root@localhost [08:03:06 PM] [~/test]
-> # umask
022
#用八进制数值显示umask权限
root@localhost [08:04:49 PM] [~/test]
-> # umask -S
u=rwx,g=rx,o=rx
#用字母表示文件和目录的初始权限
0x05361 umask权限的计算方法
先了解文件和目录的默认最大权限
- 对文件来讲,新建文件的默认最大权限是666,没有执行权限(X)。因为执行权限比较危险对文件来说,不能再新建文件的时候就默认赋予,而必须通过用户手工赋予(就算把umask修改附带执行权限,再新建文件的时候也不会带有执行权限)
- 对文件目录来说,新建目录的默认最大权限是777。这是因为X只是进入目录没什么危险
0x06 帮助命令
0x061 man
man是Linux最主要的帮助命令
- 命令名称: man
- 原意: format and display the on-line manual pages
- 所在路径: /usr/bin/man
- 执行权限: 所有用户
- 功能描述: 显示联机帮助手册
-f : 查看命令拥有哪个级别的帮助
man快捷键
按键 | 说明 |
---|---|
j | 向下滚动一行 |
k | 向上滚动一行 |
g | 跳到手册的第一行 |
G | 跳到手册的最后一行 |
/string + 回车 | 在手册页中查找第一个string |
n | 向下(同方向)查找下一次匹配,可多次使用 |
N | 向上(反方向)查找下一次匹配,可多次使用 |
h | 获得手册页的帮助 |
Ctrl+f 、f | 向下翻一整屏 |
Ctrl+b、b | 向上翻一整屏 |
q | 退出手册页 |
空格 | 向下一屏 |
Ctrl+n | 向下一行 |
Ctrl+d | 向下一屏 |
Ctrl+u | 向上一屏 |
0x0611 man 帮助级别 (不用记,了解)
1 – commands | 1-普通的命令 (用户命令, 可由任何人启动的) |
---|---|
2 – system calls | 2-系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)、 ( 系统调用, 即由内核提供的函数。) |
3 – library calls | 3-库函数,如printf,fread ( 例程, 即库函数。) |
4 – special files | 4-特殊文件,也就是/dev下的各种设备文件 (设备, 即/dev目录下的特殊文件) |
5 – file formats and convertions | 5-指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义 ( 文件格式描述, 例如/etc/passwd) |
6 – games for linux | 6-给游戏留的,由各个游戏自己定义 |
7 – macro packages and conventions | 7-附件还有一些变量,比如向environ这种全局变量在这里就有说明 (杂项,例如宏命令包、惯例等) |
8 – system management command | 8-系统管理用的命令,这些命令只能由root使用,如ifconfig (系统管理员工具, 只能由root启动) |
9 – 其他 | 9-其他跟kernel有关的文件 (其他(Linux特定的)用来存放内核例行程序的文档) |
0x062 info
info命令的帮助信息是一套完整的资料,每个当都命令的帮助只是这套完整资料中的某一章小结
快捷键 | 作 用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
Tab | 在有”*”符号的节点间进行切换 |
回车 | 进入有”*”符号的子页面,査看详细帮助信息 |
u | 进入上一层信息(回车是进入下一层信息) |
n | 进入下一小节信息 |
P | 进入上一小节信息 |
? | 査看帮助信息 |
q | 退出info信息 |
0x063 help (少用)
help只能获取Shell内置命令的帮助
- 命令名称: help
- 原意: help
- 路径: Shell内置命令
- 执行权限: 所有用户
- 功能描述: 显示shell内置命令帮助,可以使用type命令去区分外部和内置命令
shell是Linux命令解析器
root@localhost [08:34:16 PM] [~/test]
-> # type mkdir
mkdir is /usr/bin/mkdir
root@localhost [08:38:01 PM] [~/test]
-> # type cd
cd is a shell builtin
0x064 –help
这个是一个选项
基本上所有命令都会自带一个 –help上面有时候会是中文而且会标注很多常用指令
0x07 搜索命令
0x071 whereis和which
这两个只可以搜索系统命令,也就是说不能搜索普通文件
- 命令名称:whereis
- 原意: locate the binary,source,and manual page files for a command
- 所在路径: /usr/bin/whereis
- 执行权限: 所有用户
- 功能 描述: 查找二进制命令,源文件和帮助文档的命令
- 命令名称: which
- 原意: shows the full path of(shell)command
- 所在路径: /usr/bin/which
- 执行权限: 所用用户
- 功能: 列出所有命令所在路径
0x0711 区别
- whereis 命令可以查找到二进制命令的同时,查找帮助文档的位置
- which 命令查找二进制命令的同时,如果这个命令有别名,可以找到别名
root@localhost [08:40:11 PM] [~/test]
-> # whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
root@localhost [08:45:57 PM] [~/test]
-> # which ls
ls='ls --color=tty'
/usr/bin/ls
0x072 locate
只能搜索普通文件
优点: 按照数据库搜索,搜索速度快,消耗资源小,数据库位置 /var/lib/mlocate/mlocate.db
缺点: 只能按照文件名来搜索文件,而不能执行复杂的搜索,比如按照选线,大小,修改时间等条件搜索。
命令名称: locate
原意: find files by name
所在路径: /usr/bin/locate
执行权限: 所有用户
功能描述: 按照文件名搜索文件
0x073 find(超重点)
- 命令名称: find
- 原意: search for files in a directory hierarchy
- 所在路径: /bin/find
- 执行权限: 所有用户
- 功能描述: 再目录中搜索
功能过于强大:只写常见功能
因为是按照目录来搜索,所以文件搜索范围越大消耗资源和搜索时间都越多。尽量避免搜索时间
0x0731 按照文件名搜索
# find 搜索路径 [选项] 内容
选项:
-name : 按照文件名搜索,区分大小写
-iname : 按照文件名搜索,不区分大小写
-inum : 按照inode号搜索
0x0732 按照文件大小搜索
# find 搜索路径 [选项] 内容
选项:
-size [+|-]大小 : 按照指定大小搜索文件
这里的的+是指定比指定大小还要大的文件,-是指定大小要小
0x0733 按照修改时间搜索
在时间参数 有min和time
# find 搜索路径 [选项] 内容
选项:
-atime [+|-] : 按照文件访问时间搜索
-mtime [+|-] : 按照文件数据修改时间搜索
-ctime [+|-] : 按照文件状态修改时间搜索
[+|-]关于time用法的详解:
- -5 : 代表5天内修改的文件
- 5: 代表5-6天那一天修改的文件
- +5 : 代表6天前修改的文件
0x0734 按照权限搜索
# find 搜索路径 [选项] 内容
选项:
-perm 权限模式 : 查找文件权限刚好等于"权限模式"的文件
-perm -权限模式 :查找文件权限全部包含"权限模式"的文件
-perm +权限模式 :查找文件权限包含"权限模式"的任意一个权限的文件
0x0735 按照所有者和所属组搜索
# find 搜索路径 [选项] 内容
选项:
-uid 用户ID : 按照用户ID查找所有者时指定ID的文件
-gid 组ID : 按照组ID查早所属组是指定ID的文件
-user 用户名 : 按照用户名查早所有者是指定用户的文件
-group 组名 : 按照组名查找所属组是指定用户组的文件
-nouser : 查找没有所有者的文件
按所有者和所属组搜索时,”nouser”比较常用,主要用来查找垃圾。但有一种情况例外,就是外部接口例如光盘和U盘文件如果是Winodws复制的,在LIinux中是没有所有者的。
0x0736 按照文件类型搜索
# find 搜索路径 [选项] 内容
选项:
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软连接
0x0737 逻辑运算符
# find 搜索路径 [选项] 内容
选项:
-a : and逻辑与
-o : or逻辑或
-not : not逻辑非(也可以用!)
0x0738 其他选项
- -exec
# find 搜索路径 [选项] 内容 -exec 命令2 {} \;
只要有 -exec就要有; 这三个是成对出现的
这个选项的功能是 把find的结果 放入到 “{}”中 然后执行命令2,就代表了把命令一的结果用命令2再执行一次
-ok
find 搜索路径 [选项] 内容 -ok 命令2 {} \;
ok和exec基本一样不同点就是 OK在对命令操作之前会询问一次,特别是命令2为rm时建议使用ok.
0x074 grep : 补充命令
grep 作用是在文件中提取和匹配符合条件的字符串行。
-i : 忽略大小写
-n : 输出行号
-v : 反向查找
--color=auto : 搜索出的关键字用颜色显示
find 和 grep 区别
find
- find是用于搜索文件名
- find默认是完全匹配,如果需要模糊查询,需要配合通配符进行匹配
grep
- grep用于文件里的字符串
- grep默认是模糊查询,如果需要完全匹配,需要配合正则表达式
0x071 通配符
字符 | 含义 | 实例 |
---|---|---|
* | 匹配 0 或多个字符 | a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。 |
? | 匹配任意一个字符 | a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。 |
[list] | 匹配 list 中的任意单一字符注:备注记录几个特殊单一符号表示。 | a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。a[[:upper:]]b a与b之间有且只能有一个大写字符,如aSb,aQb等。 |
[!list] 或[^list] | 匹配 除list 中的任意单一字符 | a[^0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] | a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b… a9b。 |
0x075 管道符 : 补充命令
命令格式 命令1 | 命令2
命令1输出作为命令2的操作对象
类似与find 中的 -exec
但find不能与|通用。
0x76 命令的别名 : 补充命令
命令的别名:就是换一种叫法,主要用于管理员的使用习惯
命令格式
# alias 别名='原命令'
例如
# alias renet='service network restart'
这样在shell中输入renet就等于输入service network restart
注意
不要与系统命令重叠,别名会覆盖系统命令,如果覆盖了就很难改回来了。
其次在shell中alias
如果只是是打出来的没有修改对应的配置文件,那么重启后别名会失效。
如果想要永久生效,得在环境变量里配置~/.bashrc
里配置 而且这个是用户环境变量,只有当前用户可用
0x077 快捷键 : 补充命令
快捷键 | 作用 |
---|---|
Tab | 命令补全 |
Ctrl+A | 把光标移动到命令行开头 |
Ctrl+E | 把光标移动到命令行结尾 |
Ctrl+C | 强制终止当前命令 |
Ctrl+L | 清屏相当于 clear名 |
Ctrl+U | 删除或剪切光标之前的命令。 |
Ctrl+Y | 粘贴Ctrl+U的内容 |
0x08 压缩和解压命令
Linux中压缩格式有十几种,所以要以扩展名为后缀给用户管理看。
0x081 zip
ZIP是Windows中最常使用,Linux也可以正常识别。Linux不常用
- 命令名称:zip
- 原意: package and compress (archive) files
- 所在路径: /usr/bin/zip
- 执行权限: 所有用户
- 功能描述: 压缩文件或目录
命令格式: zip [选项] 压缩包名 源文件或目录(可以多个)
解压缩unzip
- 命令名称: unzip
- 原意: list,test,and extract compressed files in a ZIP archive
- 所在路径: /usr/bin/unzip
- 执行权限: 所有用户
- 功能描述: 列表,测试和提取压缩文件中的文件
-d : 指定压缩位置
0x081 gz
gz是Linux中最常用的压缩格式,使用gzip命令压缩
注意:
- gz压缩会把源文件删除
- 不会打包:如果你压缩目录,gzip会把目录里面的所有文件单独压缩一份
- 命令名称:gzip
- 原意: compress or expand files
- 所在路径: /bin/gzip
- 执行权限: 所有用户
- 功能描述: 压缩文件或目录
-c : 将压缩数据输出到标准输出中,可以用于保留源文件
-d : 解压缩
-r : 压缩目录
0x082 bz2
bz2 也是linux常用的压缩格式,从理论上将bz2压缩更先进,压缩更好,而gz压缩时间更短
注意
- 不能压缩目录
- 命令名称: bzip2
- 原意: a block-sorting file compressor
- 所在路径: /usr/bin/bzip2
- 执行权限: 所有用户
- 功能描述: bz2格式的压缩指令
-d : 解压缩
-k : 压缩时,保留原文件
-v : 显示压缩的详细信息
0x083 tar
Linux打包和解压都是tar只是选项不同
注意:
- 只能打包
//压缩
-c : 打包
-f : 指定压缩包的文件名。压缩包的扩展名是用来给管理元识别格式的,所以一定要写对
-v : 显示打包文件过程
//解压缩
-x : 解压缩
-f : 指定压缩包的文件名
-v : 显示解压缩过程
-t : 测试,不解压,只看文件中有哪些文件
-C : 指定解压目录和解压文件,这个一定要放在压缩包后面否则会报错 正确用法 xx.tar -C /tmp 文件 #如果文件不输入则全部解压到指定目录
0x084 tar.gz和tar.bz2(重点)
上面3个命令是为了理解Linux命令原理压缩和打包是分开的
# tar [选项] 压缩包名 源文件\目录
选项:
-z : 压缩和解压缩"tar.gz"格式
-j : 压缩和解压缩"tar.bz2"格式
0x09 关机和重启命令
0x091 sync
数据同步命令,用于将缓冲区的数据保存到系统中。
- 命令名称:sync
- 原意: flush file system buffers
- 所在路径: /bin/sync
- 执行权限: 所有用户
- 功能描述: 刷新文件系统缓冲区
把buffers(缓冲区)中的内容保存到硬盘中,也就是把内存
0x092 shutdown
shutdown是最安全的关机重启命令
在实际工作中重启和关机一定要有人在旁边最好
命令名称:shutdown
原意: bring the system down
所在路径: /sbin/shutdown
执行权限: 所有用户
功能描述: 关机和重启
# shutdown [选项] 时间 [警告信息]
-c : 取消已经执行的shutdown命令
-h : 关机
-r : 重启
0x093 reboot
在系统中reboot也是安全的,而且不需要加入过多的选项
0x094 halt和Poweroff
者两个都是关机命令,直接执行就会关机,而且不会完整的关闭和保存系统的服务,不建议使用
0x095 init
init是修改Linuxt运行级别的命令,也可以用于关机和重启。这个命令并不安全,不建议使用
# init 0 #0级别关机 6级别重启
0x10 常用网络命令
0x101 配置IP地址
两种方法
- setup 工具(只有部分linux发新版本才有)
- 修改/etc/sysconfig/network-scripts/ifcfg-eth0 (ifcfg-eth0是对应的网卡或者网络信息)
0x1011 重启网路服务
service network restart
0x1012 网络重启错误的可能
局域网IP重复错误
UUID(redhat6版本后独有的唯一识别号)
UUID在readhat的网卡里面写着
在虚拟机中拷贝,克隆虚拟机会这个UUID并不会改变
解决方法 1)删除网卡信息里面的MAC地址行 UUID是根据MAC地址计算的 2)删除Mac地址和UUID绑定文件一般在/etc/ude/rules.d/70-persistent-net.rules 3)重启
0x102 ifconfig
- 命令名称: ifconfig
- 原意: configure a network interface
- 所在路径: /sbin/ifconfig
- 执行权限: 超级用户
- 功能描述: 配置网络接口
最主要的是Mac地址,IP,子网掩码
0x103 ping
ping主要通过ICMP协议进行网络探测,测试网络中主机的通信情况。
注意
- Windows默认只ping 4次
- Linux默认只要不终止就会一直ping下去
- 命令名称: ping
- 原意: send ICMP ECHO_REQUEST to network hosts
- 所在路径: /bin/ping
- 执行权限: 所有用户
- 功能描述: 像网络主机发送ICMP请求
-b : 加入广播地址,用于对整个网络段进行探测
-c 次数 : 用于指定Ping的测试
-s 字节 : 指定探测包的大小
0x104 netstat
用于查看网络状态的命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。在centos7中不会默认安装需要安装net-tools和net-snmp才可以可以使用
- 命令名称: 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协议端口的连接状况
-l : 仅显示监听状态的连接
-r : 显示路由表
常用
netstat -tuln #查看本机开启了哪些端口 有时候+p
netstat -an #查看所有连接
netstat -rn #查看网关
0x105 write和wall
- 命令名称: write
- 原意: send a message to another user
- 所在路径: /usr/bin/write
- 执行权限: 所有用户
- 功能描述: 向其他用户发送信息
# write [用户] [终端号] #写完"Ctrl+D"保存并发送
wall和write功能一样,但是wall是给所有用户发送命令,所以一般还是write比较多
终端
终端 | 分配序号 | 切换方式 |
---|---|---|
本地字符终端 | tty1-6 | alt+F1-6 |
本地图形终端 | tty7 | ctrl+alt+F7(按住3秒,需要安装启动图形界面) |
远程终端 | pts/0-255 |
0x106 mail
Mail是Linux的邮件客户端命令,可以利用这个命令给其他用户发送邮件。
- 命令名称: mail
- 原意: send and receive internet mail
- 所在路径: /bin/mail
- 执行权限: 所有用户
- 功能描述: 发送和接收电子邮件
输入mail会直接进入mail终端
h : headers 列出邮件标题列表
d : delete 删除指定邮件
s : save 保存邮件,可以把指定邮件保存成文件,如" s 2 /tmp/test.mail"
q : quit 退出,并把已经操作过的邮件进行保存。
exit : 退出,但不进行任何保存。
例子1: 发送邮件
# mail user1
Subject: hello #邮件标题
Nice to meet you! #邮件内容
. #使用"."来结束邮件输入
#发送邮件给user1用户
例子2: 发送文件内容
# mail -s "测试" root < /root/test #将/root下的test文件发给root用户,标题为测试
这个常用。
0x11 系统痕迹命令
这些都是看的
系统中有一些重要的痕迹日志文件如
/var/log/wtmp
/var/run/utmp
/var/log/btmp
/var/log/laslog
。。。。。。
这些日志中保存的是系统重要的痕迹,如用户何时登陆/退出系统,错误的登陆等重要信息。这些信息通过一般编辑器打开时显示的是二进制文件只能通过特殊的命令查看
0x111 w
w是显示系统中正在登陆的用户信息,这个痕迹日志是/var/run/utmp
- 命令名称: w
- 原意: show who is logged on and what they are doing.
- 所在路径: /usr/bin/w
- 执行权限: 所有用户
- 功能描述: 显示登陆用户和他正在做什么
下面
07:45:19 up 3:44, 3 users, load average: 0.14, 0.06, 0.06
#系统时间 #系统启动了多久 #登陆的用户述两 #系统在1,5,15分钟前的平均负载
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
#登录用户 #登陆端 #来源 #登陆时间 #用户闲置时间 #所有进程站CPU时间 #当前进程占用CPU时间 #用户正在进行的操作
root tty1 04:01 2:31 4.95s 4.95s -zsh
root pts/0 192.168.145.1 07:45 6.00s 0.12s 0.00s w
root pts/1 192.168.145.1 07:45 6.00s 0.14s 0.02s top
注意
如果CPU是单核,则这个数值超过1就是高负载,CPU是4核,超过4就是高负载(平均负债完全是依据个人经验判断,一般认为不应超过CPU核数)
0x112 who
功能和w类似显示更加简单也是查看 /var/run/utmp日志
root tty1 2019-11-12 04:01
root pts/0 2019-11-12 07:45 (192.168.145.1)
root pts/1 2019-11-12 07:45 (192.168.145.1)
0x113 last
last命令用于显示用户最近登录信息。查看的是 /var/log/wtmp日志
root pts/0 221.6.45.34 Tue Dec 17 09:40 still logged in
root pts/0 221.6.45.34 Mon Dec 16 09:00 - 11:57 (02:56)
root pts/0 222.94.97.122 Sun Dec 15 20:39 - 23:28 (02:48)
root pts/0 222.95.209.80 Sat Dec 14 14:39 - 14:58 (00:18)
root pts/0 221.6.45.34 Thu Dec 12 16:55 - 17:37 (00:41)
root pts/0 49.65.139.195 Wed Dec 11 20:40 - 21:16 (00:35)
root pts/0 49.65.139.195 Wed Dec 11 19:46 - 20:03 (00:17)
root pts/0 221.6.45.34 Tue Dec 10 14:41 - 15:52 (01:10)
root pts/0 221.6.45.34 Mon Dec 9 17:24 - 17:30 (00:06)
root pts/0 221.6.45.34 Mon Dec 9 09:38 - 11:41 (02:02)
第一列信息:用户名,或者显示reboot(启动或者重启操作在这里会记录成reboot)
第二列信息:终端位置,pts/0 (伪终端或虚拟终端) 意味着从诸如SSH或telnet的远程连接的用户。 tty (teletypewriter) 意味着直接连接到计算机或者本地连接的用户,如果是启动或者重启操作,这里会显示成system boot
第三列信息:登录ip或者内核,如果你看见:0.0 或者什么都没有,这意味着用户通过本地终端连接。也有在状态中显示内核版本的信息,笔者猜测这些记录应该是属于系统的操作,如开机,关机,重启等操作
第四列信息:开始时间,其中的日期格式为date +"%a %b %d"
第五列信息:结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机)
第六列信息:持续时间
0x1114 lastlog
lastlog命令 用于显示系统中所有用户最近一次登录信息。
lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog
的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示**Never logged**
。注意需要以root身份运行该命令。
-b<天数>:显示指定天数前的登录信息;
-h:显示召集令的帮助信息;
-t<天数>:显示指定天数以来的登录信息;
-u<用户名>:显示指定用户的最近登录信息。
0x1115 lastb
lstb 命令是查看错误登陆信息,查看的是/var/log/btmp
0x12 挂载命令
把设备和Linux上空目录连接起来就是挂载
连接空目录的原因是新进来的设备是自带block的,如果已经挂载再非空目录,Linux文件夹链接的block是新设备的block这样旧的Block就再系统中当作顽固垃圾,删不掉也用不了的。
0x121 mount
命令名称: mount
所在路径: /bin/mount
执行权限: 所有用户
# mount #默认是显示已经挂载设备
# mount -a #a=auto 依据配置文件/etc/fatab的内容,自动挂载,不要盲目的信任mount -a。U盘建议别用。
# mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
选项解释:
-t 文件系统 : 加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660,等文件
-L 卷标名 : 挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项 : 可以指定挂载额外的选你选哪个,比如读写,同步异步等如果不指定则使用默认值,默认值就比较好。
-o选项表格
参数 | 说明 |
---|---|
atime/noatime | 更新访问时间/不更新访问时间,访问分区文件时,是否更新时间,默认为更新 |
async/sync | 异步/同步 默认异步 |
auto/noauto | 自动/手动 mount -a 命令执行时,是否会自动安装/etc/fatab文件内容挂载,默认为自动 |
defaults | 定义值,相当于rw,suid,dev,exec,auto,nouser,async这7个选项, |
exec/noexec | 执行/不执行,设定是否运行再文件系统中可执行文件,默认是exec 允许的 |
remount | 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限 |
rw/ro | 读写/只读,文件挂在时是否具有读写功能,默认rw |
suid/nosuid | 具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认具有 |
user/nouser | 允许/不允许普通用户挂载,设定文件系统是否运行普通用户挂载,默认是不允许,只有root可以挂载分区 |
userquota | 写入代表文件系统支持用户磁盘配额,默认不支持 |
grpquota | 写入代表文件系统支持组磁盘配额,默认不支持 |
# mount -o remount,noexec /mnt/usb0 #重新挂载,且修改特殊权限
0x1211 挂载光盘
老版本都是挂载把所有外部挂件都挂载在 /mnt/cdrom
光盘挂载的前提依然是指定光盘的设备文件名,不同版本的Linux,设备文件名不同
- Centos 5.x 以前的系统,光盘设备文件名是/dev/hdc
- Centos 6.x 以前的系统,光盘设备文件名是/dev/sr0
不论哪个系统都有软连接/dev/cdrom,与可以作为光盘的设备文件名
# mount -t ios9660 /dev/sr0 /mnt/cdrom
挂载的时候如果不指定 -t ios9660的话 如果没有光盘,可能会报,必须指定文件系统的错误。
0x1213 挂载U盘
U盘是硬盘的一种,所以U盘的设备文件名不是固定的。需要手工查询
# fdisk -l #查看已识别设备
fdisk
和mount
区别是
fdisk只要Linux识别就可以查看
mount必须要挂载才能查看
mount -t vfat /dev/sdb4 /mnt/usb
如果U盘中有中文,会发现中文是乱码.Linux想要正常显示中文,需要两个条件
- 安装了中文编码和中文字体
- 操作终端需要支持中文显示(Linx本机属于纯字符终端,是不支持中文编码的)
# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb
0x1214 卸载挂载点
umount /mnt/cdrom
#因为设备文件名和挂载点连接到了一起所以卸载哪一个都可以
注意:一定要卸载挂载点不然有时候会造成设备文件名读不出来下一个插入的设备
0x122 Linux驱动加载顺序
- 驱动直接放入系统内核之中,这种驱动主要是系统启动加载必须的驱动
- 驱动以模块的形式放入硬盘,大多数驱动都已经这种方式保存了,保存位置再
/lib/modules/3.10.0-862.e17.x86_64/kernel/
中 - 驱动可以被Liunx识别,但是系统认为这种驱动一般不常用,默认不加载,如果需要加载这种驱动,需要重新编译内核。NTFS文件系统的驱动属于这种情况
- 硬件不能被Linux内核识别,需要手工安装驱动,前提是厂商提供了针对Linux的驱动,否者自己写驱动把。