一. linux介绍
1.1 什么是linux
Linux
系统内核指的是由Linus Torvalds
负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。Linux
发行套件系统是我们常说的Linux
操作系统,也即是由Linux
内核与各种常用软件的集合产品。
总结:真正的 Linux
指的是系统内核,而我们常说的 Linux
指的是“发行版完整的包含一些基础软件的操作系统”。
1.2 linux的分类
- 红帽企业版
Linux
:RHEL
是全世界内使用最广泛的Linux
系统。它具有极强的性能与稳定性,是众多生成环境中使用的(收费的)系统。 Fedora
:由红帽公司发布的桌面版系统套件,用户可以免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到RHEL
系统中,因此Fedora
也成为RHEL
系统的试验版本。CentOS
:通过把RHEL
系统重新编译并发布给用户免费使用的Linux
系统,具有广泛的使用人群。Deepin
:中国发行,对优秀的开源成品进行集成和配置。Debian
:稳定性、安全性强,提供了免费的基础支持,在国外拥有很高的认可度和使用率。Ubuntu
:是一款派生自Debian
的操作系统,对新款硬件具有极强的兼容能力。Ubuntu
与Fedora
都是极其出色的Linux
桌面系统,而且Ubuntu
也可用于服务器领域。
1.3 linux的目录结构
在linux中,文件系统采用级层式的树状目录结构,结构的最上层是根目录"/"
在linux世界中,一切皆文件。
/bin (/usr/bin、/usr/local/bin)
是binary的缩写,存放着最经常使用的命令,比如cd、echo
/sbin (/usr/sbin、/usr/local/sbin)
存放着系统管理员使用的系统管理程序
/home
存放普通用户的主目录,在linux中,每个用户都有自己的一个目录,一般该目录名是以用户的账号命名
/root
该目录为系统管理员,也称超级权限者的用户主目录
/lib
系统开机所需要最基本的动态链接共享库,作用类似于window里的DLL文件,几乎所有的应用程序都需要用到这些共享库
/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存了一些文件
/etc
所有系统管理所需要的配置文件和子目录my.conf
/usr
非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows的program files目录
/boot
存放的是启动linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/proc (不能动)
这个目录是一个虚拟目录,它是系统内存的映射,访问这个目录来获取系统信息
/srv (不能动)
service的缩写,存放一些服务启动之后需要提取的数据
/sys (不能动)
该目录下安装了2.6内核中新出现的一个文件系统sysfs
/tmp
该目录存放一些临时文件
/dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储
/media
linux系统会自动识别一些设备,例如u盘等,当识别后,linux会把识别的设备挂载到这个目录下
/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了
/opt
这是给主机额外安装软件所摆放的目录
/usr/local
这是另一个给主机额外安装软件的目录,一般是通过编译源码方式安装的程序
/var
这个目录存放着不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件
/selinux
是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置
二. 重启和关机命令
2.1 重启命令
- reboot
- shutdown -r now (立即重启计算机(root用户使用))
- shutdown -r 10 (过10分钟自动重启)
- shutdown -r 20:35 (在晚上8点35分重启)
- shutdown -c (取消上一次shutdown命令,也就是取消重启)
2.2 关机命令
- halt (立即关机)
- poweroff (立即关机)
- shutdown -h now (立即关机)
- shutdown -h 10 (10分钟后关机)
如果使用shutdown进行关机,可以使用shutdown -c来取消命令
2.3 同步数据到硬盘
- sync (把内存数据同步到硬盘)
目前的shutdown、halt、reboot都在关机前进行sync
三. 用户和权限
3.1 用户
Linux
是一个多用户的操作系统。在 Linux
中,理论上来说,我们可以创建无数个用户,但是这些用户是被划分到不同的群组里面的,有一个用户,名叫 root
,是一个很特殊的用户,它是超级用户,拥有最高权限。
自己创建的用户是有限权限的用户,这样大大提高了 Linux
系统的安全性,有效防止误操作或是病毒攻击,但是我们执行的某些命令需要更高权限时可以使用 sudo
命令。
3.1.1 sudo
由于普通用户是有有限的权限,因此需要执行一些要root权限的命令时,就会显示权限不足。sudo命令是给普通用户以root的临时权限运行命令。
运行后需要输入root的密码才能执行。
[xqm@localhost etc]$ sudo date
[sudo] xqm 的密码:
2022年 09月 26日 星期一 10:18:40 CST
3.1.2 将用户添加到sudoers文件中
如果普通用户执行sudo命令报错,如下:
xqm 不在 sudoers 文件中。此事将被报告。
那么就需要将这个普通用户添加到sudoers文件中,这样才能让普通用户可以执行sudo命令。
第一步:切换到root权限
[xqm@localhost etc]$ su root
密码:
第二步:查看sudoers文件权限
[root@localhost etc]# ll /etc/sudoers
-r--r-----. 1 root root 4346 9月 26 10:17 /etc/sudoers
第三步:修改sudoers文件权限
如果没有写入的权限,那么就需要修改权限。
[root@localhost etc]# chmod u+w sudoers
[root@localhost etc]# ll /etc/sudoers
-rw-r-----. 1 root root 4346 9月 26 10:17 /etc/sudoers
第四步:将xqm用户添加到sudoers文件中
在root下面添加自己的用户。
100 root ALL=(ALL) ALL
101 xqm ALL=(ALL) ALL
如果想要自己的用户在使用sudo的时候不输入root的密码,可以修改为:
xqm ALL=(ALL) NOPASSWD:ALL
保存退出sudoers文件。
第五步:将sudoers文件权限修改回来
[root@localhost etc]# chmod 440 sudoers
[root@localhost etc]# ll /etc/sudoers
-r--r-----. 1 root root 4355 9月 26 10:33 /etc/sudoers
3.1.3 添加用户
添加用户需要root权限
useradd 用户名
useradd -d 指定用户存放目录 用户名
useradd -g 用户组 用户名 (用户组必须真实存在)
添加用户成功后,默认该用户的家目录在/home/下,如果使用-d,那么就在自己指定的目录下。
3.1.4 修改用户密码
修改用户密码也需要root权限,需要输入两次密码。
passwd 用户名
3.1.5 删除用户
userdel 用户名 【删除用户,但是保留用户的家目录(即文件夹)】
userdel -r 用户名 【删除用户,同时删除用户的家目录(即文件夹)】
3.1.6 查询用户
使用id来查询用户的信息
[root@centOS7 home]# id root
uid=0(root) gid=0(root) 组=0(root)
[root@localhost etc]# id xqm
uid=1001(xqm) gid=1001(xqm) 组=1001(xqm)
查询新建用户
- grep bash /etc/passwd
[root@localhost etc]# grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
xie:x:1000:1000:xie:/home/xie:/bin/bash
xqm:x:1001:1001::/home/xqm:/bin/bash
查询所有用户
- cat /etc/passwd
- compgen -u
- getent passwd
[root@localhost etc]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
.....省略n个用户
xie:x:1000:1000:xie:/home/xie:/bin/bash
nginx:x:987:981:Nginx web server:/var/lib/nginx:/sbin/nologin
xqm:x:1001:1001::/home/xqm:/bin/bash
3.1.7 切换用户
su - 用户名
# 从权限高的用户切换到权限低的用户,不需要输入密码,反之则需要。密码为新用户的登录密码。
# 当需要返回到原来用户时,使用exit/logout指令
3.1.8 查看用户
使用 whoami
查看当前操作shell用户
[root@localhost etc]# whoami
root
使用 who am i
和 who -m
查看当前登录的用户
[root@localhost etc]# who -m
root pts/0 2022-09-26 10:15 (192.168.49.1)
[root@localhost etc]# who am i
root pts/0 2022-09-26 10:15 (192.168.49.1)
使用 who
查看登录系统的用户
[root@localhost etc]# who
root pts/0 2022-09-26 10:15 (192.168.49.1)
3.2 用户组
Linux
中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并且把用户划归到这个群组。
3.2.1 添加用户组
groupadd 用户组
3.2.2 删除用户组
groupdel 用户组
3.2.3 查看用户所在组
[root@localhost etc]# groups xqm
xqm : xqm
3.2.4 修改用户所在组
usermod -g 用户组 用户名
3.2.5 查看有哪些组
- getent group
- compgen -g
3.2.6 查看一个组下有哪些用户
首先要查询组的gid
[root@localhost etc]# cat /etc/group | grep xqm
xqm:x:1001:
根据获取的gid查询用户
[root@localhost etc]# awk -F":" '{print $1":"$4}' /etc/passwd | grep '1001'
xqm:1001
testgroup:1001
3.3 用户和组相关文件
3.3.1 /etc/passwd
用户(user)的配置文件,记录用户的各种信息。
每行的含义:
用户名:口令(很多用X来代替,是加密的):用户标识号(uid):组标识号(gid):注释性描述:主目录:登录Shell
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
3.3.2 /etc/shadow
口令的配置文件。
登录名:加密口令(加密的):最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标识
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
xie:$6$xXoB2/Z52KJFYPUa$bmaL7STAXYTfZvjfDULBQ1C2uWrxdTXHxhrfv4i.jrCc2RzFlyuwtzkdrEIBe1mWNCQRmQfQ3tjBpOMI8f1.S0:19179:0:99999:7:::
nginx:!!:19237::::::
xqm:$6$HKQdo98N$LQO/t5un1JnQKwOk0i2/vs2Mj2c6nrOOWKe/O/TWeBxjqG/DuZ.TPGopREnc1ZIzMOtlPKnBly005Isph52ZI/:19261:0:99999:7:::
3.3.3 /etc/group
组(group)的配置文件,记录linux包含的组的信息。
组名:口令:组标识号:组内用户列表
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
3.4 usermod
usermod用来修改用户相关信息。
格式:
usermod 选项 用户名
选项:
- -c:修改用户帐号的备注文字
- -d:修改用户登入时的目录,只是修改/etc/passwd中用户的家目录配置信息,不会自动创建新的家目录,通常和-m一起使用
- -m:移动用户家目录到新的位置,不能单独使用,一般与-d一起使用
- -e:修改账户的有效期限
- -f:修改在密码过期后多少天即关闭该帐号
- -g:修改用户所在的群组,例如
usermod -g friends lion
修改lion
用户的群组为friends
- -G:一次性让用户添加多个群组,例如
usermod -G friends,foo,bar lion
- -l:修改用户账户名称,需要注意的是
/home
中的用户家目录的名字不会改变,需要手动修改 - -L:锁定用户密码,使密码无效
- -s:修改用户登入后所使用的shell
- -u:修改用户ID
- -U:解除密码锁定
3.5 chgrp
用于修改文件的群组。
chgrp 组名 文件名
实例:
[root@localhost userTest]# ll
-rw-r--r--. 1 root root 0 9月 26 13:54 a.txt
[root@localhost userTest]# groupadd fileGroup
[root@localhost userTest]# chgrp fileGroup a.txt
[root@localhost userTest]# ll
-rw-r--r--. 1 root fileGroup 0 9月 26 13:54 a.txt
3.6 chown
改变文件的所有者,需要 root
身份才能运行。
常用参数:
- -R:递归设置子目录和子文件,
chown -R lion:lion /home/frank
把frank
文件夹的用户和群组都改为lion
chown lion a.txt 将其他用户创建的a.txt转给用户lion
chown lion:lionGroup a.txt 将其他用户创建的a.txt转到组为lionGroup,用户为lion下面
实例:
[root@localhost userTest]# ll
总用量 4
-rw-r--r--. 1 root root 12 9月 26 14:00 a.txt
[root@localhost userTest]# chown xie:xie a.txt
[root@localhost userTest]# ll
总用量 4
-rw-r--r--. 1 xie xie 12 9月 26 14:00 a.txt
四. 文件和文件夹权限
4.1 文件和文件夹参数含义
- -rwxrwxrwx. 1 xie xie 12 9月 26 14:00 a.txt
- drwxr-xr-x. 2 root root 6 9月 26 14:06 testFolder
含义:
- 第1个参数:文件或文件夹的属性。
- d:代表这是个文件夹
- -:代表普通文件
- l:代表软连接,类比windows的快捷方式
- c:是字符设备,比如鼠标,键盘
- b:是块设备,比如硬盘
- 第2~第4:代表文件所有者的权限
- r:读权限
- w:写入权限
- x:执行权限
- 5~7:代表文件所在组下其他用户的权限,含义和2到4意义,也是读写执行
- 8~10:代表其他用户组的用户权限,也是读写执行的权限
- 1:如果是文件,则代表文件的硬连接数,如果是目录,则代表目录的子目录数
- 第一个xie/root:代表文件拥有者的用户名
- 第二个xie/root:代表文件所在的组名
- 12/6:代表文件大小
- 9月:代表文件的最后一次修改日期
- a.txt:代表文件名
rwx权限详解:
- rwx作用到文件:
- r:代表可读(read),可以读取查看
- w:代表可写(write),可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限。
- x:代表可执行(execute)
- rwx作用到目录:
- r:代表可读(read),可以读取,ls查看目录内容
- w:代表可写(write),可以修改,对目录内创建,删除,重命名目录
- x:代表可执行(execute),可以进入该目录
4.2 chmod
可以使用chmod指令来修改文件或者文件夹的权限,只要是这个文件的拥有者,就能够进行修改,不必要非是root用户。
4.2.1 使用数字来分配权限
权限 | 数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
因此改变权限,只需要做个加法就行,比如要让这个文件有读和写的权限,那么就是6,读写执行的权限就是7。
实例:
比如要写a.txt文件的权限修改为:用户拥有读写执行的权限,用户组的其他用户有读写的权限,其他用户组下的用户没有权限。
chmod 760 a.txt
4.2.2 用字母来分配权限
u
:user
的缩写,用户的意思,表示所有者。g
:group
的缩写,群组的意思,表示群组用户。o
:other
的缩写,其它的意思,表示其它用户。a
:all
的缩写,所有的意思,表示所有用户。+
:加号,表示添加权限。-
:减号,表示去除权限。=
:等于号,表示分配权限r
:读权限w
:写权限x
:执行权限
实例:
比如要给a.txt的用户添加读写执行的权限
chmod u+rwx a.txt
五. 目录指令
5.1 ls
ls命令用来列出文件夹下的文件和目录。
常用参数:
-a
:显示所有文件和目录包括隐藏的-l
:显示详细列表-h
:适合人类阅读的-t
:按文件最近一次修改时间排序-i
:显示文件的inode
(inode
是文件内容的标识)
实例:
[root@localhost userTest]# ls -alhi
总用量 4.0K
50830842 drwxr-xr-x. 3 root root 37 9月 26 14:06 .
16887890 drwxr-xr-x. 17 root root 234 9月 26 13:54 ..
50830845 -rwxrwxrwx. 1 xie xie 12 9月 26 14:00 a.txt
17687555 drwxr-xr-x. 2 root root 6 9月 26 14:06 testFolder
5.2 cd
cd命令用来切换目录,是change directroy的缩写。
cd /
: 跳转到根目录cd ~
: 跳转到家目录cd ..
: 跳转到上级目录cd ./home
: 跳转到当前目录的home目录下cd /home/lion
: 跳转到根目录下的home目录下的lion目录cd
: 不添加任何参数,也是回到家目录
[注意] 输入 cd /hom
+ 单次 tab
键会自动补全路径 + 两次 tab
键会列出所有可能的目录列表。
5.3 du
du命令用来列举出目录的大小信息。
【常用参数】
-h
:适合人类阅读的;-a
:同时列举出目录下文件的大小信息;-s
:只显示总计大小,不显示具体信息。
实例:
[root@localhost userTest]# du -ah
4.0K ./a.txt
0 ./testFolder
4.0K .
5.4 pwd
使用pwd命令可以显示当前所在目录的绝对路径
[root@localhost userTest]# pwd
/usr/local/userTest
六. 帮助指令
6.1 man
6.1.1 使用说明
当遇到某个指令不会用时,可以使用man命令来打印出使用方法。
格式:
man (选项) (参数)
选项:
- -a:在所有的man帮助手册中搜索
- -f:等价于whatis指令,显示给定关键字的简短描述信息
- -P:指定内容时使用分页程序
- -M:指定man手册搜索的路径
参数:
- 数字:指定从哪本 man 手册中搜索帮助
- 1:用户在shell环境可操作的命令或执行文件
- 2:系统内核可调用的函数与工具等
- 3:一些常用的函数(function)与函数库(library),大部分为C的函数库(libc)
- 4:设备文件说明,通常在/dev下的文件
- 5:配置文件或某些文件格式
- 6:游戏(games)
- 7:惯例与协议等,如Linux文件系统,网络协议,ASCII code等说明
- 8:系统管理员可用的管理命令
- 9:跟kernel有关的文件
- 关键字:指定要搜索帮助的关键字
6.1.2 实例
实例:
man ls
man 3 sleep
man -f ifconfig
如果输入man ls,就会新出现一个页面,页面左上角会有一个LS(1),在这里,LS 表示手册名称,而(1)表示该手册位于第一节章。同样,输入man ifconfig它会在最左上角显示 IFCONFIG(8)。也可以这样输入命令:man [章节号] 手册名。
man sleep只会显示 sleep 命令的手册, 如果想查看库函数 sleep,就要输入man 3 sleep。
[root@localhost userTest]# man -f ls
ls (1) - 列目录内容
ls (1p) - list directory contents
6.1.3 man中快捷键
- 空格键:向下翻一页
- Page Down:向下翻一页
- Page Up:向上翻一页
- home:前往首页
- end:前往尾页
- /:从上往下搜索关键词,比如"/linux"
- ?:从下往上搜索关键词,比如"?linux"
- n:定位到下一个搜索到的关键词
- N:定位到上一个搜索到的关键词
- q:退出文档
6.2 help
6.2.1 使用说明
help命令只能显示shell内部的命令帮助信息。而对于外部命令的帮助信息只能使用man或者info命令查看。
格式:
help [-dms] [Pattern...]
PATTERN 用于匹配命令,如果有与模式匹配的命令,help 返回状态为 0,否则为非 0。
选项:
- -d:输出每个命令的简短描述
- -m:类似man中手册的格式描述命令
- -s:只显示命令使用格式
6.2.2 实例
help help
help -m help
help -d help
help -s help
6.3 info
info 命令用于阅读 Linux 下 info 格式的帮助文档。
就内容来说,info 页面比 man page 编写得要更好、更容易理解,但 man page 阅读起来更加方便。一个 man 手册只有一级标题,而 info 页面将内容组织成多级标题,每个标题称为节点,每个标题下可能存在子标题(称为子节点)。要理解 info 命令,不仅要学习如何在单个节点中浏览,还要学习如何在节点和子节点之间切换。
就便捷而言,建议使用 man 而不是 info。
6.3.1 使用说明
info [OPTION]... [MENU-ITEM...]
指定需要获得帮助的主题 MENU-ITEM,可以是命令、函数以及配置文件。
选项:
- -k, --apropos=STRING:在所有手册的所有索引中查找 STRING
- -d, --directory=DIR:添加包含 info 格式帮助文档的目录
- –dribble=FILENAME:将用户按键记录在指定的文件
- -f, --file=FILENAME:指定要读取的info格式的帮助文档
- -h, --help:显示帮助信息并退出
- –index-search=STRING:转到由索引项 STRING 指向的节点
- -n, --node=NODENAME:指定首先访问的 info 帮助文件的节点
- -o, --output=FILENAME:输出被选择的节点内容到指定的文件
- -R, --raw-escapes:输出原始 ANSI 转义字符(默认)
- –no-raw-escapes:转义字符输出为文本
- –restore=FILENAME:从文件 FILENAME 中读取初始击键
- -O, --show-options, --usage:转到命令行选项节点
- –strict-node-location:(用于调试)按原样使用 info 文件指针
- –subnodes:递归输出菜单项
- –vi-keys: 使用类 vi 和类 less 的绑定键
- –version:显示版本并退出
- -w, --where, --location:显示 info 文件路径
6.3.2 快捷键
- ?:显示帮助窗口
- x:关闭帮助窗口
- q:关闭整个 Info
- Up:向上键,向上移动一行
- Down:向下键,向下移动一行
- Space, PageDown:翻滚到下一页,当前页的最后两行保留为下一页的起始两行
- Del, PageUp:翻滚到上一页,当前页的起始两行保留为上一页的最后两行
- b, t, Home:跳转到文档的开始
- e, End:跳转到文档的末尾
- [:转到文档中的上一个节点
- ]:转到文档中的下一个节点
- n:转到与当前 Node 同等级的下一个 Node
- p:转到与当前 Node 同等级的前一个 Node
- u:转到与当前 Node 关联的上一级 Node
- l:回到上一次访问的 Node
- m, g:输入指定菜单的名字后按回车,跳转到指定的菜单项(Node 的名字)
6.3.3 实例
(1)查看 info 命令的 info 格式的帮助文档。
info info
(2)查看 info 命令的 info 格式的帮助文档地址。
info -w info
/usr/share/info/info.info.gz
七. 文件目录类指令
7.1 cat
cat指令用来一次性打印出文件的所有内容
选项:
- -n:显示行号
cat 文件名
cat -n 文件名
7.2 less
分页显示文件内容,更适合查看大的文件。
7.2.1 使用说明
less [选项] 文件
// 可以使用管道重定向输出到less
ps aux | less
选项:
选项 | 选项含义 |
---|---|
-N | 显示每行的行号。 |
-S | 行过长时将超出部分舍弃。 |
-e | 当文件显示结束后,自动离开。 |
-g | 只标志最后搜索到的关键同。 |
-Q | 不使用警告音。 |
-i | 忽略搜索时的大小写。 |
-m | 显示类似 more 命令的百分比。 |
-f | 强迫打开特殊文件,比如外围设备代号、目录和二进制文件。 |
-s | 显示连续空行为一行。 |
-b<缓冲区大小> | 设置缓冲区的大小。 |
-o<文件名> | 将 less 输出的内容保存到指定文件中。 |
-x<数字> | 将【Tab】键显示为规定的数字空格。 |
7.2.2 快捷键
交互指令 | 功能 |
---|---|
/字符串 | 向下搜索“字符串”的功能。 |
?字符串 | 向上搜索“字符串”的功能。 |
n | 重复*前一个搜索(与 / 成 ? 有关)。 |
N | 反向重复前一个搜索(与 / 或 ? 有关)。 |
b | 向上移动一页。 |
d | 向下移动半页。 |
h 或 H | 显示帮助界面。 |
q 或 Q | 退出 less 命令。 |
y | 向上移动一行。 |
空格键 | 向下移动一页。 |
回车键 | 向下移动一行。 |
【PgDn】键 | 向下移动一页。 |
【PgUp】键 | 向上移动一页。 |
Ctrl+f | 向下移动一页。 |
Ctrl+b | 向上移动一页。 |
Ctrl+d | 向下移动一页。 |
Ctrl+u | 向上移动半页。 |
j | 向下移动一行。 |
k | 向上移动一行。 |
G | 移动至最后一行。 |
g | 移动到第一行。 |
ZZ | 退出 less 命令。 |
v | 使用配置的编辑器编辑当前文件。 |
[ | 移动到本文档的上一个节点。 |
] | 移动到本文档的下一个节点。 |
p | 移动到同级的上一个节点。 |
u | 向上移动半页。 |
7.3 head
head命令用来显示文件开头几行(默认是10行)
7.3.1 使用说明
head [选项] 文件
选项:
- -q:隐藏文件名,在多个文件名的情况下有效
- -v:显示文件名
- -c number:显示前number个字符的内容,如果number为负数,则表示只有最后number个字符不显示,其他全部显示,比如-c -2,则代表只有最后两个字符不显示
- -n number:显示前number行内容,如果number为负数,则表示只有最后的number行不显示
7.3.2 实例
什么都不加参数,显示前10行:
[root@localhost userTest]# head a.txt
hello world
课文8 静夜思
【唐】李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
课文12 古诗二首
-v:显示文件名和前10行
hello wo[root@localhost userTest]# head -v a.txt
==> a.txt <==
hello world
课文8 静夜思
【唐】李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
课文12 古诗二首
-c:显示指定前多少个字节数
[root@localhost userTest]# head -c 5 a.txt
hello
-n:显示指定前多少行数据
[root@localhost userTest]# head -n 8 a.txt
hello world
课文8 静夜思
【唐】李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
7.4 tail
使用tail命令可以查看文件的末尾数据,默认显示指定文件的最后10行到标准输出。如果指定了多个文件,tail会在每段输出的开始添加相应文件名作为头。
7.4.1 使用说明
tail [选项] 文件
选项:
- -f:循环读取,始终显示最后10行数据(默认情况下),如果有新数据进来,会进行刷新
- -q:不显示处理信息
- -v:显示详细处理信息,文件名
- -c <字节数>:显示的字节数
- -n <行数>:显示行数
- –pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
- -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
- -q, --quiet, --silent 从不输出给出文件名的首部
7.4.2 实例
不加任何选项,默认输出最后10行内容
[root@localhost userTest]# tail a.txt
池草青 山花红 鱼出水 鸟入林
识字2 姓氏歌
你姓什么?我姓李。什么李?木子李。
他姓什么?他姓张。什么张?弓长张。
古月胡,口天吴,双人徐,言午许。
中国姓氏有很多,
赵、钱、孙、李,周、吴、郑、王,
诸葛、东方,上官、欧阳……
识字6 古对今
古对今,圆对方。
7.5 touch
touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
7.5.1 使用说明
touch [-acfm][-d][-r][-t][--help][--version] 文件或者目录
选项:
- -a:改变档案的访问时间记录
- -c:假如目的文件不存在,不会建立新的文件。与 --no-create 的效果一样
- -f:不使用,是为了与其他 unix 系统的相容性而保留
- -m:改变文件的修改时间记录,不修改访问的时间
- -d:设定时间与日期,可以使用各种不同的格式
- -r file:使用file的时间记录,与 --file 的效果一样
- -t:设定文件的时间记录,将时间修改为参数指定的日期,如:07081556代表7月8号15点56分。YYMMDDHHMM.SS
- –no-create:不会建立新档案
- –help:列出指令格式
- –version:列出版本讯息
7.5.2 实例
1.如果touch不存在的文件,会进行创建。也可以同时创建多个文件。
[root@localhost userTest]# ll
总用量 4
-rwxrwxrwx. 1 xie xie 823 9月 27 09:25 a.txt
dr-xr-xr-x. 2 root root 19 9月 26 16:58 testFolder
[root@localhost userTest]# touch b.txt
[root@localhost userTest]# ll
总用量 4
-rwxrwxrwx. 1 xie xie 823 9月 27 09:25 a.txt
-rw-r--r--. 1 root root 0 9月 27 09:37 b.txt
dr-xr-xr-x. 2 root root 19 9月 26 16:58 testFolder
touch a.txt b.txt .....
2.修改文件的访问时间。修改为运行touch命令的最新的时间点。可以通过stat查看。
[root@localhost userTest]# stat a.txt
文件:"a.txt"
大小:823 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:50830845 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 1000/ xie) Gid:( 1000/ xie)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2022-09-27 09:25:56.687593956 +0800
最近更改:2022-09-27 09:25:40.597616278 +0800
最近改动:2022-09-27 09:25:40.598616276 +0800
创建时间:-
[root@localhost userTest]# touch -a a.txt
[root@localhost userTest]# stat a.txt
文件:"a.txt"
大小:823 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:50830845 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 1000/ xie) Gid:( 1000/ xie)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2022-09-27 09:39:56.516428904 +0800
最近更改:2022-09-27 09:25:40.597616278 +0800
最近改动:2022-09-27 09:39:56.516428904 +0800
创建时间:-
3.只修改文件的修改时间。修改为运行touch命令的时间点。
[root@localhost userTest]# stat a.txt
文件:"a.txt"
大小:823 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:50830845 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 1000/ xie) Gid:( 1000/ xie)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2022-09-27 09:39:56.516428904 +0800
最近更改:2022-09-27 09:25:40.597616278 +0800
最近改动:2022-09-27 09:39:56.516428904 +0800
创建时间:-
[root@localhost userTest]# touch -m a.txt
[root@localhost userTest]# stat a.txt
文件:"a.txt"
大小:823 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:50830845 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 1000/ xie) Gid:( 1000/ xie)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2022-09-27 09:39:56.516428904 +0800
最近更改:2022-09-27 09:44:54.271015843 +0800
最近改动:2022-09-27 09:44:54.271015843 +0800
创建时间:-
4.将b.txt的更改和访问时间修改为a.txt的时间
[root@localhost userTest]# stat b.txt
文件:"b.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:50830824 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2022-09-27 09:37:29.329633080 +0800
最近更改:2022-09-27 09:37:29.329633080 +0800
最近改动:2022-09-27 09:37:29.329633080 +0800
创建时间:-
[root@localhost userTest]# stat a.txt
文件:"a.txt"
大小:823 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:50830845 硬链接:1
权限:(0777/-rwxrwxrwx) Uid:( 1000/ xie) Gid:( 1000/ xie)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2022-09-27 09:39:56.516428904 +0800
最近更改:2022-09-27 09:44:54.271015843 +0800
最近改动:2022-09-27 09:44:54.271015843 +0800
创建时间:-
[root@localhost userTest]# touch -r a.txt b.txt
[root@localhost userTest]# stat b.txt
文件:"b.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:50830824 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2022-09-27 09:39:56.516428904 +0800
最近更改:2022-09-27 09:44:54.271015843 +0800
最近改动:2022-09-27 09:48:18.474732560 +0800
创建时间:-
5.创建指定时间的文件,touch -t YYMMDDHHMM.SS “filename”
[root@localhost userTest]# touch -t 201212080808.00 c.txt
[root@localhost userTest]# stat c.txt
文件:"c.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:50830825 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2012-12-08 08:08:00.000000000 +0800
最近更改:2012-12-08 08:08:00.000000000 +0800
最近改动:2022-09-27 09:52:43.722364595 +0800
创建时间:-
[root@localhost userTest]# touch -t 2006151230.30 linuxidc
[root@localhost userTest]# stat linuxidc
文件:"linuxidc"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:50830843 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2020-06-15 12:30:30.000000000 +0800
最近更改:2020-06-15 12:30:30.000000000 +0800
最近改动:2022-09-27 09:53:18.881315822 +0800
创建时间:-
[root@localhost userTest]# touch -t 1212080808.00 d.txt
[root@localhost userTest]# stat d.txt
文件:"d.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:50830847 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2012-12-08 08:08:00.000000000 +0800
最近更改:2012-12-08 08:08:00.000000000 +0800
最近改动:2022-09-27 09:54:05.291251439 +0800
创建时间:-
7.6 mkdir
mkdir用于创建目录。
7.6.1 使用说明
mkdir [选项] 目录名
选项:
- -p:创建多级目录
- -m:创建目录的同时设置权限,touch -m 774 目录名。
- -v:每次创建新目录都显示信息
- –help:显示帮助信息
- –version:显示版本信息
7.6.2 实例
直接创建目录和创建带有权限的目录
[root@localhost testFolder]# mkdir a
[root@localhost testFolder]# mkdir -m 770 b
[root@localhost testFolder]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 27 10:12 a
drwxrwx---. 2 root root 6 9月 27 10:12 b
创建目录时显示信息
[root@localhost testFolder]# mkdir -v c
mkdir: 已创建目录 "c"
[root@localhost testFolder]# ll
总用量 0
drwxr-xr-x. 2 root root 6 9月 27 10:12 a
drwxrwx---. 2 root root 6 9月 27 10:12 b
drwxr-xr-x. 2 root root 6 9月 27 10:13 c
创建多级目录并显示信息
[root@localhost testFolder]# mkdir -v -p a/b/c/d
mkdir: 已创建目录 "a/b"
mkdir: 已创建目录 "a/b/c"
mkdir: 已创建目录 "a/b/c/d"
7.7 cp
cp命令用来复制文件或者目录。
7.7.1 使用说明
cp [选项] 源地址(文件或目录)目的地址(文件或目录)
选项:
- -a:此参数的效果和同时指定"-dpR"参数相同;
- -d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
- -f:强行复制文件或目录,不论目标文件或目录是否已存在;也就是不询问是否覆盖,默认全部覆盖
- -i:覆盖既有文件之前先询问用户;
- -l:对源文件建立硬连接,而非复制文件;
- -p:保留源文件或目录的属性;
- -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
- -s:对源文件建立符号连接,而非复制文件;
- -u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
- -S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
- -b:覆盖已存在的文件目标前将目标文件备份;
- -v:详细显示命令执行的操作;
- -n:跳过已存在文件。
7.7.2 实例
复制整个文件夹a到b,并且全部覆盖不询问。
cp -rf a b
7.7.3 cp -rf不生效
由于有的服务器有别名 alias cp=’cp -i’
,当你执行cp时,其实执行的是 cp –i
。因此 cp -rf
就会不生效。
解决方法1:
\cp -rf 源目录 目标目录
方法2:临时取消alias
unalias cp
cp -rf
方法3:永久取消
vi ~/.bashrc
在alias cp=’cp -i’前加上”#”注释掉这行,:wq! 保存退出,然后重新登陆就可以了。
7.8 mv
mv命令主要用来移动和重命名文件。
7.8.1 使用说明
mv [选项]... [-T] 源文件 目标文件
mv [选项]... 源文件... 目录
mv [选项]... -t 目录 源文件...
选项:
- –backup[=CONTROL]
备份目标文件,备份文件后缀默认为’~',除非设置了–suffix(见后文)或者
SIMPLE_BACKUP_SUFFIX。版本控制可以由 --backup 和 VERSION_CONTROL
环境变量决定。
CONTROL 或 VERSION_CONTROL可以为以下几种:
none 或 off ,不使用备份,即使使用了 --backup 参数
numbered 或 t,用数字表示备份版本
existing 或 nil,如果数字备份已存在,继续使用数字备份
simple 或 never,一直使用简单的备份(多次备份采用覆盖的方式) - -b:和 --backup 类似,但是不带参数(简单备份)
- -f:在覆盖前不提示(询问)
- -i:在覆盖前进行提示(询问)
- -n, :不覆盖已存在的文件,如果同时指定了-i,-f,-n三个参数,只有最后一个(使用时的顺序)生效。
- –strip-trailing-slashes:删除每个源文件后面的斜杠
- -S:修改常用的备份后缀,备份文件后缀默认为’~',除非设置了–suffix 或者SIMPLE_BACKUP_SUFFIX。
- -t:将所有源文件的参数复制到目录中【mv的三大用法之一】
- -T,:将目标文件当成普通文件,而不考虑是否为目录(不知有啥用)
- -u:仅当源文件比目标文件新或者目标文件缺失时才移动
- -v,:说明操作过程
- -Z:将安全增强型 linux 安全上下文设置为默认类型
- –help:显示帮助信息
- –version:显示版本信息
7.8.2 实例
1.mv 源文件 目标文件
不添加任何参数选项,且源文件只有一个,为mv的第一种用法,简单的文件移动或改名。
// 重命名
[root@localhost userTest]# mv a.txt b.txt
[root@localhost userTest]# ll
总用量 4
-rwxrwxrwx. 1 xie xie 823 9月 27 09:44 b.txt
dr-xr-xr-x. 5 root root 33 9月 27 10:13 testFolder
// 移动
[root@localhost userTest]# ll
总用量 4
-rwxrwxrwx. 1 xie xie 823 9月 27 09:44 b.txt
dr-xr-xr-x. 2 root root 6 9月 27 10:50 testFolder
[root@localhost userTest]# mv b.txt ./testFolder/b.txt
[root@localhost userTest]# ll ./testFolder/
总用量 4
-rwxrwxrwx. 1 xie xie 823 9月 27 09:44 b.txt
2. mv 源文件1 源文件2 … 目标目录
不添加任何选项参数,源文件可以不止一个,目标文件必须为目录文件,这是mv的第二种用法,也就是批量移动。
[root@localhost userTest]# mv a.txt b.txt c.txt ./testFolder/
[root@localhost userTest]# ll ./testFolder/
总用量 12
-rwxr-xr-x. 1 root root 823 9月 27 10:52 a.txt
-rwxrwxrwx. 1 xie xie 823 9月 27 09:44 b.txt
-rwxr-xr-x. 1 root root 823 9月 27 10:52 c.txt
3.mv -t 目录 源文件
不添加任何选项参数(-t 参数比较特殊,是mv命令的第三种用法)第三种用法和第二种类似,只是有了-t参数,目录的位置可以随意改动,甚至可以放到多个源文件中间(但必须在-t后面)。
[root@localhost userTest]# ll
总用量 12
-rwxr-xr-x. 1 root root 823 9月 27 10:52 a.txt
-rwxrwxrwx. 1 xie xie 823 9月 27 09:44 b.txt
-rwxr-xr-x. 1 root root 823 9月 27 10:52 c.txt
dr-xr-xr-x. 2 root root 6 9月 27 10:58 testFolder
[root@localhost userTest]# mv -t ./testFolder/ a.txt b.txt c.txt
[root@localhost userTest]# ll ./testFolder/
总用量 12
-rwxr-xr-x. 1 root root 823 9月 27 10:52 a.txt
-rwxrwxrwx. 1 xie xie 823 9月 27 09:44 b.txt
-rwxr-xr-x. 1 root root 823 9月 27 10:52 c.txt
[root@localhost userTest]#
4.mv -n -i -f放一起的时候,放在最后的生效
分别是-n不覆盖,-i询问,-f直接覆盖不询问。
7.9 rm
1
7.10 ln
7.11 stat
7.12 tree
tree
命令是一种递归目录列表显示命令,使用该命令可以以树状图的形式列出一个目录下所有文件内容。
7.12.1 安装
centos下使用 yum install tree。
Ubuntu下使用 apt get-intall tree
7.12.2 使用说明
tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...]
选项:
- -a 显示所有文件和目录。
- -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
- -C 在文件和目录清单加上色彩,便于区分各种类型。
- -d 显示目录名称而非内容。
- -D 列出文件或目录的更改时间。
- -f 在每个文件或目录之前,显示完整的相对路径名称。
- -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*“,”/“,”=“,”@“,”|"号。
- -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
- -i 不以阶梯状列出文件或目录名称。
- -L level 限制目录显示层级。
- -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
- -n 不在文件和目录清单加上色彩。
- -N 直接列出文件和目录名称,包括控制字符。
- -p 列出权限标示。
- -P<范本样式> 只显示符合范本样式的文件或目录名称。
- -q 用"?"号取代控制字符,列出文件和目录名称。
- -s 列出文件或目录大小。
- -t 用文件和目录的更改时间排序。
- -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
- -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
7.13 rmdir
rmdir用来删除空目录,如果目录下有东西,则无法删除,必须使用rm-rf来进行删除。
rmdir 目录
[root@localhost testFolder]# rmdir a
rmdir: 删除 "a" 失败: 目录非空
八. 查找类指令
8.1 which
8.2 locate
8.3 find
4.实用指令
指定运行级别
0:关机
1:单用户【可以找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5,也可以指定默认运行级别。
init[0123456] 切换运行级别
# 在centod7以前,运行级别设置在/etc/inittab文件中,现在进行简化:
# multi-user.target:analogous to runlevel 3【类似于之前的等级3】
# graphical.target:analogous to runlevel 5【类似于等级5】
# 查看当前运行级别
systemctl get-default
# 设置默认运行级别
systemctl set-default TARGET.target【TARGET.target就是设置的运行级别,如果是3,就应该是multi-user.target,如果是5,就应该是graphical.target】
sort指令
sort功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。
参 数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息
grep指令
grep 命令用于查找文件里符合条件的字符串
# 语法
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
# 参数
-a 或 --text : 不要忽略二进制的数据。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-G 或 --basic-regexp : 将样式视为普通的表示法来使用。
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 --ignore-case : 忽略字符大小写的差别。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-q 或 --quiet或--silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显示错误信息。
-v 或 --invert-match : 显示不包含匹配文本的所有行。
-V 或 --version : 显示版本信息。
-w 或 --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
df
# 查看文件系统磁盘空间使用情况 established
df -h
5.找回root密码
1.启动系统,进入开机界面,5秒钟之内在开机界面按e进入编辑界面
2.进入编辑界面,使用键盘的上下键把光标往下移动,找到以“Linux16”开头内容所在的行数,在行的最后面输入:init=/bin/sh
3.接着,输入完成后,直接按快捷键:ctrl+x进入单用户模式
4.接着,在光标闪烁的位置输入:mount -o remount,rw / ,完成后按键盘的回车键(enter)。
5.在新的一行最后面输入passwd,完成后按键盘的回车键(enter),输入密码,然后再次确认密码即可,密码修改成功后,会显示passwd...,说明修改成功
6.接着,在鼠标闪烁位置中(最后一行)输入:touch / .autorelable,完成后按回车键
7.继续在光标闪烁的位置中,输入:exec /sbin/init,完成后按键盘的回车键,等待系统自动修正密码(时间可能有点长),完成后,系统重启,新的密码生效
7.文件目录指令
# mkdir
功能:用于创建目录
基本语法:mkdir [选项] [目录名]
常用选项:
-p :创建多级目录
例子:
在home下创建一个dog目录:mkdir /home/dog
创建多级目录:mkdir -p /home/animal/cat
# rmdir
功能:删除空目录
语法:rmdir [选项] 要删除的空目录
提示:如果目录下有内容,则需要rm -rf来删除目录
# touch
功能:创建空文件
基本语法:touch 文件名
实例:
创建一个txt文件:touch /home/hello.txt
# cp
功能:拷贝文件到指定目录
语法:cp [选项] source dest
选项:
-r :递归复制整个文件夹
全部覆盖不提示:/cp [选项] source dest
实例:
循环拷贝整个目录(test也在其中): cp -r /usr/local/test /opt/
# rm
功能:移除文件或目录
语法:rm [选项] 要删除的文件或目录
选项:
-r :递归删除整个文件夹
-f :强制删除不提示
# mv
功能:移动文件与目录,或者进行重命名
语法:
mv oldNameFile newNameFile 重命名(要在同一个目录)
mv oldDir newDir 移动文件
# cat
功能:查看文件内容
语法:cat [选项] 文件名
选项:
-n :显示行号
使用细节:只能浏览文件,不能修改文件,一般会带上管道命令 |more
# more
功能:more指令是一个基于vi编辑器的文本过滤器,以全屏的形式按页显示文本的内容。
语法:more 查看的文件名
功能快捷键
space(空格键) :向下翻一页
enter :向下翻一行
q :立刻离开more,不显示该文件的内容
ctrl+F :向下滚动一屏
ctrl+B :返回上一屏
= :输出当前行号
:f :输出文件名和当前行的行号
# less
功能:less指令用来分屏查看文件内容,功能与more相似,但是比more更强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示加载内容,对于大型文件具有较高的效率。
语法:less 文件名
功能快捷键:
空白键:向下翻一页
pagedown:向下翻一页
pageup:向上翻一页
/字串:向下搜寻【字串】功能,n:向下查找;N:向上查找
?字串:向上搜寻【字串】功能,n:向下查找;N:向上查找
q:离开这个程序
# echo
功能:输出内容到控制台
语法:echo [选项] [输出内容]
实例:echo $PATH
# head
功能:显示文件的开头内容,默认情况下显示文件前10行内容
语法:
head 文件名 (显示文件前10行内容)
head -n t 文件名 (查看文件头t行内容)
实例:head -n 18 /etc/profile
# tail
功能:用于输出文件中尾部的内容,默认情况下显示文件末尾10行
语法:
tail 文件名 (查看文件末尾10行内容)
tail -n t 文件名 (查看文件末尾t行内容)
tail -f 文件名 (实时追踪文档的所有更新)
# >和>>
功能:>输出重定向和>>追加
语法:
ls -l > 文件(列表的内容写入文件a.txt中,覆盖写)
ls -al >> 文件(列表的内容追加写入到a.txt中)
cat 文件1 > 文件2(将文件1的内容覆盖到文件2)
echo '内容' >> 文件 (将‘内容’追加写入到文件中)
# ln
功能:软链接,也称为符号链接,类似于windows中的快捷方式,主要存放链接其他文件的路径
语法:ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
实例:在home目录下创建一个软链接myroot,链接到/root目录,然后删除软链接
ln -s /root /home/myroot
rm /home/myroot
# history
功能:查看以及执行过的历史命令,也可以执行历史命令
语法:
history(显示所有的历史命令)
history n(显示最后的n条历史命令)
!n (执行第n条历史命令)
8.时间日期类指令
# date
功能:显示当前日期
语法:
date (显示当前时间)
date +%Y(显示当前年份)
date +%m(显示当前月份)
date +%d(显示当前哪一天)
date "+%Y-%m-%d %H:%M:%S"(显示年月日时分秒)
实例:
[root@centOS7 home]# date "+%Y-%m-%d %H:%M:%S"
2021-03-31 15:10:38
# date 设置日期
功能:设置当前系统时间
语法:date -s 字符串时间
实例:date -s 2021-11-11 11:11:22
# cal
功能:查看日历
语法:cal [月份] [年份](不加选项,显示当月日历)
9.搜索查找类指令
# find
功能:将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端
语法:find [目录范围] [选项]
选项:
-name 文件名 (按文件名查找)
-user 用户名 (按用户名查找)
-size [+n]|[-n]|[n] (按文件大小查找,大于n,小于n,等于n,单位K|M|G)
# locate
功能:可以快速定位文件路径
语法:locate 搜索文件
特别说明:locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
# which
功能:检索指令的位置
语法:which 指令名
# grep和|
功能:grep:过滤查找;|:管道符,表示将前一个指令处理的结果输出传递给后面的指令处理
语法:grep [选项] 查找内容 源文件
选择:
-n 显示匹配行及行号
-i 忽略字母大小写
实例:cat a.txt | grep -n "hello" === grep -n "hello" a.txt
10.解压和压缩类指令
# gzip/gunzip
功能:gzip用于压缩文件,gunzip用于解压文件
语法:
gzip 文件名 (压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (解压缩文件)
实例:
[root@centOS7 src]# ls
a.txt
[root@centOS7 src]# gzip a.txt
[root@centOS7 src]# ls
a.txt.gz
[root@centOS7 src]# gunzip a.txt.gz
[root@centOS7 src]# ls
a.txt
# zip/unzip
功能:zip用于压缩文件,unzip用于解压
语法:
zip [选项] (xxx.zip,压缩名) (压缩文件或目录的名)
unzip [选项] xxx.zip (解压缩文件)
zip选项:
-r 递归压缩,即压缩目录
unzip选项:
-d<目录> 指定解压后文件的存放目录
-l 查看压缩文件中的文件目录
实例:
zip -r a.zip a
unzip -d a a.zip
# tar
功能:tar是打包指令,最后打包后的文件是.tar.gz的文件
语法:tar [选项] xxx.tar.gz(自己的命名) 打包的内容(也可以是文件夹)
选项:
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压.tar文件
-C 指定解压目录
实例:
1.压缩多个文件,将/home/pig.txt和/home/cat.txt压缩成pc.tar.gz
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
2.将home文件夹压缩成myhome.tar.gz
tar -zcvf myhome.tar.gz /home/
3.将pc.tar.gz解压到当前目录
tar -zxvf pc.tar.gz
4.将myhome.tar.gz解压到/opt/temp2目录下
tar -zxvf /home/myome.tar.gz -C /opt/temp2
12.crontab定时任务调度
crontab 进行定时任务的设置
概述:
任务调度:是指系统在某个时间执行的特定的命令或程序
基本语法:
crontab [选项]
常用选项:
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
service crond restart 重启任务调度
存储任务的目录:/var/spool/cron/root
入门:
设置任务调度文件:/etc/crontab
设置个人任务调度:执行crontab -e命令
输入任务到调度文件
如:*/1 * * * * ls -l /etc/ > /tmp/to.txt
意思是每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt
参数细节说明:
第一个* 一小时当中的第几分钟 0-59
第二个* 一天当中的第几小时 0-23
第三个* 一个月当中第几天 1-31
第四个* 一年当中的第几个月 1-12
第五个* 一周中的星期几 0-7(0和7都代表星期日)
特殊符号说明:
* 代表任何时间,比如第一个*代表一个小时中的每分钟都执行
, 代表不连续时间,比如“0 3,4,7,9 * * *”代表每天的3点0分,4点0分,7点0分,9点0分都执行一次命令
- 代表连续的时间,比如“0 5 * * 1-6” 代表每周一到周六的5点0分执行命令
*/n 代表每隔多久执行一次,比如"*/10 * * * *"代表每隔10分钟就执行一次命令
<img src=“C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210623144320282.png” alt=“image-20210623144320282” style=“zoom: 80%;” />
应用实例:
1.每隔一分钟,就将当前的日期信息,追加到/tmp/mydata文件中
*/1 * * * * date >> /tmp/mydata
2.每隔一分钟,就将当前的日期和日历都追加/usr/local/shellstudy/shell_crontab中
在目录下创建mycrontab.sh文件
输入
# !/bin/bash
date >> /usr/local/shellstudy/shell_crontab/mydata
cal >> /usr/local/shellstudy/shell_crontab/mydata
添加root权限:chmod u+x mycrontab.sh
*/1 * * * * /usr/local/shellstudy/shell_crontab/mycrontab.sh
13.at任务调度
1.at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
2.默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
3.at命令是一次性定时计划任务,执行完一个任务之后不再执行此任务。
4.在使用at命令时,一定要保证atd进程的启动,可以使用相关指令来查看。
ps -ef 检测当前正在运行的进程
ps -ef | grep atd
[root@centOS7 conf]# ps -ef | grep atd
root 1339 1 0 09:29 ? 00:00:00 /usr/sbin/atd -f # atd进程已启动
--at命令格式
at [选项] [时间]
at> 指令
ctrl+D两次 结束at命令的输入
atq 查看系统中没有执行的工作任务
--at命令选项
-m 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-i atq的别名
-d atrm的别名
-v 显示任务将被执行的时间
-c 打印任务的内容到标准输出
-V 显示版本信息
-q<队列> 使用指定的队列
-f<文件> 从指定文件读入任务,而不是从标准输入读入
-t<时间参数> 以时间参数的形式提交要运行的任务
--at时间选项
1.接受在当天的hh:mm(小时:分钟)式的时间指定,如果改时间已经过去,则放在第二条执行。比如04:00
2.使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间
3.采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午,比如12PM
4.指定命令执行的具体日期,指定格式为month day 或mm/dd/yy(月/日/年)或dd.mm.yy,指定的日期必须跟在指定时间的后面,例如
04:00 2021-03-02
5.使用相对计时法。指定格式为 now+count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes、hour、days、weeks,count是时间的数量。比如:now + 5 minutes
6.直接使用today(今天),tomorrow(明天)来指定完成命令的时间
--at案例
1.2天后的下午5点执行 /bin/ls /home
at 5pm +2 days
at> /bin/ls /home
输入两次ctrl+d结束
2.atq命令来查看系统中没有执行的工作任务
atq
3.明天17点钟,输出时间到指定文件内,/root/date200.log
at 17PM tomorrow
at> date > /root/date200.log
4.2分钟后,输出时间到指定文件内,比如/root/date200.log
at now + 2 minutes
at> date > /root/date200.log
5.删除已经设置的任务,atrm 编号
atrm 5 #把编号为5的任务删除
14.linux磁盘分区和挂载
linux分区原理介绍
1.linux来说无论有几个分区,分给哪一个目录使用,归根结底都是只有一个根目录。一个独立且唯一的文件结构,linux中每一个分区都是用来组成整个文件系统的一部分。
2.linux采用一个叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入一个分区将使它的存储空间在一个目录下获得。
<img src=“C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210628133448075.png” alt=“image-20210628133448075” style=“zoom:80%;” />
#linux分区
硬盘说明:
1.linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘。
2.对于IDE硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘。“x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘)。“~”表示分区,前4个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如:hda3表示第一个IDE硬盘上的第三个主分区或扩展分区。hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
3.对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘表示方法一样。
[root@centOS7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk #sda就是第一个SCSI硬盘
├─sda1 8:1 0 200M 0 part /boot #第一个SCSI硬盘的第一个分区
└─sda2 8:2 0 12G 0 part #第一个SCSI硬盘的第二个分区
├─centos-root 253:0 0 10G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 4.2G 0 rom
#查看所有设备挂载情况
命令:lsblk 或者lsblk -f
[root@centOS7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
└─sda2 8:2 0 12G 0 part
├─centos-root 253:0 0 10G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 4.2G 0 rom
[root@centOS7 ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT(挂载点)
sda
├─sda1 xfs ca6864c1-5bb7-4a7d-ab6b-e70e01d9f19a /boot
└─sda2 LVM2_member 5U1UvI-Zwud-evVu-dcTH-PJ3T-1j9c-ZnBhkI
├─centos-root xfs 4332e490-8018-4d10-8f10-00d7e7541320 /
└─centos-swap swap 08146906-4e81-4fd9-9ab9-ad726043fb4a [SWAP]
sr0 iso9660 CentOS 7 x86_64 2017-09-06-10-51-00-00
# linux增加磁盘实例
增加一块硬盘步骤
1.虚拟机添加硬盘
右键-设置-添加-硬盘-SCSI-创建新的虚拟磁盘-设置最大磁盘大小1G-确定
重启centos系统
使用lsblk命令,发现出现sdb硬盘
2.分区
分区命令:fdisk /dev/sdb
开始对/sdb分区
m 显示命令列表
p 显示磁盘分区,同fdisk -l
n 新增分区
d 删除分区
w 写入并退出
# 说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间,最后输入w写入分区并退出,若不保存退出输入q
3.格式化磁盘
mkfs -t ext4 /dev/sdb1 # 其中ext4是分区类型
4.挂载(将一个分区与一个目录联系起来)
mount 设备名称 挂载目录
例如:mount /dev/sdb1 /newdisk
umount 设备名称/挂载目录 (卸载挂载的目录)
例如:umount /dev/sdb1 或者 umount /newdisk
# 注意,使用命令行挂载,重启之后会失效
5.设置可以自动挂载
永久挂载:通过修改/etc/fstab实现挂载
添加完成后,执行mount -a即刻生效
# 磁盘情况查询
查询全部磁盘情况
基本语法:df -h
查询指定目录的磁盘使用情况
基本语法:du -h /目录
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
--max-depth=1 子目录的深度
-c 列出明细的同时,增加汇总值
应用实例
查询/opt目录的磁盘占用情况,深度为1:du -h --max-depth=1 /opt
# 磁盘情况-工作实用指令
1.统计/usr文件夹下文件的个数
[root@centOS7 opt]# ls -l /usr | grep "^-" | wc -l
0
2.统计/usr文件夹下目录的个数
[root@centOS7 opt]# ls -l /usr | grep "^d" | wc -l
11
3.统计/usr/local文件夹下文件的个数,包括子文件夹下的
[root@centOS7 opt]# ls -lR /usr/local | grep "^-" | wc -l
199
4.统计/usr/local文件夹下目录的个数,包括子文件夹下的
[root@centOS7 opt]# ls -lR /usr/local | grep "^d" | wc -l
101
5.以树状形式显示目录结构
tree 目录名
# 如果没有tree,则使用yum install tree安装一下
15.网络配置
NAT网络配置图
<img src=“C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210629104450805.png” alt=“image-20210629104450805” style=“zoom:67%;” />
# 查看网络IP和网关
windows中VMnet8网络配置:ipconfig
查看linux中配置:ifconfig
# ping网络的连通性
ping 主机
# linux网络环境配置
第一种(自动获取):登录后,通过界面来设置自动获取ip,特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样。
第二种(指定IP):直接修改配置文件来指定IP,并可以连接到外网。
编辑 /etc/sysconfig/network-scripts/ifcfg-ens33
[root@centOS7 opt]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #要将dhcp设置成静态获取static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="82d7e6f0-42f0-4695-942c-cf57e47d0b26"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.49.131" #指定IP
NETMASK="255.255.255.0" #指定子网掩码
GATEWAY="192.168.49.2" #指定网关
DNS1="114.114.114.114"
DNS2="192.168.49.2" #指定DNS,域名解析
# 修改过文件后重启网络服务 systemctl restart network 或重启系统 reboot
# 设置主机名和hosts映射
设置主机名
1.可以给linux主机设置主机名,也可以根据需要设置主机名
2.查看主机名的指令:hostname
3.修改文件在/etc/hostname指定
4.修改后,重启生效reboot
设置hosts映射
问题:如何通过主机名能够找到(比如ping)某个linux系统
windows:在C:\Windows\System32\drivers\etc\hosts文件指定即可
例如:192.168.49.131 centOS7
linux:在/etc/hosts文件指定
例如:172.16.16.134 pcASUS
# 主机名解析过程分析(Hosts、DNS)
Hosts是什么:一个文本文件,用来记录IP和Hostname(主机名)之间的映射关系
DNS:
Domain Name System的缩写,就是域名系统
是互联网上作为域名和IP地址相互映射的一个分布式数据库
windows查看DNS域名解析缓存:ipconfig /displaydns
清理DNS缓存:ipconfig /flushdns
顺序:本地DNS缓存-->hosts文件-->DNS进行解析
<img src=“C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210629155036528.png” alt=“image-20210629155036528” style=“zoom:80%;” />
16.进程管理
1.在linux中,每个执行的程序都称为一个进程。每个进程都分配一个ID号(pid,进程号)
2.每个进程都可能以两种方式存在:前台和后台。前台进程就是用户目前的屏幕上可以进行操作的,后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
3.一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
# 显示系统执行的进程
ps命令是用来查看目前系统中,有哪些正在执行,以及他们执行的状况,可以不加任何参数。
ps -a 显示当前终端的所有进程信息
ps -u 以用户的格式显示进程信息
ps -x 显示后台进程运行的参数
ps显示的信息选项
PID 进程识别号
TTY 终端机号
TIME 此进程消耗CPU时间
CMD 正在执行的命令或进程名
查询某项服务有没有进程:ps -aux | grep xxx
ps详解
USER 用户名称
PID 进程号
%CPU 进程占用CPU的百分比
%MEM 进程占用物理内存的百分比
VSZ 进程占用的虚拟内存大小(kb)
RSS 进程占用物理内存大小(kb)
TT 终端名称
STAT 进程状态,S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止
STARTED 进程的启动时间
TIME CPU时间,即进程使用CPU的总时间
COMMAND 启动进程所用的命令和参数,如果过长会被截断显示
# 显示系统执行的进程
ps -ef 以全格式显示当前所有的进程
-e 显示所有进程
-f 全格式
ps -ef | grep xxx
UID 用户ID
PID 进程ID
PPID 父进程ID
C CPU用于计算优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低。数值越少,表明进程是I/O密集型运算,执行优先级会提高。
STIME 进程启动的时间
TTY 完整的终端名称
TIME CPU时间
CMD 启动进程所用的命令和参数
# 终止进程kill和killall
若是某个进程执行一半需要停止时,或是已消耗很大的系统资源时,此时考虑停止该进程,使用kill命令来完成此任务。
基本语法:
kill [选项] 进程号 # 通过进程号杀死进程
killall 进程名称 # 通过进程名杀死进程,也支持通配符。这在系统因负载过大时而变得很慢时很有用
选项:
-9 表示强迫进程立即停止
案例:
1.踢掉某个非法登录用户
ps -aux | grep sshd #查看登录的用户信息
kill 登录用户进程号
2.终止远程登录服务器sshd,在适当的时候再次重启sshd服务
kill sshd对应的进程号
重启sshd:/bin/systemctl start sshd.service
3.终止多个gedit
killall gedit
4.强制杀掉一个终端
查看终端:ps -aux | grep bash
kill -9 bash对应的进程号
# 查看进程树
基本语法:
pstree [选项]
选项:
-p 显示进程的PID
-u 显示进程的所属用户
实例:
1.树状的形式显示进程的PID
pstree -p
2.树状的形式显示进程的用户id
pstree -u
17.service服务管理
# 介绍
service(服务)本质就是进程,但是是运行在后台的,通常会监听某个端口,等待其他程序的请求。比如(mysqld、sshd、防火墙等),因此我们又称守护进程。
# service管理指令
1.service 服务名 [strat|stop|restart|reload|status]
2.在centos7.0之后,很多服务不再使用service,而是systemctl
3.service指令管理的服务在/etc/init.d查看(ls -l /etc/init.d/ 查看可以使用service指令的服务,绿色显示的就是服务)
[root@centOS7 ~]# ls -l /etc/init.d/
总用量 40
-rw-r--r--. 1 root root 18281 8月 19 2019 functions
-rwxr-xr-x. 1 root root 4569 8月 19 2019 netconsole #绿色显示
-rwxr-xr-x. 1 root root 7928 8月 19 2019 network #绿色显示
-rw-r--r--. 1 root root 1160 8月 7 2020 README
[root@centOS7 ~]# service network status
已配置设备:
lo ens33
当前活跃设备:
lo ens33 virbr0
案例:使用service指令关闭、开启、查看状态、重启network服务(要在虚拟机中执行,不然网络连接会断掉,xshell就会用不了)
service network stop
service network start
service network status
service network restart
# 查看服务名
1。使用setup -> 系统服务 就可以看到全部(按tab键移动光标,enter选择光标,空格选择是否选中自启动)
2.ls -l /etc/init.d/可以看到service指令看到的服务
# 服务的运行级别
开机的流程:开机->BIOS->/boot->systemd进程->运行级别->运行级别对应的服务
服务的运行级别:
0:关机
1:单用户【可以找回丢失密码】,root权限,用于系统维护,禁止远程登录
2:多用户状态没有网络服务
3:多用户状态有网络服务,登录后进入控制台命令模式,无界面
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5,也可以指定默认运行级别,不能是6,否则一直重启,不能是0,否则一直关机。
# 在centod7以前,运行级别设置在/etc/inittab文件中,现在进行简化:
# multi-user.target:analogous to runlevel 3【类似于之前的等级3】
# graphical.target:analogous to runlevel 5【类似于等级5】
# 查看当前运行级别
systemctl get-default
# 设置默认运行级别
systemctl set-default TARGET.target【TARGET.target就是设置的运行级别,如果是3,就应该是multi-user.target,如果是5,就应该是graphical.target】
# chkconfig指令
介绍:
1.通过chkconfig命令可以给服务的各个运行级别设置自启动或关闭自启动
2.chkconfig指令管理的服务在/etc/init.d查看
3.centos7之后,使用systemctl管理服务
chkconfig基本语法
查看服务:chkconfig --list [| grep xxx]
chkconfig 服务名 --list
chkconfig --level 5 服务名 on/off # 设置5级别服务自启动或关闭自启动
# 注意:chkconfig重新设置服务自启动或自关闭,需要重启reboot机器生效
18.systemctl服务管理
# systemctl管理指令
1.基本语法:systemctl [start|stop|restart|status] 服务名
2.systemctl 指令管理的服务在/usr/lib/systemd/system查看
# systemctl设置服务的自启动状态
1.systemctl list-unit-files [ | grep xxx ] # 查看服务的开机启动状态
2.systemctl enable 服务名 # 设置服务开机启动
3.systemctl disable 服务名 # 关闭服务开机启动
4.systemctl is-enabled 服务名 # 查询某个服务是否是自启动的
# 案例:查看当前防火墙的状况,关闭防火墙和重启防火墙
systemctl status firewalld
systemctl stop firewalld
systemctl start firewalld
# 细节
1.关闭或重启防火墙之后,立即生效。【telnet ip 端口】( 测试某个端口,在windows的窗口) # 查看端口netstat -anp | more
2.这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
3.如果希望永久生效,需要使用systemctl enable/disable 服务名
# 打开或关闭指定端口
在正在的生产环境,往往需要将防火墙打开,如果将防火墙打开,外部请求数据包就不能和服务器监听端口通讯,这时就需要打开指定的端口。
# firewall指令
打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
重新载入才能生效:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=端口/协议
查看所有开放端口firewall-cmd --zone=public --list-ports
19.动态监控进程
# 介绍
top与ps命令很像,都是用来显示正在执行的进程,最大的不同之处在于top在执行一段时间可以更新正在运行的进程。是动态的。
# 语法
top [选项]
# 选项
-d 秒数 指定top命令每隔几秒更新,默认是3秒
-i 使top不显示任何闲置或僵死进程
-p ID 通过指定监控进程ID来仅仅监控某个进程的状态
# 交互操作说明
P 以CPU使用率排序,默认就是此项
M 以内存的使用率排序
N 以PID排序
q 退出top
# 应用实例
监视特定用户:
top:输入此命令,按回车键,查看执行的进程
u:然后输入“u”回车,再输入用户名
终止指定的进程:
top:输入此命令,按回车键,查看执行的进程
k:然后输入“k”回车,再输入要结束的进程ID
20.监控网络状态
# 查看系统网络情况netstat
基本语法:
netstat [选项]
选项:
-an 按一定顺序排列输出
-p 显示哪个进程在调用
案例:
查看服务名为sshd的服务信息:netstat -anp | grep sshd
21.RPM与YUM
# rpm包管理
介绍:rpm用于互联网下载包的打包以及安装工具,它包含在某些linux分发版中。它生成具有.rpm扩展名的文件。RPM是RedHat Package Manager的缩写。
# rpm简单查询指令
rpm -qa
rpm -qa | grep xxx # 查询已安装的rpm列表
# rpm包名的基本格式
一个rpm包:firefox-60.2.2-1.el7.centos.x86_64
名称:firefox
版本号:60.2.2-1
适用操作系统:el7.centos.x86_64
表示centos7.x的64位操作系统
如果是i686、i386表示32位系统,noarch表示通用
# rpm查询指令
rpm -qa 查询所安装的所有rpm软件包
rp -qa |more
rpm -qa | grep xxx
rpm -qa 软件包名 (rpm -qa firefox) 查询软件包是否安装
rpm -qi 软件包名 查询软件包信息
rpm -ql 软件包名 查询软件包中文件
rpm -qf 文件全路径名 查询文件所属的软件包
rpm -qf /etc/passwd
rpm -qf /root/install.log
# 卸载rpm包(e就是erase,擦除)
rpm -e rpm包名
# 注意
如果其他软件包依赖要卸载的软件包,,卸载时会产生错误消息。
如果要强制删除这个软件包,可以加上--nodeps(nodependencies)
rpm -e --nodeps rpm包名
# 安装rpm包
rpm -ivh rpm包全路径名称
-i install 安装
-v verbose 提示
-h hash 进度条
# yum介绍
yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
# yum的基本指令
yum list | grep xxx 查询yum服务器是否有需要安装的软件
yum install xxx 安装指定的yum包
22.日志
# 日志存放目录
大部分日志存放在:/var/log/
# 系统常用的日志 (*是需要记住的)
* /var/log/boot.log 系统启动日志
* /var/log/cron 记录与系统定时任务相关的日志
/var/log/cups/ 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/btmp 记录错误登录的日志。这个文件是二进制的,不能直接用vi查看,而是使用lastb命令查看:lastb
* /var/log/lastlog 记录系统所有用户最后一次登录时间的日志。这个文件也是二进制,使用lastlog命令查看
* /var/log/maillog 记录邮件信息的日志
* /var/log/message 记录系统重要信息的日志。如果系统出现问题,首先要自检的应该就是这个日志文件。
* /var/log/secure 记录验证和授权方面的信息,只要涉及到账户和密码的程序都会记录。比如系统的登录,ssh的登录,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。
/var/log/wtmp 永久记录所有用户的登录、注销信息。同时记录系统的启动、重启、关机事件。是二进制文件,需要使用last查看
* /var/tun/ulmp 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销而不断变化。只记录当前登录用户的信息。不能使用vi查看,而是使用w、who、users等命令查看
# 日志管理服务 rsyslogd /etc/rsyslog.conf
centos7.6日志服务是rsyslogd,centos6.x日志服务是syslogd,rsyslogd功能更强大。rsyslogd的使用、日志文件的格式,和syslogd服务兼容的。
# 查询linux中的rsyslogd服务是否启动
ps -aux | grep "rsyslogd" | grep -v “grep” (-v就是选出除了“grep”的其他数据)
# 查询 rsyslogd 服务的自启动状态
systemctl list-unit-files | grep rsyslog
# 配置文件/etc/rsyslog.conf
编辑文件时的格式为:*.* 存放日志文件 # 其中第一个*代表日志类型,第二个*代表日志级别
日志类型分为:
auth pam产生的日志
authpriv ssh、ftp等登陆信息的验证信息
corn 时间任务相关
kern 内核
lpr 打印
mail 邮件
mark(syslog)-rsyslog服务内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to unix copy主机之间相关的通信
local 1-7 自定义的日志设备
日志级别:(从上到下,级别从低到高,记录信息越来越少)
debug 有调试信息的,日志通信最多
info 一般信息日志,最常用
notice 最具有重要性的普通条件的信息
warning 警告级别
err 错误级别,阻止某个功能或者模块不能正常工作的信息
crit 严重级别,阻止某个系统或者整个软件不能正常工作的信息
alert 需要立刻修改的信息
emerg 内核崩溃等重要信息
none 什么都不记录
# /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on
# File to store the position in the journal
$IMJournalStateFile imjournal.state
#### RULES ####
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# 由日志服务记录的日志文件,包含以下4列
时间产生的时间
产生事件的服务器的主机名
产生事件的服务器名或程序名
事件的具体信息
# 日志管理应用实例
在/etc/rsyslog.conf中添加一个日志文件/var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收信息并保存。
1.添加配置
vi /etc/rsyslog.conf
*.* /var/log/hsp.log
2.添加文件
> /var/log/hsp.log
3.reboot进行重启机器
# 日志轮替
介绍:日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧的日志文件超出保存的范围之后,就会进行删除。
# 日志轮替文件命名
1.centos7使用logrotate进行日志轮替管理,要想改变日志轮替名称,通过/etc/logrotate.conf配置文件中的“dateext”参数。
2.如果配置文件中有“dateext”参数,那么日志就会用日期来作为日志文件的后缀,例如secure-20211010,这样日志文件名不会重叠,也就不需要日志文件改名,只需要指定保存日志个数,删除多余的日志文件即可。
3.如果配置文件中没有“dateext”参数,日志文件就需要改名。当第一次进行日志轮替时,当前的日志文件名secure就会自动改名为secure.1,然后新建secure日志,用来保存新的日志。当第二次进行日志轮替时,secure.1会自动改名为secure.2,当前的secure会改名为secure.1,然后也会新建secure日志文件,以此类推。
# 文件内容
[root@centOS7 log]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d # 可以给单独某个日志文件指定策略,存放在这个目录中
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
# 自定义日志轮替
logrotate配置文件
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
rotate 数字 保留的日志文件个数,0指没有备份
compress 日志轮替时,旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组
mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok 如果日志不存在,则忽略该日志的警告信息
notifempty 如果日志为空文件,则不进行日志轮替
minsize 大小 日志轮替的最小值,也就是日志达到这个最小值才会轮替,否则时间达到也不轮替
size 大小 日志只有大于指定大小才进行日志轮替,而不是按时间轮替
dateext 使用日期作为轮替文件的后缀
sharedscripts 在此关键字之后的脚本只执行一次
prerotate/endscript 在日志轮替之前执行脚本命令
postrotate/endscript在日志轮替之后执行脚本命令
# 案例
1.在/etc/logrotate.d/下创建文件hsplog
2.编写如下内容:
/var/log/hsp.log
{
missingok
daily
copytruncate
rotate 7
notifempty
}
# 日志轮替机制原理
日志之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的。
# 查看内存日志
journalctl 查看全部
journalctl -n 3 查看最新3条
journalctl --since 19:00 --until 19:10:10 查看起始时间到结束时间的日志,可加日期
journalctl -p err 报错日志
journalctl -o verbose 日志详细内容
journalctl _PID=1245 _COMM=sshd 查看包含这些参数的日志(在详细日志查看) 或者 journalctl | grep sshd
# 注意:journalctl查看的是内存日志,重启清空
23.创建自己的linux系统
1
# linux启动流程
1.首先linux通过自检,检查硬件设备有没有问题
2.如果有多块启动盘的话,需要在BIOS中选择启动磁盘
3.启动MBR中的bootloader引导程序
4.加载内核文件
5.执行所有进程的父进程,systemd
6.欢迎界面
# 加载内核文件的关键文件
1.kernel文件:vmlinuz-3.10.0-957.el7.x86_64
2.initrd文件:initramfs-3.10.0-957.el7.x86_64.img
# 制作linux思路分析
1.在现有的linux系统(centos7.6)上加一块硬盘/dev/sdb,在硬盘上分两个区,一个是/boot,一个是/,并将其格式化。需要明确的是,现在加的这个硬盘在现有的linux上是/dev/sdb,但是当东西都设置好了之后,要把这个硬盘拔除,放在新的系统上,就是/dev/sda.
2.在/dev/sdb硬盘上,里面所有文件需要拷贝进去的。
3.要把内核文件和initramfs文件也一起拷到/dev/sdb上。
4.创建一个新的linux虚拟机,将其硬盘指向我们创建的硬盘,启动即可。
24.内核源码介绍和内核升级
下载内核源码网址:https://www.kernel.org/,可以从linux0.01开始,只有1W行。
<img src=“C:\Users\asus\AppData\Roaming\Typora\typora-user-images\image-20210706103513008.png” alt=“image-20210706103513008” style=“zoom: 67%;” />
# 内核源码目录
[root@centOS7 Linux-0.0.1-source-code-master]# ll
总用量 8
drwxr-xr-x. 2 root root 34 7月 6 10:59 boot # 和系统引导相关的代码
drwxr-xr-x. 2 root root 4096 7月 6 10:59 fs # linux支持的文件系统相关代码
drwxr-xr-x. 5 root root 242 7月 6 11:00 include # 存放linux核心需要的头文件,比如asm,linux,sys
drwxr-xr-x. 2 root root 20 7月 6 11:00 init # main文件
drwxr-xr-x. 2 root root 286 7月 6 11:00 kernel # 和系统内核相关代码
drwxr-xr-x. 2 root root 186 7月 6 11:00 lib # 存放的库文件
-rw-r--r--. 1 root root 2184 7月 6 11:00 Makefile
drwxr-xr-x. 2 root root 52 7月 6 11:00 mm # 内存管理相关的代码
drwxr-xr-x. 2 root root 21 7月 6 11:00 tools # 和工具相关的代码
# init->main.c
void main(void)
{
time_init(); # 初始化运行时间
tty_init(); # tty初始化
trap_init(); # 陷阱门(硬件中断向量)
sched_init(); # 调度程序初始化
buffer_init(); # 缓冲管理初始化
hd_init(); # 硬盘初始化
sti(); # 所有初始化操作完成后,开始中断
move_to_user_mode();# 进入用户模式
if (!fork()) {
init();
}
for(;;) pause();
}
# 内核地址:https://www.kernel.org/查看
# 下载&解压最新版
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz
tar -zxvf linux-5.8.16.tar.gz
# 检测内核版本,显示可以升级的内核
uname -a 查看当前内核
yum info kernel -q
yum update kernel 更新内核
yum list kernel -q 查看以及安装的内核
25.数据备份dump和恢复restore
# 介绍
linux备份和恢复有两种方式:
1.把需要的文件(或者分区)用TAR打包就行,下次需要恢复时,再解压开覆盖即可。
2.使用dump和restore命令
# 安装dump和restore
yum -y install dump
yum -y install restore
# 看是否存在dump和restore
直接输入dump、restore
# 使用dump完成备份
--基本介绍
dump支持分卷和增量备份(增量备份是指备份上次备份后修改或增加过的文件,也称差异备份)
--dump语法说明
dump [ -cu ] [ -0123456789 ] [ -f <备份后文件名> ] [ -T <日期> ] [ 目录或文件系统 ]
dump [] -wW
-c:(c可以是0-9)
-c:创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头
-0123456789:备份的层级,0为最完整备份,会备份所有的文件。若指定0以上,则备份至上一次备份以来修改或增加的文件,到9之后,可以再次轮替
-f <备份后文件名>:指定备份后文件名
-j:调用bzlib库压缩备份文件,也就是将备份后文件压缩成bz2格式,让文件更小
-T <日期>:指定开始备份的时间和日期
-u:备份完毕后,在/etc/dumpdares中记录备份的文件系统,层级日期和时间等
-t:指定文件名,若该文件已存在备份文件中,则列出名称
-W:显示需要备份的文件及其最后一次备份的层级。时间和日期
-w:与-W类似,但仅显示需要备份的文件
# dump备份案例
1.将/boot分区下的所有内容备份到/opt/boot.bak.bz2文件中,备份层级为“0”
dump -0uj -f /opt/boot.bak0.bz2 /boot
2.在/boot分区下拷贝一个文件,备份层级为1(只备份上次使用层级0备份后发生过改变的数据)
dump -1uj -f /opt/boot.bak1.bz2 /boot
dump -W 显示需要备份的文件及其最后一次备份的层级,时间,日期
cat /etc/dumpdates 查看备份时间文件
# 注意:如果备份的是目录或文件,而不是分区,则不支持增量备份,只能使用0级别备份,即整体备份
# 数据恢复restore
基本介绍:restore命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件
# 基本语法
restore [模式选项] [选项]
模式选项(每次只能选一个,不能混用):
-C 使用对比模式,将备份的文件和已存在的文件进行对比
-i 使用交互模式,在进行还原操作时,restore指令将依序询问用户
-r 进行还原模式
-t 查看模式,看备份文件有哪些文件
选项:
-f <备份设备> 从指定的文件中读取备份数据,进行还原操作
# restore案例
1.比较备份文件和原文件的区别
mv /boot/hello.java /boot/hello100.java # 重命名文件
restore -C -f boot.bak1.bz2 #报错,找不到hello.java
2.查看模式,看备份文件中有哪些文件/数据
restore -t -f boot.bak1.bz2
3.还原模式,如果有增量备份文件,有几个必须还原几个,按顺序来还原增量备份文件
mkdir /opt/boottmp
cd /opt/boottmp
restore -r -f /opt/boot.bak1.bz2 # 恢复第一次完全备份文件
restore -r -f /opt/boot.bak2.bz2 # 恢复第二次增量备份文件
26.linux可视化管理工具(webmin和bt运维工具)
# webmin基本介绍
Webmin是功能强大的基于Web的Unix/linux系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理操作。除了各版本的linux以外还可用于:AIX,HPUX,Solaris,Unixware,Irix和FreeBSD等系统。
# webmin下载安装
1.下载
http://download.webmin.com/download/yum/ 或
wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm
2.安装
rpm -ivh webmin-1.700-1.noarch.rpm
3.重置密码
/usr/libexec/webmin/changepass.pl /etc/webmin root xqm123456
root是webmin的用户名,这里就是把webmin的root用户密码改成学xqm123456
4.修改wbemin服务的端口号(默认是10000出于安全考虑)
vim /etc/webmin/miniserv.conf # 修改端口
将port=10000修改为其他端口号,比如6666
将listen=10000改为6666
5.重启webmin
/etc/webmin/restart 重启
/etc/webmin/start 启动
/etc/webmin/stop 停止
6.防火墙开放6666端口
firewall-cmd --zone=public --add-port=6666/tcp --permanent
firewall-cmd --reload # 重启防火墙
firewall-cmd --zone=public --list-ports # 查看开放的端口号
7.登录webmin
http://centos7ip:6666 root xqm123456
# bt宝塔
介绍:bt宝塔是linux面板是提升运维效率的服务器管理软件。支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务器管理功能
# 安装和使用
1.安装
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
2.安装成功后控制台会显示登录地址,账户密码,复制浏览器打开登录
==================================================================
Congratulations! Installed successfully!
==================================================================
外网面板地址: http://58.213.111.46:8888/f4bb38ab
内网面板地址: http://192.168.49.131:8888/f4bb38ab
username: hljrmysg
password: 84c74c40
If you cannot access the panel,
release the following panel port [8888] in the security group
若无法访问面板,请检查防火墙/安全组是否有放行面板[8888]端口
==================================================================
# bt使用
可以登录终端系统,配置,快捷安装运行环境和系统工具,添加计划和任务脚本
# bt忘记用户名密码
bt default
27.linux面试题
# 题目
分析日志t.log(访问量),将各个ip地址截取,并统计ip出现的次数,并按从大到小排序
t.log:
http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html
答案:cat t.log | cut -d '/' -f 3 | sort | uniq -c | sort -nr
# 解题步骤
1.截取出ip地址,cut类似于java中split,cut -d '/'代表以左撇来分割,-f 3是指截取第三段的内容
[root@centOS7 1]# cat t.txt | cut -d '/' -f 3
192.168.200.10
192.168.200.10
192.168.200.20
192.168.200.30
192.168.200.40
192.168.200.30
192.168.200.10
2.进行排序
[root@centOS7 1]# cat t.txt | cut -d '/' -f 3 | sort
192.168.200.10
192.168.200.10
192.168.200.10
192.168.200.20
192.168.200.30
192.168.200.30
192.168.200.40
3.统计
[root@centOS7 1]# cat t.txt | cut -d '/' -f 3 | sort | uniq -c
3 192.168.200.10
1 192.168.200.20
2 192.168.200.30
1 192.168.200.40
4.从大到小统计排序
[root@centOS7 1]# cat t.txt | cut -d '/' -f 3 | sort | uniq -c | sort -nr
3 192.168.200.10
2 192.168.200.30
1 192.168.200.40
1 192.168.200.20
# 题目
统计连接到服务器的各个ip情况,并按连接数从大到小排序
netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -nr
# 解题步骤print
1.列出所有的网络状态
netstat -an
2.找出连接的客户端的ip
netstat -an | grep ESTABLISHED
3.按空格进行分割,找出第五部分
[root@centOS7 1]# netstat -an | grep ESTABLISHED | awk -F " " '{print $5}'
192.168.49.1:58894
4.继续分割,找出ip
[root@centOS7 1]# netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | awk -F ":" '{print $1}'
192.168.49.1
5.排序
[root@centOS7 1]# netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort
192.168.49.1
6.统计
[root@centOS7 1]# netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c
1 192.168.49.1
7.从大到小排序
[root@centOS7 1]# netstat -an | grep ESTABLISHED | awk -F " " '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -nr
1 192.168.49.1
# 题目
如果忘记了mysql5.7数据库的root用户密码,如何找回?
# 解题
1.修改文件
vim /etc/my.cnf
加入一句话:skip-grant-tables
2.重启
service mysqld restart
3.进入mysql
mysql -u root -p
输入空密码
4.修改密码
show dababases;
找到mysql数据库
use mysql;
show tables;
找到authentication_string字段
update user set authentication_string=password("xqm123456") where user='root';
刷新权限
flush privileges;
退出exit
打开/etc/my.cnf文件,注销skip-grant-tables
重启mysql服务 service mysqld restart
# 题目
写出指令:统计ip访问的情况,要求分析nginx访问日志(access.log),找出访问页面数量在前2位的ip
192.168.130.21 aaa.html
192.168.130.20 aaa.html
192.168.130.20 aaa.html
192.168.130.20 aaa.html
192.168.130.23 aaa.html
192.168.130.20 aaa.html
192.168.130.25 aaa.html
192.168.130.20 aaa.html
192.168.130.20 aaa.html
192.168.130.25 aaa.html
192.168.130.20 aaa.html
# 答案
[root@centOS7 mianshi]# cat access.log | awk -F " " '{print $1}' | sort | uniq -c | sort -nr | awk -F " " '{print $2}' | head -2
192.168.130.20
192.168.130.25
# 题目
使用tcpdump监听本机,将来自ip 192.168。200.1,tcp端口为22的数据,保存输出到tcpdump.log,用作将来数据分析。
# 答案
tcpdump -i ens33 host 192.168.49.131 and port 22 >> /usr/local/study/mianshi/tcpdump.log
# 题目
常用的nginx模块,用来做什么?
# 答案
rewrite模块 实现重写功能
access模块 来源控制
ssl模块 安全加密
ngx_http_gzip_module 网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module模块实现定义后端服务器列表
ngx_cache_purge 实现缓存清除功能
# 题目
如果你是系统管理员,在进行linux系统权限划分时,应考虑哪些元素?
# 回答
1.描述权限的划分
文件的权限含义:r文件内容查看权限,w文件内容编辑权限(但是不能删除文件本身),x文件执行权限
目录的权限含义:r目录内文件列表查看权限,w目录内文件的增删、复制、剪切权限(touch,rm,cp,mv),x能否进入目录的权限
权限修改:
chmod [augo] [+-=] [rwx] filename
chmod 644 filename
-R 权限递归选项
2.根据自己实际经验考虑因素
注意权限分离,比如linux权限和数据库权限不要在一个部门
权限最小原则,满足的情况下最少优先
减少使用root用户,尽量用普通用户+sudo提权进行日常操作
重要的系统文件使用chattr锁定,/etc/passsword,/etc/shadow,/etc/sudoers,etc/fstab,(加锁:chattr +i 文件名;解锁:chattr -i 文件名)
使用SUID,SGID,Sticky设置特殊权限
利用工具chkrootkit或rootkit hunter检测rootkit脚本(wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz)
利用工具Tripwire检测文件系统的完整性
# 权限操作思考题
1.用户tom对目录/home/test有执行和读写权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
能读,不能修改,能删除
2.用户tom对目录/home/test只有读写权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
不能读,不能修改,不能删除(因为没有执行权限,无法进入目录)
3.用户tom对目录/home/test只有执行权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
能读,不能修改,不能删除
4.用户tom对目录/home/test只有执行和写权限,/home/test/hello.java是只读文件,问tom对hello.java文件能读吗?能修改吗?能删除吗?
能读,不能修改,能删除
# 说明centos7启动流程,并说明和centos6相同和不同的地方
# E:\文件\学习编程笔记\韩顺平linux\centos7启动流程分析
# 列举linux高级命令,至少6个
netstat 网络状态监控
top 系统运行状态
lsblk 查看硬盘分区
ps -aux 查看运行进程
chkconfig 查看服务启动状态
systemctl 管理系统服务器
# linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么?
内存 top
io读写 iotop (要先安装yum install iotop)
磁盘存储 df -lh
端口占用 netstat -tunlp
进程查看 ps -aux
# 使用linux命令计算t2.txt第二列的和并输出?
张三 40
李四 50
王五 60
cat t2.txt | awk -F " " '{sum+=$2} END {print sum} '
# shell脚本如何检查一个文件是否存在?并给出提示
if [ -f 文件名 ]
then echo "存在"
else echo "不存在"
fi
# 用shell写一个脚本,对文本3.txt中无序的一列数字排序,并将总和输出
9 8 7 6 5 4 3 2 10
sort -n 3.txt | awk '{sum+=$0;print $0} END {print sum}
# 用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符“cat”的文件名称
grep -r "cat" /home | cut -d ":" -f 1
# 请写出统计/home目录下所有文件个数和所有文件总行数的指令
find /usr/local/study/mianshi/ -name "*.*" | wc -l
find /usr/local/study/mianshi/ -name "*.*" | xargs wc -l
# 列出你了解的web服务器负载架构
nginx
haproxy
keepalived
LVS
# 每天晚上10点30分,打包站点目录/var/spool/mail备份到/home目录下(每次备份按时间生成不同的备份包)
1.建立shell文件
vim mail.sh
#! /bin/bash
cd /var/spool/ && /bin/tar zcf /home/mail-`date Y-%m-%d_%H%M%S`.tar.gz mail/
2.设置定时任务
30 22 * * * /root/mail.sh
# 优化linxu系统
1.不用root,使用sudo提示权限
2.定时的自动更新服务器时间,使用nptdate np1.aliyun.com,让croud定时更新
3.配置yum源,指向国内镜像(清华,163)
4.配置合理的防火墙策略,打开必要的端口号,关闭不必要的端口
5.打开最大文件数,调整文件的描述数量.vim /etc/profile ulimit -SHN 65535
6.配置合理的监控策略
7.配置合理的系统重要文件备份策略
8.对安装的软件进行优化
9.对内核参数进行优化。/etc/sysctl.conf
10.锁定一些重要的文件
28.抓取僵尸进程并杀死进程
# 1.使用top命令查看有没有僵尸进程
# top 当前时间 系统已运行时间 当前登录的用户数 系统在1分钟、5分钟、15分钟的负载
top - 09:40:17 up 34 min, 2 users, load average: 0.00, 0.02, 0.09
Tasks: 276 total, 1 running, 275 sleeping, 0 stopped, 0 zombie # zombie就是显示僵尸进程数
%Cpu(s): 0.1 us, 0.4 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867048 total, 557624 free, 524516 used, 784908 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1174580 avail Mem
# 2.定位僵尸进程以及父进程
ps -a -ostat,ppid,pid,cmd | grep -e '^[Zz]'
-a 参数列出所有进程
-o 自定义输出字段,stat 状态, ppid 父进程id,pid 进程id,cmd 命令
状态为Z或z的为僵尸进程,通过管道过滤出来
# 3.杀死进程
kill -9 ppid
kill -hup ppid
29.top命令
[root@centOS7 sysconfig]# top
# top- 当前时间 up 系统已运行时间, 当前登录的用户数 ,系统在1分钟、5分钟、15分钟的负载
top - 09:40:17 up 34 min, 2 users, load average: 0.00, 0.02, 0.09
# 进程信息 Tasks:进程总数,运行中的进程数,睡眠中的进程数,停止的进程数,僵尸进程数
Tasks: 276 total, 1 running, 275 sleeping, 0 stopped, 0 zombie
# CPU使用情况
# us:用户空间占用CPU百分比
# sy:内核空间占用CPU百分比
# ni:改变过优先级的进程占用CPU的百分比
# id:空闲CPU的百分比
# wa:IO等待进程占用CPU百分比
# hi:硬中断占用CPU的百分比
# si:软中断占用CPU的百分比
# st:为0表示流畅,CPU资源足够完全不需要等待,当数值增加时,表示服务器资源不够,母机可能超售。你的虚拟VPS需要等待分配物理CPU的等待时间的百分比,你排队等候分配资源的百分比。
%Cpu(s): 0.1 us, 0.4 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# 物理内存使用情况 total:总内存大小,free 未使用内存大小,used:已使用的内存大小,buff/cache:内核缓冲区
KiB Mem : 1867048 total, 557624 free, 524516 used, 784908 buff/cache
# 虚拟内存使用情况 total:总内存大小,free 未使用虚拟内存大小,used:已使用的虚拟内存大小
KiB Swap: 2097148 total, 2097148 free, 0 used. 1174580 avail Mem
# PID:进程ID USER:进程所有者的用户名 PR:进程优先级
# NI:进程的nice值,负数意味着更高的优先级,正数意味着更低的优先级,0意味着没影响
# VIRT:进程使用的总的虚拟内存,单位kb
# RES:进程使用的、未被换出的物理内存大小,单位kb
# SHR:共享内存大小
# S:状态 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
# %CPU:CPU占用百分比 %MEM:物理内存占用百分比
# TIME+:使用CPU总时间 COMMAND:进程关联的程序的名称
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
887 root 20 0 324788 7048 5528 S 0.3 0.4 0:05.57 vmtoolsd 2420 root 20 0 164052 6564 4788 S 0.3 0.4 0:15.71 sshd
30.centos根目录进行扩容
# 查看文件信息
[root@centOS7 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 10G 8.1G 2.0G 81% /
/dev/sdb1 991M 2.6M 922M 1% /newdisk
/dev/sda1 197M 170M 27M 87% /boot
tmpfs 378M 8.0K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
# 添加磁盘分区
[root@centOS7 ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 38770.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n # 输入n,进行磁盘分区,下面一路enter,直到出现 Last cylinder or +size or +sizeM or +sizeK
Command action
e extended
p primary partition (1-4)
Selected partition 4
First cylinder (8669-38770, default 8669):
Using default value 8669
Last cylinder or +size or +sizeM or +sizeK (8669-38770, default 38770): +35G # 输入要扩容的容量
Command (m for help): w # 最后要写入进去
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16:
Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@centOS7 ~]# partprobe # 使用工具partprobe让kernel读取分区信息,这样不用重启机器
# 查看挂载信息
[root@centOS7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 12G 0 part
│ ├─centos-root 253:0 0 10G 0 lvm /
│ └─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─sda3 8:3 0 35G 0 part # 发现已经加入进来了
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part /newdisk
sr0 11:0 1 4.2G 0 rom
[root@centOS7 ~]# lvm # 逻辑卷
lvm> pvcreate /dev/sda3 # 创建物理卷
Physical volume "/dev/sda3" successfully created.
lvm> pvdisplay # 展示物理卷
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <12.01 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 3073
Free PE 1
Allocated PE 3072
PV UUID 5U1UvI-Zwud-evVu-dcTH-PJ3T-1j9c-ZnBhkI
"/dev/sda3" is a new physical volume of "35.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sda3
VG Name
PV Size 35.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 1FsfX0-LtGf-kSAE-SCOX-JGgd-6ahB-3KdbA2
lvm> vgdisplay # 查看卷组
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 12.00 GiB
PE Size 4.00 MiB
Total PE 3073
Alloc PE / Size 3072 / 12.00 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID SFxELH-dD9N-Vkpq-r3qM-jNdw-1xcC-LOau3i
lvm> vgextend centos /dev/sda3 # 将新的物理卷加入卷组
Volume group "centos" successfully extended
lvm> vgdisplay # 再次查看物理卷
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 47.00 GiB
PE Size 4.00 MiB
Total PE 12032
Alloc PE / Size 3072 / 12.00 GiB
Free PE / Size 8960 / 35.00 GiB # 可以看到卷组的free 增加了
VG UUID SFxELH-dD9N-Vkpq-r3qM-jNdw-1xcC-LOau3i
lvm> lvextend -l +100%FREE /dev/centos/root # 将卷组的free空间添加到逻辑卷中
Size of logical volume centos/root changed from 10.00 GiB (2560 extents) to 45.00 GiB (11520 extents).
Logical volume centos/root successfully resized.
lvm> exit
Exiting.
[root@centOS7 ~]# xfs_growfs /dev/centos/root # 将逻辑卷同步到文件系统,实现根目录的扩容
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 11796480
[root@centOS7 ~]# df -h # 查看挂载的情况
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 45G 8.1G 37G 18% /
/dev/sdb1 991M 2.6M 922M 1% /newdisk
/dev/sda1 197M 170M 27M 87% /boot
tmpfs 378M 12K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
[root@centOS7 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 12G 0 part
│ ├─centos-root 253:0 0 45G 0 lvm /
│ └─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─sda3 8:3 0 35G 0 part
└─centos-root 253:0 0 45G 0 lvm /
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part /newdisk
sr0 11:0 1 4.2G 0 rom
31.netstat
netstat监听端口
netstat -tunlp
-t 显示tcp端口
-u 显示udp端口
-n 显示数字地址而不是解析主机
-l 仅显示监听端口
-p 显示侦听器进程的PID和名称
32.ss
ss和netstat相似,监听端口,它缺少netstat的某些功能,但是公开了更多的TCP状态
ss -tunlp
-t 显示tcp端口
-u 显示udp端口
-n 显示数字地址而不是解析主机
-l 仅显示监听端口
-p 显示侦听器进程的PID和名称
33.lsof
lsof -nP -iTCP -sTCP:LISTEN
-n-不要将端口号转换为端口名称。
-p -不解析主机名,显示数字地址。
-iTCP -sTCP:LISTEN -仅显示TCP状态为LISTEN的网络文件
查找正在侦听特定端口(例如端口3306)的进程:
lsof -nP -iTCP:3306 -sTCP:LISTEN
34.firewalld
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --list-ports
firewall-cmd --reload
systemctl start firewalld
systemctl stop firewalld
35.ln软链接和硬链接
硬链接:只能在同一文件系统创建硬链接,相当于容器的挂载,一个改变,其他链接到同一文件的也会相应改变,不能链接目录,只能文件
ln [选项] 源文件(已存在的文件) 目标文件(要创建的文件)
删除源文件的时候,目标文件还会存在并且内存也存在
软链接:可以在不同文件系统中创建,可以链接目录和文件
ln -s 源文件 目标文件
当删除源文件的时候。目标文件也将不能访问,必须全部删除目标文件,目标文件成为一个死链接
创建软链接的时候要使用绝对路径,否则有时候会报错
36.centos7配置swap交换内存分区
1.检查是否有swap的信息,或者配置过swap
swapon -s
free -m # 检查剩余多少内存空间
du -sh # 检查存储空间用了多少
df -h # 查看剩余多少空间
2.创建swap文件
# 应该创建多大的空间,一般来说是机子的内存两倍
物理内存 交换分区(SWAP)
<= 4G 至少4G
4~16G 至少8G
16G~64G 至少16G
64G~256G 至少32G
# 创建swap文件, 这里是4G,看个人情况修改,fallocate创建一个预分配指定大小空间的文件
fallocate -l 8G /swapfile
# 查看swap文件的权限
[root@VM-16-17-centos ~]# ls -lh /swapfile
-rw-r--r-- 1 root root .0G 1月 21 13:30 /swapfile
# 更改swap文件的权限,只能root访问修改
chmod 600 /swapfile
# 然后检查是否设置完成
[root@VM-16-17-centos ~]# ls -lh /swapfile
-rw------- 1 root root 4.0G 1月 21 13:30 /swapfile
# 使swap文件生效
[root@VM-16-17-centos ~]# mkswap /swapfile
正在设置交换空间版本 1,大小 = 4194300 KiB
无标签,UUID=dbeac914-6070-443d-954c-7acf9af074f4
# 开始使用swap
[root@VM-16-17-centos ~]# swapon /swapfile
# 查看swap文件
[root@VM-16-17-centos ~]# swapon -s
文件名 类型 大小 已用 权限
/swapfile file 4194300 0 -2
# 使swap文件永久生效,这个文件在重启之后就直接无效
vim /etc/fstab
# 按 i 进入输入模式,在文件末尾加入下面这行内容。
/swapfile swap swap sw 0 0
#swappiness参数决定了系统将数据从内存交换到swap空间的频率。该数值越接近于0,系统越倾向于不进行swap,最大限度使用物理内存。数值越接近100,越倾向于使用swap,而过多的使用swap可能导致服务器运行效率缓慢。ubuntu系统的默认推荐值是60,这里我为了保证服务器运行效率,建议设置为10。
cat /proc/sys/vm/swappiness # 查看当前的swappiness
sudo sysctl vm.swappiness=10 #修改swappiness为10
编辑sysctl配置文件,使其永久生效
sudo vim /etc/sysctl.conf
按 i 进入输入模式,将以下内容粘贴到文件末尾:
vm.swappiness = 10
按esc退出输入模式,输入 :wq 保存退出。
37.history
# 查看history文件所在位置
echo $HISTFILE
# 查看所有命令
history
# 查看最后10条命令
history 10
# 清空所有命令
history -c
# 恢复所有命令
history -r ~/.bash_history
du -sh