不要图形化默认使用命令行界面
文本模式 级别3
[root@7-1 ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@7-1 ~]# systemctl get-default
multi-user.target
[root@7-1 ~]#
图形模式 级别5
[root@7-2 ~]# systemctl set-default graphical.target
[root@7-2 ~]# systemctl get-default
[root@localhost ~]# ip addr s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:94:f0:29 brd ff:ff:ff:ff:ff:ff
inet 192.168.43.130/24 brd 192.168.43.255 scope global noprefixroute dynamic ens33
valid_lft 1334sec preferred_lft 1334sec
inet6 fe80::4d22:7e8d:bda9:5494/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:6c:be:0e brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:6c:be:0e brd ff:ff:ff:ff:ff:ff
nmcli connection up ens33
或者使用 修改底层配置文件
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet #网卡类型:为以太网
PROXY_ METHOD=none #代理方式:关闭状态
BROWSER_ ONLY=no #只是浏览器:否
BOOTPROTO=dhcp #网卡协议DHCP动态主机配置协议
DEFROUTE=yes #默认路由:是
IPV4_ FAILURE_ FATAL=no #否开启IPV4致命错误检测:否
PV6INIT=yes # IPV6是否自动初始化:是
IPV6_ AUTOCONF="yes"IPV6是否自动配置:是
IPV6_ ADDR _GEN _MODE=stable- privacy # IPV6地址生成模型
stable-privacy是一种生成IPV6的策略
NAME=ens33 #网卡名字(与DEVICE- 致)
UUID=6ac17c2b-473e- -4894-811b-4940ee7bf455#唯一标识码
DEVICE=ens33#网卡设备
ONBOOT=yes #是否激活网卡
#IPADDR=192.168.43.128#ip地址(static设置 )
#NETMASK=255.255.255.0#子网掩码
#GATEWAY= 192.168.43.1#网关
#DNS1=114.114.114.114#dns地址解析
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=Permissive 默认状态enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
ctrl+alt+F2-F6 tty2-6
alt+F1
shift+ctrl + | 放大 |
---|---|
shift+ctrl - | 缩小 |
alt F4 | 关闭终端 |
shift+ctrl + t | 开启终端标签 |
alt+n | 切换标签 |
shift+ctrl w | 关闭标签 |
shift+ctrl c | 复制 |
shift+ctrl v | 粘贴 |
ls list
cp copy
mv move
cd == change directory
mkdir == make directory
touch
命令组成
命令 [-选项(参数)] [对象(file)]
ls
ls -l
ls -l file.txt
基本命令:
ls -l 显示文件详细信息
-a 显示所有文件(包括隐藏文件)
.filename ----->隐藏文件
. 当前目录
.. 上层目录
-A 显示所有文件(包括隐藏文件,不包含.和..)
创建文件在文件之前加上.创建的就是隐藏文件
. 当前目录
.. 上层目录
-d 显示目录信息
ls -ld /root
-h 按最大单位显示:
-t 按时间排序:
-r 逆序输出:
-S 按大小排序:
-R 递归显示:
[root@localhost ~]# ls -l
total 8
-rw-------. 1 root root 1775 Oct 13 2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Desktop
drwxr-xr-x. 2 root root 6 Oct 13 2020 Documents
drwxr-xr-x. 2 root root 6 Oct 13 2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13 2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Music
drwxr-xr-x. 2 root root 6 Oct 13 2020 Pictures
drwxr-xr-x. 2 root root 6 Oct 13 2020 Public
drwxr-xr-x. 2 root root 6 Oct 13 2020 Templates
drwxr-xr-x. 2 root root 6 Oct 13 2020 Videos
第一段: 文件类型
第二段: 基本权限
第三段: 是否在开启selinux的状态创建
第四段: 硬链接数
第五段: 拥有者
第六段: 所属组
第七段: 大小(字节)
第八段: 最后一次修改时间
第九段: 文件名
LINUX有四种基本文件系统类型:普通文件、目录文件、连接文件和特殊文件,可用file命令来识别。
普通文件:如文本文件、C语言源代码、SHELL脚本、二进制的可执行文件等,可用cat、less、more、vi、emacs来察看内容,用mv来改名。
目录文件:包括文件名、子目录名及其指针。它是LINUX储存文件名的唯一地方,可用ls列出目录文件。
连接文件:是指向同一索引节点的那些目录条目。用ls来查看是,连接文件的标志用l开头,而文件面后以"->"指向所连接的文件。
特殊文件:LINUX的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,则一类文件就是特殊文件,常放在/dev目录内。例如,软驱A称为/dev/fd0。LINUX无C:的概念,而是用/dev/had来自第一硬盘。
- 普通文件 file
d 目录文件 directory
c 字符设备文件 character
b 块设备文件 block
s 套接字文件 socket
p 管道文件 pipe
l 符号链接文件(软链接) symbolic
1. ls --help
2. info ls pinfo
3. man ls
man 1 用户命令 *
man 2 系统调用
man 3 库调用
man 4 特殊文件
man 5 配置文件 *
man 6 游戏
man 7 杂项
man 8 系统命令 *
上述后面带有*号的为要点。
man -f passwd 显示passwd 在那些章节有描述
man -k pass 模糊查询
pwd 查看当前家目录位置
cd 切换目录
cd /usr/local
cd . 刷新目录
cd .. 回到上层目录
cd ../.. 上层的上层
cd ~ 和 cd 回到家目录
cd - 上次工作目录
绝对路径: 从/开始的路径 / 表示根
相对路径: 从当前目录开始路径
linux下的文件结构,每个文件夹作用
/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公用的临时文件存储点
/root 系统管理员的主目录(呵呵,特权阶级)
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:
/usr/x11r6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库
通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要
经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。
除了可能的一个叫/vmlinuz标准的系统引导映像之外,根目录一般不含任何文件。所有
其他文件在根文件系统的子目录中。
1. /bin目录
/ bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些
命令都是二进制文件的可执行程序( bin是binary - -二进制的简称),多是系统中重要的系统文件。
2. /sbin目录
/ sbin目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使
用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。
3. /etc目录
/ etc目录存放着各种系统配置文件,其中包括了用户信息文件/ etc / passwd,系统初始化文件/etc/rc等。linux正是*这些文件才得以正常地运行。
4. /root目录
/root 目录是超级用户的目录。
5. /lib目录
/lib目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文
件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副
本,故可以使得可执行文件变得更小,节省空间。
6. /lib/modules 目录
/lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引
导系统所需的模块(例如网络和文件系统驱动)。
7. /dev目录
/dev目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用
户可以通过访问/ dev / mouse来访问鼠标的输入,就像访问其他文件一样。
8. /tmp目录
/tmp 目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用
/ var / tmp来代替/tmp ,因为前者可能拥有一个更大的磁盘空间。
9. /boot目录
/ boot目录存放引导加载器(bootstrap loader)使用的文件,如lilo,核心映像也经常放在这里, 而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的 文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在ide硬盘的前1024柱面内。
10. /mnt目录
/ mnt目录是系统管理员临时安装( mount )文件系统的安装点。程序并不自动支持安装到
/mnt 。/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用m s d o s文件系统的软驱, 而/mnt/exta 可能是使用ext2文件系统的软驱,/mnt/cdrom 光驱等等。
11. /proc, /usr,/var,/home目录
其他文件系统的安装点。
下面详细介绍;
/etc文件系统
/etc 目录包含各种系统配置文件,下面说明其中的一些。其他的你应该知道它们属于哪个
程序,并阅读该程序的m a n页。许多网络配置文件也在/etc 中。
1. /etc/rc或/etc/rc.d或/etc/rc?.d
启动、或改变运行级时运行的脚本或脚本的目录。
2. /etc/passwd
用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其
他信息。
3. /etc/fdprm
软盘参数表,用以说明不同的软盘格式。可用setfdprm 进行设置。更多的信息见setfdp rm 的帮助页。
4. /etc/fstab
指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的swap区的信息。
5. /etc/group
类似/etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。
6. /etc/inittab
init 的配置文件。
7. /etc/issue
包括用户在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。具体内容由系统管理员确定。
8. /etc/magic
“file”的配置文件。包含不同文件格式的说明,“file”基于它猜测文件类型。
9. /etc/motd
m o t d是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。
常用于通告信息,如计划关机时间的警告等。
10. /etc/mtab
当前安装的文件系统列表。由脚本( scritp )初始化,并由mount 命令自动更新。当需要一 个当前安装的文件系统的列表时使用(例如df 命令)。
11. /etc/shadow
在安装了影子( s h a d o w )口令软件的系统上的影子口令文件。影子口令文件将/etc / passwd 文件中的加密口令移动到/ etc / shadow中,而后者只对超级用户( root )可读。这使破译口令更困难,以此增加系统的安全性。
12. /etc/login.defs
login命令的配置文件。
13. /etc/printcap
类似/etc/termcap ,但针对打印机。语法不同。
14. /etc/profile 、/ etc / csh.login、/etc/csh.cshrc
登录或启动时bourne或c shells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。
15. /etc/securetty
确认安全终端,即哪个终端允许超级用户( root )登录。一般只列出虚拟控制台,这样就不
可能(至少很困难)通过调制解调器( modem )或网络闯入系统并得到超级用户特权。
16. /etc/shells
列出可以使用的shell。chsh 命令允许用户在本文件指定范围内改变登录的s h e l l。提供一 台机器f t p服务的服务进程ftpd 检查用户shell是否列在/etc/shells 文件中,如果不是,将不允 许该用户登录。
17. /etc/termcap
终端性能数据库。说明不同的终端用什么“转义序列”控制。写程序时不直接输出转义
序列(这样只能工作于特定品牌的终端),而是从/etc/termcap 中查找要做的工作的正确序列。
这样,多数的程序可以在多数终端上运行。
/dev文件系统
/dev 目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明。
设备文件在安装时由系统产生,以后可以用/dev/makedev 描述。/ dev / make dev.local 是系统管理员为本地设备文件(或连接)写的描述文稿(即如一些非标准设备驱动不是标准 makedev 的一部分)。下面简要介绍/dev下一些常用文件。
1. /dev/console
系统控制台,也就是直接和系统连接的监视器。
2. /dev/hd
ide硬盘驱动程序接口。如: / dev / hda指的是第一个硬盘, had1则是指/ dev / hda的第一个
分区。如系统中有其他的硬盘,则依次为/ dev / hdb、/ dev / hdc、. . . . . .;如有多个分区则依次为 hda1、hda2 . . . . . .
3. /dev/sd
scsi磁盘驱动程序接口。如有系统有scsi硬盘,就不会访问/ dev / had,而会访问/ dev / sda。
4. /dev/fd
软驱设备驱动程序。如: / dev / fd0系统的第一个软盘,也就是通常所说的a:盘,
/ dev/ fd1指第二个软盘,. . . . . .而/ dev / fd1h 1 4 4 0则表示访问驱动器1中的4 . 5高密盘。
5. /dev/st
scsi磁带驱动器驱动程序。
6. /dev/tty
提供虚拟控制台支持。如: / dev/tty 1指的是系统的第一个虚拟控制台, /dev/tty2是系统 的第二个虚拟控制台。
7. /dev/pty
提供远程登陆伪终端支持。在进行telnet登录时就要用到/dev/pty设备。
8. /dev/ttys
计算机串行接口,对于dos来说就是“ com1”口。
9. /dev/cua
计算机串行接口,与调制解调器一起使用的设备。
10. /dev/null
“黑洞”,所有写入该设备的信息都将消失。例如:当想要将屏幕上的输出信息隐藏起来
时,只要将输出信息输入到/dev/ null中即可。
/usr文件系统
/usr 是个很重要的目录,通常这一文件系统很大,因为所有程序安装在这里。/usr 里的
所有文件一般来自l i n u x发行版( distribution );本地安装的程序和其他东西在/usr/local 下,因为这样可以在升级新版系统或新发行版时无须重新安装全部程序。/usr 目录下的许多内容是
可选的,但这些功能会使用户使用系统更加有效。/ u s r可容纳许多大型的软件包和它们的配置 文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。
1. /usr/x11r6
包含x window系统的所有可执行程序、配置文件和支持文件。为简化x的开发和安装,
x的文件没有集成到系统中。x window系统是一个功能强大的图形环境,提供了大量的图形
工具程序。用户如果对microsoft wi n d o w s或machintosh比较熟悉的话,就不会对x window系统感到束手无策了。
2. /usr/x386
类似/ usr / x 11r6 ,但是是专门给x 11 release 5的。
3. /usr/bin
集中了几乎所有用户命令,是系统的软件库。另有些命令在/bin 或/usr/local/bin 中。
4. /usr/sbin
包括了根文件系统不必要的系统管理命令,例如多数服务程序。
5. /usr/man /usr/info /usr/doc
这些目录包含所有手册页、gnu信息文档和各种其他文档文件。每个联机手册的“节”
都有两个子目录。例如: /usr/man/man1中包含联机手册第一节的源码(没有格式化的原始文件),/usr/man/cat1包含第一节已格式化的内容。l联机手册分为以下九节:内部命令、系统调
用、库函数、设备、文件格式、游戏、宏软件包、系统管理和核心程序。
6. /usr/include
包含了c语言的头文件,这些文件多以. h结尾,用来描述c语言程序中用到的数据结构、
子过程和常量。为了保持一致性,这实际上应该放在/usr/lib 下,但习惯上一直沿用了这个名
字。
7. /usr/lib
包含了程序或子系统的不变的数据文件,包括一些site - wide配置文件。名字lib来源于库
(library); 编程的原始库也存在/usr/lib 里。当编译程序时,程序便会和其中的库进行连接。也
有许多程序把配置文件存入其中。
8. /usr/local
本地安装的软件和其他文件放在这里。这与/usr很相似。用户可能会在这发现一些比较大
的软件包,如tex、emacs等。
/var文件系统
/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化
或扩充的。原来/var目录中有些内容是在/usr中的,但为了保持/usr目录的相对稳定,就把那
些需要经常改变的目录放到/var中了。每个系统是特定的,即不通过网络与其他计算机共享。
下面列出一些重要的目录(一些不太重要的目录省略了)。
1. /var/catman
包括了格式化过的帮助( man )页。帮助页的源文件一般存在/usr/man/man中;有些man页
可能有预格式化的版本,存在/usr/man/ cat中。而其他的man页在第一次看时都需要格式化,
格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了。
(/var/catman 经常被清除,就像清除临时目录一样。)
2. /var/lib
存放系统正常运行时要改变的文件。
3. /var/local
存放/usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,
即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。
4. /var/lock
锁定文件。许多程序遵循在/var/lock 中产生一个锁定文件的约定,以用来支持他们正在
使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文
件。
5. /var/log
各种程序的日志( log )文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注
销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不
确定地增长,应该定期清除。
6. /var/run
保存在下一次系统引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登
录的用户的信息。
7. /var/spool
放置“假脱机( spool )”程序的目录,如mail、news、打印队列和其他队列工作的目录。每
个不同的spool在/var/spool 下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。
8. /var/tmp
比/tmp 允许更大的或需要存在较长时间的临时文件。
注意系统管理员可能不允许/var/tmp 有很旧的文件。
/proc文件系统
/proc 文件系统是一个伪的文件系统,就是说它是一个实际上不存在的目录,因而这是一
个非常特殊的目录。它并不存在于某个磁盘上,而是由核心在内存中产生。这个目录用于提
供关于系统的信息。下面说明一些最重要的文件和目录(/proc 文件系统在proc man页中有更详
细的说明)。
1. /proc/x
关于进程x的信息目录,这一x是这一进程的标识号。每个进程在/proc 下有一个名为自
己进程号的目录。
2. /proc/cpuinfo
存放处理器( c p u )的信息,如cpu的类型、制造商、型号和性能等。
3. /proc/devices
当前运行的核心配置的设备驱动的列表。
4. /proc/dma
显示当前使用的d m a通道。
5. /proc/filesystems
核心配置的文件系统信息。
6. /proc/interrupts
显示被占用的中断信息和占用者的信息,以及被占用的数量。
7. /proc/ioports
当前使用的i / o端口。
8. /proc/kcore
系统物理内存映像。与物理内存大小完全一样,然而实际上没有占用这么多内存;它仅
仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则/proc 下没有任何
东西占用任何磁盘空间。)
9. /proc/kmsg
核心输出的消息。也会被送到syslog。
10. /proc/ksyms
核心符号表。
11. /proc/loadavg
系统“平均负载”; 3个没有意义的指示器指出系统当前的工作量。
12. /proc/meminfo
各种存储器使用信息,包括物理内存和交换分区( swap )。
13. /proc/modules
存放当前加载了哪些核心模块信息。
14. /proc/net
网络协议状态信息。
15. /proc/self
存放到查看/proc 的程序的进程目录的符号连接。当2个进程查看/proc 时,这将会是不同
的连接。这主要便于程序得到它自己的进程目录。
16. /proc/stat
系统的不同状态,例如,系统启动后页面发生错误的次数。
17. /proc/uptime
系统启动的时间长度。
18. /proc/version
核心版本。
bin 用户可执行目录(命令 root 和 普通)
sbin 系统可执行目录(命令 root)
lib 库文件目录(32位)
lib64 库文件目录(64位)
dev 设备文件目录
usr 应用程序目录
var 服务器数据目录(数据 日志)
srv 服务器数据目录
etc 配置文件目录
tmp 临时文件目录
boot 服务器启动目录(内核和启动文件)
media 媒介目录(u盘,cdrom)
mnt 其他挂在点
opt 第三方应用程序目录
proc 伪文件系统(内核参数,进程信息,硬件信息)
sys 伪文件系统(内核参数,进程信息,硬件信息)
run 进程锁目录
root root管理员家目录
home 普通用户家目录
查看文件内容:
1. more /root/anaconda-ks.cfg
显示文件的百分比
空格 下一页
b 上一页
回车 下一行
2. less /root/anaconda-ks.cfg
上键 上一行
下键 下一行
pageup 上一页
pagedown 下一页
3. head /root/anaconda-ks.cfg
默认文件前10行
查看文件前20行
head -n 20 /root/anaconda-ks.cfg
查看文件前20行
head -20 /root/anaconda-ks.cfg
4. tail /root/anaconda-ks.cfg
默认文件后10行
查看文件后20行
tail -n 20 /root/anaconda-ks.cfg
查看文件后20行
tail -20 /root/anaconda-ks.cfg
tail -f /var/log/messages 动态监控日志文件
5. 遍历一个文件
cat /root/anaconda-ks.cfg
添加-n参数则遍历整个文件将数据添加行号显示
cat -n /root/anaconda-ks.cfg
cat -n /root/anaconda-ks.cfg |less
查看第25行 /etc/passwd
[root@localhost ~]# head -25 /etc/passwd | tail -1
chrony:x:993:990::/var/lib/chrony:/sbin/nologin
[root@localhost ~]#
创建文件
touch aa.txt
touch cc.txt tt.txt
touch abc{1..5}.txt
touch {a,b,c}{1..3}.txt
实例:
[root@localhost ~]# touch aaa{1..3}.txt
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Oct 13 16:09 aaa1.txt
-rw-r--r--. 1 root root 0 Oct 13 16:09 aaa2.txt
-rw-r--r--. 1 root root 0 Oct 13 16:09 aaa3.txt
-rw-------. 1 root root 1775 Oct 13 2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Desktop
drwxr-xr-x. 2 root root 6 Oct 13 2020 Documents
drwxr-xr-x. 2 root root 6 Oct 13 2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13 2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Music
drwxr-xr-x. 2 root root 6 Oct 13 2020 Pictures
drwxr-xr-x. 2 root root 6 Oct 13 2020 Public
drwxr-xr-x. 2 root root 6 Oct 13 2020 Templates
drwxr-xr-x. 2 root root 6 Oct 13 2020 Videos
[root@localhost ~]# ls
aaa1.txt aaa3.txt Desktop Downloads Music Public Videos
aaa2.txt anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
[root@localhost ~]#
创建目录
mkdir aa
mkdir cc tt
mkdir abc{1..5}
mkdir {x,y,z}{..5}
实例:
[root@localhost ~]# mkdir aaa{1..4}
[root@localhost ~]# ls
aaa1 aaa2.txt aaa4 Documents Music Templates
aaa1.txt aaa3 anaconda-ks.cfg Downloads Pictures Videos
aaa2 aaa3.txt Desktop initial-setup-ks.cfg Public
[root@localhost ~]#
mkdir -p /root/x/y/z
mkdir -pv /root/a/b/c -p 递归 -v 显示创建过程
拷贝命令
cp 源文件地址 目标地址
cp /root/cc.txt /
cp /root/cc.txt /tmp/kk.txt 拷贝的过程中重命名
cp -r /root/x/ /tmp/ 拷贝目录
mv 源文件地址 目标地址
mv /root/aa.txt /tmp/
mv /root/tt.txt /tmp/ll.txt
mv /root/a/ /tmp/ 剪切目录
mv c3.txt nnnn.txt 当前目录下重命名
ls test.config.simple
mv test.config{.simple,}
ls test.config
剪切速度远远高于拷贝速度!
剪切速度远远高于拷贝速度!
rmdir /root/c/ 只能删除空目录
rm /root/a1.txt
rm -f /root/cc.txt
rm -f *.txt *表示所有文件名
rm -rf /root/tt/ 删除目录
rm -rf /root/abc*
实例:
[root@localhost ~]# touch {1..5}.txt
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 0 Oct 13 16:03 1.txt
-rw-r--r--. 1 root root 0 Oct 13 16:03 2.txt
-rw-r--r--. 1 root root 0 Oct 13 16:03 3.txt
-rw-r--r--. 1 root root 0 Oct 13 16:03 4.txt
-rw-r--r--. 1 root root 0 Oct 13 16:03 5.txt
-rw-------. 1 root root 1775 Oct 13 2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Desktop
drwxr-xr-x. 2 root root 6 Oct 13 2020 Documents
drwxr-xr-x. 2 root root 6 Oct 13 2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13 2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Music
drwxr-xr-x. 2 root root 6 Oct 13 2020 Pictures
drwxr-xr-x. 2 root root 6 Oct 13 2020 Public
drwxr-xr-x. 2 root root 6 Oct 13 2020 Templates
drwxr-xr-x. 2 root root 6 Oct 13 2020 Videos
[root@localhost ~]# rm -f *.txt
[root@localhost ~]# ll
total 8
-rw-------. 1 root root 1775 Oct 13 2020 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Desktop
drwxr-xr-x. 2 root root 6 Oct 13 2020 Documents
drwxr-xr-x. 2 root root 6 Oct 13 2020 Downloads
-rw-r--r--. 1 root root 1823 Oct 13 2020 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 Oct 13 2020 Music
drwxr-xr-x. 2 root root 6 Oct 13 2020 Pictures
drwxr-xr-x. 2 root root 6 Oct 13 2020 Public
drwxr-xr-x. 2 root root 6 Oct 13 2020 Templates
drwxr-xr-x. 2 root root 6 Oct 13 2020 Videos
[root@localhost ~]#
1.说出ls指令参数的作用?
-a -l -d -t -S -h -R
-a 显示全部文件(包括隐藏文件)
-l 显示文件详细信息
-d 列出目录本身,而不是目录的内容
-t 按时间排序
-S 按大小排序
-h 按最大单位展示
-R 递归显示
2.文件的类型有几种?分别是什么?
七种
- 普通文件 file
d 目录文件 directory
c 字符设备文件 character
b 块设备文件 block
s 套接字文件 socket
p 管道文件 pipe
l 符号链接文件(软链接) symbolic
3.ls -l /etc/passwd说出每个字段的含义?
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 2418 Oct 16 17:14 /etc/passwd
第一段: 文件类型
第二段: 基本权限
第三段: 是否在开启selinux的状态创建
第四段: 硬链接数
第五段: 拥有者
第六段: 所属组
第七段: 大小(字节)
第八段: 最后一次修改时间
第九段: 文件名
4.说出下列参数的功能?
cd ../.. 上级的上级
cd . 刷新目录
cd ~ 家目录
cd - 返回上次工作的目录
5.列举查看文件的指令有那些?监控日志应该怎么操作?
more
less
head
tail
cat
tail -f /var/log/messages
[root@bogon ~]# man ls
[root@bogon ~]# tail -f /var/log/messages
Oct 13 19:42:45 bogon dbus[761]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Oct 13 19:42:45 bogon systemd: Starting Network Manager Script Dispatcher Service...
Oct 13 19:42:45 bogon dhclient[920]: bound to 192.168.43.130 -- renewal in 752 seconds.
Oct 13 19:42:45 bogon dbus[761]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Oct 13 19:42:45 bogon systemd: Started Network Manager Script Dispatcher Service.
Oct 13 19:42:45 bogon nm-dispatcher: req:1 'dhcp4-change' [ens33]: new request (4 scripts)
Oct 13 19:42:45 bogon nm-dispatcher: req:1 'dhcp4-change' [ens33]: start running ordered scripts...
Oct 13 19:45:57 bogon systemd: Starting Cleanup of Temporary Directories...
Oct 13 19:45:57 bogon systemd: Started Cleanup of Temporary Directories.
Oct 13 19:50:01 bogon systemd: Started Session 4 of user root.
如何查看一个文件的前25行内容,如何查看文件的后25行内容
head -25
6.查看/etc/passwd文件的10-25行如何操作?
head -25 /etc/passwd | tail -15
[root@bogon ~]# head -25 /etc/passwd | tail -15
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
setroubleshoot:x:995:992::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
gluster:x:994:991:GlusterFS daemons:/run/gluster:/sbin/nologin
chrony:x:993:990::/var/lib/chrony:/sbin/nologin
7.说出一下目录的作用?
/etc /root /var /usr /bin /sbin /home /boot
/etc 配置文件目录
/root root管理员家目录
/var 服务器数据目录
/usr 应用程序目录
/bin 用户可执行目录
/sbin 系统可执行目录
/home 普通用户的家目录
/boot 服务器启动目录
8.创建文件使用什么指令?如何在/tmp下创建abc1.txt-abc100.txt这100个文件?
touch
touch /tmp/abc{1..100}.txt
9.如何递归创建目录 如:/tmp/aa/cc/tt
mkdir -p /tmp/aa/cc/tt
10.拷贝/tmp/abc1-abc100这100个文件到/root/下
cp -r /tmp/abc{1..100} /root/
11.如何删除/root/abc1-abc100 这100个文件
rm -rf /root/abc*.txt
yum install tree
tree /aa
tree -L 1 /
tree -L 2 /
练习:
1.建立以下目录结构:
/aa
/ \
ba/ bb/
/ \ \
ca/ cb/ cc/
可否一条命令创建?
[root@bogon ~]# mkdir -p /aa/b{a..b} /aa/ba/c{a..b} /aa/bb/cc
[root@bogon ~]# tree /aa
/aa
├── ba
│ ├── ca
│ └── cb
└── bb
└── cc
2.将系统中/etc/hosts 拷贝到/aa/ba/ca目录?使用2种方法(当前目录为/)
第一种:
[root@bogon ~]# cd /
[root@bogon /]# pwd
/
[root@bogon etc/]# cp hosts /aa/ba/ca/
第二种:
[root@bogon /]# cp /etc/hosts /aa/ba/ca/
3.将/aa/ba/ca/hosts文件移动到/aa/bb/cc/目录下并且重命名位test.txt,2种方法(当前目录为ca)
[root@bogon /]# cd /aa/ba/ca/
[root@bogon ca]# mv /aa/ba/ca/hosts /aa/bb/cc/test.txt
[root@bogon ca]# ls /aa/bb/cc/
test.txt
[root@bogon ca]#mv /aa/ba/ca/hosts /aa/bb/cc/
[root@bogon ca]#rename hosts test.txt
[root@bogon ca]#ls /aa/bb/cc/
test.txt
打开终端,输入
[root@localhost ~]# vim /root/aa.txt
进入其的输入模式,按下a可以进入输入模式,键盘上的insert也可以进入输入模式,输入自己想要输入的信息,输入完成之后按下esc键 按下shift+: 输入wq进行保存退出。
按下esc键后 shift+: u 可以撤销当前操作(按下esc后也可以直接使用u来进行撤销操作)
第二种撤销方式就是Ctrl+r
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8n9J7wjT-1631085654895)(https://i.loli.net/2020/12/07/RJgpGrVP6FlZzCT.png)]
yy复制 p(当前行下一行) P(当前行的上一行) 50yy
dd剪切 p P 100dd
dd删除
^ 行首 $ 行尾
d^ 删除当前字符到行首(不包含当前字符)
d$ 删除当前字符到行尾(包含当前字符)
y^ 复制当前字符到行首(不包含当前字符)
y$ 复制当前字符到行尾(包含当前字符)
35G 定位到35行
gg 首行
G 最后一行
dgg 从当前行删除到首行(包含当前行)
dG 删除当前行到尾行(不包含当前行)
u 撤销一部操作
ctrl+r 重做
命令行进入输入模式的方法
a 当前字符后输入
A 当前行行尾输入
i 当前字符前输入
I 当前行行首输入
o 当前行下一行输入
O 当前行上一行输入
s 删除当前字符后输入
S 删除当前行后输入
进入输入模式后:
HOME键 行首
END键 行尾
shfit + :
:w 保存
:q 退出
:wq 保存退出
:w! 强制保存
:q! 强制退出
:wq! 强制保存退出
:w /tmp/cc.txt 另存
:1,3w /tmp/new.txt
:e /root/aa.txt 打开一个文件
:e! 重新打开当前文件
:X 加密文件
显示行号
:set nu
:set nonu
显示空格或者制表符
:set list
:set nolist
文件中所有的制表符都设置为16个空格长度
:set tabstop=16
只更改设置之后的制表符长度
:set softtabstop=16
自动缩进
:set autoindent
:set noautoindent
搜索忽略大小写
set ignorecase smartcase
w下一个单词的首字符
dw yw
J 合并行
vim配置文件:
永久开启行号功能
vim /etc/vimrc
set nu
查找
/关键字
n 下一个 N 上一个
?关键字
n 上一个 N 下一个
shift+: s///
三个斜线:
第一个斜线填写的是文件中里面想要替换的内容
第二个斜线填写的是文件中要替换成的内容
第三个斜线选择替换的范围
:s/ab/xx/ 替换当前行第一个匹配字符串
:s/ab/xx/g 替换当前行所有匹配字符串
:%s/ab/xx/g 替换所有行中所有匹配字符串
:%s/ab/xx/gc 交互式替换所有行中所有匹配字符串
s 替换 g 全局 % 所有行 c交互式
^ 行首 $ 行尾
:3,5s/ab/xx/gc 3到5行
1.列举vim的三种常用模式
命令模式(一般模式)
输入模式(编辑模式)
末行模式(命令行模式)
2.由命令模式进入输入模式时a i o O 分别代表什么意思?
a 当前字符后输入
A 当前行行尾输入
i 当前字符前输入
I 当前行行首输入
o 当前行下一行输入
O 当前行上一行输入
3.在命令模式下如何复制100行 如何删除50行 如何粘贴?
100yy 50dd p
4.在命令模式下如何定位到第75行
/75
5.在命令模式下如何删除当前行到首行,如何删除当前行到尾行?
dgg 从当前行删除到首行(包含当前行)
dG 删除当前行到尾行(不包含当前行)
6.末行模式如何保存? 如何强制保存退出?
shift + : + w
shift + : + wq
7.末行模式下如何将100-200行另存一个新文件?
:100,200w 文件路径
8.末行模式下如何开启行号?如何开启忽略大小写设置?
shift + : + set nu
shift + : + set ignorecase
9.vim的配置文件是哪个文件?
vim /etc/vimrc
10.vim如何查找在一个文件中查找abc字段?
:/abc
11.在vim中如何同屏内查看多个文件?
[root@localhost ~]# vim -o 多个文件名
[root@localhost ~]# vim -O 多个文件名
[root@localhost ~]# vimdiff 多个文件名
12.通过vimtutor查看vim的手册
[root@localhost ~]# vimtutor
:%s/a/X/g
1 fdsafsadfssdfsafsa
2 sdfasfasfwefsdfxcvxv
3 weghdfhdaafxvbfgasf fsda asdfas
4 fsdfg wf wae w fa fg zfzx r q
5 fqeyag ghrs hawe ef a
替换后:
1 fdsXfsXdfssdfsXfsX
2 sdfXsfXsfwefsdfxcvxv
3 weghdfhdXXfxvbfgXsf fsdX XsdfXs
4 fsdfg wf wXe w fX fg zfzx r q
5 fqeyXg ghrs hXwe ef X
:%s/^ *//
f dsafsadfssdfsafsa
s dfasfasfwefsdfxcvxv
weghdfhdaafxvbfgasf fsda asdfas
fsdfg wf wae w fa fg zfzx r q
fq eyag ghrs hawe ef a
替换后
f dsafsadfssdfsafsa
s dfasfasfwefsdfxcvxv
weghdfhdaafxvbfgasf fsda asdfas
fsdfg wf wae w fa fg zfzx r q
fq eyag ghrs hawe ef a
:%s/ *//g
f dsafsadfssdfsafsa
s dfasfasfwefsdfxcvxv
weghdfhdaafxvbfgasf fsda asdfas
fsdfg wf wae w fa fg zfzx r q
fq eyag ghrs hawe ef a
替换后
fdsafsadfssdfsafsa
sdfasfasfwefsdfxcvxv
weghdfhdaafxvbfgasffsdaasdfas
fsdfgwfwaewfafgzfzxrq
fqeyagghrshaweefa
:5d
:3,5d
:g/^$/d
初始:
f dsafsadfssdfsafsa
s dfasfasfwefsdfxcvxv
weghdfhdaafxvbfgasf fsda asdfas
fsdfg wf wae w fa fg zfzx r q
fq eyag ghrs hawe ef a
删除后
fdsafsadfssdfsafsa
sdfasfasfwefsdfxcvxv
weghdfhdaafxvbfgasffsdaasdfas
fsdfgwfwaewfafgzfzxrq
fqeyagghrshaweefa
:g/^\s*$/d #\s表示的是空白符
初始:
789789 456 4f asd4f5sa613
fsd afas123vxz4 v64weg13
f dsazxvgasdfw
fdsaf eaaf46fsda
fdsawe f sda
f asf sf as
dfsafawe g qqw ghq
删除后
789789 456 4f asd4f5sa613
fsd afas123vxz4 v64weg13
f dsazxvgasdfw
fdsaf eaaf46fsda
fdsawe f sda
f asf sf as
dfsafawe g qqw ghq
:%s/^/#/g
初始:
789789 456 4f asd4f5sa613
fsd afas123vxz4 v64weg13
f dsazxvgasdfw
fdsaf eaaf46fsda
fdsawe f sda
f asf sf as
dfsafawe g qqw ghq
注释后:
#789789 456 4f asd4f5sa613
#fsd afas123vxz4 v64weg13
#f dsazxvgasdfw
#fdsaf eaaf46fsda
#fdsawe f sda
#f asf sf as
# dfsafawe g qqw ghq
:%s/\//-/g
:%s#/#-#g
初始:
789789 456 4f asd4f5sa613
fsd a//fas//12/3vxz4 v64weg13
f dsaz/xv//gas/dfw
fdsaf e/aaf/46fsda
fdsawe f s/da
f asf/ sf/ as
dfsaf//awe g q/qw g/hq
转换后:
789789 456 4f asd4f5sa613
fsd a--fas--12-3vxz4 v64weg13
f dsaz-xv--gas-dfw
fdsaf e-aaf-46fsda
fdsawe f s-da
f asf- sf- as
dfsaf--awe g q-qw g-hq
:%s/[0-9]//g
初始:
789789 456 4f asd4f5sa613
fsd a--fas--12-3vxz4 v64weg13
f dsaz-xv--gas-dfw
fdsaf e-aaf-46fsda
fdsawe f s-da
f asf- sf- as
dfsaf--awe g q-qw g-hq
删除后:
f asdfsa
fsd a--fas---vxz vweg
f dsaz-xv--gas-dfw
fdsaf e-aaf-fsda
fdsawe f s-da
f asf- sf- as
dfsaf--awe g q-qw g-hq
可视化模式:v
选中操作内容 y 复制 d删除
可视化块模式:ctrl+v
ctrl+v选中–>shift+i---->输入#----->连续按下两次ESC
取消多行注释ctrl+v选中—>x
多文件操作
在文件分别创建aa cc tt txt文件,并输入相关内容
打开文件是使用vim aa.txt cc.txt tt.txt命令
在命令行中输入以下命令可以实现切换
:next 下一个文件
:prev 上一个文件
:last 最后一个
:first 第一个
ctrl+^
:wqa
vimdiff aa.txt cc.txt tt.txt
ctrl+w+w 切换文件
:wqa 退出
三个文件全部打开显示在屏幕上 带有颜色
三个文件全部打开显示在屏幕上 不带有颜色
横向排序
vim -O aa.txt cc.txt tt.txt
竖向排列
vim -o aa.txt cc.txt tt.txt
格式转换
yum install unix2dos
unix2dos anaconda-ks.cfg
# file命令 可判断文件的类型
[root@localhost ~]# file test
test: ASCII text
[root@localhost ~]# file a1
a1: empty
[root@localhost ~]# file data
data: data
[root@localhost ~]# mkdir test
[root@localhost ~]# file test/
test/: directory
[root@localhost ~]#
yum install lrzsz
rz 从windos到linux
sz 从linux到windows
注意:
当使用xshell进行连接的时候,如果出现vim下无法使用小键盘输入数字出现字母的时候,需要在xshell下的属性VT修改为普通模式。
添加帐号
useradd robin
[root@localhost ~]# id robin
uid=1000(robin) gid=1000(robin) 组=1000(robin)
[root@localhost ~]# vim /etc/passwd
robin:x:1000:1000:robin:/home/robin:/bin/bash
# id 命令可以查看用户的uid gid和所属组
上述字段的含义
[root@localhost ~]# vim /etc/passwd
robin:x:1000:1000:robin:/home/robin:/bin/bash
第一段: 用户名
第二段: 密码占位符 去掉占位符可以实现免密登录
第三段: uid 范围(0-60000)
第四段: gid
第五段: 描述 可以没有
第六段: 家目录
第七段: shell /bin/bash /sbin/nologin
注: /bin/false 和 /sbin/nologin的区别
/bin/false是最严格的禁止login选项,一切服务都不能用 而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务
如果想要用false在禁止login的同时允许ftp,则必须在/etc/shells里增加一行/bin/false。
useradd -u 2000 abc1
useradd -u 2001 -g 2000 abc2
useradd -u 2002 -g 2000 -c 'test user' abc3
useradd -u 2003 -g 2000 -c 'test user' -d /mnt/abc4 abc4
useradd -u 2004 -g 2000 -c 'test user' -d /mnt/abc5 -s /bin/bash abc5
-u uid 设置用户的uid
-g gid 设置用户的gid
-c comment 概述信息
-d home 设置用户的家目录
-s shell 指定shell种类
uid和gid的范围
uid 0 root svip
gid 0 root group svip
uid 1-999 system user 系统用户
gid 1-999 system group 系统组
uid 1000-60000 user 普通账号
gid 1000-60000 user 普通
[root@localhost ~]# groupadd upup
组信息文件:
[root@localhost ~]# vim /etc/group
upup:x:2006:
第一段: 组名
第二段: 组密码占位符号
第三段: gid
第四段: 用户列表
[root@localhost ftp]# groupadd -g 3000 uplooking
添加组: gid为5000 组名:haha
添加用户: uid为5000 gid为5000 描述:ceshi 家目录:/tmp下 shell:tcsh hehe
[root@localhost ~]# groupadd -g 5000 haha
[root@localhost ~]# useradd -u 5000 -g 5000 -c 'ceshi' -d /tmp/ -s /bin/tcsh hehe
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@localhost ~]# useradd -u 5000 -g haha -c 'ceshi' -d /tmp/ -s /bin/tcsh hehe
useradd: user 'hehe' already exists
[root@localhost ~]# ls /tmp/
测试:
[root@localhost ~]# su - hehe
[hehe@localhost ~]$ pwd
/tmp
再创建一个管理员
[root@localhost ~]# useradd -o -u 0 admin
passwd
passwd robin
密码保存文件:/etc/shadow
robin:!!:17302:0:99999:7:::
第一列: 用户名
第二列: 密码(有密码状态,无密码状态,!!帐号锁定,* 该帐号永久不能登陆系统)
第三列: 密码的最后一次修改时间
第四列: 密码的最小时间(密码修改相隔时间)
时间单位天 几天之内不允许改密码
第五列: 密码的最大时间(密码有效期) 99999表示永久不过期
第六列: 密码过期前警告时间
第七列: 密码过期后帐号过期
第八列: 帐号有效期
第九列: 保留列
非交互时修改密码
echo 123 | passwd --stdin robin
groupmod
groupmod -g 3500 uplooking
groupmod -n newuplooking uplooking
usermod
usermod -u 2500 jack
usermod -g upup jack
usermod -c 'test user' jack
usermod -s /bin/tcsh jack
方法1:
usermod -d /tmp/jack jack
mv /home/jack/ /tmp/
方法2:
usermod -m 移动目录 -d 追加到后面的路径
usermod -m -d /home/jack jack
当使用自己追加的家目录时,需要提前创建好用户的家目录、然后在/etc/skel/.bash*目录下拷贝至家目录才能生效。
当全部操作完成后如若没有设置密码,则使用新创建的用户进行登录时会显示一个bash的界面。创建完密码后就可以正常的显示了。
usermod -L robin # 锁定
usermod -U robin # 解锁
passwd -l robin # 锁定
passwd -S robin # 解锁
passwd -u robin # 解锁
创建两个帐号 tom jerry 密码都设置为123
[root@localhost ~]# useradd tom
[root@localhost ~]# useradd jerry
[root@localhost ~]# for i in tom jerry;do echo 123|passwd --stdin $i;done
Changing password for user tom.
passwd: all authentication tokens updated successfully.
Changing password for user jerry.
passwd: all authentication tokens updated successfully.
[root@localhost ~]#
锁定tom的帐号
锁定jerry的密码
[root@localhost ~]# usermod -L tom
usermod: invalid user ID 'tom'
[root@localhost ~]# passwd -l jerry
Locking password for user jerry.
passwd: Success
[root@localhost ~]# passwd -S jerry
jerry LK 2020-10-16 0 99999 7 -1 (Password locked.)
[root@localhost ~]# passwd -u jerry
Unlocking password for user jerry.
passwd: Success
[root@localhost ~]#
登陆tom和jerry 查看返回信息是否相同?
查看shadow找到tom和jerry密码位有什么不同?
! 锁定帐号
!! 锁定密码
groupdel uplooking
userdel -r king
-r 连同家目录一起删除
附加组用于权限匹配
主组:
主组用于确定用户创建的文件所属组
usermod -a -G upup robin
组密码:
groupadd yw
groupadd kf
useradd wg
usermod -a -G yw,kf wg
groupadd boss
gpasswd boss
su - wg
sg boss
配置文件:
用于修改UID和gid的默认范围
/etc/login.defs (uid,gid范围)
可用于修改用户默认的shell路径
/etc/default/useradd
HOME=/home
SHELL=/bin/bash
SKEL=/etc/skel (环境变量范本目录)
============================================================================================================
GROUP=100 如果useradd没有指定组,并且/etc/login.defs中的USERGROUPS_ENAB为no或者useradd使用了-N选项时,此时该参数生效。创建用户时使用此组ID。
HOME=/home 主目录放在什么目录下
INACTIVE=-1 帐号是否过期
EXPIRE= 帐号终止日期
SHELL=/bin/bash 默认使用哪个shell
SKEL=/etc/skel 模板目录,骨架目录
CREATE_MAIL_SPOOL=yes 是否创建邮箱文件
1.groupadd redhat
vim /etc/group
redhat:x:9999:
2.useradd -g redhat rose
vim /etc/passwd
rose:x:9999:9999:test user:/home/rose:/bin/bash
mkdir /home/rose
cp /etc/skel/.bash* /home/rose/
# 使用修改配置文件创建的用户需要在 /etc/passwd /etc/group添加完信息后,创建用户的家目录,并从默认路径下/etc/skel/.bash* 所有的相关配置copy一份到其家目录下。
3.passwd rose
vim /etc/shadow
rose::17303:0:99999:7:::
echo 123 | passwd --stdin rose
example:
[root@localhost ~]# vim /etc/group
[root@localhost ~]# tail -3 /etc/group
tom:x:2005:
jerry:x:2006:
redhat:x:3000:
[root@localhost ~]# vim /etc/passwd
[root@localhost ~]# tail -3 /etc/passwd
tom:x:2005:2005::/home/tom:/bin/bash
jerry:x:2006:2006::/home/jerry:/bin/bash
centos1:x:3000:3000::/home/centos1:/bin/bash
[root@localhost ~]# su - centos1
su: warning: cannot change directory to /home/centos1: No such file or directory
-bash-4.2$ logout
[root@localhost ~]# mkdir /home/centos1
[root@localhost ~]# cp /etc/skel/.bash* /home/centos1
[root@localhost ~]# su - centos1
Last login: Fri Oct 16 13:52:49 CST 2020 on pts/0
[centos1@localhost ~]$ logout
[root@localhost ~]# echo 123|passwd --stdin centos1
Changing password for user centos1.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# su - centos1
Last login: Fri Oct 16 13:53:32 CST 2020 on pts/0
[centos1@localhost ~]$
1.重起,进入选择界面时按下e
2.linux16最后一行 删除至ro后 输入rd.break
3.mount -o remount,rw /sysroot
4.chroot /sysroot
5.echo 密码|passwd --stdin root
6.touch /.autorelabel
7.sync
8.连续按下两次ctrl+D进入系统
1.普通用户uid范围是多少?gid范围是多少?
系统 1-999
普通 1000-60000
2.如何添加一个账号tom?
[root@localhost ~]# useradd tom
[root@localhost ~]# ls -l /home/
total 0
drwx------. 3 tom tom 78 Oct 16 15:07 tom
[root@localhost ~]#
3.说出一下添加账号时参数的含义?-u -g -c -d -s
-u 指定用户的uid
-g 指定用户的gid
-c 追加说明 概述信息
-d 指定用户的家目录
-s 指定shell的种类
4.如何添加一个组redhat?指定gid为3000?
[root@localhost ~]# groupadd redhat -g 3000
redhat:x:3000:
5.当passwd文件的第二列为空时登录系统是否需要密码?
[root@localhost ~]# su tom
[tom@localhost root]$
tom::1001:1001::/home/tom:/bin/bash
不需要
6.写出保存用户信息,组信息,密码信息的文件分别是什么?
[root@localhost ~]# vim /etc/passwd
[root@localhost ~]# vim /etc/shadow
[root@localhost ~]# vim /etc/group
[root@localhost ~]#
7.修改用户信息的指令是什么?修改组信息的指令是什么?
usermod
groupmod
8.删除组upup时失败,可能是什么原因造成的?写出你的想法
有其他用户
组不存在
9.锁定账号robin应该怎么操作?锁定密码应该怎么操作?
usermod -L robin
锁定密码终端不能进行登录
passwd -l robin
10.手动添加组upup
手动添加账号ben,属于upup组
使账号ben可以登上系统
[root@localhost ~]# vim /etc/group
upup:x:4000:
[root@localhost ~]# vim /etc/passwd
ben:x:4000:4000::/home/ben:/bin/bash
[root@localhost ~]# su ben
bash-4.2$ exit
[root@localhost ~]# cp /etc/skel/.bash* /home/ben
cp: target ‘/home/ben’ is not a directory
[root@localhost ~]# mkdir /home/ben
[root@localhost ~]# cp /etc/skel/.bash* /home/ben
[root@localhost ~]# echo 111|passwd --stdin ben
Changing password for user ben.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# vim /etc/shadow
ben:$6$zZby/AIc$LugevMF8ysRn4HKqmS.tkEqthEFfEZm7OQbOJlzn85.LuhXCgnXK664O6mgkmcYoxBGEo2skl/Q41Mj.zuorz/:18551::::::
[root@localhost ~]# su - ben
Last login: Fri Oct 16 15:17:02 CST 2020 on pts/0
[ben@localhost ~]$
11.修改uid默认范围应该修改哪个文件?
[ben@localhost ~]$ vim /etc/login.defs
12.修改默认家目录,默认shell应该修改哪个文件?
[root@localhost ~]# vim /etc/default/useradd
13.修改用户的附加组应该怎么操作?如: 用户king 主组king 附加组king 添加新的附加组blue
[root@localhost ~]# useradd king
[root@localhost ~]# id king
uid=4001(king) gid=4001(king) groups=4001(king)
[root@localhost ~]# tail -2 /etc/group
king:x:4001:
blue:x:4002:
[root@localhost ~]# usermod -a -G blue king
[root@localhost ~]# id king
uid=4001(king) gid=4001(king) groups=4001(king),4002(blue)
14.简述在root密码丢失时,修改root密码的过程
1.重起,进入选择界面时按下e
2.linux16最后一行 删除至ro后 输入rd.break
3.mount -o remount,rw /sysroot
4.chroot /sysroot
5.echo 密码|passwd --stdin root
6.touch /.autorelabel
7.sync
8.连续按下两次ctrl+D进入系统
[root@localhost ~]# touch aa.txt
[root@localhost ~]# ls -l aa.txt
-rw-r--r--. 1 root root 0 Oct 14 19:07 aa.txt
rwx | rwx | rwx |
---|---|---|
拥有者 | 所属组 | 其他人 |
user | group | other |
u | g | o |
[root@localhost ~]# id zhangsan
uid=5001(zhangsan) gid=5001(zhangsan) groups=5001(zhangsan)
[root@localhost ~]# ll aa.txt
-rw-r--r--. 1 root root 0 Oct 14 19:07 aa.txt
uid=0------>拥有者---------->所属组(附加组)---------->其他
第一个三位 第二个三位 第三个三位
file:
r -------->read cat head tail more.....
w -------->write vim > >> gedit
x --------->exec ./ 后者绝对路径执行
directory:
r ------->read ls r-x 详细信息
w ----->touch rm -wx 创建删除 rm -rf * rwx
x ------->cd
以新创建的aa.txt为例:
创建完成的初始权限为;
[root@localhost ~]# ll aa.txt
-rw-r--r--. 1 root root 0 Oct 14 19:07 aa.txt
赋予拥有者可执行权限
[root@localhost ~]# chmod u+x aa.txt
[root@localhost ~]# ll aa.txt
-rwxr--r--. 1 root root 0 Oct 14 19:07 aa.txt
赋予拥有者读写权限
[root@localhost ~]# chmod u+rw aa.txt
[root@localhost ~]# ll aa.txt
-rwxr--r--. 1 root root 0 Oct 14 19:07 aa.txt
赋予三组读写执行权限
[root@localhost ~]# chmod ugo+rwx aa.txt
[root@localhost ~]# ll aa.txt
-rwxrwxrwx. 1 root root 0 Oct 14 19:07 aa.txt
[root@localhost ~]#
1.创建文件/tmp/aa.txt
要求:
拥有者没权限
所属组读写权限
其他人执行权限
[root@localhost ~]# touch /tmp/aa.txt
[root@localhost ~]# ll /tmp/aa.txt
-rw-r--r--. 1 root root 0 Oct 14 19:26 /tmp/aa.txt
[root@localhost ~]# chmod u-rw,g+w,o+x /tmp/aa.txt
[root@localhost ~]# ll /tmp/aa.txt
----rw-r-x. 1 root root 0 Oct 14 19:26 /tmp/aa.txt
[root@localhost ~]#
2.创建目录/tmp/test
要求:
拥有者可以查看文件名
所属组可以创建删除文件
其他人无权限
chmod u-wx,g-r,g+w,o-rx /tmp/test/
chmod u=r,g=wx,o= /tmp/test
[root@localhost ~]# mkdir /tmp/test
[root@localhost ~]# chmod u-wx,g+w,o=-/tmp/test/
[root@localhost ~]# ls -ld /tmp/test/
drwxr-x---. 2 root root 6 Oct 14 19:28 /tmp/test/
[root@localhost ~]#
3.有文件/tmp/kkk/aa.txt 权限为rwxrwxrwx 问robin用户能不能删除?为什么?
不能被删除 目录权限显示的使 “目录内文件内容的”的操作权限,而不是文件目录的操作权限。
区别于文件权限和目录权限
4./tmp/test/ rwxr-xr-x
/tmp/test/dir rwxr-xr--
/tmp/test/dir/aa/ rwxrwxrwx
/tmp/test/dir/aa/tt.txt rwxrwxrwx
robin能不能删除 /tmp/test/dir/aa/tt.txt
查看以下目录或者文件权限:
/etc/passwd rw-r--r-- 644
/etc/shadow --------- 000
/tmp rwxrwxrwt 1777
/root r-xr-x--- 550
/home/robin rwx------ 700
/ r-xr-xr-x 555
/etc rwxr-xr-x 755
root用户创建文件默认权限 rw-r--r-- 644
root用户创建目录默认权限 rwxr-xr-x 755
普通用户创建文件默认权限 rw-rw-r-- 664
普通用户创建目录默认权限 rwxrwxr-x 775
数字表示权限:
r -------- 4
w -------- 2
x -------- 1
rw 4+2 6
wx 2+1 3
rwx 4+2+1 =7
321 -wx-w---x
456 r--r-xrw-
0022
666-022=644
777-022=755
666-002=664
777-002=775
umask 0023
666-023=643
ll kk.txt
-rw-r--r--. 1 root root 0 5月 17 15:30 kk.txt
023
000 010 011
111 101 100 --取反
666
110 110 110
111 101 100
110 100 100
6 4 4
创建文件 642 umask=?
666
110 110 110
642
110 100 010
110 110 110
111 101 011 ----> 000 010 100 ---> 024
110 100 010
umask=0024
[root@localhost tmp]# hwclock -s 从硬件时间写到系统
[root@localhost tmp]# date
2017年 05月 17日 星期三 23:55:07 CST
[root@localhost tmp]# date -s '20170517 16:02:40'
2017年 05月 17日 星期三 16:02:40 CST
[root@localhost tmp]# date
2017年 05月 17日 星期三 16:02:41 CST
[root@localhost tmp]# hwclock -w 从系统写到硬件时间
[root@localhost tmp]# hwclock
2017年05月17日 星期三 16时02分52秒 -0.211094 秒
[root@localhost tmp]#
[root@localhost ~]# date +%Y/%m/%d
2020/10/23
[root@localhost ~]# date +"%Y/%m/%d %H:%M:%S"
2020/10/23 14:48:57
拥有者和所属组的修改:
/tmp/test.txt rw-r--r-- robin root
robin robin ---> other
chown robin /tmp/test.txt
chgrp upup /tmp/test.txt chgrp修改组
chown .upup /tmp/test.txt
chown :upup /tmp/test.txt
chown robin.upup /tmp/test.txt
chown robin.upup /tmp/dir/
chown -R robin.upup /tmp/dir
chmod -R 777 /tmp/dir
tmp目录下有目录test
test目录下有文件aa.txt
要求:
robin可以删除aa.txt文件,但是不能修改
zorro不可以删除aa.txt文件,但是可以修改
/tmp/test robin root rwxr-xr-x
/tmp/test/aa.txt zorro root rw-r--r--
1.基本权限的操作对象有几个?分别是什么?
三个
拥有者 所属组 其他
2.给文件拥有者添加rwx权限时,应该如何操作?
chmod u+rwx 文件路径
3.目录的拥有者读写权限, 所属组读权限,其他人无权限应该怎么操作?
chmod u=rw,g=r,o=- 文件路径
4.创建文件/tmp/aa.txt
要求:
拥有者没权限
所属组读写权限
其他人执行权限
[root@localhost test]# chmod u=-,g=rw,o=x aa.txt
[root@localhost test]# ll
total 0
----rw---x. 1 root root 0 Oct 19 14:10 aa.txt
5.创建目录/tmp/test
要求:
拥有者可以查看文件名
所属组可以创建删除文件
其他人无权限
[root@localhost test]# chmod u=r,g=rw,o=- /tmp/test/
[root@localhost test]# ll -d /tmp/test/
dr--rw----. 2 king root 20 Oct 19 14:10 /tmp/test/.
6.有文件/tmp/kkk/aa.txt 权限为rwxrwxrwx 问robin用户能不能删除?为什么?
不一定权限
文件权限和目录权限的区别
7. /tmp/test/ rwxr-xr-x
/tmp/test/dir rwxr-xr--
/tmp/test/dir/aa/ rwxrwxrwx
/tmp/test/dir/aa/tt.txt rwxrwxrwx
robin能不能删除 /tmp/test/dir/aa/tt.txt? 为什么?
不能删除 没有权限
8.写出如下数字对应的权限
123 --x-w--wx
456 r--r-xrw-
735 rwx-wxr-x
9.写出如下权限对应的数字
r---wx--x 431
rwxr---w- 742
r-xrw-r-- 564
10.按要求完成权限配置
有文件test.txt 要求:
boss不可读写,所有员工都可以读写
11.在/root目录下创建文件abc.txt(root目录拥有者不可以改动)
同时完成以下要求:
robin用户可以读写abc.txt 但是不可以删除
zorro用户只可以读abc.txt,但是不可以删除
king用户不可以读写abc.txt,但是可以删除
/root root root r-xrwxr-x
/root/abc.txt robin zorro rw-r-----
robin
zorro
king
[root@localhost ~]# chown robin /root/abc.txt
[root@localhost ~]# chown :zorro /root/abc.txt
[root@localhost ~]# chmod o=- /root/abc.txt
[root@localhost ~]# ll
-rw-r-----. 1 robin zorro 0 Oct 19 14:24 abc.txt
[root@localhost ~]# chmod u=rx,g=rwx,o=rx /root
[root@localhost ~]# usermod -a -G root king
12.附加题
要求robin用户创建的默认文件权限都是624,求umask值是多少?
042
作用:任何用户在运行拥有suid权限的命令(二进制可执行文件)时,都以该命令拥有者(root)的身份执行
作用位置:user
作用对象:文件(二进制可执行文件)
chmod u+s 命令
1.添加用户robin
su - robin
cat /etc/shadow 能不能看到内容?
不能看见,没有权限
2.使用suid权限,怎么看到?
chmod u+s /bin/cat
作用:任何用户在拥有sgid权限的目录下,创建的文件都要继承目录的组
作用位置:group
作用对象:目录
chmod g+s directory
1.添加帐号robin robin组
创建目录/tmp/test 权限设置为777 目录拥有者root 所属组root
robin帐号在/tmp/test下创建 aa.txt 问:所属组是谁?
drwxrwxrwx. 2 root root 6 Oct 19 11:46 /tmp/test/
[root@localhost home]# cd /tmp/test/
[root@localhost test]# ls -l
-rw-rw-r--. 1 robin robin 0 Oct 19 11:48 aa.txt
robin
2.给/tmp/test目录添加sgid权限
robin帐号在/tmp/test下创建 cc.txt 问:所属组是谁?
[root@localhost test]# chmod g+s /tmp/test/
[root@localhost test]# ls -ld /tmp/test/
drwxrwsrwx. 2 root root 20 Oct 19 11:48 /tmp/test/
[robin@localhost ~]$ touch /tmp/test/cc.txt
[robin@localhost ~]$ ls -l /tmp/test/cc.txt
-rw-rw-r--. 1 robin root 0 Oct 19 11:49 /tmp/test/cc.txt
root
3.添加组upup
修改/tmp/test目录的所属组为upup
chown .upup /tmp/test
robin帐号在/tmp/test下创建 tt.txt 问:所属组是谁?
cc.txt所属组会不会变化?
[root@localhost test]# chown :upup /tmp/test/
[root@localhost test]# ls -ld /tmp/test/
drwxrwsrwx. 2 root upup 34 Oct 19 11:49 /tmp/test/
[robin@localhost ~]$ touch /tmp/test/tt.txt
[robin@localhost ~]$ ls -l /tmp/test/tt.txt
-rw-rw-r--. 1 robin upup 0 Oct 19 11:52 /tmp/test/tt.txt
[robin@localhost ~]$ ls -l /tmp/test
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:48 aa.txt
-rw-rw-r--. 1 robin root 0 Oct 19 11:49 cc.txt
-rw-rw-r--. 1 robin upup 0 Oct 19 11:52 tt.txt
upup 没变
root帐号在/tmp/test下创建 abc.txt 所属组是谁?
root受不受sgid限制?
[root@localhost test]# touch abc.txt
[root@localhost test]# ls
aa.txt abc.txt cc.txt tt.txt
[root@localhost test]# ls -l
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:48 aa.txt
-rw-r--r--. 1 root upup 0 Oct 19 11:54 abc.txt
-rw-rw-r--. 1 robin root 0 Oct 19 11:49 cc.txt
-rw-rw-r--. 1 robin upup 0 Oct 19 11:52 tt.txt
upup 受限
作用:任何用户在拥有t权限目录下创建的文件,只能自己删除,其他人无权删除
作用位置:other
作用对象:目录
chmod o+t directory
1.添加帐号robin 和 zorro
创建目录/tmp/test 权限设置为 777
robin在/tmp/test/目录下创建文件 aa.txt zorro帐号能不能删除aa.txt?
[root@localhost test]# ll -d /tmp/test
drwxr-xr-x. 2 root root 6 Oct 19 13:45 /tmp/test
[root@localhost test]# chmod 777 /tmp/test/
[root@localhost test]# ll -d /tmp/test
drwxrwxrwx. 2 root root 6 Oct 19 13:45 /tmp/test
[robin@localhost ~]$ cd /tmp/test/
[robin@localhost test]$ touch aa.txt
[robin@localhost test]$ ll
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 13:47 aa.txt
[zorro@localhost ~]$ cd /tmp/test/
[zorro@localhost test]$ ll
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 13:47 aa.txt
[zorro@localhost test]$ rm -rf aa.txt
[zorro@localhost test]$ ll
total 0
可以
2.在/tmp/test目录上添加t权限
robin在/tmp/test/目录下创建文件 aa.txt zorro帐号能不能删除aa.txt?
[root@localhost test]# chmod o+t /tmp/test/
[root@localhost test]# ll -d /tmp/test
drwxrwxrwt. 2 root root 6 Oct 19 13:48 /tmp/test
[root@localhost test]#
[robin@localhost test]$ mkdir aa.txt
[robin@localhost test]$ ll
total 0
drwxrwxr-x. 2 robin robin 6 Oct 19 13:49 aa.txt
[zorro@localhost test]$ rm -rf aa.txt
rm: cannot remove ‘aa.txt’: Operation not permitted
不能 t权限
3.root帐号能不能删除/tmp/test/目录下的文件?
可以 root不受约束
4.添加帐号king 设置/tmp/test目录的拥有者为king
chown king /tmp/test king帐号能不能删除/tmp/test/目录下的文件?
[root@localhost test]# chown king /tmp/test/
[root@localhost test]# ll -d /tmp/test/
drwxrwxrwt. 2 king root 6 Oct 19 13:51 /tmp/test/
[king@localhost test]$ rm -rf aa.txt/
[king@localhost test]$ ll
total 0
可以
高级权限数字表示
suid -----------> 4
sgid -----------> 2
stickey---------> 1
/tmp 1777
4777
2777
1777
3777
[root@localhost tmp]# chmod u+s aa.txt
[root@localhost tmp]# ll aa.txt
-rwSr--r-- 1 root root 0 5月 18 11:51 aa.txt
[root@localhost tmp]# chmod +x aa.txt
[root@localhost tmp]# ll aa.txt
-rwsr-xr-x 1 root root 0 5月 18 11:51 aa.txt
[root@localhost tmp]# ll -d test/
drwxrwsrwt 2 root root 6 5月 18 11:52 test/
[root@localhost tmp]# chmod g-x,o-x test/
[root@localhost tmp]# ll -d test/
drwxrwSrwT 2 root root 6 5月 18 11:52 test/
1.列举高级权限都有哪些?并解释每个权限的功能
SUID 任何用户在运行拥有SUID的权限命令(二进制可执行文件),都以该命令的拥有者身份执行
SGID 任何用户在拥有SGID权限的目录下,创建的文件都要继承目录的组
Sticky 任何用户在拥有t权限目录下创建的文件,都只能自己删除,其他无权删除。
2.哪个高级权限可以限制root账号?
3.分别写出每个高级权限的数字表示方法
suid -----------> 4
sgid -----------> 2
stickey---------> 1
4.写出以下数字表示的权限
1777
2777
4777
3777
5.当高级权限位显示为大写时表示什么含义?
高级权限大小写区分是否具有x权限
mount -t iso9660 /var/ftp/CentOS7-2.iso /mnt
mount /var/ftp/CentOS7-2.iso /mnt
umount /mnt
mount /var/ftp/CentOS7-2.iso /mnt
umount /var/ftp/CentOS7-2.iso
umount -l /mnt 强制卸载
mount 查看挂在信息
nmap-6.40-7.el7.x86_64.rpm
包名-版本.系统版本.平台.rpm
rpm -ivh /mnt/Packages/nmap-6.40-7.el7.x86_64.rpm
-i 安装
-v 显示过程
-h 显示%
查询是否安装
rpm -q nmap
查询包的信息
rpm -qi nmap
查询安装位置
rpm -ql nmap
查看配置文件
rpm -qc nmap
查看帮助文档的位置
rpm -qd nmap
查询文件对应的软件包
rpm -qf /etc/man_db.conf
rpm -qf `which cat`
查询和vim相关软件
rpm -qa | grep vim
卸载
rpm -e nmap
查看未安装的软件
rpm -qpi httpd-2.4.6-40.el7.centos.x86_64.rpm
rpm -qpl httpd-2.4.6-40.el7.centos.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd-2.4.6-40.el7.centos.x86_64.rpm
警告:httpd-2.4.6-40.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-40.el7.centos.x86_64 需要
httpd-tools = 2.4.6-40.el7.centos 被 httpd-2.4.6-40.el7.centos.x86_64 需要
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-40.el7.centos.x86_64.rpm
警告:httpd-tools-2.4.6-40.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:httpd-tools-2.4.6-40.el7.centos ( 30%################################# [100%]
[root@localhost Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
[root@localhost Packages]# rpm -ivh httpd-2.4.6-40.el7.centos.x86_64.rpm
强制安装
rpm -ivh httpd-2.4.6-40.el7.centos.x86_64.rpm --force
不检查依赖关系卸载
rpm -e httpd-tools --nodeps
查看提供文件的包
[root@localhost test]# yum provides /etc/mime.types
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
mailcap-2.1.41-2.el7.noarch : Helper application and MIME type associations
: for file types
源 :CentOS7-2
匹配来源:
文件名 :/etc/mime.types
/etc/yum.repos.d/
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir old_repo
[root@localhost yum.repos.d]# mv * old-repo/
[root@localhost yum.repos.d]# touch local.repo
[root@localhost conf]# mount -t iso9660 /dev/cdrom /mnt
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/local.repo
[local_iso]
name=local_iso
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum clean all 清空yum缓存
已加载插件:fastestmirror, langpacks
正在清理软件源: local_iso
Cleaning up everything
Cleaning up list of fastest mirrors
[root@localhost yum.repos.d]# yum makecache
已加载插件:fastestmirror, langpacks
local_iso | 3.6 kB 00:00
(1/4): CentOS7.2/filelists_db | 2.9 MB 00:00
(2/4): CentOS7.2/group_gz | 155 kB 00:00
(3/4): CentOS7.2/primary_db | 2.8 MB 00:00
(4/4): CentOS7.2/other_db | 1.2 MB 00:00
Determining fastest mirrors
[root@localhost yum.repos.d]#
yum install httpd-devel 安装
yum install -y httpd-devel
yum reinstall httpd-devel
yum provides /etc/mime.types
yum remove httpd
yum group list
yum group install "开发工具"
yum可支持多库安装
[root@localhost yum.repos.d]# cat iso.repo
[CentOS7.2]
name=centos7.2
baseurl=file:///yum
enabled=1
gpgcheck=0
[test]
name=test
baseurl=ftp://172.16.8.100/rhel7u2
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# ls
iso.repo test test.repo
[root@localhost yum.repos.d]# cat iso.repo
[CentOS7.2]
name=centos7.2
baseurl=file:///yum
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# cat test.repo
[test]
name=test
baseurl=ftp://172.16.8.100/rhel7u2
enabled=1
gpgcheck=0
配置yum库时如果出现报错信息,可能是没有手动创建repo
需要使用createrepo命令创建依赖关系
[root@localhost yum.repos.d]# createrepo /cluster/
Spawning worker 0 with 170 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost ~]#
[root@localhost ~]# mkdir /cluster
[root@localhost ~]# cp /mnt/Packages/* /cluster/
^C
[root@localhost ~]# cd /cluster/
[root@localhost cluster]# ls
[root@localhost cluster]#
[root@localhost cluster]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
local.repo old_repo
[root@localhost yum.repos.d]# vim local.repo
[root@localhost yum.repos.d]# createrepo /cluster/
Spawning worker 0 with 170 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: cluster local_iso
Cleaning up list of fastest mirrors
Other repos take up 630 M of disk space (use --verbose for details)
[root@localhost yum.repos.d]# yum makecache
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
cluster | 2.9 kB 00:00:00
local_iso | 3.6 kB 00:00:00
(1/7): cluster/filelists_db | 102 kB 00:00:00
(2/7): cluster/other_db | 62 kB 00:00:00
(3/7): cluster/primary_db | 106 kB 00:00:00
(4/7): local_iso/group_gz | 165 kB 00:00:00
(5/7): local_iso/primary_db | 3.2 MB 00:00:00
(6/7): local_iso/filelists_db | 3.3 MB 00:00:00
(7/7): local_iso/other_db | 1.3 MB 00:00:00
Metadata Cache Created
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
cluster cluster 170
local_iso local iso 4,067
repolist: 4,237
[root@localhost yum.repos.d]#
1.写出挂载光盘或者镜像时的完整命令
mount -t iso9660 /dev/cdrom /mnt
2.解释以下安装软件时参数的功能
-ivh i install 安装 v 显示过程 h 百分比
-q 查询是否安装
-qi 查询包的信息
-ql 查询安装位置
-qf 查询文件对应的软件包
-qa 查询相关软件
-qc 查询配置文件
-qd 查询帮助文档的位置
-e 卸载
3.写出配置光盘或者镜像作为安装源的yum库配置过程
百度搜索华为镜像或者是阿里镜像 选择相对应的系统和版本,复制wget的命令 在自己的系统中运行,然后清空缓存 重新计算缓存
4.解释以下yum的参数分别代表什么含义
install 安装
reinstall 覆盖安装
provides
remove 移除删除
grouplist
groupinstall
5.手动建库时需要哪个命令支持?
createrepo 创建数据目录信息
[root@localhost tmp]# dd if=/dev/zero of=/tmp/data bs=1M count=200
# if表示in file
# of表示out file
du命令 可以查看文件的信息大小
du /tmp/data.gz
du -sh /etc/
gzip # 压缩后源文件不存在
gzip data # 压缩
gunzip data.gz # 解压
bzip2 # 压缩后源文件不存在
bzip2 data # 压缩
bunzip2 data.bz2 # 解压缩
[root@localhost ~]# touch /tmp/data/data
[root@localhost ~]# dd if=/dev/zero of=/tmp/data/data bs=1M count=200
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 4.46865 s, 46.9 MB/s
[root@localhost ~]# ls -lh /tmp/data/data
-rw-r--r--. 1 root root 200M Oct 20 13:51 /tmp/data/data
[root@localhost ~]# cd /tmp/data/
[root@localhost data]# ll
total 204800
-rw-r--r--. 1 root root 209715200 Oct 20 13:51 data
[root@localhost data]# gzip data
.
[root@localhost data]# ls -lh
total 200K
-rw-r--r--. 1 root root 199K Oct 20 13:51 data.gz
[root@localhost data]# gunzip data.gz
[root@localhost data]# ls -lh
total 200M
-rw-r--r--. 1 root root 200M Oct 20 13:51 data
[root@localhost data]# bzip2 data
[root@localhost data]# ls -lh
total 4.0K
-rw-r--r--. 1 root root 177 Oct 20 13:51 data.bz2
[root@localhost data]# bunzip2 data.bz2
[root@localhost data]# ls -lh
total 200M
-rw-r--r--. 1 root root 200M Oct 20 13:51 data
事实证明bzip的压缩效率更好一些
1.可以见琐碎文件,打包成一个文件.方便管理
2.可以提升传输速度
tar
c 创建 v 显示过程 f 文件
打包
tar -cvf boot.tar /boot/
查看
tar -tvf boot.tar
追加打包
tar -rvf boot.tar /tmp/data
解包
tar -xvf boot.tar
指定包的存储路径
tar -cvf /home/boot.tar /boot/
解包指定路径
tar -xvf boot.tar -C /home/
压缩打包:
tar -zcvf /tmp/boot.tar.gz /boot/
查看
tar -ztvf /tmp/boot.tar.gz
解压缩包
tar -zxvf /tmp/boot.tar.gz -C /home/
压缩打包:
tar -jcvf /tmp/boot.tar.bzip2 /boot/
查看
tar -jtvf /tmp/boot.tar.bzip2
解压缩包
tar -jxvf /tmp/boot.tar.bzip2 -C /home/
test.tgz test.tbz
1.压缩命令有哪些?分别对应的扩展名是什么?
gzip --------------> .gz
bzip2 ------------> .bz
2.使用tar命令打包时的这些参数分别什么含义
-c -v -f -t -r -x
-c 创建新的归档
-v 显示过程
-f 文件
-t 列出归档文件的内容
-r 将文件追加至存档的末尾
-x 从文档中提取文件
3.指定解包目录用什么参数?
zcvf -C
jcvf -C
4.写出将/boot 打包使用gzip 压缩,并将压缩包放在/tmp下的完整命令(包的名字为test.tar.gz)
tar -czvf /tmp//test.tar,gz -C /boot
5.将/tmp/test.tar.gz解压缩到/opt下
tar -xzvf /tmp/test.tar.gz -C /opt
tar -xvf lftp-4.7.7.tar.gz -C /usr/local/src/
[root@localhost lftp-4.7.7]# ./configure --prefix=/usr/local/lftp
[root@localhost lftp-4.7.7]# make
编译安装:
[root@localhost lftp-4.7.7]# make install
清除编译痕迹
[root@localhost lftp-4.7.7]# make clean
报错:
.......c
解决:
yum -y install gcc gcc-c++
报错:
configure: error: No terminfo, termcap or curses library found. Install ncurses-devel
解决
yum install termcap ncurses-devel
报错:
configure: error: cannot find readline library, install readline-devel package
解决
yum install readline-devel
报错:
configure: error: Package requirements (gnutls >= 1.0.0) were not met:
解决:
yum install gnutls-devel
rpm -e lftp
[root@localhost ~]# /usr/local/lftp/bin/lftp 10.10.11.250
lftp 172.16.110.1:/> get biji.txt 下载文件
lftp 172.16.110.1:/> mirror video 下载目录
[root@localhost /]# /usr/local/lftp/bin/lftp 172.16.110.1
lftp 172.16.110.1:~> lcd /root/ lcd切换目录
lcd 成功, 本地目录=/root
lftp 172.16.110.1:~> lcd /tmp
lcd 成功, 本地目录=/tmp
lftp 172.16.110.1:~>
lftp 172.16.110.1:/> mirror video/ -O /tmp/ 指定路径下载
[root@localhost /]# vim /etc/bashrc
PATH=$PATH:/usr/local/lftp/bin
export PATH
rm -rf /usr/local/lftp
[root@localhost software]# ./RealPlayer\®\;\ 11\ for\ Linux\ RealPlayer11GOLD.bin
[root@localhost software]# yum install glibc-2.17-157.el7_3.1.i686
[root@localhost software]# yum remove libstdc++-4.8.5-4.el7.x86_64
[root@localhost software]# yum install libstdc++-4.8.5-11.el7.i686
[root@localhost software]# realplay
[root@localhost software]# yum install libgdk-x11-2.0.so.0
[root@localhost software]# yum install gtk2-2.24.28-8.el7.i686
[root@localhost ~]# rpm -ivh pangox-compat-0.0.2-2.el7.i686.rpm
[root@localhost software]# yum install libcanberra-gtk2-0.30-5.el7.i686
[root@localhost ~]# rm -rf /usr/local/lftp/
lftp-3.5.1-2.fc6.src.rpm
安装:
[root@localhost software]# rpm -ivh lftp-3.5.1-2.fc6.src.rpm
生成:
[root@localhost ~]# ls -d /root/rpmbuild/
SOURCES 源代码和补丁
SPECS/lftp.spec 制作rpm包的配置文件
编译成rpm包
[root@localhost rpmbuild]# rpmbuild -bb /root/rpmbuild/SPECS/lftp.spec
[root@localhost rpmbuild]# ls /root/rpmbuild/RPMS/x86_64/lftp-*
/root/rpmbuild/RPMS/x86_64/lftp-3.5.1-2.el7.centos.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/lftp-debuginfo-3.5.1-2.el7.centos.x86_64.rpm
[root@localhost rpmbuild]# rpm -ivh /root/rpmbuild/RPMS/x86_64/lftp-3.5.1-2.el7.centos.x86_64.rpm
[root@localhost rpmbuild]# yum install perl-String-CRC32
[root@localhost ftp]# rpm -ivh /var/ftp/perl-String-CRC32-1.4-19.el7.x86_64.rpm
[root@localhost rpmbuild]# yum install perl-Digest-MD5
[root@localhost ~]# ps
PID TTY TIME CMD
2857 pts/0 00:00:00 bash
3753 pts/0 00:00:00 ps
PID 进程编号
TTY 占用的终端
TIME 占用CPU的时间
CMD 执行命令
ps
-e 系统中所有的进程
-f 详细信息
[root@localhost ~]# ps -ef | head
UID PID PPID C STIME TTY TIME CMD
UID 进程拥有者
PID 进程编号
PPID 父进程
C 占用cpu的百分比
STIME 进程启动时间
TTY 在那个终端上运行的
TIME 占用CPU的时间
CMD 执行命令
BSD风格
ps
a 所有在终端运行进程
u 详细信息 长格式显示
x 所有进程
[root@localhost ~]# ps aux | head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER 进程拥有者
PID 进程编号
%CPU 占用CPU的百分比
%MEM 占用物理内存的百分比
VSZ 预设内存(虚拟内存)
RSS 真实内存
TTY 运行终端
STAT 进程状态
START 进程启动时间
TIME 占用CPU时间
COMMAND 进程名称
此命令占用资源进程比较多
top - 14:20:12 up 42 min, 4 users, load average: 0.30, 0.27, 0.25
当前系统时间 运行了多久 登录用户 CPU平均负载
Tasks: 419 total, 2 running, 417 sleeping, 0 stopped, 0 zombie
进程总数 运行进程 417个休眠 停止 僵尸
%Cpu(s): 9.8 us, 3.0 sy, 0.0 ni, 83.5 id, 3.5 wa, 0.0 hi, 0.1 si, 0.0 st
用户态 内核泰 调整nice 空闲 等待io 硬中断 软中断 虚拟化偷取
KiB Mem : 4031780 total, 2625064 free, 580228 used, 826488 buff/cache
KiB Swap: 1023996 total, 1023996 free, 0 used. 3210724 avail Mem
kill -15 4302
kill -9 4349 强制杀死进程
pkill httpd 一直输入不显示信息
killall httpd 杀死进程后再次输入命令会显示no process found
xkill 图形化杀进程
[root@localhost ~]# yum install xclock
前台
[root@localhost ~]# xclock -update 1
后台
[root@localhost ~]# xclock -update 1 &
脱离终端运行
[root@localhost ~]# nohup xclock -update 1 &
[root@localhost ~]# xclock -update 1
ctrl+z
[root@localhost ~]# jobs
[1]+ 已停止 xclock -update 1
[root@localhost ~]# bg 1
[root@localhost ~]# fg 1
PROCESS STATE CODES
D uninterruptible sleep (usually IO)
不可终端休眠状态(通常IO)
R running or runnable (on run queue)
运行状态
S interruptible sleep (waiting for an event to complete)
可中断的休眠状态
T stopped by job control signal
切换后台
t stopped by debugger during the tracing
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
< high-priority (not nice to other users)
高优先级
N low-priority (nice to other users)
低优先级
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
is in the foreground process group
nice范围 -20~19
[root@localhost ~]# nice -n -20 xclock -update 1
[root@localhost ~]# renice 15 -p 5858
proc目录
cat /proc/cpuinfo
lm ---> 64位系统
vmx|svm ----> 虚拟化
1.什么是守护进程?
是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
2.ps -ef 解释每个字段的含义
-e 系统中的所有进程
-f 详细信息
3.ps aux解释每个字段的含义
-a 所有在终端运行的进程
-u 详细信息
-x 所有进程
4.top每个字段的含义
top - 14:20:12 up 42 min, 4 users, load average: 0.30, 0.27, 0.25
当前系统时间 运行了多久 登录用户 CPU平均负载
Tasks: 419 total, 2 running, 417 sleeping, 0 stopped, 0 zombie
进程总数 运行进程 417个休眠 停止 僵尸
%Cpu(s): 9.8 us, 3.0 sy, 0.0 ni, 83.5 id, 3.5 wa, 0.0 hi, 0.1 si, 0.0 st
用户态 内核泰 调整nice 空闲 等待io 硬中断 软中断 虚拟化偷取
KiB Mem : 4031780 total, 2625064 free, 580228 used, 826488 buff/cache
KiB Swap: 1023996 total, 1023996 free, 0 used. 3210724 avail Mem
PID USER
PR
NI
VIRT
RES
SHR
S
%CPU
%MEN
TIME+
COMMAND
5.解释前后台切换时这些指令的功能
ctrl+z 停止
jobs 查看运行
bg 切换后台
fg 切换前台
kill %1 杀死进程
6.解释以下字符代表什么状态?
D 不可终端休眠状态
R 运行状态
S 可中断的休眠状态
T 切换后台
t 在跟踪期间被调试停止
W
X 死亡(不被看见)
Z 不存在(“僵尸”)进程,终止但未被其父进程获取
< 高优先级
N 低优先级
L 将页面锁定到内存中(用于实时和自定义IO)
s
l
+
7.nice值得范围是多少?启动进程时如何定义nice值?如何重置nice值?
nice的范围-20 ~ 19
nice -n
renice
-l 统计行数
-c 统计字符
-w 统计单词数(连续的字符串)
[root@localhost ~]# cat -n /etc/passwd | head -20 |tail -2 |rev
[root@localhost ~]# cat -n /etc/passwd | head -20 |tail -2 | tac
[root@localhost ~]# cut -d: -f 1 /etc/passwd
[root@localhost ~]# head /etc/passwd | cut -d: -f 1-5
[root@localhost ~]# head /etc/passwd | cut -d: -f 1,5
-d 分割符
-f 取字段
-c 取字符
[root@localhost ~]# head /etc/passwd | cut -c 10 第10个
[root@localhost ~]# head /etc/passwd | cut -c 1-10 第1个到第10个
[root@localhost ~]# head /etc/passwd | cut -c 1,10 第1个和第10个
[root@localhost ~]# grep 'root' /etc/passwd 含有root的行
[root@localhost ~]# cat -n /etc/passwd | grep 'root'
[root@localhost ~]# grep -n 'root' /etc/passwd 显示行号
[root@localhost ~]# grep -v 'root' /etc/passwd 取反
[root@localhost ~]# grep ^'root' /etc/passwd ^以root开头的行
[root@localhost ~]# grep 'halt'$ /etc/passwd $以halt结尾的行
[root@localhost ~]# grep -i a /etc/passwd 忽略大小写
[root@localhost ~]# grep -A 3 halt /etc/passwd 向后显示3行
[root@localhost ~]# grep -B 3 halt /etc/passwd 向前显示3行
[root@localhost ~]# grep -C 3 halt /etc/passwd 显示前后三行
[root@localhost ~]# grep -x root /etc/passwd 完全匹配root
[root@localhost ~]# stat aa.txt
文件:"aa.txt"
大小:4 块:8 IO 块:4096 普通文件
设备:802h/2050d Inode:77530278 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2017-05-22 11:43:11.545941923 +0800
最近更改:2017-05-22 11:43:09.819870359 +0800
最近改动:2017-05-22 11:43:09.821870442 +0800
创建时间:-
[root@localhost ~]# sort aa.txt 默认按首字符排序
[root@localhost ~]# sort -n aa.txt 按整个数字排序
[root@localhost ~]# sort -n -u aa.txt -u 去掉重复行
[root@localhost ~]# sort -n -u -r aa.txt -r 逆序输出
[root@localhost ~]# sort -t: -k3 -n /etc/passwd -t 分隔符 -k 排序列
[root@localhost ~]# uniq aa.txt 默认去掉连续重复行
[root@localhost ~]# uniq -d aa.txt 显示重复行
[root@localhost ~]# uniq -d -c aa.txt -c 显示重复次数
1.统计你当前系统中可登录用户的数量
[root@localhost ~]# vim /etc/passwd
[root@localhost ~]# grep bash$ /etc/passwd | wc -l
7
[root@localhost ~]# grep -c bash$ /etc/passwd
7
[root@localhost ~]# cat /etc/passwd | cut -d: -f7 | sort |uniq -c
7 /bin/bash
1 /bin/sync
1 /sbin/halt
39 /sbin/nologin
1 /sbin/shutdown
2.[root@localhost ~]# ifconfig eno16777736 | awk -F' +' '/broadcast/{print $3}'
172.16.110.247
制作别名myip 显示ip地址
[root@localhost ~]# ifconfig eno16777736 | head -2| tail -1 | cut -d' ' -f 10
[root@localhost ~]# ifconfig eno16777736 |grep broadcast| cut -d' ' -f 10
172.16.110.247
[root@localhost ~]# alias myip="ifconfig eno16777736 |grep broadcast| cut -d' ' -f 10"
[root@localhost ~]# myip
172.16.110.247
3.[root@localhost ~]# stat aa.txt
文件:"aa.txt"
大小:4 块:8 IO 块:4096 普通文件
设备:802h/2050d Inode:77530278 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2017-05-22 11:43:11.545941923 +0800
最近更改:2017-05-22 11:43:09.819870359 +0800
最近改动:2017-05-22 11:43:09.821870442 +0800
创建时间:-
取出
11:43:11
11:43:09
11:43:09
[root@localhost ~]# stat aa.txt |grep '+0800'|cut -d' ' -f2|cut -d'.' -f1
13:48:17
13:48:16
13:48:16
[root@localhost ~]# stat aa.txt |awk -F' |[.]' '/+0800/{print $2}'
13:48:17
13:48:16
13:48:16
1.求passwd文件中uid最大用户的名字
[root@localhost ~]# sort -t: -k3 -n /etc/passwd | tail -1 | cut -d':' -f1
nfsnobody
2.求group文件中gid最小的组名和gid
[root@localhost ~]# sort -t: -k3 -n /etc/group | head -1 | cut -d':' -f1
root
3.求出系统中所有网卡的ip地址 (ifconfig获取所有网卡信息)
[root@localhost ~]# ifconfig | grep netmask | cut -d' ' -f 10
192.168.43.130
127.0.0.1
192.168.122.1
.bash_history 保存历史命令文件(当用户退出时记录)
.bash_logout 保存用户退出时执行的命令
vim .bash_logout
echo "byebye"
当用户退出时清除执行过的历史命令
rm -rf ~/.bash_history
env
HISTSIZE=1000 历史命名保存的数量
USER=root
PWD=/home/robin
HOME=/root
OLDPWD=/root
set 环境变量和非环境变量(自定义变量)
环境变量:父进程定义的环境变量,子进程可以继承
自定义变量:父进程定义的自定义变量,子进程不可以继承
.bashrc 保存用户定义的别名和函数
.bash_profile 保存用户搜索命令的路径
mkdir /home/robin/test/
vim /home/robin/test/test.sh
#!/bin/bash
echo "hello world"
chmod +x /home/robin/test/test.sh
vim /home/robin/.bash_profile
PATH=$PATH:/home/robin/test
export PATH
su - robin
test.sh
.bashrc shell级别环境变量配置文件
.bash_profile 登录级别环境变量配置文件
/etc/bashrc 全局shell级别环境配置文件
/etc/profile 全局登录级别环境配置文件
登录用户时环境配置文件加载顺序
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
su robin 和 su - robin
su robin shell级别的切换
.bashrc
/etc/bashrc
su - robin 登录级别的切换
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
1.当用户退出时,清除自己的操作痕迹
修改.bash_logout
添加
history -c
rm -rf ~/.bash_history
2.将lftp软件加入到搜索路径,对所有用户生效
因为是所有的用户
所以在全局配置目录下/etc/profile 在最后一行上添加
PATH=$PATH:/usr/local/lftp/bin/
export PATH
【注】
PATH=$PATH:跟上路径
Path后面一定要加上$path,不然会将之前的path路径覆盖掉,出现一些错误
3.定义别名la相当于ls -alh 只针对tom用户
因为是只针对一个用户
所以需要去家目录下 /home/robin/.bashrc中添加
alias myip="ifconfig ens33 | grep broadcast | cut -d' ' -f10"
【注】
如果过程中出现无法使用别名的命令,需要使用source /home/robin/.bashrc重新加载
如果一开始已经使用普通用户登录出现无法使用命令的时候,可以将普通用户退出重新登录做测试。
1.环境变量和非环境变量如何查询?
env
set
2.如何定义环境变量和非环境变量?
3.环境变量和非环境变量的区别是什么?
子进程能够继承
4.解释一下文件的功能?
.bash_history
.bash_logout
.bashrc
.bash_profile
/etc/bashrc
/etc/profile
5.将源码包安装的lftp软件命令的搜索路径添加到所有用户可以执行的环境配置文件
6.将高级命令作业中,查看所有网卡的命令,做成别名放到root的环境配置中
tab制表符的补齐功能:补齐命令 | 补齐文件名
[root@localhost ~]# systemctl restart vsftpd
history 查看执行过的历史命令
[root@localhost ~]# !1039 在执行一次第1039条命令
[root@localhost ~]# !! 在执行一次上一条命令
[root@localhost ~]# !sys 在执行一次以sys开头的命令
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-eno16777736
/etc/sysconfig/network-scripts/ifcfg-eno16777736
[root@localhost ~]# vim !$ 上一条最后一个参数
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
系统终端可以使用alt+.来调用上一条最后的指令
xshell使用esc+.
env 查看环境
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $SHELL
[root@localhost ~]# set 环境与非环境变量
环境变量:子进程可以继承父进程定义的环境变量,非环境变量不可以进程
环境便来:export x=100
自定义:x=100
用户自己的环境变量配置文件:
~/.bashrc shell级别环境变量配置文件
~/.bash_profile 登录级别环境变量配置文件
全局环境变量配置文件:
/etc/bashrc 全局shell级别环境变量配置文件
/etc/profile 全局登录级别环境变量配置文件
定向符
: 表示覆盖写入 1>
: 表示追加写入 1>>
1,2文件描述符号:
1 : 标准正确输出
2 : 标准错误输出
1>: 标准正确输出,如果文件存在则覆盖,如果文件不存在则创建
1>>: 标准正确输出,如果文件存在则追加,如果文件不存在则创建
2>: 标准错误输出,如果文件存在则覆盖,如果文件不存在则创建
2>>: 标准错误输出,如果文件存在则追加,如果文件不存在则创建
&> 标准正确和标准错误
2>&1 标准错误定向到表正确输出 afdas 1>/tmp/aa.txt 2>&1
[root@localhost ~]# cat if.sh
#!/bin/bash
if [ -f /tmp/kk.txt ]
then
echo "文件存在,显示详细信息.稍等......"
sleep 1
ls -l '/tmp/kk.txt'
else
echo "文件不存在,创建文件,稍等......"
sleep 1
touch /tmp/kk.txt
echo "创建成功"
fi
#!/bin/bash
#查找未使用的ip地址
for i in {1..254}
do
( if ping -c 1 172.16.110.$i &> /dev/null
then
echo "172.16.110.$i is used"
else
echo "172.16.110.$i is free"
fi ) &
done
1.解释以下名词
1>
1>>
2>
2>>
&>
2.1 2什么名字? >什么名字?
[root@localhost ~]# fdisk -l
[root@localhost ~]# df -Th
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):m
d delete a partition
l list known partition types
m print this menu
n add a new partition
p print the partition table
q quit without saving changes
w write table to disk and exit
t change a partition's system id
分区:
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (37890048-41943039,默认为 37890048):
将使用默认值 37890048
Last 扇区, +扇区 or +size{K,M,G} (37890048-41943039,默认为 41943039):+1G
分区 4 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):w
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
[root@localhost ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4
[root@localhost ~]# mkfs.xfs /dev/sda4
挂载使用:
[root@localhost ~]# mount /dev/sda4 /mnt/
[root@localhost ~]# umount /mnt
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 35842047 17408000 83 Linux
/dev/sda3 35842048 37890047 1024000 82 Linux swap / Solaris
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4
[root@localhost ~]# partx -d /dev/sda
partx: /dev/sda: error deleting partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e
已选择分区 4
起始 扇区 (37890048-41943039,默认为 37890048):
将使用默认值 37890048
Last 扇区, +扇区 or +size{K,M,G} (37890048-41943039,默认为 41943039):
将使用默认值 41943039
分区 4 已设置为 Extended 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 35842047 17408000 83 Linux
/dev/sda3 35842048 37890047 1024000 82 Linux swap / Solaris
/dev/sda4 37890048 41943039 2026496 5 Extended
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (37892096-41943039,默认为 37892096):
将使用默认值 37892096
Last 扇区, +扇区 or +size{K,M,G} (37892096-41943039,默认为 41943039):+1G
分区 5 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 35842047 17408000 83 Linux
/dev/sda3 35842048 37890047 1024000 82 Linux swap / Solaris
/dev/sda4 37890048 41943039 2026496 5 Extended
/dev/sda5 37892096 39989247 1048576 83 Linux
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):w
[root@localhost ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5
1.划分分区
3主分区 每个大小200M
1扩展分区,所有剩余空间
划分4个逻辑分区100M
2.将sdb5 和 sdb6格式化为xfs文件系统
挂载sdb5到/mnt目录 在/mnt目录下创建文件test.txt
挂载sdb6到/mnt目录 问能不能挂载? 如果可以,还能不能看到test.txt文件?
挂载在sdb5到/mnt目录 再将sdb5挂载到/opt目录 是否可以? 在/mnt和/opt下是不是都可以看到test.txt文件?
3.删除逻辑分区sdb7 查看哪个分区消失了?想想为什么?
1.理解磁盘的各种关键字扇区,磁道,柱面
2.理解什么是主分区,扩展分区,逻辑分区 msdos
3.简述划分主分区的过程
4.简述划分扩展分区的过程
5.简述划分逻辑分区的过程
6.将sdb划分为
3个主分区
一个扩展分区
3个逻辑分区
mount -t 文件系统类型 被挂载的设备 挂载点
[root@localhost ~]# mount /dev/sda5 /mnt/
[root@localhost ~]# umount /dev/sda5
[root@localhost ~]# umount /mnt
[root@localhost ~]# umount -l /opt/
[root@localhost ~]# mount -o rw,remount /opt/ 重新挂载
[root@localhost ~]# mount -o bind /root/ /tmp/ 挂载目录
划分两个逻辑分区sda5,sda6 分别格式化位xf文件系统
1.将sda5 挂载到/mnt 上 ,并在/mnt 创建文件test.txt
再将sda5挂载到/opt上,问能不能挂载?能不能看到test.txt文件?
2.将sda5挂载到/mnt上,并在/mnt 创建文件test.txt
将sda6挂载到/mnt上
问:能不能挂载? 能不能看到test.txt文件?
1./etc/rc.local(进入系统前,最后一个启动脚本)
mount -t xfs /dev/sda5 /mnt
mount -t iso9660 /var/ftp/CentOS7-2.iso /yum
chmod a+x /etc/rc.d/rc.local
2./etc/fstab
/dev/sda5 /mnt xfs defaults 0 0
/var/ftp/CentOS7-2.iso /yum/ iso9660 defaults 0 0
被挂载的设备 挂载点 文件系统 参数 dump备份 fsck检查
3.autofs(按需挂载服务)
安装软件:
[root@localhost etc]# yum install autofs
创建目录
[root@localhost ~]# mkdir /auto
主配置文件(定义按需挂载目录,定义对该目录挂载设备的文件)
[root@localhost etc]# vim /etc/auto.master
/test /etc/auto.test
[root@localhost etc]# vim /etc/auto.test
disk-5 -fstype=xfs,rw :/dev/sda5
重启autofs服务
[root@localhost etc]# systemctl restart autofs
自动卸载:
[root@localhost etc]# vim /etc/autofs.conf
timeout = 300
自定义卸载时间
vim /etc/auto.master
/test /etc/auto.test --timeout=10
每隔1妙执行一次mount命令
[root@localhost /]# watch -n 1 mount
使用autofs+yum结合使用
auto 实现镜像 按需挂载 /test/iso
yum
baseurl=file:///test/iso
[root@localhost /]# cat /etc/auto.master 【主配置文件】
/test /etc/auto.test --timeout=10
[root@localhost /]# cat /etc/auto.test
iso -fstype=iso9660,ro :/var/ftp/CentOS7-2.iso
[root@localhost /]# cat /etc/yum.repos.d/yum.repo
[local-yum]
name=autofs yum
baseurl=file:///test/iso
enabled=1
gpgcheck=0
[root@localhost /]# systemctl restart autofs
[root@localhost ~]# yum makecache
(sdb5和sdb6 一定有文件系统)
将分区sdb5通过rc.local文件实现自动挂载,挂载到/opt目录
将分区sdb6通过fstab文件实现自动挂载,挂载到/mnt目录
重启系统测试是否成功?
1.将上一章5,6,7这个三个逻辑分区,使用不同的方法实现自动挂载
如:
sdb5 rc.local方式
sdb6 fstab方式
sdb7 autofs方式
swap交换空间,是虚拟内存的表现形式。系统为了一些需要大量内存的使用,而将磁盘上的空间做内存使用,当物理内存不够用时,将
其中一些暂时不需要的数据交换到交换空间,也叫交换文件或页面文件中。
理解:我们知道Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存),常用的就
是buffer cache和page cache。即使你的程序运行结束后,Cache Memory也不会自动释放。
这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中
的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被
临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进
行Swap交换。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKEkAatl-1631085654926)(https://i.loli.net/2020/12/07/Al4ZqEo1mKXfO68.jpg)]
[root@localhost ~]# mkswap /dev/sda6
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=266ce265-7659-4e77-971e-44de60c5ab2d
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 4031780 888876 108384 12016 3034520 2897392
Swap: 1023996 0 1023996
[root@localhost ~]# swapon /dev/sda6
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 4031780 889560 107496 12068 3034724 2896656
Swap: 1535992 0 1535992
[root@localhost ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/sda3 partition 1023996 0 -1
/dev/sda6 partition 511996 0 -2
vim /etc/rc.local
swapon /dev/sda6
blkid /dev/sda6 查UUID
vim /etc/fstab
/dev/sda6 swap swap defaults 0 0
修改分区编号:
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):t
分区号 (1-6,默认 6):6
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w
命令(输入 m 获取帮助):p
缩小交换分区:
1.
[root@localhost ~]# swapoff /dev/sda6 取消激活交换分区
2.
删除永久激活设置
3.删除分区
1.查看你当前的交换分区大小 free -m
2.将交换分区扩大1G,并保证重启后依然有效
3.将交换分区还原
1.什么是交换分区?它的作用是什么?
2.将你当前的交换分区扩大到2GB,在缩小到1GB
磁盘阵列(Redundant Arrays of independent Disks,RAID),廉价冗余(独立)磁盘阵列。
RAID是一种把多块独立的物理硬盘按不同的方式组合起来形成一个硬盘组(逻辑硬盘),提供比单个硬盘更高的存储性能和数据备份技
术。RAID技术,可以实现把多个磁盘组合在一起作为一个逻辑卷提供磁盘跨越功能;可以把数据分成多个数据块(Block)并行写入/读出
多个磁盘以提高访问磁盘的速度;可以通过镜像或校验操作提供容错能力。具体的功能以不同的RAID组合实现。
在用户看来,RAID组成的磁盘组就像是一个硬盘,可以对它进行分区、格式化等操作。RAID的存储速度比单个硬盘高很多,并且可以提
供自动数据备份,提供良好的容错能力。
RAID级别,不同的RAID组合方式分为不同的RAID级别:
RAID 0:称为Stripping条带存储技术,所有磁盘完全地并行读,并行写,是组建磁盘阵列最简单的一种形式,只需要2块以上的硬盘即
可,成本低,可以提供整个磁盘的性能和吞吐量,但RAID 0没有提供数据冗余和错误修复功能,因此单块硬盘的损坏会导致所有的数据丢
失。(RAID 0只是单纯地提高磁盘容量和性能,没有为数据提供可靠性保证,适用于对数据安全性要求不高的环境)
RAID 1:镜像存储,通过把两块磁盘中的一块磁盘的数据镜像到另一块磁盘上, 实现数据冗余,在两块磁盘上产生互为备份的数据,其
容量仅等于一块磁盘的容量。当数据在写入一块磁盘时,会在另一块闲置的磁盘上生产镜像,在不影响性能情况下最大限度的保证系统的
可靠性和可修复性;当原始数据繁忙时,可直接从镜像拷贝中读取数据(从两块硬盘中较快的一块中读出),提高读取性能。相反的,
RAID 1的写入速度较缓慢。RAID 1一般支持“热交换”,即阵列中硬盘的移除或替换可以在系统运行状态下进行,无须中断退出系统。RAID
1是磁盘阵列中硬盘单位成本最高的,但它提供了很高的数据安全性、可靠性和可用性,当一块硬盘失效时,系统可以自动切换到镜像磁
盘上读写,而不需要重组失效的数据。
RAID 0+1:也被称为RAID 10,实际是将RAID 0和RAID 1结合的形式,在连续地以位或字节为单位分割数据并且并行读/写多个磁盘的同
时,为每一块磁盘做镜像进行冗余。通过RAID 0+1的组合形式,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供冗余能力,允
许一个以下磁盘故障,而不影响数据可用性,并且有快速读/写能力。RAID 0+1至少需要4个硬盘在磁盘镜像中建立带区集。RAID 0+1技
术在保证数据高可靠性的同时,也保证了数据读/写的高效性。
RAID 5:是一种存储性能、数据安全和存储成本兼顾的存储解决方案。RAID 5可以理解为是RAID 0和RAID 1的折衷方案,RAID 5至少需
要三块硬盘。RAID 5可以为系统提供数据安全保障,但保障程度要比镜像低而磁盘空间利用率要比镜像高。RAID 5具有和RAID 0相近似
的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信
息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低,是目前运用较多的一种解决方案。
1.数据冗余
2.读写加速
level 0
作用: 条带化
数量: 2块(最少)
size:500G 1T 2n
level 1
作用: 镜像
数量: 2块(最少)
size: 500G 500G n/2
level 5
作用: 带奇偶数校验的条带化
数量: 3块(最少)
size:500G n-1 1T
level 10
作用: raid1+raid0
数量: 4块(最少)
size:500G n/2
-C 创建 -l 级别 -n 数量
-D -s 查询
madm -D -s > /etc/mdadm.comf(配置文件,永久化软raid)
mdadm -D
mdadm -S
mdadm -A
格式化
mkfs.xfs /dev/md5
mount /dev/md5/mnt
模拟损坏
mdadm -f /dev/md5 /dev/sdb1
mdadm -r /dev/md5 /dev/sdb2
mdadm -a /dev/md5 /dev/sdb3
删除
mdadm -S /dev/md5
rm -rf /dev/md5
rm -rf /etc/mdadm.conf
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3
损坏
mdadm -f
查询
mdadm -D
移除
mdadm -r
添加
mdadm -a
创建raid 0
mdadm -C -n 2 -l 0 /dev/md0 /dev/sda5 /dev/sda6
查询
mdadm -D /dev/md0
显示扫描信息
mdadm -Ds
停止
mdadm -S /dev/md0
激活阵列
mdadm -A /dev/md0 /dev/sda5 /dev/sda6
删除
rm -rf /dev/md0
清除超级块信息
mdadm --zero-superblock /dev/sda5 /dev/sda6
raid1:
mdadm -C -n 2 -l 1 /dev/md1 /dev/sda5 /dev/sda6
raid5:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda5 /dev/sda6 /dev/sda7
rai10:
mdadm -C -n 4 -l 10 /dev/md5 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
模拟损坏:
创建
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7}
mkfs.xfs /dev/md5
mount /dev/md5 /mnt
损坏
mdadm -f /dev/md5 /dev/sda5
查询
mdadm -D /dev/md5
移除
mdadm -r /dev/md5 /dev/sda5
添加
mdadm -a /dev/md5 /dev/sda8
备用盘:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7} -x 1 /dev/sda8
mdadm -D /dev/md5
永久生效:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7} -x 1 /dev/sda8
[root@localhost ~]# vim /etc/mdadm.conf
DEVICE /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
[root@localhost ~]# mdadm -Ds >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
DEVICE /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
ARRAY /dev/md5 metadata=1.2 spares=1 name=localhost:5 UUID=5249b8cf:c2a5b49f:405a4a2c:2247d8c9
[root@localhost ~]#
1.卸载
2.停止
3.删除
4.清除超级块
1.简述raid0 raid1 raid5 raid10 各有什么功能?
2.分别做raid0 raid1 raid5 raid10 实验, 并模拟损坏
空间整合
比如拥有多块硬盘,每块500G 需要存用800G数据(一个文件)使用lvm可以将多个硬盘整合一个硬盘(映射)
在线扩容
当所有的硬盘都被占用但是还有剩余空间,但是不够存储下一个文件。在线扩容是指将在哪来的一块硬盘继续映射,实现在线操作。
真正使用的是存储使用在lv逻辑卷上。pv物理卷(硬盘)
1.整合磁盘空间
2.在线扩容
1.创建pv
pvcreate /dev/sda6
pvcreate /dev/sda7
2.查询pv
pvs
pvdisplay
1.创建vg
vgcreate vg0 /dev/sda6 /dev/sda7
2.查询vg
vgs
vgdisplay
1.创建
lvcreate -L 700M -n lv0 vg0
-L size
-n name
2.查询
lvs
lvdisplay
mkfs.xfs /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt/
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 17.00g 4.00m
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <17.01 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 4353
Free PE 1
Allocated PE 4352
PV UUID YyE9qc-2eXX-uKEx-ke46-1SmJ-JAvC-Kz4ELV
"/dev/sdb1" is a new physical volume of "200.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 200.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID pifj7L-U0wI-56Ye-z4UK-jurn-UUYW-JXB2DQ
"/dev/sdb2" is a new physical volume of "200.00 MiB"
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name
PV Size 200.00 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID YqBbzE-kH9M-TKw4-aaOY-0qll-VI7H-n5Mh9z
[root@localhost ~]# vgcreate vg0 /dev/sdb1 /dev/sdb2
Volume group "vg0" successfully created
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 17.00g 4.00m
vg0 2 0 0 wz--n- 392.00m 392.00m
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 392.00 MiB
PE Size 4.00 MiB
Total PE 98
Alloc PE / Size 0 / 0
Free PE / Size 98 / 392.00 MiB
VG UUID PIlqUS-XBUn-vuNG-lTX7-llEJ-4XQy-A2zxdz
--- 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 17.00 GiB
PE Size 4.00 MiB
Total PE 4353
Alloc PE / Size 4352 / 17.00 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID tSRioI-5Wog-T6VE-Xn6I-ixfe-Ab7T-27fztD
[root@localhost ~]# lvcreate -L 300M -n lv0 vg0
WARNING: xfs signature detected on /dev/vg0/lv0 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/vg0/lv0.
Logical volume "lv0" created.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 17.00g 4.00m
/dev/sdb1 vg0 lvm2 a-- 196.00m 0
/dev/sdb2 vg0 lvm2 a-- 196.00m 92.00m
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 15.00g
swap centos -wi-ao---- 2.00g
lv0 vg0 -wi-a----- 300.00m
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/vg0/lv0
LV Name lv0
VG Name vg0
LV UUID iC34hY-vsB0-27wW-96WR-z654-7eCJ-BwABhT
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-10-27 14:18:17 +0800
LV Status available
# open 0
LV Size 300.00 MiB
Current LE 75
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID B1D1bt-ZpqV-BOmL-Pzdu-IHkQ-KSzb-TWL21r
LV Write Access read/write
LV Creation host, time localhost, 2020-10-13 19:28:49 +0800
LV Status available
# open 1
LV Size 15.00 GiB
Current LE 3840
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID BezNT5-9oex-9bMN-F01G-pV59-jQVe-2HYZiR
LV Write Access read/write
LV Creation host, time localhost, 2020-10-13 19:28:49 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
[root@localhost ~]# mount /dev/vg
vg0/ vga_arbiter
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/
mount: /dev/mapper/vg0-lv0 is write-protected, mounting read-only
mount: unknown filesystem type '(null)'
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 974M 0 974M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 980M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 15G 4.6G 11G 31% /
/dev/sda1 497M 164M 334M 33% /boot
tmpfs 199M 12K 199M 1% /run/user/42
tmpfs 199M 0 199M 0% /run/user/0
[root@localhost ~]# mkfs.xfs /dev/vg0/lv0
meta-data=/dev/vg0/lv0 isize=512 agcount=4, agsize=19200 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=76800, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 974M 0 974M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 11M 980M 2% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 15G 4.6G 11G 31% /
/dev/sda1 xfs 497M 164M 334M 33% /boot
tmpfs tmpfs 199M 12K 199M 1% /run/user/42
tmpfs tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/vg0-lv0 xfs 297M 16M 282M 6% /mnt
[root@localhost ~]#
1.lvm块设备在线扩容
2.文件系统的在线扩容
lvm块设备在线扩容
前提vg是有可用空间
lvextend -L +200M /dev/vg0/lv0
文件系统的在线扩容
xfs_growfs /dev/vg0/lv0
1.有额外分区或者磁盘
2.创建成pv
3.扩容
vgextend vg0 /dev/sda8
[root@localhost ~]# pvcreate /dev/sdb5
WARNING: xfs signature detected on /dev/sdb5 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb5.
Physical volume "/dev/sdb5" successfully created.
[root@localhost ~]# vgextend vg0 /dev/sdb5
Volume group "vg0" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 17.00g 4.00m
vg0 3 1 0 wz--n- 588.00m 268.00m
1.指定设备移动数据
pvmove /dev/sda6 /dev/sdb
2.不指定设备移动
pvmove /dev/sda7
vg移除pv
vgreduce vg0 /dev/sda{6,7,8}
删除lv
1.umount /dev/vg0/lv0
2.lvremove /dev/vg0/lv0
3.vgremove vg0
4.pvremove /dev/sda{6,7,8}
lvm快照snapshot
vgcreate vg0 /dev/sdb
lvcreate -L 500M -n /dev/vg0/lv0 vg0
mkfs.xfs /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt/
lvcreate -L 50M -s -n /dev/vg0/lv0-s0 /dev/vg0/lv0
1.只使用快照,源lv不动
快照内文件修改,不影响源lv数据,快照空间使用100%,快照自动损坏
创建lv0,挂载,添加数据
创建快照
挂载快照
在快照内添加数据,达到%100,快照损毁
2.只使用源lv,快照作为备份
快照作为备份,空间最好大于数据大小,还要注意选择服务器最空闲时间
多用备份
创建lv0,挂载,添加数据
创建快照,作为备份
删除原lv0内的内容
使用快照恢复数据
注意
再备份过程中,如原lv有大量数据写入,可能造成快照使用率达到100%,损毁
快照大小,要大于备份数据大小
快照大小要足够大...
pvcreate /dev/sda6 /dev/sda7
vgcreate vg0 /dev/sda{6,7}
lvcreate -L 500M -n lv0 vg0
mkfs.ext4 /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt/
lvextend -L +200M /dev/vg0/lv0
在线扩容
lvextend -L +200M /dev/vg0/lv0
resize2fs /dev/vg0/lv0 600M 指定大小
resize2fs /dev/vg0/lv0 扩大lv的空间
离线缩小
umount /mnt/
e2fsck -f /dev/vg0/lv0
resize2fs /dev/vg0/lv0 200M
lvresize -L 200M /dev/vg0/lv0
快照同时挂载
lvcreate -L 50M -s -n /dev/vg0/lv0-s0 /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt/
mount /dev/vg0/lv0-s0 /opt/
1.简述lvm的功能和作用
2.使用硬盘sdb sdc sdd创建lvm,并实现在线扩容lv 和 在线扩容vg
i 不允许对文件做以下操作:
不能删除
不能修改
不能剪切
不能重命名
如果是目录: 不能创建新文件
chattr +i file/dir
lsattr file/dir 查看文件命令lsattr
a 不允许对文件做以下操作:
不能删除
不能修改
不能剪切
不能重命名
可以追加新内容
如果是目录: 可以创建新文件
chattr +a file/dir
xfs的facl(xfs默认支持facl)
setfacl -m u:robin:rw aa.txt 设置用户
setfacl -m u:zorro:rw aa.txt
setfacl -m g:upup:rw aa.txt 设置组
setfacl -m m:r aa.txt 设置mask
setfacl -x robin aa.txt 删除某个用户额外的权限
setfacl -x g:upup aa.txt 删除组的额外权限
setfacl -b aa.txt 删除所有额外权限及取消+标记
建立三个普通用户 seker,zorro,shrek.用 root 用户在/root 目录中建立一个文件 abc.txt使 seker 用户既能读又能写 abc.txt 文件,但不能删除
使 zorro 用户只能读取,不能写也不能删这个文件
使 shrek 用户只能删除,不能读写这个文件.
以上三个条件同时成立
/root r-xrwxr-x root root
/root/abc.txt rw-r----- seker zorro
seker seker
zorro zorro
shrek shrek
chown seker /root/abc.txt
chown .zorro /root/abc.txt
chmod 640 /root/abc.txt
chmod g+w /root
usermod -a -G root shrek
chmod o+rx /root
用facl完成上题:
setfacl -m u:seker:rw /root/abc.txt
setfacl -m u:seker:rx /root
setfacl -m u:zorro:r /root/abc.txt
setfacl -m u:zorro:rx /root
setfacl -m u:shrek:--- /root/abc.txt
setfacl -m u:shrek:rwx /root
继承权限:
setfacl -m u:robin:rwx dir
setfacl -m d:u:robin:rwx dir
1.简述setfacl能解决什么问题?
其他的权限所不具备的功能
2.在/tmp目录下创建文件aa.txt,拥有者root 所属组root 权限600
要求:
robin用户可以读写/tmp/aa.txt
zorro用户可以读写/tmp/aa.txt
upup组的tom和jerry只可以读aa.txt文件
3.在/tmp目录下创建目录test,
要求:
robin用户可以读写删除/tmp/test下的所有新建文件
磁盘配额从字面上看就是给一个磁盘配置多少额度,而quota就是有多少限额的意思。所以总的来说就是限制用户对磁盘空间的使用量。
因为Linux是多用户多任务的操作系统,许多人公用磁盘空间,举个例子像/home目录是存放普通用户家目录的地方,我们假如home目录一共有10G空间,而home下一共有三个用户,那么正常划分的话每个人应该是分得大概333M空间,但是其中有个用户在家目录下存放了很多音频文件占了8G的空间,这样的话对其他用户就显得不公平,而如果想要磁盘容量公平的分配,这个时候就要靠quota来实现了。
[root@localhost /]# mount -o usrquota /dev/sda5 /mnt/
[root@localhost /]# edquota -u robin /mnt
Disk quotas for user robin (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 0 50M 100M 0 10 20
[root@localhost /]# repquota -u /mnt
[root@localhost mnt]# quotaon /mnt/
测试
测试空间配额
su - robin
dd if=/dev/zero of=/mnt/data bs=120M count=1
dd: 写入"/mnt/data" 出错: 超出磁盘限额
测试文件个数配额
touch /mnt/abc{1..25}.txt
group配额:
group upup
useradd -g upup king
useradd -g upup zorro
开启组配额
[root@localhost /]# mount -o grpquota /dev/sda5 /mnt/
配置组配额
[root@localhost /]# edquota -g upup
Disk quotas for group upup (gid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 0 51200 102400 0 10 20
查询配额的使用情况
[root@localhost /]# repquota -g /mnt
激活组配额
[root@localhost /]# quotaon -g /mnt/
测试:
[root@localhost ~]# su - king
[king@localhost mnt]$ dd if=/dev/zero of=/mnt/data1 bs=80M count=1
[root@localhost ~]# su - zorro
[zorro@localhost ~]$ dd if=/dev/zero of=/mnt/data2 bs=80M count=1
测试配额空间为共用
设置宽限时间
[root@localhost ~]# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sda5 30seconds 7days
测试:
1.开启配额功能:
[root@localhost /]# mount -o usrquota /dev/sda5 /mnt/
2.设置用户配额:
[root@localhost /]# edquota -u robin /mnt
Disk quotas for user robin (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 0 50M 100M 0 10 20
3.查询配额的使用情况
[root@localhost /]# repquota -u /mnt
4.启动配额:
[root@localhost mnt]# quotaon /mnt/
测试:
测试空间配额
su - robin
激活软限
dd if=/dev/zero of=/mnt/data1 bs=60M count=1
repquota 去查看quota的信息 grace时间变成none
repquota /mnt 查看配额情况
改宽限时间
edquota -t
剩余40M 不可用
删除文件到软限以下
恢复可用空间
练习
1.解释磁盘配额的功能?可以对什么进行限制?
2.对分区sdb1进行配额
robin用户最多可以使用100M空间,软限制自定义
zorro用户最多可以创建100个文件,软限制自定义
[root@localhost /]# parted /dev/sdb ---------------------------------分区命令
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel ------------------------------------------------选择分区表类型
新的磁盘标签类型? gpt
(parted) print ------------------------------------------打印分区表信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
(parted) mkpart
分区名称? []? sdb1
文件系统类型? [ext2]? xfs
起始点? 1
结束点? 500M
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 500MB 499MB xfs sdb1
(parted) mkpart
分区名称? []? sdb2
文件系统类型? [ext2]? xfs
起始点? 500M
结束点? 1000M
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 500MB 499MB xfs sdb1
2 500MB 1000MB 500MB sdb2
mkfs.xfs -f /dev/sdb1
mount /dev/sdb1 /mnt/
umount /dev/sdb1
删除
[root@localhost /]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space,
all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU
Parted
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 500MB 499MB xfs sdb1
2 500MB 1000MB 500MB sdb2
(parted) rm 2
(parted) rm 1
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
(parted)
[root@localhost /]# ls /dev/sdb*
/dev/sdb
查看超级块信息
tune2fs -l /dev/vg0/lv0
e2label /dev/vg0/lv0 test
mount LABEL=test /opt
最大挂载次数
tune2fs -c 20 /dev/vg0/lv0
当前挂载次数
tune2fs -C 1 /dev/vg0/lv0
更改卷标
tune2fs -L xxxx /dev/vg0/lv0
添加支持acl功能
tune2fs -o acl /dev/vg0/lv0
取消acl
tune2fs -o ^acl /dev/vg0/lv0
dumpe2fs /dev/sda8
EXT家族对文件格式化时预先规划出所有的inode/block及中介数据等,未来系统就可以直接取用,不需再分配。早期的磁盘容量不太大的时候这就可以,但随着时代的发展,数据量越来越大,磁盘容量越来越大。现在都已经说到PB,EB的数据了,那么TB以上等级的传统ext家族文件系统在格式化的时候就得废掉好多时间。。
另外一个原因,虚拟化的应用现在越来越广泛,作为虚拟化磁盘来源的巨型文件(单一文件好几个G及以上)也就越来越常见。这种巨型文件在处理上需要考虑到效能的问题,否则虚拟磁盘的效率就会不太好看。
所以,从centos7开始,预设的文件系统由EXT4变成了xfs这个较适合高容量磁盘与巨型文件效能较佳的文件系统了。
基本上XFS就是一个日志式文件系统,之所以现在把它当预设的文件系统,是因为它原本就是被开发用于高容量磁盘以及高性能文件系统之用的,相当适合于现在的环境。此外,几乎所有EXT4文件系统具有的功能,xfs都具备。
xfs文件系统在资料的分布上,主要规划为三个部分:资料区(data section),文件系统活动登录区(log section),实时运作(realtime section)。具体如下:
1. 资料区(data section)
这个区域基本上与之前说的EXT家族一样,包括inode、block、superblock等数据都放在这个区块。这个数据区与ext家族的block group类似,分多个储存区群组(allocation groups)。每个储存区群组中都包含了整个文件系统的superblock,剩余空间的管理机制,inode的分配与追踪。此外,inode,block都是系统需要用到时才会动态配置产生,所以格式化动作较EXT家族快了很多。
其实,只需要把这个数据区的储存区群组当成ext的block群组就可以了,只是inode与block是动态产生的,并非一开始于格式化就完成配置的。
2. 文件系统活动登录区(log section)
这个区域主要被用来记录文件系统的变化,具体原理和之前说的相同。
因为系统所有的动作都会在这个区域做个记录所以这个区域的磁盘活动是相当频繁的,xfs的设计在这里有一个巧妙之处,你可以指定外部的磁盘来作为xfs文件系统的日志管理区块。例如,你可以将SSD磁盘作为xfs的文件系统活动登录区,这样,当系统需要进行任何活动时,就可以更迅速的工作。
3. 实时运作区(realtime section)
当有文件要被建立时,xfs会在这个区段里找一个到数个extent区块,将文件放置在这个区块中,等到分配完毕后,再写入到data section的inode和block中。这个extent区块的大小得要在格式化的时候就先指定,最小值为4K最大可到1G。一般非磁盘阵列的磁盘默认为64K容量,而具有类似磁盘阵列的stripe情况下,则建议extent设定为与stripe一样大较佳。这个extent最好不要乱动,因为可能会影响到实体磁盘的效能。
4. 下面解释一下以上输出的信息:
isize : inode的容量,这里为256bytes。
agcount:储存区群组的个数,这里有4个。
agsize : 每个储存区群组里的block个数,这里为32000个。
sectsz:逻辑扇区(sector)的容量,这里为512bytes。
bsize:每个block的容量为4 k。
blocks:共有128000个block在这个文件系统内。
sunit,swidth:与磁盘阵列的stripe相关性较高,这里暂时不说明。
internal,指这个登录区的位置在文件系统内,而不是外部系统的意思,占用了4K * 853空间。
第9行:realtime区域,extent容量为4k,none=>不过目前没有使用。
xfs有个写入屏障,在有缓存的情况下开启barrier功能,保证数据安全,如果没有缓存可以关闭这个参数
mount -o nobarrier /dev/device /mount/point
xfs_quota
usrquota
groupquota
project
[root@localhost ~]# mount -o usrquota,grpquota /dev/sda3 /mnt/
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/
User quota on /mnt (/dev/sda3)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
Group quota on /mnt (/dev/sda3)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
[root@localhost ~]# xfs_quota -x -c 'limit bsoft=50K bhard=100K robin' /mnt
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/
User quota on /mnt (/dev/sda3)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
robin 0 52 100 00 [--------]
Group quota on /mnt (/dev/sda3)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
xfs_quota -x -c 'limit -g bsoft=1000m bhard=1200m accounting' /target/path
prject配额(对目录配额)
mkdir /quota
mount -o prjquota /dev/sda8 /quota
mkdir /quota/test
mount
/dev/sda8 on /quota type xfs (rw,relatime,attr2,inode64,prjquota)
[root@localhost ~]# echo 50:/quota/test >> /etc/projects
[root@localhost ~]# echo test:50 >> /etc/projid
[root@localhost ~]# cat /etc/projects
50:/quota/test
[root@localhost ~]# cat /etc/projid
test:50
xfs_quota -x -c 'project -s -p /quota/test 50'
xfs_quota -x -c 'limit -p bhard=100M 50' /quota
查询
xfs_quota -x -c 'report' /quota
1.XFS是一个单节点文件系统,如果需要多节点同时访问需要考虑使用GFS2文件系统
2.XFS支持16EB文件系统,而redhat仅支持100TB文件系统
3.XFS较少的适用在单线程元数据密集的工作负荷,在单线程创建删除巨大数量的小文件的工作负荷下,其他文件系统(ext4)表现的会更好一些
4.xfs文件在操作元数据时可能会使用2倍的CPU资源,在CPU资源有限制的情况下可以研究使用不同文件系统
5.xfs更多适用的特大文件的系统快速存储,ext4在小文件的系统或系统存储带宽有限的情况下表现的更好
[root@node6 ~]# yum install xfsprogs -y
[root@node6 ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=6016 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=24064, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=1200, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
日志分离
[root@node6 ~]# mkfs.xfs -l logdev=/dev/vdb2 /dev/vdb1 -f
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=6016 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=24064, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =/dev/vdb2 bsize=4096 blocks=24576, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs/
[root@node6 ~]# pvcreate /dev/vdb1 /dev/vdb2
[root@node6 ~]# vgcreate vgxfs /dev/vdb2 /dev/vdb1
[root@node6 ~]# lvcreate -l 25 -n lvxfs vgxfs
Logical volume "lvxfs" created
[root@node6 ~]# mkfs.xfs /dev/vgxfs/lvxfs
meta-data=/dev/vgxfs/lvxfs isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=1200, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@node6 ~]# mount /dev/vgxfs/lvxfs /xfs/
[root@node6 ~]# lvextend -l +100%FREE /dev/vgxfs/lvxfs
[root@node6 ~]# xfs_growfs /xfs/
meta-data=/dev/mapper/vgxfs-lvxfs isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal bsize=4096 blocks=1200, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 25600 to 47104
[root@node6 ~]# umount /xfs
[root@node6 ~]# xfs_repair /dev/vgxfs/lvxfs
[root@node6 ~]# mkfs.xfs -l logdev=/dev/vdb2 /dev/vdb1
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs
[root@node6 ~]# for FILE in file{0..3} ; do dd if=/dev/zero of=/xfs/${FILE} bs=4M count=100 & done
[root@node6 ~]# filefrag /xfs/file*
xfs_db -c frag -r /dev/sda2 磁盘碎片当前状态
[root@node6 ~]# xfs_fsr -v
[root@node6 ~]# umount /xfs
[root@node6 ~]# xfs_repair -n -l /dev/vdb2 /dev/vdb1
Phase 1 - find and verify superblock...
Phase 2 - using external log on /dev/vdb2
- scan filesystem freespace and inode maps...
und root inode chunk
Phase 3 - for each AG...
- scan (but don't clear) agi unlinked lists...
ocess known inodes and perform inode discovery...
- agno = 0
no = 1
- agno = 2
no = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
eck for inodes claiming duplicate blocks...
- agno = 0
no = 1
- agno = 2
no = 3
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...
- traversing filesystem ...
aversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify link counts...
No modify flag set, skipping filesystem flush and exiting.
[root@node6 ~]#
[root@node6 ~]# xfs_repair -l /dev/vdb2 /dev/vdb1
Phase 1 - find and verify superblock...
Phase 2 - using external log on /dev/vdb2
- zero log...
an filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
ocess known inodes and perform inode discovery...
- agno = 0
no = 1
- agno = 2
no = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
eck for inodes claiming duplicate blocks...
- agno = 0
no = 1
- agno = 2
no = 3
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
aversing filesystem ...
- traversal finished ...
ving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done
需要做出一个日志盘才可以进行之后的操作,不然会出现报错信息。
另外备份分为全备份 增量备份 差异备份
全备份:比如从星期一到星期三的数据进行全部的备份
增量备份:比如从星期二开始备份星期三的数据,只备份一天的
差异备份:从星期二到星期四的数据备份
备份
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs
[root@node6 ~]# yum install xfsdump
[root@node6 ~]# xfsdump -L full -M dumpfile -l 0 - /xfs | xz > /tmp/xfs.$(date +%Y%m%d).0.xz
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.0.4 (dump format 3.0) - Running single-threaded
xfsdump: level 0 dump of node6.uplooking.com:/xfs
xfsdump: dump date: Sat Sep 14 17:39:47 2013
xfsdump: session id: 75f91e6b-c0bc-4ad1-978b-e2ee5deb01d4
xfsdump: session label: "full"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 1677743680 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 1678152296 bytes
xfsdump: dump size (non-dir files) : 1678101072 bytes
xfsdump: dump complete: 152 seconds elapsed
xfsdump: Dump Status: SUCCESS
[root@node6 ~]#
[root@node6 ~]# xfsdump -I
file system 0:
fs id: 467c218c-22b5-45bc-9b0e-cd5782be6e2e
session 0:
mount point: node6.uplooking.com:/xfs
device: node6.uplooking.com:/dev/vdb1
time: Sat Sep 14 17:39:47 2013
session label: "full"
session id: 75f91e6b-c0bc-4ad1-978b-e2ee5deb01d4
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: stdio
start: ino 131 offset 0
end: ino 135 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 1678152296
mfile start: ino 131 offset 0
mfile end: ino 135 offset 0
media label: "dumpfile"
media id: de67b2b5-db72-4555-9804-a050829b2179
xfsdump: Dump Status: SUCCESS
[root@node6 ~]# rm -rf /xfs/*
[root@node6 ~]# xzcat /tmp/xfs.20130914.0.xz | xfsrestore - /xfs
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.0.4 (dump format 3.0) - Running single-threaded
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: node6.uplooking.com
xfsrestore: mount point: /xfs
xfsrestore: volume: /dev/vdb1
xfsrestore: session time: Sat Sep 14 17:39:47 2013
xfsrestore: level: 0
xfsrestore: session label: "full"
xfsrestore: media label: "dumpfile"
xfsrestore: file system id: 467c218c-22b5-45bc-9b0e-cd5782be6e2e
xfsrestore: session id: 75f91e6b-c0bc-4ad1-978b-e2ee5deb01d4
xfsrestore: media id: de67b2b5-db72-4555-9804-a050829b2179
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 4 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 33 seconds elapsed
xfsrestore: Restore Status: SUCCESS
[root@node6 ~]# ls /xfs
file0 file1 file2 file3
echo aaaaa >> a.txt
xfsdump -L all -M dumpfile -l 0 - /mnt | xz > /home/xfs.$(date +%Y%m%d).all0.xz
xzcat /home/xfs.20170609.all0.xz
echo bbbbbbb > b.txt
xfsdump -L add -M dumpfile -l 1 - /mnt | xz > /home/xfs.$(date +%Y%m%d).add1.xz
xzcat /home/xfs.20170609.add0.xz
xzcat /home/xfs.20170609.add1.xz
echo ccccc > c.txt
xfsdump -L add -M dumpfile -l 2 - /mnt | xz > /home/xfs.$(date +%Y%m%d).add2.xz
xzcat /home/xfs.20170609.add2.xz
echo dddddd > d.txt
xfsdump -L add -M dumpfile -l 3 - /mnt | xz > /home/xfs.$(date +%Y%m%d).add3.xz
xzcat /home/xfs.20170609.add3.xz
xfsdump -L cha -M dumpfile -l 1 - /mnt | xz > /home/xfs.$(date +%Y%m%d).cha1.xz
xzcat /home/xfs.20170609.cha1.xz
xzcat /home/xfs.20170609.all0.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add1.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add2.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add3.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.all0.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.cha1.xz | xfsrestore - /mnt/
ls
清除
rm -rf /var/lib
将/dev/sdb硬盘数据做完全备份
添加新文件1.txt
做增量备份
添加新文件2.txt
做增量备份
添加新文件3.txt
做增量备份
做差异备份
删除所有数据
方法1 恢复数据
全备+增量
方法2 恢复数据
全备+差异
符号连接(软链接)
ln -s /tmp/passwd /home/
硬链接
ln /tmp/passwd /tmp/passwd.link
1.命令相同 参数不同
软链接在创建必须绝对路径
硬链接都可以
2.硬链接的权限和源文件完全一致
软链接的链接文件权限永远是777 和源文件权限不同
3.硬链接可以删除,移动源文件
软链接不可以删除,移动源文件
4.软链接inode和源文件不同
硬链接的inode的源文件相同
5.软链接可以对目录生效
硬链接只可以对文件操作
6.软链接可以跨文件系统
硬链接不可以跨文件系统
unlink 链接文件名 取消链接
1.简述 软连接和硬链接区别. 如何操作
ifconfig
ip addr show
route -n 查看路由
ping
traceroute www.sina.com
arping -I eno16777736 192.168.200.54 查看ip地址是否冲突
arp -n
ens33每个字段的的含义
en表示的以太网有线接口
s代表的是可插拔
o为板载
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
NAME="eno16777736"
DEVICE="eno16777736"
ONBOOT=yes ---------------------------------------------------->是否在开机或重起时启动网卡
NETBOOT=yes
UUID="4dcebd9d-42ec-4f10-87c1-ac5708adee2d"
IPV6INIT=yes
BOOTPROTO=none ----------------------------------------------> dhcp static none
TYPE=Ethernet
IPADDR=192.168.200.222 --------------------------------> ip地址
NETMASK=255.255.255.0 --------------------------------> 子网掩码
GATEWAY=192.168.200.1 --------------------------------> 网关
重起网卡,重新加载配置文件
systemctl restart network
配置临时别名
ifconfig eno16777736:0 10.10.10.10/24
systemctl stop NetworkManager
cd /etc/sysconfig/network-scripts/
cp ifcfg-eno16777736 ifcfg-eno16777736:0
[root@localhost network-scripts]# vim ifcfg-eno16777736:0
NAME="eno16777736:0"
DEVICE="eno16777736:0"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=10.10.10.10
NETMASK=255.255.255.0
GATEWAY=10.10.10.1
TYPE=Ethernet #网卡类型:为以太网
PROXY_ METHOD=none #代理方式:关闭状态
BROWSER_ ONLY=no #只是浏览器:否
BOOTPROTO=dhcp #网卡协议DHCP动态主机配置协议
DEFROUTE=yes #默认路由:是
IPV4_ FAILURE_ FATAL=no #否开启IPV4致命错误检测:否
PV6INIT=yes # IPV6是否自动初始化:是
IPV6_ AUTOCONF="yes"IPV6是否自动配置:是
IPV6_ ADDR _GEN _MODE=stable- privacy # IPV6地址生成模型
stable-privacy是一种生成IPV6的策略
NAME=ens33 #网卡名字(与DEVICE- 致)
UUID=6ac17c2b-473e- -4894-811b-4940ee7bf455#唯一标识码
DEVICE=ens33#网卡设备
ONBOOT=yes #是否激活网卡
#IPADDR=192.168.43.128#ip地址(static设置 )
#NETMASK=255.255.255.0#子网掩码
#GATEWAY= 192.168.43.1#网关
#DNS1=114.114.114.114#dns地址解析
Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件
可以用命令行工具 nmcli 来控制 NetworkManager。
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT和COMMAND可以用全称也可以用简称,最少可以只用一个字母,建议用头三个字母。OBJECT里面我们平时用的最多的就是connection和device,这里需要简单区分一下connection和device。
device叫网络接口,是物理设备
nmcli device help
connection是连接,偏重于逻辑设置
nmcli connection help
多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。这样的好处是针对一个网络接口,我们可以设置多个网络连接,比如静态IP和动态IP,再根据需要up相应connection
nmcli dev status 列出所有设备
nmcli con show 列出所有链接
nmcli con up "id" 激活一个链接
nmcli con down "id" 取消激活链接
nmcli dev dis "dev" down一个网卡和临时关闭一个链接
nmcli net off 关闭所有管理接口
nmcli con add 添加一个新的链接
nmcli con mod 修改一个链接
nmcli con del "id" 删除一个链接
修改配置文件执行生效: systemctl restart network 或 nmcli con reload
nmcli命令生效:nmcli con down eth0 ; nmcli con up eth0
显示所有包括不活动连接
nmcli con show
显示所有活动连接
nmcli con show –active
显示设备状态
nmcli dev status
显示网络接口属性
nmcli dev show eno16777736
示例
创建新连接default,IP自动通过dhcp获取
nmcli con add con-name default type Ethernet ifname eth0
删除连接
nmcli con del default
创建新连接static ,指定静态IP,不自动连接
nmcli con add con-name static ifname eno16777736 autoconnect no type Ethernet ip4 192.168.100.1/24 gw4 192.168.100.254
con add – 添加新的连接
con-name – 连接名
type – 设备类型
ifname – 接口名
autoconnect no – 禁止开机自动启动
创建以个名字为home的,类型为以太网卡,绑定网卡为eth1,开机自动启动,定义ipv4地址和网关
nmcli con add con-name home ifname eno16777736 autoconnect yes type Ethernet ip4 192.168.100.1/24 gw4 192.168.100.254
查看网卡绑定信息
nmcli con show
启动home链接
nmcli con up home
这样,home接口已经生效,可以正常使用。但同一时间只能绑定在一个接口上。平时如果工作需要,可以多设置几套配置文件,环境需要时可以进行临时的切换。
当不需要再用时可以使用:nmcli connection delete home删除
添加一块新网卡
通过networkmanager 给信网卡设置ip地址
一个自动获取
一个静态ip IP地址为192.168.0.100
nmcli con mod“static” connection.autoconnect no
nmcli con mod “static” ipv4.dns 172.25.X.254
nmcli con mod “static” +ipv4.dns 8.8.8.8
nmcli con mod “static” -ipv4.dns 8.8.8.8
nmcli con mod “static” ipv4.addresses “172.25.X.10/24 172.25.X.254”
nmcli con mod “static” +ipv4.addresses 10.10.10.10/16
nmcli con mod eno16777736 +ipv4.addresses 10.1.1.1/24
ip addr s
nmcli con up eno16777736
ip addr s
主机名:
hostnamectl set-hostname robin.com
当前主机名和永久主机名
hostname robin.com
vim /etc/hostname
robin.com
vim /etc/hosts
192.168.200.222 robin.com
添加默认网关
route add default gw 192.168.200.222
route del default gw 192.168.200.222
1.添加新网卡
通过手动修改配置文件将IP地址设置为 172.16.10.100/16
NAME
TYPE
DEVICE
BOOTPROTO
ONBOOT
IPADDR
NETMASK
GATEWAY
DNS1
DNS2
2.添加新网卡
通过NetworkManager 设置两个配置文件一个 static 一个dhcp获取
3.写出A,B,C3类地址的范围,并写出每类地址的私有地址范围?
4.192.168.1.24/28 和 192.168.1.36/28 这两个地址可不可以通信?
重起系统
选择系统标题 ------->e 编辑
选择以下行
linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=1874f157-368e-4ead- 8ab2-2ef4a81e2019 ro rhgb quiet LANG=zh_CN.UTF-8 init=/bin/bash
ctrl+x 进入系统单用户模式
方法1:
修改bios,选择光盘启动
选择troubleshooting ------> rescue file system
进入修复模式
mount /dev/sda2 /mnt /mnt就是硬盘系统/目录
也可以选择使用 chroot /mnt 命令 切换到原来的系统
如果没有光盘,可以制作u盘启动盘
UltraISO(以管理员身份运行) ----> 打开iso ---> 启动------->写入硬盘映像
方法2:
通过网络上的live盘,进行修复
远程拷贝:
ssh 192.168.200.216
scp /etc/passwd 192.168.200.222:/tmp
不登录拷贝
scp 192.168.200.216:/etc/hosts /tmp/
模式修改(启动级别)
获取当前系统模式
systemctl get-default
设置当前系统为文本模式=level3
systemctl set-default multi-user.target
systemctl set-default graphical.target === 5级别
/usr/lib/systemd/system/runlevel0.target 关机
/usr/lib/systemd/system/runlevel1.target 单用户
/usr/lib/systemd/system/runlevel2.target 无网络文本
/usr/lib/systemd/system/runlevel3.target 有网络文本
/usr/lib/systemd/system/runlevel4.target 保留
/usr/lib/systemd/system/runlevel5.target 图像
/usr/lib/systemd/systemrunlevel6.target 重启
1.加电
2.bios系统(基本输入输出系统) boot(硬盘 u盘 网络 光盘)
3.引导程序(0磁道0扇区 512字节) 446引导程序 64分区表 2字节 magic number
4.通过boot分区 vmlinuz内核 initramfs硬件驱动 0号进程
5.1号进程(init ---- inittab----运行级别(0-6)) fstab
0关机 1单用户 2无网络的文本模式 3有网络文件模式 4保留 5图形 6重启
6.进程启动.....
7.rc.local
8.加载文本资源(终端)
9.加载图形资源
1.重起,网络启动,选择live盘
2.mount /dev/sda2 /mnt
3.chroot /mnt
4.passwd
5.重起正常进入系统
1.设置bios光盘启动系统
2.troubleshooting----》rescue
3.选择1之后 mount /mnt/sysim..
4.chroot /mnt/sysim..
5.passwd root
6.输入你的密码
7.重起正常进入系统
1.简述单用户模式进入方式
2.简述光盘修复模式的进入方式
3.在光盘修复模式下,修改自己的密码为空
[root@jc ~]# uname -r
3.10.0-1062.el7.x86_64
主版本号.次版本号-修订版本号.系统版本.平台
次版本号(奇数) 测试版
次版本号 (偶数) 发行版
lsmod 查看当前系统中已加载模块
modinfo ext4 查看模块信息
insmod /lib/modules/3.10.0-327.el7.x86_64/kernel/fs/ext4/ext4.ko 加载模块
rmmod ext4 卸载
modprobe ext4 动态加载
ls /lib/modules/3.10.0-327.el7.x86_64/
modules.dep
modules.dep.bin
depmod -a 可以创建modules.dep.bin 文件
[root@localhost ~]# cd /lib/modules
[root@localhost modules]# ls
3.10.0-1062.el7.x86_64
[root@localhost modules]# cd 3.10.0-1062.el7.x86_64/
[root@localhost 3.10.0-1062.el7.x86_64]# ls
build modules.block modules.devname modules.softdep vdso
extra modules.builtin modules.drm modules.symbols weak-updates
kernel modules.builtin.bin modules.modesetting modules.symbols.bin
modules.alias modules.dep modules.networking source
modules.alias.bin modules.dep.bin modules.order updates
[root@localhost 3.10.0-1062.el7.x86_64]# rm -rf modules.dep.bin
[root@localhost 3.10.0-1062.el7.x86_64]# ls
build modules.block modules.drm modules.symbols weak-updates
extra modules.builtin modules.modesetting modules.symbols.bin
kernel modules.builtin.bin modules.networking source
modules.alias modules.dep modules.order updates
modules.alias.bin modules.devname modules.softdep vdso
[root@localhost 3.10.0-1062.el7.x86_64]# depmod -a
[root@localhost 3.10.0-1062.el7.x86_64]# ls
build modules.block modules.devname modules.softdep vdso
extra modules.builtin modules.drm modules.symbols weak-updates
kernel modules.builtin.bin modules.modesetting modules.symbols.bin
modules.alias modules.dep modules.networking source
modules.alias.bin modules.dep.bin modules.order updates
[root@localhost 3.10.0-1062.el7.x86_64]#
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
永久保存内核参数
vim /usr/lib/sysctl.d/00-system.conf
net.ipv4.ip_forward = 1
直接生效
sysctl -p /usr/lib/sysctl.d/00-system.conf
练习:两台不同网段主机通信
A: 192.168.1.200/24
B: 10.10.3.61/24
1.通过静态路由
A:
ip route add 10.10.3.0/24 dev eno16777736
B:
ip route add 192.168.1.0/24 dev eno16777736
2. 通过网关通信
C:
网卡1: 192.168.1.1/24
网卡2: 10.10.3.76/24
开启路由转发: echo 1 > /proc/sys/net/ipv4/ip_forward
A:192.168.1.200/24
删除现有的默认网关
添加网关: ip route add default via 192.168.1.1/24 dev eno16777736
B:10.10.3.61/24
删除现有的默认网关
添加网关: ip route add default via 10.10.3.76/24 dev eno16777736
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
创建块设备文件和字符设备文件
查询块设备或者字符设备主从设备号:
vim /usr/share/doc/kernel-doc-3.10.0/Documentation/devices.txt
mknod -m 660 /dev/sda8 b 8 8
命令 权限 设备名 类型 主 次
chown .disk /dev/sda8
字符设备
mknod -m 666 /dev/null c 1 3 创建null设备
准备3个虚拟机 按下图设置ip地址
虚拟机1 虚拟机2 虚拟机3
网卡1 网卡1 网卡2 网卡1
192.168.100.100/24 192.168.100.1/24 172.16.10.1/24 172.16.10.100/24
通过静态路由让虚拟机1和虚拟机3通信
通过网关虚拟机2让虚拟机1 和 虚拟机3通信
[root@robin ~]# which useradd
/usr/sbin/useradd
[root@robin ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.g
[root@robin ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@robin ~]#
[root@robin ~]# locate aa.txt
/home/aa.txt
/root/aa.txt
[root@robin ~]# rm -rf /root/aa.txt
[root@robin ~]# locate aa.txt
/home/aa.txt
/root/aa.txt
updatedb 维护locate的索引
[root@robin ~]# locate aa.txt
/home/aa.txt
命令 路径 [参数] [值]
根据文件名
find / -name aa.txt
根据拥有者
find / -user robin
find / -user robin -ls
所属组
find / -group upup -ls
条件 -a -o
find / \( -user king -a -group upup \) -ls
find / \( -user king -o -group upup \) -ls
按类型
find / -type p -ls
按硬链接数
find / -links 20 -ls
按大小
[root@robin tmp]# find /tmp -size 30M
/tmp/30M
[root@robin tmp]# find /tmp -size +30M
/tmp/40M
/tmp/50M
[root@robin tmp]# find /tmp -size -30M
/tmp/10M
/tmp/20M
[root@robin tmp]# find /tmp -size +15M -a -size -45M
/tmp/20M
/tmp/30M
/tmp/40M
[root@robin tmp]# find /tmp -size -15M -o -size +45M
按时间:
find /tmp/ -mtime 3 正好3天
find /tmp/ -mtime +3 3天以前
find /tmp/ -mtime -3 3天以内
find /tmp -mtime +2 -a -mtime -5
按权限
find /tmp/ -perm 420 完全匹配
find /tmp/ -perm /+240 -ls 任意匹配
find /tmp/ -perm -240 -ls 子集匹配
exec 和 ok
find /tmp -name aa.txt -exec rm -rf {} \;
[root@robin tmp]# find /tmp -name cc.txt -ok rm -rf {} \;
< rm ... /tmp/cc.txt > ? no
[root@robin tmp]# find /tmp -name cc.txt -ok rm -rf {} \;
< rm ... /tmp/cc.txt > ? yes
避免返回字符长度过长
find / -type f | xargs file
cut -d: -f 1 /etc/passwd | xargs
cut -d: -f 1 /etc/passwd | xargs mkdir
whoami 当前用户身份
who i am 原始登录用户身份
who
w
查找系统中 最近1天修改过的文件 并拷贝到/tmp目录下
find / -mtime -1 -exec cp -r {} /tmp \;
查找系统中大于100k 小于200k的文件并拷贝到/tmp目录下
find / -\(size +100k -a -size -200k \) -exec cp {} /tmp \;
1.列举查找命令有哪些?各有什么功能?
2.查找系统中size大于10M的文件
find / -size +10M
3.查找系统中10天以前并且是普通文件的文件
find / -mtime +10 -a -type -f
4.找到系统中名字中含有root的文件
find / -name *root*
限制一天内的操作,不能继续第二天的操作。
创建计划任务
[root@robin tmp]# at 12:41
at> touch /tmp/at.txt
at> echo 123 >> /tmp/at.txt
at> <EOT> ------------------------------------>ctrl + d
job 1 at Tue Jun 13 12:41:00 2017
查询
[root@robin tmp]# at -l
1 Tue Jun 13 12:41:00 2017 a root
删除
[root@robin tmp]# atrm 2
存储位置
[root@robin tmp]# cat /var/spool/at/a00003017cca62
用户计划任务
创建计划任务
周期性任务,一天执行一次,一月执行一次…
* * * * *
五个*的作用:
#分0-59
#时0-23
#日1-31
#月1-12
#周0-7 0,7都代表周日
date >> /tmp/date.txt 每分钟
5 * * * * date >> /tmp/date.txt 每小时第5分钟
*/5 * * * * date >> /tmp/date.txt 每5分钟
10 10 * * * date >> /tmp/date.txt 每天的10点10分
10 10 10 * * date >> /tmp/date.txt 每月10号10点10分
10 10 10 10 * date >> /tmp/date.txt 每年的10月10号10点10分
10 10 10 10 6 date >> /tmp/date.txt 或者每周6的10点10分
10 10,15,20 10 * * date >> /tmp/date.txt 每月10号10点10分 15点10分 20点10分
10 10-20 10 * * date >> /tmp/date.txt 每月10号10点-20点 10分
使用tar命令 对你的boot目录备份
要求:你当前系统时间晚2分钟
备份文件放在/tmp目录下, 备份文件名字是当前系统时间 月-日-时-分-boot.tar.gz
[root@robin ~]# vim /tmp/backup.sh
#!/bin/bash
tar -zcvf /home/$(date +%m-%d-%H)-boot.tar.gz /boot
[root@robin ~]# chmod +x /tmp/backup.sh
[root@robin ~]# crontab -e
13 10 * * 3 /tmp/backup.sh
crontab -l 查询计划任务
crontab -r 删除所有计划任务
[root@robin home]# cat /var/spool/cron/root
date >> /tmp/date.txt
cron.monthly/ 每月要执行的
cron.weekly/ 每周要执行的
cron.daily/ 每天要执行的
cron.hourly/ 每小时要执行的
访问控制文件:/etc/cron.deny
写入该文件的用户不可以使用计划任务
日志: /var/log/cron
systemctl start crond
systemctl stop crond
systemctl restart crond
systemctl restart crond.service
systemctl enable crond.service
要求:
备份sdb文件系统 xfsdump
周1 全备
周2 增量
周3 增量
周四 差异
周5 增量
周6 增量
周7 增量
周1 全备
[root@server backup_scripts]# cat backup_full.sh
#!/bin/bash
xfsdump -L full -M dumpfile -l 0 - /mnt | xz > /tmp/mnt_backup/mnt.$(date +%Y%m%d).all_full.xz
touch /mnt/full.txt
[root@server backup_scripts]# cat backup_diff.sh
#!/bin/bash
xfsdump -L cha -M dumpfile -l 1 - /mnt | xz > /tmp/mnt_backup/mnt.$(date +%Y%m%d).diff.xz
touch /mnt/cha.txt
[root@server backup_scripts]# cat backup_add.sh
#!/bin/bash
num=`cat /tmp/backup_scripts/num.txt`
new_num=$(($num+1))
xfsdump -L add -M dumpfile -l $new_num - /mnt | xz > /tmp/mnt_backup/mnt.$(date +%Y%m%d).add${new_num}.xz
echo $new_num > /tmp/backup_scripts/num.txt
touch /mnt/${new_num}.txt
[root@server backup_scripts]#
rpm包日志目录:
var/log
日志服务的启动
systemctl restart rsyslog
配置文件
/etc/rsyslog.conf
日志默认存放位置
/var/log
日志文件配置格式
AAAA.BBBB CCCC
AAAA 产生日志的设备
BBBB 日志的级别
CCCC 保存日志的位置
产生日志的设备:authpriv mail cron uucp news local0-7用户自定义
日志级别:
debug 调试
info 正常
notice 稍微注意
warning 警告
error 错误信息
crit 危机信息
alert 必须注意
emerg 紧急信息
mail.info 表示记录日志时 记录info级别以上
mail.=info 只要info级别
mail.!=info 除了info级别
存放日志的位置:
1.发送终端上
*.info;mail.none;authpriv.none;cron.none /dev/tty3
2.发送给用户
*.info;mail.none;authpriv.none;cron.none robin
3.发送到文件
*.info;mail.none;authpriv.none;cron.none /tmp/log.log
客户端添加地址,服务端打开端口
服务端
vim /etc/rsyslog.conf
UDP
$ModLoad imudp
$UDPServerRun 514
systemctl restart rsyslog
客户端
UDP
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @192.168.200.222 # udp使用一个@符号
systemctl restart rsyslog
服务端
TCP
vim /etc/rsyslog.conf
$ModLoad imtcp
$InputTCPServerRun 514
systemctl restart rsyslog
客户端
TCP
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @@192.168.200.222 # TCP使用两个@符号
systemctl restart rsyslog
客户端添加地址,服务端打开端口
UDP 接收 mail日志
TCP 接收 secure日志
OSI七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
tcp/ip4层 5层
应用层
传输层
网络层
数据链路层
物理层
[root@robin logrotate.d]# cp yum test
[root@robin logrotate.d]# vim test
/tmp/test.log {
missingok 丢失不提示
notifempty 空文件不切
dateext 日期格式
daily
rotate 7
create 0777 root root
}
logrotate -f /etc/logrotate.d/test
1.解释日志服务配置文件的内容?
2.开启日志服务的远程日志(日志集中管理)
将mail的日志使用udp传输
将secure的日志使用tcp传输
3.对/tmp/robin.log文件设置轮转配置
要求:
1.丢失不提示
2.空文件不轮转
3.保存7分
4.新建日志文件权限 777 拥有者为robin 所属组为robin
5.按天轮转
DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,他提供了一种动态指定IP地址的配置参数的机制;是一种简化主机IP配置管理的IP标准。
工作原理
DHCP使用客户端/服务器模型(B/S),网络管理员建立一个DHCP服务器来为客户端分配IP,同时DHCP服务器以地址租约的形式将该配置提供给发出请求的客户端。
工作原理:
C <---------DHCP DISCOVER --------> S
C <-------- DHCP OFFER ------------> S
C <---------DHCP REQUEST ----------> S
C <---------DHCP ACK --------------> S
工作顺序
动态分配IP地址
实验环境
服务器和客户端仅主机方式连接
DHCP:
安装包:
yum -y install dhcp
端口(udp):67
配置文件:/etc/dhcp/dhcpd.conf
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
启动服务: systemctl restart dhcpd
日志:/var/log/messages
修改配置文件dhcpd.conf:
拷贝过来的文件可以全部删除,只是起到模板作用。
可以按照模板进行修改,然后将无用的信息全部删除处理
vim /etc/dhcp/dhcpd.conf
原文件数据信息(此处可以忽略):
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 10.152.187.0 netmask 255.255.255.0 {
}
# This is a very basic subnet declaration.
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
subnet 10.254.239.32 netmask 255.255.255.224 {
range dynamic-bootp 10.254.239.40 10.254.239.60;
option broadcast-address 10.254.239.31;
option routers rtr-239-32-1.example.org;
}
# A slightly different configuration for an internal subnet.
subnet 10.5.5.0 netmask 255.255.255.224 {
range 10.5.5.26 10.5.5.30;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers 10.5.5.1;
option broadcast-address 10.5.5.31;
default-lease-time 600;
max-lease-time 7200;
}
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
subnet 10.17.224.0 netmask 255.255.255.0 {
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}
[root@localhost ~]#
[root@localhost ~]# vim /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
fixed-address fantasia.fugue.com;
}
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
class "foo" {
match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
subnet 10.17.224.0 netmask 255.255.255.0 {
option routers rtr-224.example.org;
}
subnet 10.0.29.0 netmask 255.255.255.0 {
option routers rtr-29.example.org;
}
pool {
allow members of "foo";
range 10.17.224.10 10.17.224.250;
}
pool {
deny members of "foo";
range 10.0.29.10 10.0.29.230;
}
}
将其全部删除,然后再开始处理信息。
修改后的信息:
# 动态分配客户端主机的地址及掩码
subnet 192.168.40.0 netmask 255.255.255.0 {
# 分配给客户端的ip地址的范围
range 192.168.40.100 192.168.40.200;
# 设置客户端dns
option domain-name-servers 114.114.114.114;
option domain-name "internal.example.org";
# 配置默认客户端网关网关
option routers 192.168.40.1;
# 配置默认客户端广播地址
#option broadcast-address 192.168.40.254;
# 默认最短租约 单位:秒
default-lease-time 600;
# 最大租约 单位:秒
max-lease-time 7200;
}
# 重新启动dhcp服务
systemctl restart dhcpd
客户端添加dhcp服务
nmcli con add con-name dhcp ifname eno16777736 autoconnect no type Ethernet
nmcli con up dhcp
ip addr s
查看租约文件:
服务端:/var/lib/dhcpd/dhcpd.leases
客户端:/var/lib/dhclient/
指定ip地址分配
host client1{
# 设置一台客户端的Mac地址
hardware ethernet 00:0c:29:b8:ff:69;
# 指定这台客户端的ip地址
fixed-address 192.168.40.200;
}
【注】
配置过程中需要两台虚拟机,一台为服务器,一台为客户端。
服务器中安装dhcp包并修改dhcpd.conf文件,修改完重新启动
打开客户端,重新启动网络服务。同时可以再服务器端使用tail -f /var/log/messages动态查看进程信息。客户端每重启一次,在服务器端查看一次进程信息。
SSH的英文全称是(Secure SHell)。通过使用SSH,可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。telnet不安全,现在此命令多用于路由和交换机上。
SSH在Linux中的服务是sshd,安装openssh后才可开启
SSHD 远程登陆服务
安装包:
openssh-server-6.6.1p1-22.el7.x86_64 服务端
openssh-6.6.1p1-22.el7.x86_64 客户端
配置文件:
/etc/ssh/sshd_config
端口:22
启动服务:
systemctl restart sshd
日志:/var/log/secure
客户端
客户端登陆
ssh 192.168.200.227 使用的当前帐号作为登陆用户
ssh [email protected] 指定用户身份登陆
远程拷贝
scp /root/anaconda-ks.cfg 192.168.433.132:/tmp/ # 将本机的anaconda-ks.cfg拷贝到192.168.433.132:/tmp/目录下
7-1
[root@7-1 ~]# scp /root/anaconda-ks.cfg 192.168.43.132:/tmp
[email protected]'s password:
anaconda-ks.cfg
7-2
[root@7-2 ~]# ls /tmp/
anaconda-ks.cfg
ssh-UprH80wpCNGp
systemd-private-125feeb64b414d9baccf12a9180f2723-bolt.service-1Ym6s0
systemd-private-125feeb64b414d9baccf12a9180f2723-chronyd.service-PzwZ5t
systemd-private-125feeb64b414d9baccf12a9180f2723-colord.service-J4veRt
systemd-private-125feeb64b414d9baccf12a9180f2723-cups.service-lblstn
systemd-private-125feeb64b414d9baccf12a9180f2723-fwupd.service-rLvsNm
systemd-private-125feeb64b414d9baccf12a9180f2723-rtkit-daemon.service-Dl72t1
tracker-extract-files.0
tracker-extract-files.1000
vmware-root_752-2957190263
不登陆拷贝
scp 192.168.43.132:/etc/hosts /tmp/ # 将192.168.43.132的/etc/hosts 文件拷贝到本机的/tmp/目录下
[root@7-1 ~]# scp 192.168.43.132:/etc/hosts /tmp
[email protected]'s password:
hosts 100% 158 87.6KB/s 00:00
[root@7-1 ~]# ls /tmp/
hosts
ssh-ptEpDeACHqqm
systemd-private-0f24b70b183444348b75b77b372cfcea-bolt.service-6dQbCq
systemd-private-0f24b70b183444348b75b77b372cfcea-chronyd.service-Ot0PzF
systemd-private-0f24b70b183444348b75b77b372cfcea-colord.service-sxILiL
systemd-private-0f24b70b183444348b75b77b372cfcea-cups.service-qIgtnQ
systemd-private-0f24b70b183444348b75b77b372cfcea-fwupd.service-Gv22rx
systemd-private-0f24b70b183444348b75b77b372cfcea-rtkit-daemon.service-UK0uc0
tracker-extract-files.0
tracker-extract-files.1000
vmware-root_753-4290035625
远程执行命令
ssh 192.168.200.227 'useradd robin;echo 123 | passwd --stdin robin'
服务端:
vim /etc/ssh/sshd_config
Port 22222
客户端
ssh 192.168.200.222 -p 22222
远程拷贝
scp -P 22222 /etc/man_db.conf 192.168.200.222:/tmp/
自定义sshd日志(sshd rsyslog)
vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV
SyslogFacility local5
vim /etc/rsyslog.conf
local5.* /var/log/ssh.log
systemctl restart rsyslog
允许登陆帐号
Allowusers robin zorro
密钥登陆
1.生成密钥
[root@localhost ~]# ssh-keygen
2.将公钥拷贝到服务器
ssh-copy-id -i 192.168.200.227
服务器公钥名称
authorized_keys
服务器建立互信
1.ssh-keygen
2.拷贝公钥给自己
ssh-copy-id -i 192.168.200.222
加载私钥
[root@localhost ~]# ssh-add
scp -r /root/.ssh/ 192.168.200.227:/root/
只有在root目录权限为550时使用sshd的公钥才不会出现错误,若在别的权限时候出现错误,则需要修改权限。
[root@7-1 ~]# ll -ld /root/
dr-xr-x---. 15 root root 4096 Nov 5 00:40 /root/
NFS是Network File System的缩写,中文简称为网络文件系统。主要功能就是通过网络(一个局域网)让不用主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器,例如web)可以通过挂载的方式将NFS服务器共享的数据目录挂载到NFS客户端本地系统中,从客户端本地看,NFS服务器端共享目录就好像是在客户端自己的磁盘分区或者目录一样,而实际上确实远端的NFS服务器的目录。
NFS企业在企业中的应用场景,在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享中,例如BBS产品的图片、附件、头像(网站BBS的程序不要放在NFS共享中),然后前端所有节点在访问这些静态资源时都会读取NFS存储上的资源。
NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站应用频率更高。
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此就能够通过RPC实现服务端和客户端沟通端口信息。RPC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。
在启动NFS SERVER之前,首先要启动RPC服务(即portmap或rpcbind服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。
一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
NFS
网络文件系统:
安装包:
setup-2.8.71-6.el7.noarch
配置文件:
/etc/exports
端口:
2049
启动服务:
systemctl restart nfs
服务端:
配置:
vim /etc/exports
/nfs *(rw,sync)
/nfs 192.168.200.0/24(rw,sync)
/nfs 192.168.200.0/24(rw,sync) 10.10.10.0/24(ro)
/nfs 192.168.200.225(rw,sync)
/nfs 权限
/nfs *(rw,sync,no_root_squash)
客户端
mount -t nfs 192.168.200.222:/nfs /mnt/
测试:
3种方式实现nfs自动自动挂载
[root@7-2 nfs]# cd /mnt/
[root@7-2 mnt]# ls
auto fstab rc
[root@7-2 mnt]#
1.[root@7-2 ~]# vim /etc/fstab
192.168.43.131:/nfs /mnt/fstab nfs default 0 0
[root@7-2 ~]#mount -a
2.[root@7-2 ~]# vim /etc/auto.master
/mnt/auto /etc/auto.auto
[root@7-2 ~]# vim /etc/auto.auto
nfs -fstype=nfs,rw,sync 192.168.43.131:/nfs
[root@7-2 ~]# systemctl restart autofs
[root@7-2 ~]# cd /mnt/auto/
[root@7-2 auto]# cd nfs
[root@7-2 nfs]# ls
a.txt b.txt
3.[root@7-2 ~]# vim /etc/rc.local
mount -t nfs 192.168.43.131:/nfs /mnt/auto
NAS服务器(网络附加存储)
raid+lvm+nfs
raid5+lvm---->mount point----->nfs---------------->mount使用
【注】
3快硬盘或者分区做成raid5
做逻辑卷lvm
配置/nfs vim /etc/exports
NFS SMB
三台虚拟机,一台做dns(centos7-1) 一台做apache(centos7-2) ,一台做nas服务器(centos7-3)
[root@7-1 named]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
[root@7-1 named]# vim /etc/named.rfc1912.zones
zone "hello.com" IN {
type master;
file "hello.com.zone";
};
zone "world.com" IN {
type master;
file "world.com.zone";
};
[root@7-1 named]# vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.43.134
[root@7-1 named]# pwd
/var/named
[root@7-1 named]# ls
192.168.43.arpa data hello.com.zone named.localhost world.com.zone
chroot dynamic named.ca named.loopback youku.com.zone.bak
chroot_sdb dyndb-ldap named.empty slaves
[root@7-1 named]# vim hello.com.zone
$TTL 1D
@ IN SOA dns.hello.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns
dns IN A 192.168.43.134
www IN A 192.168.43.133
[root@7-1 named]# vim world.com.zone
$TTL 1D
@ IN SOA dns.world.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns
dns IN A 192.168.43.134
www IN A 10.10.11.30
[root@7-1 named]# systemctl restart named
[root@7-2 srv]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
ServerName www.hello.com
DocumentRoot /srv/hello/
</VirtualHost>
<Directory "/srv/hello">
options indexes
Require all granted
</Directory>
<VirtualHost *:80>
ServerName www.world.com
DocumentRoot /srv/world/
</VirtualHost>
[root@7-2 srv]# vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.43.134
[root@7-2 srv]# mkdir /srv/hello
[root@7-2 srv]# mkdir /srv/world
[root@7-3 ~]# mdadm -C -n 3 -l 5 /dev/md5 /dev/sdb1 /dev/sdb2 /dev/sdb3
[root@7-3 ~]# mdadm -D /dev/md5
[root@7-3 ~]# pvcreate /dev/md5
Physical volume "/dev/md5" successfully created.
[root@7-3 ~]# vgcreate vg0 /dev/md5
Volume group "vg0" successfully created
[root@7-3 ~]# lvcreate -L 200M -n lv0 vg0
WARNING: xfs signature detected on /dev/vg0/lv0 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/vg0/lv0.
Logical volume "lv0" created.
[root@7-3 ~]# mkfs.xfs -f /dev/vg0/lv0
meta-data=/dev/vg0/lv0 isize=512 agcount=8, agsize=6272 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=50176, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=624, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
root@7-3 ~]# mkdir /test
[root@7-3 ~]# mount /dev/vg0/lv0 /test/
[root@7-3 ~]# vim /etc/exports
/test *(rw,sync,no_root_squash)
[root@7-2 srv]# mount 192.168.43.137:/test /srv/hello/
[root@7-2 hello]# echo hello >> index.html
使用7-3进行测试即可
samba可以实现挂载
samba可以实现与windos共享
安装软件:
yum install samba
配置文件:
/etc/samba/smb.conf
启动服务:
systemctl restart smb
配置:
匿名模式: (share)
服务端:
vim /etc/samba/smb.conf
security = user Cenost6之前 security = share
CentOS7 匿名模式
mkdir /smb
security = user
map to guest = bad user # 匿名账户登陆
[test]
comment = test smb server #描述
path = /smb #访问路径
writable = yes #可写
browseable = yes #可查看
public = yes #公共
guest ok = yes #来宾用户
客户端:
yum -y install cifs-utils
smbclient -L 192.168.200.222 查看
smbclient //192.168.200.222/test 登录
验证模式:(user)
服务端
mkdir /share
security = user
[share]
comment = test smb server
path = /share
writable = yes
valid users = robin # 有效账户
useradd robin
smbpasswd -a robin
客户端
smbclient -L //192.168.200.222
smbclient -U robin%123 //192.168.200.222/share
mount -t cifs -o username=robin,password=123 //192.168.200.222/share /mnt
写用户少
[share]
comment = test smb server
path = /share
write list = robin @upup
valid users = robin zorro @upup
读用户少
[share]
comment = test smb server
path = /share
writable = yes
valid users = robin zorro
read list = zorro
查询所有的smb帐号
pdbedit -L
删除samba帐号
smbpasswd -x zorro
【注】
当虚拟机与虚拟机之间正常可以使用smb命令方位服务器而Windows不能进行此操作是,可能是因为Windows系统已经记录了过了此地址的缓存,需要重新进行清空缓存,然后再进行测试。
清空缓存的命令是 net use * /del
实践:
作业:
1.3种方式挂载smb 匿名 和 user模式
2.NAS
3.
练习:
公司有以下需求:
boss king zorro jean
hr king jack rose
yw zorro tom jerry
kf jean robin ben
1.有一个boss的目录 boss可写 其他部门经理只读
2.各部门都一个目录(hr yw kf) 各部门经理可写, 其他人只读, boss也可以查看
3.还有一个目录,全公司员工都可以写,boss没有任何权限
[boss]
comment = boss use
path = /company/boss
write list = boss
valid users = boss king zorro jean
[hr]
comment = hr use
path = /company/hr
write list = king
valid users = king jack rose boss
[yw]
comment = yw use
path = /company/yw
valid users = zorro tom jerry boss
write list = zorro
[kf]
comment = kf use
path = /company/kf
valid users = jean robin ben boss
write list = jean
[pub]
comment = test smb server
path = /company/pub
writable = yes
valid users = @hr @yw @kf
使用samba完成NAS 并且实现3种自动挂载
samba匿名自动挂载
[root@test ~]# cat /etc/samba/smbpass
username=root
password=
cat /etc/fstab
//192.168.1.1/smb /mnt cifs defaults,multiuser,credentials=/etc/samba/smbpass 0 0
vsftpd:文件共享服务
vsftpd: 服务名称
ftp:协议名称
lftp:客户端
安装软件:
服务端
yum install vsftpd
客户端:
yum install lftp
端口:
port(主动)模式 21 20
pasv(被动)模式 21 随即端口
21 控制端口
20 或 随即 数据端口
配置文件: /etc/vsftpd/vsftpd.conf
数据保存位置:/var/ftp
启动服务: systemctl restart vsftpd
工作模式 :
port模式(主动)
C S
1024+m---------->21
1024+n----->
1024+n<----------20
pasv模式(被动)
C S
1024+m---------->21
1024+m<----- 1024+n
1024+x--------->1024+n
模式选择客户端决定
man 5 vsftpd.conf
配置:
匿名模式访问
anonymous_enable=YES
允许上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
允许删除
anon_other_write_enable=YES
上传文件允许下载
anon_umask=022
限速
anon_max_rate=20000
vsftpd更改数据目录位置:
anon_root=/home
客户端:
lftp 192.168.200.226
lftp 192.168.200.226:/> ls
lftp 192.168.200.226:/> get anaconda-ks.cfg 下载文件
lftp 192.168.200.226:/> mirror pub/ 下载目录
lftp 192.168.200.226:/> put /etc/passwd
lftp 192.168.200.226:/pub> mirror -R /tmp/
用户模式访问(基于系统帐号)
useradd robin
passwd robin
本地登陆
local_enable=YES
上传文件允许下载
local_umask=022
限速
local_max_rate=20000
限制用户切换目录(登陆目录不能有写权限)
allow_writeable_chroot=YES 允许家目录权限700的情况下登录
chroot_local_user=YES 限制所有帐号
chroot_local_user=YES
chroot_list_enable=YES 开启名单功能(写入以下文件的用户可以切换)
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=NO(默认)
chroot_list_enable=YES 开启名单功能(写入以下文件的用户不可以切换)
chroot_list_file=/etc/vsftpd/chroot_list
/etc/vsftpd/ftpusers 写入用户名 禁止用户登陆ftp
黑白名单禁止用户登陆
userlist_enable=YES
userlist_deny=YES
/etc/vsftpd/user_list 黑名单
userlist_enable=YES
userlist_deny=NO
/etc/vsftpd/user_list 白名单
改变本地用户登陆位置
local_root=/nfs
客户端
lftp -u robin,123 192.168.200.226
======================================
虚拟帐号:
1.建立用户数据库文件
vim /etc/vsftpd/vftpuser.txt
test111
pass111
test222
pass222
2.安装数据库转换工具
yum install libdb-utils-5.3.21-19.el7.x86_64
db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vsftpd_login.db
3.建立验证模式文件
# mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
# vi /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
4.建立一个所有虚拟用户使用的系统用户
# useradd -d /home/vsftp virtual
# chmod 755 /home/vsftp
5.修改配置文件启用虚拟用户
guest_enable=YES # 开启虚拟用户功能
guest_username=virtual # 指定虚拟用户使用的系统用户
pam_service_name=vsftpd # 以/etc/pam.d/验证模式文件名相同
客户端测试登陆
lftp -u test111,pass111 192.168.200.226
lftp -u test222,pass222 192.168.200.226
-----------
为虚拟用户设置不同权限
方法一.
虚拟用户使用与本地用户相同权限
virtual_use_local_privs=YES
虚拟用户使用与匿名用户相同权限
virtual_use_local_privs=NO
方法二.
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftp_user_conf
mkdir /etc/vsftpd/vsftp_user_conf
[root@client nfs]# cat /etc/vsftpd/vsftp_user_conf/test111
write_enable=NO
local_max_rate=20000
local_root=/nfs
[root@client nfs]# cat /etc/vsftpd/vsftp_user_conf/test222
local_max_rate=100000
local_root=/nfs
HTTPD(apache web服务器)
安装包:httpd-2.4.6-45.el7.centos.4.x86_64.rpm
httpd-manual-2.4.6-45.el7.centos.4.noarch.rpm 文档
端口: 80 443
配置文件: /etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/
/etc/httpd/conf.modules.d
数据目录:/var/www/html
启动服务:systemctl restart httpd
日至存放目录:/var/log/httpd/
elinks 172.16.10.30
elinks --dump 172.16.10.30 显示在终端上
curl 10.10.3.76
netstat -anplt
netstat -anlpu
http: 超文本传输协议: hyper text tranfer protocol
html:超文本标记语言:hyper text markup langue
vim /var/www/html/index.html
<html>
<head>
<title>welcome !!!!</title>
</head>
<body>
<h1>狗</h1>
<img src='dog.jpg'>
<h2>风景</h2>
<img src='timg.jpg'>
</body>
</html>
prefork 进程模式
worker 线程模式
event 事件驱动
查看工作模式
httpd -V
apache 工作模式
prefork
worker
event
查看工作模式
httpd -V
1. prefork MPM
Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。
2.worker MPM
worker模式比起上一个,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些
优点:占据更少的内存,高并发下表现更优秀。
缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,某个线程会一直被占据,也许中间几乎没有请求,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用
3. event MPM
这个是Apache中最新的模式,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。
注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用
vim /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
<IfModule mpm_worker_module>
StartServers 10
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
#LoadModule mpm_event_module modules/mod_mpm_event.so
<IfModule mpm_event_module>
StartServers 15
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
保持连接(长连接)
KeepAlive On
KeepAliveTimeout 15
MaxKeepAliveRequests 100
修改http访问默认位置
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
#DocumentRoot "/var/www/html"
DocumentRoot "/etc"
<Directory "/etc">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
其他方法
方法1:
cp -r /boot /var/www/html
方法2:
ln -s /boot/ /var/www/html
别名
alias /down /home
<directory /home>
options indexes
Require all granted
</directory>
alias /upup /var
<Directory "/var">
options indexes
require all granted
</Directory>
vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#UserDir disabled 注释这行
UserDir public_html 打开这行,名字一般不修改
</IfModule>
【注】
这里的public_html一般不修改,若要修改则需要将配置文件里面的有关public_html全部修改为自己设置的名字
useradd robin
useradd zorro
mkdir /home/robin/public_html
mkdir /home/zorro/public_html
echo "robin home" > /home/robin/public_html/index.html
echo "zorro home" > /home/zorro/public_html/index.html
chmod 705 /home/robin/
chmod 705 /home/zorro/
【注】
如果/home /home/robin /home/zorro权限不是755或者705则看不到内容。
只有修改完权限才能访问
客户端测试
http://172.16.10.1/~zorro/
http://172.16.10.1/~robin/
此时显示相应的名字home
例1:允许所有访问请求
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require all granted
</Directory>
例2:拒绝所有访问请求
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require all denied
</Directory>
例3:只允许来自特定域名主机的访问请求,其他请求将被拒绝
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require host google.com
</Directory>
例4:只允许来自特定IP或IP段的访问请求,其他请求将被拒绝
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require ip 192.120 192.168.100 192.168.1.1
</Directory>
例5:允许所有访问请求,但拒绝来自特定IP或IP段的访问请求(阻止恶意IP或恶意爬虫网段的访问)
Apache2.4下的配置:
<Directory xxx/www/yoursite>
<RequireAll>
Require all granted
Require not ip 192.168.1.1
Require not ip 192.120 192.168.100
</RequireAll>
【注】
只有在使用not ip的情况下才会使用<RequireALL></RequireALL>模块
alias /down /var/ftp
<directory /var/ftp>
options indexes
AuthType Basic 类型 basic
AuthName "welcome" 提示名字 welcome
AuthBasicProvider file 提供基本类型 文件
AuthUserFile /etc/httpd/conf/passwd 文件位置 /etc/httpd/conf/passwd
Require user robin 允许的用户
</directory>
htpasswd -c -b /etc/httpd/conf/passwd robin 123 创建新帐号
htpasswd -b /etc/httpd/conf/passwd zorro 123 添加新帐号
【注】
第一次创建的时候使用-c参数,之后在创建用户的时候就不需要使用-c参数。
在创建过程中,格式为: 命令+参数+路径+用户名+密码
如果使用-c参数的话,是将原来的基础上的用户进行了覆盖处理。
全部有效帐号
当有很多用户都可以进行登录时,文件写入太多的用户名会麻烦,所以使用valid-user来表示有效用户
在文件/etc/httpd/conf/passwd文档中的所有有效账户都可以进行登录测试
alias /upup /var
<Directory "/var">
Options indexes FollowSymLinks
AuthType Basic
AuthName "welcome!!!!!"
AuthBasicProvider file
AuthUserFile /etc/httpd/conf/http_passwd
Require valid-user
</Directory>
在浏览器中进行测试,显示输入账号密码,输入登录即可。
脚本发布目录:/var/www/cgi-bin
发布cgi脚本
脚本发布目录:/var/www/cgi-bin
#!/bin/bash
echo -e "content-type: text/html\n"
date
echo "
"
uname -r
http://172.16.10.1/cgi-bin/cgi.sh
#!/bin/bash
echo -e "Content-type: text/html\n"
for i in {1..100}
do
sleep 1
echo $i
done
虚拟主机(基于域名 基于ip)
基于域名虚拟主机
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.youku.com
DocumentRoot /srv/youku/
</VirtualHost>
<Directory "/srv/youku">
Require all granted
</Directory>
<VirtualHost *:80>
ServerName www.tudou.com
DocumentRoot /srv/tudou/
</VirtualHost>
<Directory "/srv/tudou">
Require all granted
</Directory>
[root@7-1 conf.d]# mkdir /srv/tudou/
[root@7-1 conf.d]# mkdir /srv/youku
[root@7-1 srv]# ls
tudou youku
分别进入每个文件中创建index.html
[root@7-1 tudou]# vim index.html 输入 tudou
[root@7-1 youku]# vim index.html 输入 youku
客户端
添加解析地址
vim /etc/hosts
192.168.43.134 www.youku.com
192.168.43.134 www.tudou.com
[root@7-2 ~]# curl www.youku.com
youku
[root@7-2 ~]# curl www.tudou.com
tudou
基于ip虚拟主机
服务端
[root@7-1 ~]# nmcli connection add con-name ens37 type ethernet ifname ens37 ipv4.method manual ipv4.addresses 10.10.11.20/24 ipv4.gateway 10.10.11.1 connection.autoconnect true
Connection 'ens37' (2eca39c6-aa83-4d52-a1f2-ceb426a9d26e) successfully added.
[root@7-1 ~]# nmcli connection up ens37
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)
<VirtualHost 192.168.43.134:80>
ServerName www.youku.com
DocumentRoot /srv/youku/
</VirtualHost>
<Directory "/srv/youku">
Require all granted
</Directory>
<VirtualHost 10.10.11.20:80>
ServerName www.tudou.com
DocumentRoot /srv/tudou/
</VirtualHost>
<Directory "/srv/tudou">
Require all granted
</Directory>
客户端
客户端也需要添加一块网卡或者临时ip进行测试
[root@7-1 ~]# nmcli connection add con-name ens37 type ethernet ifname ens37 ipv4.method manual ipv4.addresses 10.10.11.30/24 ipv4.gateway 10.10.11.1 connection.autoconnect true
[root@7-1 ~]# nmcli connection up ens37
vim /etc/hosts
192.168.43.134 www.youku.com
10.10.11.20 www.tudou.com
curl 测试
[root@7-2 ~]# curl www.google.com
google
[root@7-2 ~]# curl www.baidu.com
baidu
[root@7-2 ~]#
DNS:domain name server 域名解析服务器
安装与配置
安装软件:bind-9.9.4-29.el7.x86_64.rpm
端口:53
配置文件:
/etc/named.conf # 访问控制
/etc/named.rfc1912.zones # 定义域名
/var/named/ # 域名解析
启动服务:systemctl restart named
正向解析
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "youku.com" IN {
type master;
file "youku.com.zone";
};
3.touch /var/named/douniwan.com.zone
chmod 640 /var/named/douniwan.com.zone
chown .named /var/named/douniwan.com.zone
vim /var/named/douniwan.com.zone
$TTL 1D
@ IN SOA dns.youku.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.youku.com.
dns IN A 192.168.43.134
www IN A 192.168.43.134
~
客户端测试:
[root@client ~]# host www.youku.com
www.douniwan.com has address 192.168.43.134
[root@7-2 ~]# nslookup www.youku.com
Server: 192.168.43.134
Address: 192.168.43.134#53
Name: www.youku.com
Address: 192.168.43.134
[root@7-2 ~]# dig www.youku.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> www.youku.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12124
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.youku.com. IN A
;; ANSWER SECTION:
www.youku.com. 86400 IN A 192.168.43.134
;; AUTHORITY SECTION:
youku.com. 86400 IN NS dns.youku.com.
;; ADDITIONAL SECTION:
dns.youku.com. 86400 IN A 192.168.43.134
;; Query time: 0 msec
;; SERVER: 192.168.43.134#53(192.168.43.134)
;; WHEN: Tue Nov 10 14:03:30 CST 2020
;; MSG SIZE rcvd: 92
反向解析:
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "43.168.192.in-addr.arpa" IN {
type master;
file "192.168.43.arpa";
};
3.
touch /var/named/192.168.43.arpa
chmod 640 /var/named/192.168.43.arpa
chown .named /var/named/192.168.43.arpa
vim /var/named/192.168.43.arpa
$TTL 1D
@ IN SOA dns.hello.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS dns.hello.com.
dns IN A 192.168.43.134
134 IN PTR www.hello.com.
客户机测试
[root@7-2 ~]# host 192.168.43.134
134.43.168.192.in-addr.arpa domain name pointer www.hello.com.
[root@7-2 ~]# nslookup 192.168.43.134
134.43.168.192.in-addr.arpa name = www.hello.com.
[root@7-2 ~]# dig 192.168.43.134
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> 192.168.43.134
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43334
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;192.168.43.134. IN A
;; AUTHORITY SECTION:
. 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2020111000 1800 900 604800 86400
;; Query time: 664 msec
;; SERVER: 192.168.43.134#53(192.168.43.134)
;; WHEN: Tue Nov 10 15:48:33 CST 2020
;; MSG SIZE rcvd: 118
各种写法
$TTL 1D
@ IN SOA dns.douniwan.com. root. ( 0 1D 1H 1W 3H )
IN NS dns.douniwan.com.
dns IN A 192.168.200.222
ww IN CNAME www
wwww IN CNAME www
www IN A 192.168.200.226
@ IN A 192.168.200.226
ftp.douniwan.com. IN CNAME www.douniwan.com.
* IN A 192.168.200.226 # 泛解析
IN MX 5 mail.douniwan.com.
mail IN A 192.168.200.226
$GENERATE 1-254 stu$ IN A 192.168.1.$ # 连续解析
转发服务器
vim /etc/named.conf
forward first;
forwarders { 192.168.200.222; };
forward only;
forwarders { 192.168.200.222; };
DNS主从服务器(时间必须同步)
主服务器配置
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "upup.com" IN {
type master;
file "upup.com.zone";
};
3.
vim /var/named/upup.com.zone
$TTL 1D
@ IN SOA dns.upup.com. root. ( 0 1D 1H 1W 3H )
IN NS dns.upup.com.
dns IN A 192.168.200.222
www IN A 192.168.200.226
@ IN A 192.168.200.226
chown .named /var/named/upup.com.zone
chmod 640 /var/named/upup.com.zone
从服务器
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.
zone "upup.com" IN {
type slave;
file "slaves/upup.com.zone";
masters { 192.168.200.222; };
};
同步数据
$TTL 1D
@ IN SOA dns1.upup.com. root. ( 20170622 1D 1H 1W 3H )
IN NS dns1.upup.com.
IN NS dns2.upup.com.
dns1 IN A 192.168.200.222
dns2 IN A 192.168.200.226
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
TSIG方式传输
主
key robinkey {
algorithm hmac-md5;
secret "YBMMsomw64S8BmK6/JbVaA==";
};
zone "upup.com" IN {
type master;
file "upup.com.zone";
allow-transfer { key robinkey; };
};
从
key robinkey {
algorithm hmac-md5;
secret "YBMMsomw64S8BmK6/JbVaA==";
};
zone "upup.com" IN {
type slave;
file "slaves/upup.com.zone";
masters { 192.168.200.222 key robinkey; };
};
子域授权
父域
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "robin.com" IN {
type master;
file "robin.com.zone";
};
3.
vim /var/named/robin.com.zone
$TTL 1D
@ IN SOA dns.robin.com. root. ( 0 1D 1H 1W 3H )
IN NS dns.robin.com.
dns IN A 192.168.200.222
music.robin.com. IN NS dns.music.robin.com.
dns.music.robin.com. IN A 192.168.200.226
www IN A 192.168.200.226
@ IN A 192.168.200.226
chmod 640 /var/named/robin.com.zone
chown .named /var/named/robin.com.zone
子域
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "music.robin.com" IN {
type master;
file "music.robin.com.zone";
};
3.
chmod 640 /var/named/music.robin.com.zone
chown .named /var/named/music.robin.com.zone
vim /var/named/music.robin.com.zone
$TTL 1D
@ IN SOA dns.music.robin.com. root. ( 0 1D 1H 1W 3H )
IN NS dns.music.robin.com.
dns IN A 192.168.200.222
www IN A 192.168.200.226
@ IN A 192.168.200.226
从bios设置系统时间
hwclock -s
从系统时间设置bios
hwclock -w
网络时间协议(英语:Network Time Protocol,NTP)是以分组交换把两台电脑的时钟同步化的网络传输协议。NTP使用UDP端口123作为传输层。它是用作抵销可变延迟的影响。
NTP是仍在使用中的最古老的网络传输协议之一(在1985年前开始)。NTP最初由特拉华大学的Dave Mills 设计,他与一群志愿者仍在维护NTP。
NTP 网络时间协议用来同步网络上不同主机的系统时间。你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间。而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP 服务器,或者你选定的服务器同步。由 NTP 管理的所有系统时钟都会同步精确到毫秒级。
在公司环境中,如果他们不想为 NTP 传输打开防火墙,就有必要设置一个内部 NTP 服务器,然后让员工使用内部服务器而不是公共 NTP 服务器。
1.安装时间服务器
yum install ntp ntpdate -y
2.查找时间同步服务器,把相关的配置拷贝下来
http://www.pool.ntp.org/zone/asia
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
3.配置时间服务器
vim /etc/ntp.conf
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
server 127.127.1.0 iburst
restrict 192.168.43.0 mask 255.255.255.0 nomodify notrap
4.启动服务器并测试
[root@7-1 named]# systemctl restart ntpd
[root@7-1 named]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*162.159.200.1 10.12.2.186 3 u 3 64 17 284.621 -44.588 3.523
5-144-132-2.sta 129.250.35.250 3 u 3 64 15 353.184 -79.531 0.802
ntp.hkg10.hk.le 130.133.1.10 2 u 2 64 17 317.282 41.003 6.130
LOCAL(0) .LOCL. 5 l 73 64 16 0.000 0.000 0.000
[root@7-1 named]#
客户端测试
ntpdate 192.168.0.5
[root@7-2 named]# ntpdate 192.168.43.134
11 Nov 14:01:20 ntpdate[7196]: adjust time server 192.168.43.134 offset 0.024837 sec
[root@7-2 named]# date -R
[root@7-3 test]# ntpdate 192.168.43.134
11 Nov 14:01:49 ntpdate[4595]: adjust time server 192.168.43.134 offset 0.000141 sec
[root@7-3 test]# date -R
Wed, 11 Nov 2020 14:01:56 +0800
[root@7-3 test]#
计划任务保证时间同步
注:在配置时间同步服务器时,如果同一网段中几台虚拟机之间有着某种联系时,时间一定要同步。不同步会出现错误。
chrony
RHEL8使用chrony同步时间,
不再使用ntp服务
chronyd服务通过与配置的NTP服务器同步配置方式
修改配置文件:/etc/chrony.conf
图形界面: system-config-date
配置文件/etc/chrony.conf server 指定网络时钟服务器,类似ntp
查看当前网络时钟服务器信息chronyc sources -v
1.查看系统时钟与时区 timedatectl
root@7-1 named]# timedatectl
Local time: Wed 2020-11-11 15:44:30 CST
Universal time: Wed 2020-11-11 07:44:30 UTC
RTC time: Wed 2020-11-11 07:44:30
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[root@7-1 named]# date
Wed Nov 11 15:44:32 CST 2020
2.列出可用的时区 timedatectl list-timezones
3.设定系统时钟与时区 timedatectl set-timezone
timezonetimedatectl set-time hour:min:sec
4.设定是否启用网络时间同步
timedatectl set-ntp true|false
chrony
RHEL8使用chrony同步时间,
不再使用ntp服务
chronyd服务通过与配置的NTP服务器同步配置方式
修改配置文件:/etc/chrony.conf
图形界面: system-config-date
配置文件/etc/chrony.conf server 指定网络时钟服务器,类似ntp
查看当前网络时钟服务器信息chronyc sources -v
[root@7-1 named]# vim /etc/chrony.conf
server(链接互联网时间服务器)
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
[root@7-2 named]# vim /etc/chrony.conf
client(设置10.10.11.251为时间服务器)
server 10.10.11.251 iburst
allow 192.168.43.134
xinetd 超级代理服务
服务端
安装xinetd服务
yum install xinetd
安装telnet服务
yum install telnet-server
客户端
yum install telnet 客户端
端口:3
启动服务
systemctl start telnet.socket
systemctl enable telnet.socket
systemctl start xinetd
systemctl enable xinetd
客户端:
telnet 192.168.43.134
[root@7-2 named]# telnet 192.168.43.134
Trying 192.168.43.134...
Connected to 192.168.43.134.
Escape character is '^]'.
Kernel 3.10.0-1062.el7.x86_64 on an x86_64
7-1 login: robin
Password:
Last login: Wed Nov 4 20:05:01 on :0
[robin@7-1 ~]$ ls
Desktop Documents Downloads Music Pictures Public public_html Templates Videos
[robin@7-1 ~]$
注意,不能使用root帐号直接登陆。需要使用普通账号进行登录。
【注】
Telnet服务一般不使用,因为传输过程中需要使用明文传输,中间容易被抓包发现。
tftp服务
安装软件:
客户端
yum install tftp-server
服务端
yum install tftp
配置文件:
/etc/xinetd.d/tftp
端口:69
数据目录: /var/lib/tftpboot/
[root@7-1 named]# systemctl restart xinetd
[root@7-1 named]# ss -anplu
UNCONN 0 0 *:69 *:* users:(("xinetd",pid=12551,fd=5)
配置
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
服务器端:
需要拷贝数据到tftp的数据目录下,然后客户端才可以使用tftp下载文件
[root@7-1 tftpboot]# cp /etc/passwd /var/lib/tftpboot/
[root@7-1 tftpboot]# ls
passwd
[root@7-1 tftpboot]# cd
[root@7-1 ~]#
客户端:
[root@localhost ~]# tftp 192.168.43.134
tftp> get passwd
[root@7-2 ~]# tftp 192.168.43.134
tftp> get passwd
tftp> [root@7-2 ~]#
[root@7-2 ~]# ls
aa a.txt Documents initial-setup-ks.cfg passwd Public Videos
anaconda-ks.cfg Desktop Downloads Music Pictures Templates
邮件服务器:
MUA:邮件用户代理 foxmail outlook
MTA:邮件传输代理 sendmail postfix
MDA:邮件投递代理
SMTP:简单邮件传输协议
postfix
安装:
yum install postfix
配置文件:
/etc/postfix/main.cf
端口:25
启动服务:systemctl restart postfix
日志:/var/log/maillog
邮件保存位置:/var/spool/mail/
配置:
hostnamectl set-hostname mail.server7-1.com
[root@7-1 ~]# hostname
mail.server7-1.com
[root@7-1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.43.134 mail.server7-1.com
[root@7-1 ~]#
配置发送
[root@7-1 ~]# vim /etc/postfix/main.cf
myhostname = mail.server7-1.com
mydomain = mail.server7-1.com
inet_interfaces = all
#inet_interfaces = localhost
systemctl restart postfix
测试:
[root@7-1 ~]# telnet mail.server7-1.com 25 连接25端口
Trying 172.16.90.245...
Connected to mail.robin.com.
Escape character is '^]'.
220 mail.robin.com ESMTP Postfix
ehlo mail.robin.com ------------------------------------------- 和服务器测试连接
250-mail.robin.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:[email protected] ----------------------------------- 发件人
250 2.1.0 Ok
rcpt to:[email protected] ---------------------------------------- 收件人
250 2.1.5 Ok
data --------------------------------------------------------------------------内容
354 End data with <CR><LF>.<CR><LF>
hello i am robin!!!!!!
. ---------------------------------------------------------------------------------------结束
250 2.0.0 Ok: queued as EFB753165BF3
quit -------------------------------------------------------------------------- 退出
221 2.0.0 Bye
【注】
链接时使用25号端口进行连接,未使用25端口进行连接会出现以下错误
[root@7-1 ~]# telnet server7-1.com
Trying 192.168.43.134...
telnet: connect to address 192.168.43.134: Connection refused
测试:
=======================================================================================
[root@7-1 ~]# telnet mail.server7-1.com 25 连接25端口
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
220 mail.server7-1.com ESMTP Postfix
mail from:[email protected]
250 2.1.0 Ok
rcpt to:[email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
hello i am robin
.
250 2.0.0 Ok: queued as 69E411178B86
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@7-1 ~]# cat /var/spool/mail/zorro
From [email protected] Thu Nov 12 10:42:15 2020
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.server7-1.com (mail.server7-1.com [192.168.43.134])
by mail.server7-1.com (Postfix) with SMTP id 69E411178B86
for <[email protected]>; Thu, 12 Nov 2020 10:40:46 +0800 (CST)
Message-Id: <20201112024149[email protected]>
Date: Thu, 12 Nov 2020 10:40:46 +0800 (CST)
From: [email protected]
hello i am robin
非交互式
echo 123456 | mail -s test [email protected]
安装软件:
yum install dovecot
配置文件:
/etc/dovecot/dovecot.conf
/etc/dovecot/conf.d/
端口:pop3:110 imap:143
启动服务:systemctl restart dovecot
接受邮件:
安装软件:
yum install dovecot
配置文件:
/etc/dovecot/dovecot.conf
/etc/dovecot/conf.d/
端口:pop3:110 imap:143
启动服务:systemctl restart dovecot
配置:
vim /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
=========================================================================================
[root@7-1 conf.d]# vim /etc/dovecot/dovecot.conf
# Protocols we want to be serving.
protocols = imap pop3 lmtp
[root@7-1 ~]# cd /etc/dovecot/conf.d/
[root@7-1 conf.d]# ls
10-auth.conf 15-lda.conf 90-plugin.conf auth-master.conf.ext
10-director.conf 15-mailboxes.conf 90-quota.conf auth-passwdfile.conf.ext
10-logging.conf 20-imap.conf auth-checkpassword.conf.ext auth-sql.conf.ext
10-mail.conf 20-lmtp.conf auth-deny.conf.ext auth-static.conf.ext
10-master.conf 20-pop3.conf auth-dict.conf.ext auth-system.conf.ext
10-ssl.conf 90-acl.conf auth-ldap.conf.ext auth-vpopmail.conf.ext
[root@7-1 conf.d]# vim 10-mail.conf
# mail_location = maildir:~/Maildir
mail_location = mbox:~/mail:INBOX=/var/mail/%u
# mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
=========================================================================================
mkdir -p /home/zorro/mail/.imap/INBOX
chown -R zorro.zorro /home/zorro/
测试接受邮件:
[root@localhost ~]# telnet mail.robin.com 110 连接 110
Trying 172.16.90.245...
Connected to mail.robin.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro -------------------------------------------------- 用户
+OK
pass 123 -------------------------------------------------- 密码
+OK Logged in.
list -------------------------------------------------------- 列出
+OK 2 messages:
1 456
2 538
.
retr 1 ----------------------------------------------------- 查看
+OK 456 octets
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.robin.com (mail.robin.com [172.16.90.245])
by mail.robin.com (Postfix) with ESMTP id EFB753165BF3
for <[email protected]>; Thu, 22 Jun 2017 10:58:31 +0800 (CST)
Message-Id: <20170622025842[email protected]>
Date: Thu, 22 Jun 2017 10:58:31 +0800 (CST)
From: [email protected]
hello i am robin!!!!!!
=========================================================================================
[root@7-1 conf.d]# mkdir -p /home/zorro/mail/.imap/INBOX
[root@7-1 conf.d]# chown -R zorro:zorro /home/zorro/
[root@7-1 conf.d]# telnet mail.server7-1.com 110
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro
+OK
pass 111
+OK Logged in.
list
+OK 1 messages:
1 486
.
.
-ERR Unknown command: .
retr 1
+OK 486 octets
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.server7-1.com (mail.server7-1.com [192.168.43.134])
by mail.server7-1.com (Postfix) with SMTP id 69E411178B86
for <[email protected]>; Thu, 12 Nov 2020 10:40:46 +0800 (CST)
Message-Id: <20201112024149[email protected]>
Date: Thu, 12 Nov 2020 10:40:46 +0800 (CST)
From: [email protected]
hello i am robin
.
>quit
-ERR Unknown command: >QUIT
.
-ERR Unknown command: .
quti
-ERR Unknown command: QUTI
quit
+OK Logging out.
Connection closed by foreign host.
[root@7-1 conf.d]# cat /var/log/maillog
Nov 12 11:22:50 7-1 dovecot: pop3(zorro): Error: fchown(/home/zorro/mail/.imap, group=12(mail)) failed: Operation not permitted (egid=1001(zorro), group based on /var/mail/zorro - see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)
Nov 12 11:22:50 7-1 dovecot: pop3(zorro): Error: Couldn't open INBOX: Permission denied
Nov 12 11:22:50 7-1 dovecot: pop3(zorro): Couldn't open INBOX: Permission denied top=0/0, retr=0/0, del=0/0, size=0
[root@7-1 conf.d]# telnet mail.server7-1.com 110
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro
+OK
pass 111
+OK Logged in.
-ERR [SYS/PERM] Permission denied
Connection closed by foreign host.
解决方法:
[root@7-1 conf.d]# mkdir -p /home/zorro/mail/.imap/INBOX
[root@7-1 conf.d]# chown -R zorro:zorro /home/zorro/
再进行测试
[root@7-1 conf.d]# telnet mail.server7-1.com 110
Trying 192.168.43.134...
Connected to mail.server7-1.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro
+OK
pass 111
+OK Logged in.
list
+OK 1 messages:
1 486
.
retr 1
+OK 486 octets
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.server7-1.com (mail.server7-1.com [192.168.43.134])
by mail.server7-1.com (Postfix) with SMTP id 69E411178B86
for <[email protected]>; Thu, 12 Nov 2020 10:40:46 +0800 (CST)
Message-Id: <20201112024149[email protected]>
Date: Thu, 12 Nov 2020 10:40:46 +0800 (CST)
From: [email protected]
hello i am robin
quit
+OK Logging out.
Connection closed by foreign host.