Linux基础
前言
- 注意事项:
Linux严格区分大小写
Linux中所有内容以文件形式保存,包括硬件
Linux不靠扩展名区分文件类型
Linux所有的存储设备都必须挂载之后用户才能使用,包括硬盘、U盘和光盘 - Linux命令常用结构 :
Command [-option] [argument]
Command:即是要运行的命令的本身,说白了就是一个软件(程序);
Option:是选项(可选),选项是控制命令运行状态和行为的(可多个选项一起,如df -hT);
Argument:是参数(可选),是命令要操作对象如文件、路径、数据、目录等;
在指令的第一部分按[tab]键一下为[命令补全],两下为所有命令选择,在非第一部分按[tab]键两下为[文件补全]; - 不懂的命令 :man 命令(查用法、全称),只记得关键词,可用man -k 关键词;
系统类
- 注意事项:
系统启动过程:grup加载内核(grup涉及密码重置,initramfs模拟启动一次),系统完整初始化(systemd),调整(inittab运行系统级别0-6,etc/rc.d/rc.local开机自启动)
磁盘分区:主分区最多4个,扩展分区最多1个且只能包含逻辑分区,SCSI逻辑分区最多11个(主分区加扩展分区最多4个)
硬件设备文件名:SCSI/SATA/USB硬盘(/dev/sd[a-p]),光驱(/dev/cdrom) - 系统信息之uname -a:操作系统信息
- 系统信息之cat /proc/cpuinfo:CPU信息
- 系统信息之free:内存信息(缓存cache是用来加速读取的,而缓冲buffer是加速写入)
- 系统信息之fdisk -l:硬盘信息
- 系统信息之df -h:已挂载的硬盘,使用信息(df计算的是逻辑上的空间,du则是实际上的)
- 系统信息之ps aux:静态进程信息(第一个进程/usr/lib/systemd/systemd,最后一个进程ps aux,还可用pstree -p图形化查看)
- 系统信息之top:动态系统资源信息和进程信息(大写P,以CPU使用率排序,M内存,主要查看load average平均负载1,5,15分钟,CPU和内存情况)
- 系统管理之mount:挂载光盘(mount /dev/cdrom /mnt/cdrom/),U盘和硬盘(mount -t xfs /dev/sdb1 /mnt/mfs,U盘默认不支持ntf)
- 系统管理之fdisk /dev/sdb:硬盘分区(完整流程:分区n新建w保存退出,格式化mkfs -t xfs /dev/sdb1,挂载且写入/etc/fstab文件,yy复制p粘贴光标下行)
/etc/fstab文件修复,mount -o remount,rw,vi /etc/fstab - 系统管理之crontab -e:定时计划(0 5 1,10,15 * * /root/sh/autobak.sh,分时天月星期几,每月1,10,15号早上5点执行脚本)
- 系统管理之kill 进程id或killall 进程名:杀死进程
- 系统管理之shutdown和reboot:定时开关机, shutdown -r now或reboot重启,shutdown -h now关机
- 系统管理之fsck,dd:文件系统修复和硬盘克隆,不常用
文件类
- 注意事项:
/bin:/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
/sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。
/boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及引导/boot/gurb。
/dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备
/etc: 系统配置文件存放的目录,有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。
/lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
/opt: 给主机额外安装软件所摆放的目录。以前的 Linux 系统中,习惯放置在 /usr/local 目录下
/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间
/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。
/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录, /var/run: 程序或服务启动 - 文件查看之du -sh:统计目录大小
- 文件查看之ls:显示目录文件,也常用ll显示所有文件信息
- 文件查看之cd:切换目录,cd /root进入root,cd .. 回到上一级目录
- 文件查看之pwd:显示当前目录(位置)
- 文件查看之cat:显示文件内容(适用于文件内容少)
- 文件查看之more:分页显示文件内容(其他:tac反向列示,less可向上翻页分页显示文件内容,head显示文件前面几行)
- 文件查看之find:文件搜索, /etc -name init按名字查找
- 文件查看之grep:在内容中搜寻字串匹配的行并输出
- 文件查看之tailf:查阅正在改变的文件,tailf /var/log/messages查看日志
- 文件查看之curl:curl http://www.baidu.com
- 文件查看之whereis:搜索命令所在目录及帮助文档路径,也查找了文件安装目录
- 文件管理之mkdir:创建新目录,递归创建mkdir -p /tmp/Japan/boduo
- 文件管理之cp:复制文件或目录,常用于备份操作,cp -r /tmp/Japan/cangjing /root目录复制
- 文件管理之touch:创建空文件
- 文件管理之vi:视图模式下(nyy复制n行,p粘贴;dd删除,/搜索字符),i进入编辑模式,!x保存退出,esc视图模式
- 文件管理之ln:生成链接文件,ln -s /etc/issue /tmp/issue.soft软连接
- 文件管理之tar:压缩目录,解压缩,tar -zcf Japan.tar.gz Japan压缩,tar -zxf Japan.tar.gz解压缩(gzip,gunzip只能压缩文件不能压缩目录)
- 文件管理之scp:远程复制或推送,scp root@192.168.3.60:/home/ixdba/etc.tar.gz /tmp复制
- 文件管理之rm:删除文件,rm -rf /tmp/Japan/longze不提示删除目录
- 文件管理之mv:剪切文件(改名)
用户和权限类
- 注意事项:
用户信息文件/etc/passwd:
密码文件/etc/shadow
组信息文件/etc/group和组密码文件/etc/gshadow
用户信息文件/etc/passwd:
用户信息文件/etc/passwd:
用户信息文件/etc/passwd:
用户信息文件/etc/passwd:
用户信息文件/etc/passwd:
服务器运维Linux
概述
Linux系统简介
UNIX与Linux发展史
UNIX 发展历史
肯 • 汤普森开发出了UNIX系统
同事丹尼斯 • 里奇用C语言重写
Linux 发展历史
1991年,由芬兰大学生李纳斯,使用源代码开放的UNIX
Linux内核官网:http://www.kernel.org/,内核版本说明:2.6.18,最新的内核版本:3.11.10
uname -r(-a 查看完整信息)
getconf LONG_BIT 系统位数
主要发行版本:redhat,centos......
服务器版本:centos7 最小安装版本
开源软件简介
使用的自由,研究的自由,散布及改良的自由
Apache,Nginx,Mysql,PHP,Python......
开源技术
LAMP
Linux,Apache,MySQL,PHP
其他框架:LNMP
Linux应用领域
1、基于Linux的企业服务器
qq,taobao,download.microsoft.com等都是Linux
60%的服务器
2、嵌入式应用
安卓操作系统
3、Linux在电影娱乐业
Linux系统下处理
设备连接
硬件
高级点的主机
raid 5
bios 快捷键 5 格式化
系统安装
Linux系统安装-VMware虚拟机安装与使用
官方网站:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
使用默认系统推荐
或建议的VMware配置
CPU:建议主频为1GHz以上
内存:建议1GB以上
硬盘:建议分区空闲空间8GB以上
网络设置(设备状态为已连接)
桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上。
NAT:NAT模式就是虚拟机要联网得先通过宿主机才能和外面进行通信。
虚拟网卡8
仅主机:虚拟机与宿主机直接连起来
虚拟网卡1
虚拟机使用技巧
快照,克隆
centos7系统安装
系统安装知识
必须分区
/ (根分区)
最后分配,全部空间
swap分区,系统使用 (虚拟内存,交换分区,内存2倍,不超过2GB,所以默认是2g)
/boot (启动分区,200MB)
第一个分区,引导系统启动
文件系统
根据用户选定的文件系统(FAT32、NTFS、EXT2、EXT3、EXT4、xfs等),6默认ext4,7默认xfs
数据块block和目录inode
真实环境下,bios修改开机启动项,装完系统改回来?
教程:https://www.runoob.com/w3cnote/vmware-install-centos7.html
选择第一项,安装直接CentOS 7
设置时间
上海
选择需要安装的软件
无
最小安装,最稳定
选择安装位置,在这里可以进行磁盘划分。
设置主机名与网卡信息
打开网卡,然后查看是否能获取到IP地址(我这里是桥接)
最后选择Begin Installation(开始安装)
设置root密码
密码原则
复杂性
八位字符以上、大小写字母、数字、符号
易记忆性
时效性
点击USER CREATION 创建管理员用户
配置IP地址
命令 IP addr查看,网卡名为ens33
vi /etc/sysconfig/network-scripts/ifcfg-ens33
1、动态获取ip
(1)bootproto=dhcp
(2)onboot=yes
2、配置静态IP地址
(1)bootproto=static
(2)onboot=yes
(3)在最后加上几行,IP地址、子网掩码、网关、dns服务器
IPADDR=192.168.1.160
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=119.29.29.29
DNS2=8.8.8.8
重启网络服务
systemctl restart network
远程登录管理工具
1、SecureCRT
连接参数:SSH2,ip地址
有的系统版本不支持root远程登录
df 乱码,可通过 会话选项-外观-字体和编码 修正
2、Winscp
类似ftp,连接参数:sftp,ip地址
3、Xshell
先安装xshell5,然后用自己的包绿化一下就行
基础管理
给初学者的建议和注意事项
3.1 学习Linux的注意事项
Linux严格区分大小写
Linux中所有内容以文件形式保存,包括硬件
Linux不靠扩展名区分文件类型
压缩包:“*.gz”、“*.bz2” *.tar.bz2”、“*.tgz”等
二进制软件包:“.rpm”
网页文件:“*.html”、“*.php”
脚本文件:“*.sh”
配置文件:“*.conf”
Linux所有的存储设备都必须挂载之后用户才能使用,包括硬盘、U盘和光盘
2、服务器注意事项
远程服务器不允许关机,只能重启
重启时应该关闭服务
不要在服务器访问高峰运行高负载命令
远程配置防火墙时不要把自己踢出服务器
指定合理的密码规范并定期更新
合理分配权限
最少的权限,最大的安全
定期备份重要数据和日志
文件系统管理
1、Linux各目录的作用
https://www.cnblogs.com/ellisonDon/archive/2012/10/03/2710730.html
/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中
/bin:/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
usr的意思在类似安全模式下可不可用的命令
/sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能"查看"而不能设置和使用。
/boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及引导/boot/gurb。建议单独分区,分区大小100M即可
/dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。
/etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。注:/etc/X11存放与x windows有关的设置。
/home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据
/lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
/lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found
/mnt:/media: 光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。
/opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下
/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
/root: 系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录, /var/run: 程序或服务启动
文件系统管理
查
1、文件系统查看命令df
[root@localhost ~]# df [选项] [挂载点]
选项:
-a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
-h 使用习惯单位显示容量,如KB,MB或GB等
-T 显示文件系统类型
-m 以MB为单位显示容量
-k 以KB为单位显示容量。默认就是以KB为单位
2、统计目录或文件大小
[root@localhost ~]# du [选项] [目录或文件名]
选项:
-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
-h 使用习惯单位显示磁盘占用量,如KB,MB或GB等
-s 统计总占用量,而不列出子目录和子文件的占用量
du -sh 目录大小
du命令和df命令的区别
df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序
占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录占用的空间
命令名称:ls
命令英文原意:list
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录文件
语法:ls [-ald] [文件或目录],ll是ls -l的缩写
-a 显示所有文件,包括隐藏文件
/ 查看根目录
-l 详细信息显示
-rw-------. 1 root root 1257 2月 20 07:25 anaconda-ks.cfg
1、-rw-r--r--
第一个- 文件类型(- 文件 d 目录 l 软链接文件)
u所有者 g所属组 o其他人
r读 w写 x执行
2、引用基数
3、所有者(只能一个)
4、所属组(只能一个)
5、大小
-h 显示单位
5、最后修改时间
6、文件名
-d 查看目录属性
经常和l一起使用
-i 文件i节点
命令名称:cd
命令英文原意:change directory
命令所在路径:shell内置命令
执行权限:所有用户
语法:cd [目录]
功能描述:切换目录
范例: $ cd /tmp/Japan/boduo 切换到指定目录
$ cd .. 回到上一级目录
命令名称:pwd
命令英文原意:print working directory
命令所在路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录(位置)
范例:$ pwd
/tmp/Japan
命令名称:cat
命令所在路径:/bin/cat
执行权限:所有用户
语法:cat [文件名]
主要有三大功能
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename 只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file
功能描述:显示文件内容(适用于文件内容少)
-n 显示行号
范例: $ cat /etc/issue
$ cat -n /etc/services
命令名称:more
命令所在路径:/bin/more
执行权限:所有用户
语法:more [文件名]
(空格) 或f 翻页 b上一页
(Enter) 换行
搜索字符
按下V键,调用vi编辑器
输入/,后面在跟你需要搜索的字符串。
按n是匹配当前文本的下一个字符串
按Esc键,输入:q 就可以退出vim
q或Q 退出
功能描述:分页显示文件内容(适用于文件内容少)
范例: $ more /etc/services
了解
命令名称:tac
命令所在路径:/usr/bin/tac
执行权限:所有用户
语法:tac [文件名]
功能描述:显示文件内容(反向列示)
范例: $ tac /etc/issue
命令名称:less
命令所在路径:/usr/bin/less
执行权限:所有用户
语法:less [文件名]
功能描述:分页显示文件内容(可向上翻页)
还可执行搜索
/servers n下一个字符
范例: $ less /etc/services
命令名称:head
命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head [文件名]
功能描述:显示文件前面几行
默认10行
-n 指定行数
范例: $ head -n 20 /etc/services
命令名称:tail
命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tail [文件名]
功能描述:显示文件后面几行
-n 指定行数
-f 动态显示文件末尾内容
实时监控日志tail -f /var/log/messages
范例: $ tail -n 18 /etc/services
命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
语法:find [搜索范围] [匹配条件] [执行操作]
范例
$ find /etc -name init
在目录/etc中查找文件init
-iname 不区分大小写
模糊搜索 *init*
?匹配单个字符
$ find / -size +204800
在根目录下查找大于100MB的文件
+n 大于 -n 小于 n 等于
单位是数据块,1个块=0.5k
$ find /home -user shenchao
在根目录下查找所有者为shenchao的文件
-group 根据所属组查找
$ find /etc -cmin -5
在/etc下查找5分钟内被修改过属性的文件和目录
-amin 访问时间 access
-cmin 文件属性 change
-mmin 文件内容 modify
连接符
$ find /etc -size +163840 -a -size -204800
在/etc下查找大于80MB小于100MB的文件
-a 两个条件同时满足
-o 两个条件满足任意一个即可
$ find /etc -name inittab -exec ls -l {} \;
在/etc下查找inittab文件并显示其详细信息
-exec/-ok 命令 {} \; 对搜索结果执行操作
ok多一个询问提示
补充
-type 根据文件类型查找
f 文件 d 目录 l 软链接文件
-inum 根据i节点查找
删除一些文件名你都打不出来的
功能描述:文件搜索
高消耗命令
命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep [-iv] [指定字串] [文件]
范例:# grep mysql /root/install.log
# grep -v ^# /etc/inittab 排除第一个是#的行
功能描述:在文件中搜寻字串匹配的行并输出
-i 不区分大小写
-v 排除指定字串
命令名称:tailf
查阅正在改变的日志文件
tailf /var/log/messages
命令名称:curl
比如请求URL(百度)
curl http://www.baidu.com
命令名称:tcpdump
tcpdump -i ens33 -nn -X -vv tcp port 21 and ip host 10.0.0.10 抓取10的ftp包
命令名称:dd
指定一个文件的大小 硬盘克隆
增
命令名称:mkdir
命令英文原意:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir [-p] [目录名]
功能描述:创建新目录
-p 递归创建
范例: $ mkdir -p /tmp/Japan/boduo
$ mkdir /tmp/Japan/longze /tmp/Japan/cangjing
命令名称:cp
命令英文原意:copy
命令所在路径:/bin/cp
执行权限:所有用户
语法:cp [-rp] [原文件或目录] [目标目录]
-r 复制目录
-p 保留文件属性
复制时间等
功能描述:复制文件或目录
范例:
$ cp -r /tmp/Japan/cangjing /root
将目录/tmp/Japan/cangjing复制到目录/root下
$ cp -rp /tmp/Japan/boduo /tmp/Japan/longze /root
将/tmp/Japan目录下的boduo和longze目录复制到/root下,保持目录属性
$ cp -r /tmp/Japan/cangjing /root/cj
复制并重命名
命令名称:touch
命令所在路径:/bin/touch
执行权限:所有用户
语法:touch [文件名]
功能描述:创建空文件
范例: $ touch Japanlovestory.list
可以用“shenchao girl”,但是不推荐空格
文本编辑器Vim
5.1 Vim常用操作
功能强大的全屏幕文本编辑器
进入
vi filename
命令模式
插入模式
输入 i a o
退出模式
ESC键
保存退出
:wq或ZZ
可以导出桌面,进行复杂操作
插入命令
O 在光标上插入新行
o 在光标下插入新行
I 在光标所在行行首插入
i 在光标所在字符前插入
A 在光标所在行尾插入
a 在光标所在字符后插入
定位命令
: set nu 设置行号
: set nonu 取消行号
gg
到第一行
G
到最后一行
nG 到第n行
: n 到第n行
$ 移至行尾
0 移至行首
删除命令
:n1,n2d 删除指定范围的行
D 删除光标所在处到行尾内容
dG 删除光标所在行到文件末尾内容
dd 删除光标所在行,ndd删除n行
nx 删除光标所在处后n个字符
x 删除光标所在处字符
复制和剪切命令
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p、P 粘贴在当前光标所在行下或行上
替换和取消命令
r 取代光标所在处字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一步操作
搜索和搜索替换命令
/string 搜索指定字符串
/ftp
搜索时忽略大小写 :set ic
n 搜索指定字符串的下一个出现位置
:%s/old/new/g 全文替换指定字符串
:n1,n2s/old/new/g 在一定范围内替换指定字符串
保存和退出命令
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改退出
:wq! 强制保存修改并退出(文件所有者及root可使用)
5.2 Vim使用技巧
导入命令执行结果 :r !命令
r 绝对路径
导入别的文件内容
! 系统命令
不退出的前提下,知道命令路径
r ! date 导入时间
定义快捷键 :map 快捷键 触发命令
范例: : map ^P I#<ESC>
: map ^B 0x
连续行注释 :n1,n2s/^/#/g
:n1,n2s/^#//g
:n1,n2s/^/\/\//g
替换 :ab mymail samlee@lampbrother.net
root为例 vi /root/.vimrc
填写命令,类似首选项 set nu之类
命令名称:ln
命令英文原意:link
命令所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [原文件] [目标文件]
-s 创建软链接
功能描述:生成链接文件
软链接
类似Windows快捷方式
1、lrwxrwxrwx l 软链接
软链接文件权限都为rwxrwxrwx
2、文件大小,只是符号链接本身大小
3、/tmp/issue.soft -> /etc/issue
箭头指向原文件
硬链接
1、可通过i节点识别,可以看做同个i节点的快捷方式
更新的是i节点
删除源文件时,软连接为空,硬链接不受影响
2、不能跨分区
3、不能针对目录使用
范例:
$ ln -s /etc/issue /tmp/issue.soft
创建文件/etc/issue的软链接/tmp/issue.soft
$ ln /etc/issue /tmp/issue.hard
创建文件/etc/issue的硬链接/tmp/issue.hard
命令名称:tar
命令所在路径:/bin/tar
执行权限:所有用户
语法:tar [-zcf] [压缩后文件名] [目录]
选项
-c 打包
-v 显示详细信息
-f 指定文件名
-z 打包同时压缩
范例:
$ tar -zcf Japan.tar.gz Japan
将目录Japan打包并压缩为.tar.gz文件
功能描述:压缩目录,解压缩
压缩后文件格式:.tar.gz
tar命令解压缩语法:
选项
-x 解包
-v 显示详细信息
-f 指定解压文件
-z 解压缩
范例:$ tar -zxf Japan.tar.gz
gzip,gunzip
命令名称:gzip
命令英文原意:GNU zip
命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件(只能压缩文件不能压缩目录)
(压缩比惊人)
压缩后文件格式:.gz
命令名称:gunzip
命令英文原意:GNU unzip
命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:解压缩.gz的压缩文件
范例: $ gunzip boduo.gz
scp命令
远程复制
scp 远程用户名@ip地址:文件的绝对路径 本地Linux系统路径 (从远程主机拉取文件)
scp root@192.168.3.60:/home/ixdba/etc.tar.gz /tmp
scp 本地linux系统文件路径 远程用户名@ip地址:远程系统文件绝对路径名 (像远程主机推送文件)
删
命令名称:rm
命令英文原意:remove
命令所在路径:/bin/rm
执行权限:所有用户
语法:rm -rf [文件或目录]
-r 删除目录
-f 强制执行,不提示
功能描述:删除文件
范例:
$ rm /tmp/yum.log
删除文件/tmp/yum.log
$ rm -rf /tmp/Japan/longze
删除目录/tmp/Japan/longze
改
命令名称:mv
命令英文原意:move
命令所在路径:/bin/mv
执行权限:所有用户
语法:mv [原文件或目录] [目标目录]
相当灵活的命令
功能描述:剪切文件(改名)
其他
帮助命令(直接百度就行)
命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which 命令
功能描述:搜索命令所在目录及别名信息
/bin/rm inittab
范例:$ which ls
命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助文档路径
范例:$ whereis ls
命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
范例: $ man ls
查看ls命令的帮助信息
name 命令主要用途
whatis ls 简单查看命令用途
/-l 快速检索-l的用途
功能描述:获得帮助信息
$ man services
查看配置文件services的帮助信息
用途和格式
apropos services 简单配置文件用途
补充
touch --help 简单查看命令参数信息
man date 查看时间格式,修改时间
类似man的命令info
命令名称:help
命令所在路径:Shell内置命令
执行权限:所有用户
语法:help 命令
功能描述:获得Shell内置命令的帮助信息
找不到命令所在路径(which、whereis)的一些命令cd、umask...
范例: $ help umask
查看umask命令的帮助信息
用户和权限管理
用户和用户组管理
查
7.1、用户配置文件
7.1.1 用户信息文件/etc/passwd
1、用户管理简介
所以越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。
在Linux中主要是通过用户配置文件来查看和修改用户信息
2、/etc/passwd
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
0: 超级用户
1-499: 系统用户(伪用户)
500-65535: 普通用户
更改UID变成超级用户
GID(用户初始组ID)
第5字段:用户说明
第6字段:家目录
普通用户:/home/用户名/
超级用户:/root/
第7字段:登录之后的Shell
3、初始组和附加组
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个。
4、Shell是什么
Shell就是Linux的命令解释器。
在/etc/passwd当中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin,/usr/bin/passwd等。
7.1.2 影子文件/etc/shadow
1、影子文件/etc/shadow
第1字段:用户名
第2字段:加密密码
加密算法升级为SHA512散列加密算法
如果密码位是“!!”或“*”代表没有密码,不能登录
第3字段:密码最后一次修改日期
使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔时间(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5字段相比)
0:代表密码过期后立即失效
-1:则代表密码永远不会失效。
第8字段:账号失效时间
要用时间戳表示
第9字段:保留
2、时间戳换算
把时间戳换算为日期
date -d "1970-01-01 16066 days"
把日期换算为时间戳
echo $(($(date --date="2014/01/06" +%s)/86400+1))
7.1.3 组信息文件/etc/group和组密码文件/etc/gshadow
1、组信息文件/etc/group
第一字段:组名
第二字段:组密码标志
非本用户组的用户想切换到本用户组身份时
第三字段:GID
第四字段:组中附加用户
2、组密码文件/etc/gshadow
第一字段:组名
第二字段:组密码
第三字段:组管理员用户名
第四字段:组中附加用户
7.2、用户管理相关文件
1、用户的家目录
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
2、用户的邮箱
/var/spool/mail/用户名/
用户之间
3、用户模板目录
/etc/skel/
目录下增加文件,新建账号也生产这个文件
新用户默认配置 /etc/default/useradd
GROUP=100 #用户默认组
HOME=/home #用户家目录
INACTIVE=-1 #密码过期宽限天数(7)
EXPIRE= #密码失效时间(8)
SHELL=/bin/bash #默认shell
SKEL=/etc/skel #模板目录
CREATE_MAIL_SPOOL=yes #是否建立邮箱
密码默认配置 /etc/login.defs
PASS_MAX_DAYS 99999 #密码有效期(5)
PASS_MIN_DAYS 0 #密码修改间隔(4)
PASS_MIN_LEN 5 #密码最小5位(PAM)
PASS_WARN_AGE7 #密码到期警告(6)
UID_MIN 500 #最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512 #加密模式
命令名称:who(我是谁)
命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看当前登录用户信息
tty 本地登录
pty 远程登录
范例: $ who
命令名称:w(我是谁详细版)
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看当前登录用户详细信息,系统简单状态
系统运行总时长,负载情况
what正在干什么,jcpu累计占用cpu时间
范例: $ w
命令名称:last
命令所在路径:/usr/bin/last
执行权限:所有用户
语法:last
功能描述:列出目前与过去登入系统的用户信息
范例:# last
命令名称:lastlog
命令所在路径:/usr/bin/lastlog
执行权限:所有用户
语法:lastlog
功能描述:检查某特定(全部)用户上次登录的时间
范例:# lastlog
# lastlog -u 502
增
7.3.1 用户添加命令useradd,passwd
1、useradd命令格式
[root@localhost ~]#useradd [选项] 用户名
选项:
-u UID: 手工指定用户的UID号
-d 家目录: 手工指定用户的家目录
-c 用户说明: 手工指定用户的说明
-g 组名: 手工指定用户的初始组
-G 组名: 指定用户的附加组
-s shell: 手工指定用户的登录shell。默认是/bin/bash
2、添加默认用户
[root@localhost ~]# useradd lamp
[root@localhost ~]# grep "lamp" /etc/passwd
[root@localhost ~]# grep "lamp" /etc/shadow
[root@localhost ~]# grep "lamp" /etc/group
[root@localhost ~]# grep "lamp" /etc/gshadow
[root@localhost ~]# ll -d /home/lamp/
[root@localhost ~]# ll /var/spool/mail/lamp
3、指定选项添加用户
groupadd lamp1
useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1
7.3.2 修改用户密码passwd
1、passwd命令格式
[root@localhost ~]#passwd [选项] 用户名
选项:
-S 查询用户密码的密码状态。仅root用户可用。
查看密码状态
[root@localhost ~]# passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1
#用户名密码设定时间(2013-01-06) 密码修改间隔时间(0)
#密码有效期(99999 ) 警告时间(7) 密码不失效(-1)
-l 暂时锁定用户。仅root用户可用
[root@localhost ~]# passwd -l lamp
-u 解锁用户。仅root用户可用
[root@localhost ~]# passwd -u lamp
--stdin 可以通过管道符输出的数据作为用户的密码。
[root@localhost ~]# echo "123" | passwd --stdin lamp
编程使用
创建root权限的管理员
#把其中的uid改为0,gid改为0权限就跟root一样了。
vim /etc/passwd
#如:admin:x:0:0::/home/admin:/bin/bash
1、添加用户组
group [选项] 组名
选项:-g GID 指定组ID
删
删除用户userdel
userdel [-r] 用户名
选项:-r 删除用户同时删除用户家目录
3、删除用户组
groupdel 组名
改
1、修改用户信息usermod
[root@localhost ~]#usermod [选项] 用户名
选项:
-u UID: 修改用户的UID号
-c 用户说明: 修改用户的说明信息
[root@localhost ~]# usermod -c "test user" lamp
#修改用户的说明
-G 组名: 修改用户的附加组
[root@localhost ~]# usermod -G root lamp
#把lamp用户加入root组
-L: 临时锁定用户(Lock)
[root@localhost ~]# usermod -L lamp
#锁定用户
-U: 解锁用户锁定(Unlock)
[root@localhost ~]# usermod -U lamp
#解锁用户
2、修改用户密码状态chage
[root@localhost ~]#chage [选项] 用户名
选项:
-l: 列出用户的详细密码状态
-d 日期: 修改密码最后一次更改日期(shadow3字段)
-m 天数: 两次密码修改间隔(4字段)
-M 天数: 密码有效期(5字段)
-W 天数: 密码过期前警告天数(6字段)
-I 天数: 密码过后宽限天数(7字段)
-E 日期: 账号失效时间(8字段)
[root@localhost ~]# chage -d 0 lamp
#这个命令其实是把密码修改日期归0了(shadow第3字段)
#这样用户一登陆就要修改密码
2、修改用户组
groupmod [选项] 组名
选项:
-g GID 修改ID
-n 组名 修改组名
4、把用户添加入组或从组中删除
gpasswd 选项 组名
选项
-a 用户名:加入组
-d 用户名:从组中删除
其他
用户切换命令su
su [选项] 用户名
选项:
- 是使用“-”代表连带用户的环境变量一起切换
su - root
whoami
env
$是普通用户#是超级用户
-c 命令:仅执行一次命令,而不切换用户身份
su - root -c "useradd user3"
ACL权限
正常的ugo不适合复杂的情况(权限添加新一行)
[root@localhost ~]# setfacl -m u:st:rx /project/
#给用户st赋予r-x权限,使用“u:用户名:权限”格式 多出两行
其他
[root@localhost ~]# setfacl -m u:st:rx /project/
#给用户st赋予r-x权限,使用“u:用户名:权限”格式 多出两行
[root@localhost /]# setfacl -m g:tgroup2:rwx project/
#为组tgroup2分配ACl权限。使用“g:组名:权限”格式
最大有效权限mask
[root@localhost /]# setfacl -m m:rx 文件名
#设定mask权限为r-x。使用“m:权限”格式
1、递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
setfacl -m u:用户名:权限 -R 文件名
2、默认ACL权限
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
setfacl -m d:u:用户名:权限 文件名
[root@localhost ~]# getfacl 文件名
#查看acl权限
系统命令sudo权限
授权sc用户可以重启服务器(root把本来只能超级用户执行的命令赋予普通用户执行。)
[root@localhost ~]# visudo
#实际修改的是/etc/sudoers文件
sc ALL= /sbin/shutdown –r now
#用户名 本机(被管理主机的地址)=(可使用的身份) 授权命令(绝对路径)
4、普通用户执行sudo赋予的命令
[root@localhost ~]# su – sc
[sc@localhost ~]$ sudo -l
#查看可用的sudo命令
[lamp@localhost ~]$ sudo /sbin/shutdown -r now
#普通用户执行sudo赋予的命令
权限管理
查
权限知识
文件和目录的rwx,简写
r
可以查看文件内容
可以列出目录中的内容
w
可以修改文件内容
可以在目录中创建、删除文件
x
可以执行文件
可以进入目录
简写
r ---- 4,w ---- 2,x ---- 1
rwxrw-r-- 7 6 4
例子 $ chmod 777 testdir
默认目录755
改
命令名称:chmod
命令英文原意:change the permissions mode of a file
命令所在路径:/bin/chmod
执行权限:所有用户
语法:chmod [-R 递归修改] [{ugoa}{+-=}{rwx}] [文件或目录]
$ chmod g+w testfile
赋予文件testfile所属组写权限
多项u+w,g-x,o=r
$ chmod -R 777 testdir
修改目录testfile及其目录下文件为所有用户具有全部权限
功能描述:改变文件或目录权限
命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:所有用户
语法:chown [用户] [文件或目录]
范例:$ chown shenchao fengjie
改变文件fengjie的所有者为shenchao
功能描述:改变文件或目录的所有者
useradd shenchao
命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp [用户组] [文件或目录]
范例:$ chgrp lampbrother fengjie
改变文件fengjie的所属组为lampbrother
功能描述:改变文件或目录的所属组
groupadd lampbrother
其他
命令名称:umask
命令英文原意:the user file-creation mask
命令所在路径:Shell内置命令
执行权限:所有用户
语法:umask [-S]
范例: $ umask -S
默认目录权限 755
默认文件权限 644
安全考虑,默认新建文件没有执行权限
umask 数值更改是用逻辑与的算法,具体略
-S 以rwx形式显示新建文件缺省权限
功能描述:显示、设置文件的缺省权限(不建议更改)
文件特殊权限
-rwsr-xr-x
8.2.1 SetUID
1、SetUID的功能
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x(执行)权限
命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
passwd命令拥有SetUID权限,所以普通可以修改自己的密码
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x 1 root root 47976 6月 22 2012 /bin/cat
2、设定SetUID的方法
4代表SUID
chmod 4755 文件名
chmod u+s 文件名
3、取消SetUID的方法
chmod 755 文件名
chmod u-s 文件名
4、危险的SetUID
关键目录应严格控制写权限。比如“/”、“/usr”等
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
-rwx--s--x
1、SetGID针对文件的作用
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的时候,组身份升级为该程序文件的属组
SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate
/usr/bin/locate是可执行二进制程序,可以赋予SGID
执行用户lamp对/usr/bin/locate命令拥有执行权限
执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
命令结束,lamp用户的组身份返回为lamp组
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db
2、SetGID针对目录的作用(和SUID的区别)
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# mkdir dtest
[root@localhost tmp]# chmod g+s dtest
[root@localhost tmp]# ll -d dtest/
[root@localhost tmp]# chmod 777 dtest/
[root@localhost tmp]# su – lamp
[lamp@localhost ~]$ cd /tmp/dtest/
[lamp@localhost dtest]$ touch abc
[lamp@localhost dtest]$ ll
该目录下新建的文件,所属组为root
3、设定SetGID
2代表SGID
chmod 2755 文件名
chmod g+s 文件名
4、取消SetGID
chmod 755 文件名
chmod g-s 文件名
drwxrwxrwt
8.3.3 Sticky BIT
1、SBIT粘着位作用
粘着位目前只对目录有效
普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
[root@localhost ~]# ll -d /tmp/
drwxrwxrwt. 3 root root 4096 12月 13 11:22 /tmp/
2、设置与取消粘着位
设置粘着位
chmod 1755 目录名
chmod o+t 目录名
取消粘着位
chmod 777 目录名
chmod o-t 目录名
防止误操作chattr
[root@localhost ~]# chattr [+-=] [选项] 文件或目录名
chattr +i /root/myf
+: 增加权限
-: 删除权限
=: 等于某权限
选项
i:如果对文件设置i属性,那么不允许对文件进行
删除、改名,也不能添加和修改数据;
如果对目录设置i属性,那么只能修改目录下文件的数据,但
不允许建立和删除文件。(对root生效)
防止误操作,锁定
echo 123 >> 目录
a:如果对文件设置a属性,那么只能在文件中增加
数据,但是不能删除也不能修改数据;
如果对目录设置a属性,那么只允许在目录中建立和修改文件
,但是不允许删除
宽松防止误操作
2、查看文件系统属性
[root@localhost ~]# lsattr 选项 文件名
lsattr -a /root/myf
选项:
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
网络管理
知识
查
命令名称:ifconfig,netstat
yum search ifconfig
通过yum search 这个命令我们发现ifconfig这个命令是在net-tools.x86_64这个包里,接下来我们安装这个包就行了
运行 yum install net-tools 就OK了
ifconfig
命令英文原意:interface configure
命令所在路径:/sbin/ifconfig
执行权限:root
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
范例:# ifconfig
命令名称:netstat
安装net-tools
命令所在路径:/bin/netstat
执行权限:所有用户
语法:netstat [选项]
选项:
-t : TCP协议
-u : UDP协议
-l : 监听
-r : 路由
-n : 显示IP地址和端口号
范例:
# netstat -tlun 查看本机监听的端口
# netstat -an 查看本机所有的网络连接
比上条命令多了正在连接的端口
# netstat -rn 查看本机路由表
netstat -antp 查看端口和服务
功能描述:显示网络相关信息
命令名称:ping
命令所在路径:/bin/ping
执行权限:所有用户
语法:ping 选项 IP地址
-c 指定发送次数
功能描述:测试网络连通性
范例: # ping 192.168.1.156
命令名称:router
查看: router –n
路由设置:router add -net 目标网段 gw 网关
永久生效:[root@centos7 ~]# view /etc/sysconfig/network-scripts/route-ens33
172.28.105.0/24 via 172.27.9.254 dev ens33
172.28.214.17/32 via 172.27.9.254 dev ens33
命令名称:traceroute
命令名称:nmap
端口扫描
了解
主机名
window不可重复,针对用户端,wins服务,netbios协议,ip和主机名绑定
linux可重复,针对服务端
系统管理
系统知识
分区编辑器(partition editor)
分区类型
主分区:最多只能有4个
扩展分区
最多只能有1个
主分区加扩展分区最多有4个
硬盘的设计问题
不能写入数据,只能包含逻辑分区
逻辑分区
SCSI硬盘Linux最多支持11个逻辑分区
分区表示方法
主分区1 /dev/sda1 主分区2 /dev/sda2 主分区3 /dev/sda3
扩展分区 /dev/sda4 逻辑分区1 /dev/sda5 逻辑分区2 /dev/sda6 逻辑分区3 /dev/sda7
1主1扩展n逻辑
硬件设备文件名
IDE硬盘
/dev/hd[a-d]
SCSI/SATA/USB硬盘
/dev/sd[a-p]
光驱
/dev/cdrom或/dev/hdc
软盘
/dev/fd[0-1]
打印机(25针)
/dev/lp[0-2]
打印机(USB)
/dev/usb/lp[0-15]
鼠标
/dev/mouse
分区设备文件名
/dev/sda1
逻辑分区永远都是5开始
查
系统资源-进程管理
静态
ps aux
USER:该进程是由哪个用户产生的;
PID:进程的ID号;
永远的第一个进程 /usr/lib/systemd/systemd
最后一个进程 ps aux
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ:该进程占用虚拟内存的大小,单位KB;
RSS:该进程占用实际物理内存的大小,单位KB;
TTY:该进程是在哪个终端中运行的。?系统内核本身的,其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端
STAT:进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名
pstree -p 图形进程树
yum -y install psmisc
动态
top
在top命令的交互模式当中可以执行的命令:
P: 以CPU使用率排序,默认就是此项
M: 以内存的使用率排序
说明
第一行信息为任务队列信息
12:26:46 系统当前时间
up 1 day, 13:32 系统的运行时间,本机已经运行1天13小时32分钟
2 users 当前登录了两个用户
load average: 0.00,0.00, 0.00 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。
如果是8核那指标就是8
第二行为进程信息
Tasks: 95 total 系统中的进程总数
1 running 正在运行的进程数
94 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程。如果不是0,需要手工检查僵尸进程,正在终止过程中的进程
第三行为CPU信息
Cpu(s): 0.1%us 用户模式占用的CPU百分比
0.1%sy 系统模式占用的CPU百分比
0.0%ni 改变过优先级的用户进程占用的CPU百分比
99.7%id 空闲CPU的CPU百分比
0.1%wa 等待输入/输出的进程的占用CPU百分比
0.0%hi 硬中断请求服务占用的CPU百分比
0.1%si 软中断请求服务占用的CPU百分比
0.0%st st(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。
第四行为物理内存信息
Mem: 625344k total 物理内存的总量,单位KB
571504k used 已经使用的物理内存数量
53840k free 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了628MB内存,所以只有53MB的空闲内存了
65800k buffers 作为缓冲的内存数量
第五行为交换分区(swap)信息
1、文件系统查看命令df
[root@localhost ~]# df [选项] [挂载点]
选项:
-a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
-h 使用习惯单位显示容量,如KB,MB或GB等
-T 显示文件系统类型
-m 以MB为单位显示容量
-k 以KB为单位显示容量。默认就是以KB为单位
du命令和df命令的区别
df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序
占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录占用的空间
系统信息(自检,内核,位数,内存)
内核检测信息
[root@localhost ~]# dmesg | grep CPU
4、查看CPU信息
[root@localhost ~]# cat /proc/cpuinfo
[root@localhost ~]# uname [选项]
选项:
-a: 查看系统所有相关信息;
-r: 查看内核版本;
-s: 查看内核名称。
3、free命令专门查看内存使用状态
[root@localhost ~]# free [-b|-k|-m|-g]
选项:
-b: 以字节为单位显示
-k: 以KB为单位显示,默认就是以KB为单位显示
-m: 以MB为单位显示
-g: 以GB为单位显示
缓存和缓冲的区别
简单来说缓存(cache)是用来加速数据
从硬盘中“读取”的,而缓冲(buffer)
是用来加速数据“写入”硬盘的。
启动过程
硬盘单独区域MBR,引导程序,内核,(initramfs模拟加载系统lib识别sata)加载驱动,挂载根目录,启动脚本/usr/lib/systemd/systemd(sbin/init),/etc/rc.d/init.d系统完整初始化,/etc/inittab运行系统级别,etc/rc.d/rc.local开机自启动
/etc/inittab 系统运行级别
0 关机
[root@localhost ~]# init 运行级别
1
单用户模式,可以想象为windows的安全模式,主要用于系统修复
修改root密码
https://www.cnblogs.com/liuxing0007/p/11376073.html
2 不完全的命令行模式,不含NFS服务
3 完全的命令行模式,就是标准字符界面
4 系统保留
5 图形模式
6 重启动
了解
调用/etc/rc.d/rc文件
运行级别参数传入/etc/rc.d/rc这个脚本之
后,由这个脚本文件按照不同的运行级别
启动/etc/rc[0-6].d/目录中的相应的程序
/etc/rc3.d/k??开头的文件(??是数字),会
按照数字顺序依次关闭
/etc/rc3.d/S??开头的文件(??是数字),会
按照数字顺序依次启动
引导程序grub
/boot/grub2/grub.cfg
/etc/grub.d/
/etc/default/grub
grub菜单加密,不让单用户模式修改root密码
/etc/grub.d/00_header文件末尾,添加以下内容
cat <<EOF
set superusers='admin'
password admin qwe123
E0F
重新编译生成grub.cfg文件
grub2-mkconfig -o /boot/grub2/grub.cfg
了解
2、光盘修复模式
图
bash-4.1# chroot /mnt/sysimage
#改变主目录
sh-4.1# cd /root
重要系统文件丢失,导致系统无法启动
破解grup密码
增
9.2.3 挂载光盘与U盘
1、挂载光盘
[root@localhost ~]# mkdir /mnt/cdrom/
#建立挂载点
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
#挂载光盘
2、卸载命令
[root@localhost ~]# umount 设备文件名或挂载点
[root@localhost ~]# umount /mnt/cdrom
3、挂载U盘
[root@localhost ~]# fdisk –l
#查看分区列表,正常是sda一块,插入后多sdb
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
注意:Linux默认是不支持NTFS文件系统的
fat=fat16
vfat=fat32
ntfs挂载
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install ntfs-3g
mount ntfs-3g /dev/sdb1 /mnt #/dev/sdb1 为u盘路径
9.3 fdisk硬盘挂载
9.3.1 fdisk命令分区过程
1、添加新硬盘
2、查看新硬盘
fdisk -l
3、使用fdisk命令分区
fdisk /dev/sdb
m //帮助
a 设置可引导标记
b 编辑bsd磁盘标签
c 设置DOS操作系统兼容标记
d 删除一个分区
l 显示已知的文件系统类型。82为Linux swap分区,83为Linux分区
m 显示帮助菜单
n 新建分区
o 建立空白DOS分区表
p 显示分区列表
q 不保存退出
s 新建空白SUN磁盘标签
t 改变一个分区的系统ID
u 改变显示记录单位
v 验证分区表
w 保存退出
x 附加功能(仅专家)
流程
一个主分区一个拓展分区一个逻辑分区
4、重新读取分区表信息
partprobe /dev/sdb1
5、格式化分区
mkfs -t ext4 /dev/sdb1
ntfs-3g
6、建立挂载点并挂载
mount df 验证
2、分区自动挂载(永久挂载生效)
1、/etc/fstab文件
第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份
备份文件lost+found
第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高
[root@localhost ~]# vi /etc/fstab
…省略部分输出…
/dev/sdb5 /disk5 ext4 defaults 0 0
开机自启动echo "mount -t xfs /dev/sdb1 /mnt/mfs" >> /etc/rc.local
9.4 /etc/fstab文件修复
添加硬件错误时,开机输入root密码
mount -o remount,rw /
vi /etc/fstab
了解
-o 特殊选项:可以指定挂载的额外选项
exec/noexec 执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许
13.4 系统定时任务
2、用户的crontab设置
systemctl list-units --type=service | grep crond 默认开机自启动
[root@localhost ~]# crontab [选项]
选项:
-e: 编辑crontab定时任务
-l: 查询crontab任务
-r: 删除当前用户所有的crontab任务
[root@localhost ~]# crontab -e
#进入crontab编辑界面。会打开vim编辑你的工作。
* * * * * 执行的任务
第一个“*” 一小时当中的第几分钟0-59
第二个“*” 一天当中的第几小时0-23
第三个“*” 一个月当中的第几天1-31
第四个“*” 一年当中的第几月 1-12
第五个“*” 一周当中的星期几 0-7(0和7都代表星期日)
* 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
, 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令
- 代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令
*/n 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令
45 22 * * * 命令 在22点45分执行命令
0 17 * * 1 命令 每周1 的17点0分执行命令
0 5 1,15 * * 命令 每月1号和15号的凌晨5点0分执行命令
40 4 * * 1-5 命令 每周一到周五的凌晨4点40分执行命令
*/10 4 * * * 命令 每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 命令 每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。
举例
*/5 * * * * /bin/echo ”11” >> /tmp/test
5 5 * * 2 /sbin/shutdown -r now
0 5 1,10,15 * * /root/sh/autobak.sh
备份与恢复 CP(dump不支持文件和分区增量差异备份)
删
杀死进程
kill 进程id
kill 9 进程id 强制终止
killall [选项][信号] 进程名
改
关机、重启、注销命令
poweroff,reboot,logout
1、shutdown定时关机重启
[root@localhost ~]# shutdown [选项] 时间
选项:
-c: 取消前一个关机命令
-h: 关机
-r: 重启
其他
3、文件系统修复命令fsck
[root@localhost ~]# fsck [选项] 分区设备文件名
选项:
-a:不用显示用户提示,自动修复文件系统
-y:自动修复。和-a作用一致,不过有些文件系统只支持-y
开机会自检,无需使用的命令,除非万不得已
硬盘克隆
[root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数
dd 硬盘克隆
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数 指定输入/输出多少个数据块
例子:
[root@localhost ~]# dd if=/dev/zero of=/root/testfile bs=1k count=100000
应用程序管理
系统知识
软件包
源码包
源码包安装位置,启动方式
/usr/local/软件名/
补充
而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:
/usr/local/apache2/bin/apachectl start
位置集中,安装比较安全,尤其是对线上的生产环境而言,迁徙也比较方便
RPM包
RPM是安装在默认位置中(rpm -ql 包名),启动方式
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置
补充
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法是:
/etc/rc.d/init.d/httpd start
service httpd start
查
rpm查询是否安装
[root@localhost ~]# rpm -q 包名
#查询包是否安装
选项:
-q 查询(query)
[root@localhost ~]# rpm –qa
#查询所有已经安装的RPM包
选项:
-a 所有(all)
了解
1、RPM包命名原则
httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6.centos 适合的Linux平台
i686 适合的硬件平台
rpm rpm包扩展名
2、查询软件包详细信息
[root@localhost ~]# rpm –qi 包名
选项:
-i 查询软件信息(information)
-p 查询未安装包信息(package)
3、查询包中文件安装位置
[root@localhost ~]# rpm –ql 包名
选项:
-l 列表(list)
-p 查询未安装包信息(package)
了解
4、查询系统文件属于哪个RPM包
[root@localhost ~]# rpm –qf 系统文件名(绝对路径)
选项:
-f 查询系统文件属于哪个软件包(file)
查看属于哪个软件
5、查询软件包的依赖性
[root@localhost ~]# rpm –qR 包名
选项:
-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)
增
yum在线管理
2)安装
网络yum源(生效前提能上外网)
[root@localhost yum.repos.d]# vi /etc/yum.repos.d/CentOS-Base.repo
[base] 容器名称,一定要放在[]中
name 容器说明,可以自己随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
gpgkey 数字证书的公钥文件保存位置。不用修改
1)查询
[root@localhost yum.repos.d]# yum list
#查询所有可用软件包列表
[root@localhost yum.repos.d]# yum search 关键字
#搜索服务器上所有和关键字相关的包
[root@localhost yum.repos.d]# yum –y install 包名
选项:
install 安装
-y 自动回答yes
了解
1、包全名与包名
包全名
操作的包是没有安装的软件包时,使用包全名。而且要注意路径
包名
操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库
rpm命令管理-安装升级与卸载
2、RPM安装
rpm –ivh 包全名
选项:
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖性
3、RPM包升级
rpm -Uvh 包全名
选项:
-U(upgrade) 升级
4、卸载
rpm -e 包名
选项:
-e(erase) 卸载
--nodeps 不检查依赖性
源码包安装
1、安装准备
安装C语言编译器
是否安装 rpm -q gcc
下载源码包
https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/
2、安装注意事项
源代码保存位置:/usr/local/src/
软件安装位置:/usr/local/
如何确定安装过程报错:
安装过程停止
并出现error、warning或no的提示
3、源码包安装过程
下载源码包
解压缩下载的源码包
进入解压缩目录,在这个目录下执行命令
查看install安装文档
./configure --prefix=/usr/local/apache2 执行configure包
./configure 软件配置与检查
定义需要的功能选项。
检测系统环境是否符合安装要求。
把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
不成功则没有该文件
make
编译
make install
编译安装
/usr/local/apache2/bin/apachectl start或者./nginx在安装目录找到nginx
iptables -F 临时关闭防火墙
6.5 脚本安装包
3、Webmin安装过程
下载软件
http://sourceforge.net/projects/webadmin/files/
解压缩,并进入加压缩目录
执行安装脚本
./setup.sh
默认安装
2、Webmin的作用
Webmin 是一个基于 Web 的 Linux 系统管理界面。您就可以通过图形化的方式设置用户帐号、Apache、DNS、文件共享等服务。
1、脚本安装包
脚本安装包并不是独立的软件包类型,常见安装的是源码包。
是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
非常类似于Windows下软件的安装方式。
删
4)卸载
[root@localhost yum.repos.d]# yum -y remove 包名
选项:
remove 卸载
-y 自动回答yes
4、源码包的卸载
不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件。
改
3)升级
[root@localhost yum.repos.d]# yum -y update 包名
选项:
update 升级
修复漏洞
-y 自动回答yes
其他
rpm命令管理-校验与文件提取
1、RPM包校验
[root@localhost ~]# rpm –V 已安装的包名
差异信息:S.5....T. c /etc/httpd/conf/httpd.conf
选项:
-V 校验指定RPM包中的文件(verify)
验证内容中的8个信息的具体内容如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验和是否改变(可以看成文件内容是否改变)
D 设备的中,从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
文件类型
c 配置文件(config file)
d 普通文档(documentation)
g “鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
l 授权文件(license file)
r 描述文件(read me)
2、RPM包中文件提取
[root@localhost ~]# rpm2cpio 包全名 | cpio -idv .文件绝对路径
rpm2cpio
#将rpm包转换为cpio格式的命令
cpio
#是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
[root@localhost ~]# cpio 选项 < [文件|设备]
选项:
-i:copy-in模式,还原
-d:还原时自动新建目录
-v:显示还原过程
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
[root@localhost ~]# rpm -qf /bin/ls
#查询ls命令属于哪个软件包
[root@localhost ~]# mv /bin/ls /tmp/
#造成ls命令误删除假象
#提取RPM包中ls命令到当前目录的/bin/ls下,恢复误操作的命令
[root@localhost ~]# cp /root/bin/ls /bin/
#把ls命令复制会/bin/目录,修复文件丢失
2、YUM软件组管理命令(类似LAMP)
[root@localhost ~]# yum grouplist
#列出所有可用的软件组列表
[root@localhost ~]# yum groupinstall 软件组名
#安装指定软件组,组名可以由grouplist查询出来
[root@localhost ~]# yum groupremove 软件组名
#卸载指定软件组
光盘yum源搭建步骤
1)挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
2)让网络yum源文件失效-改名
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mv CentOS-Base.repo \
CentOS-Base.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo \
CentOS-Debuginfo.repo.bak
[root@localhost yum.repos.d]# mv CentOS-Vault.repo \
CentOS-Vault.repo.bak
3)修改光盘yum源文件
[root@localhost yum.repos.d]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///mnt/cdrom
#地址为你自己的光盘挂载地址
# file:///media/cdrom/
# file:///media/cdrecorder/
#注释这两个不存在的地址
gpgcheck=1
enabled=1
#把enabled=0改为enabled=1,让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Shell编程
Shell基础
echo输出命令,第一个脚本
echo输出命令
echo [选项] [输出内容]
-e: 支持反斜线控制的字符转换
[root@localhost ~]# echo -e "a\tb\tc\nd\te\tf"
#制表符与换行符(更多可上网搜索)
2、第一个脚本
[root@localhost sh]# vi hello.sh
#!/bin/Bash
必须的一行
#The first program
# Author: shenchao (E-mail: shenchao@lampbrother.net)
echo -e "Mr. Shen Chao is the most honest man inLampBrother"
3、脚本执行
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh
通过Bash调用执行脚本
bash hello.sh
2、输出重定向
标准正确输出重定向
命令 > 文件
以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。
ls > 文件
命令 >> 文件
以追加的方式,把命令的正确输出输出到指定的文件或设备当中。
标准错误输出重定向
错误命令 2>文件
以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。
错误命令 2>>文件
以追加的方式,把命令的错误输出输出到指定的文件或设备当中。
ddd 2> log
正确输出和错误输出同时保存
命令 > 文件 2>&1
以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 >> 文件 2>&1
以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &>文件
以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &>>文件
以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令>>文件1 2>>文件2
把正确的输出追加到文件1中,把错误的输出追加到文件2中。
了解
1、标准输入输出
/dev/stdin ,0 标准输入
/dev/sdtout ,1 标准输出
/dev/sdterr ,2 标准错误输出
3、输入重定向(不常见)
[root@localhost ~]# wc [选项] [文件名]
统计文件行数,字数
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
逻辑连接符和管道符
&&
命令1 && 命令2
逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
||
命令1 || 命令2
逻辑或
当命令1 执行不正确,则命令2才会执行
当命令1正确执行,则命令2不会执行
[root@localhost ~]# 命令 && echo yes || echo no
|
管道符
命令格式:
[root@localhost ~]# 命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
[root@localhost ~]# netstat -an | grep "ESTABLISHED"
通配符
? 匹配一个任意字符
[root@localhost tmp]# ls ?abc
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[root@localhost tmp]# rm -rf *
[](一个字符)
匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。
[-]
匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母。
[root@localhost tmp]# ls [0-9]*
[^]
逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符。
[root@localhost tmp]# ls [^0-9]*
特殊符号
""
双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。
单引号与双引号
[root@localhost ~]# name=sc
[root@localhost ~]# echo '$name'
[root@localhost ~]# echo "$name"
[root@localhost ~]# echo '$(date)'
[root@localhost ~]# echo "$(date)"
''
单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都没有特殊含义。
\
转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用。
$()
和反引号作用一样,用来引用系统命令。
反引号与$()
[root@localhost ~]# echo `ls`
[root@localhost ~]# echo $(date)
#
在Shell脚本中,#开头的行代表注释。
$
用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
变量
自定义变量
变量定义
[root@localhost ~]# name="shen chao"
变量叠加
aa="$aa"456
变量调用
echo $name
变量查看
set
变量删除
unset name
接收键盘输入
[root@localhost ~]# read [选项] [变量名]
选项:
-p “提示信息”:在等待read输入时,输出提示信息
-t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数: read命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入
例子
#!/bin/bash
# Author: shenchao (E-mail: shenchao@lampbrother.net)
read -t 30 -p "Please input your name: " name
#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
echo "Name is $name "
read -s -t 30 -p "Please enter your age: " age
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo -e "\n"
echo "Age is $age "
read -n 1 -t 30 -p "Please select your gender[M/F]: " gender
#使用“-n 1”选项只接收一个输入字符就会执行(都不用输入回车)
echo -e "\n"
echo "Sex is $gender"
环境变量(全局变量)
export 变量名=变量值
#申明变量
env
#查询变量
PATH
[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
unset 变量名
#删除变量
变量永久生效
修改 /etc/profile
source 配置文件
.(空格)配置文件 同source命令
了解
环境变量配置文件(PATH、HISTSIZE、PS1、HOSTNAME等)
/etc/profile
对所有用户生效
/etc/profile.d/*.sh
对所有用户生效
~/.bash_profile
对特定用户生效
~/.bashrc
对特定用户生效
/etc/bashrc
对所有用户生效
位置参数变量
$n
n为数字,$0代表命令本身,$1-$9代表第一
到第九个参数,十以上的参数需要用大括号
包含,如${10}.
./hello.sh 11 22 33
$@
这个变量也代表命令行中所有的参数,不过
$@把每个参数区分对待
x=1
for y in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo "The parameter$x is: $y"
x=$(( $x +1 ))
done
$#
这个变量代表命令行中所有参数的个数
$*
这个变量代表命令行中所有的参数,$*把所
有的参数看成一个整体
预定义变量
$?
最后一次执行的命令的返回状态。如果这个变
量的值为0,证明上一个命令正确执行;如果
这个变量的值为非0(具体是哪个数,由命令
自己来决定),则证明上一个命令执行不正确
了。
ls
echo $?
sadasdasff
echo $?
$$
当前进程的进程号(PID)
$!
后台运行的最后一个进程的进程号(PID)
了解
变量设置规则
在Bash中,变量的默认类型都是字符串型
,如果要进行数值运算,则必修指定变量
类型为数值型。
环境变量名建议大写,便于区分。
3、变量分类
用户自定义变量
环境变量:这种变量中主要保存的是和系统操
作环境相关的数据。
位置参数变量:这种变量主要是用来向脚本当
中传递参数或数据的,变量名不能自定义,变
量作用是固定的。
预定义变量:是Bash中已经定义好的变量,变
量名不能自定义,变量作用也是固定的。
环境变量PS1:定义系统提示符的变量
\d:显示日期,格式为“星期 月 日”
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为“HH:MM:SS”
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\#:执行的第几个命令
\$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”
举例:
[root@localhost ~]# PS1='[\u@\t \w]\$ '
[root@04:50:08 /usr/local/src]#PS1='[\u@\@ \h \# \W]\$‘
[root@04:53 上午 localhost 31 src]#PS1='[\u@\h \W]\$ '
数值运算
[root@localhost ~]# ff=$(( $aa+$bb ))
[root@localhost ~]# gg=$[ $aa+$bb ]
了解
declare声明变量类型
[root@localhost ~]# declare -i cc=$aa+$bb
expr或let数值运算工具
[root@localhost ~]# dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格
运算符
+, - 加、减,* , / , % 乘、除、取模, < =, > =, < , > 小于或等于、大于或等于、小于、大于,== , != 等于、不等于
12 !, ~ 逻辑非、按位取反或补码
6 & 按位与
5 ^ 按位异或
4 | 按位或
3 && 逻辑与
2 || 逻辑或
了解
10.1 Shell简介
1、Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
2、Shell的分类
Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。
C Shell: C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh
Bash: Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。
3、Linux支持的Shell
/etc/shells
/bin/sh,/bin/bash,/usr/bin/sh,/usr/bin/bash
1、命令别名
[root@localhost ~]# alias 别名='原命令'
#设定命令别名
[root@localhost ~]# alias
#查询命令别名
ll
命令执行时顺序
1 第一顺位执行用绝对路径或相对路径执行的命令。
2 第二顺位执行别名。
3 第三顺位执行Bash的内部命令。
4 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。
让别名永久生效
[root@localhost ~]# vi /root/.bashrc
删除别名
[root@localhost ~]# unalias 别名
常用快捷键
历史命令与命令补全
ctrl+C 强制终止当前的命令。
ctrl+L 清屏,相当于clear命令。
字符处理
正则表达式
*
前一个字符匹配0次或任意多次。
.
匹配除了换行符外任意一个字符。
[]
匹配中括号中指定的任意一个字符,只匹配一个字符。
例如:[aoeiu] 匹配任意一个元音字母,[0-9] 匹配任意一位
数字, [a-z][0-9]匹配小写字和一位数字构成的两位字符。
其他
^
匹配行首。例如:^hello会匹配以hello开头的行。
$
匹配行尾。例如:hello&会匹配以hello结尾的行。
[^]
匹配除中括号的字符以外的任意一个字符。例如:[^0-9] 匹配
任意一位非数字字符,[^a-z] 表示任意一位非小写字母。
\
转义符。用于取消讲特殊符号的含义取消。
grep "\.$" test_rule.txt
#匹配使用“.”结尾的行
\{n\}
表示其前面的字符恰好出现n次。例如:[0-9]\{4\} 匹配4位数
字,[1][3-8][0-9]\{9\} 匹配手机号码。
\{n,\}
表示其前面的字符出现不小于n次。例如: [0-9]\{2,\} 表示两
位及以上的数字。
\{n,m\}
表示其前面的字符至少出现n次,最多出现m次。例如: [az]\{6,8\} 匹配6到8位的小写字母。
对列命令awk
# awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
awk '{print $1"\t"$2}' student.txt
FS内置变量:指定分隔符
# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
awk '$6 >= 87 {printf $2 "\n" }' student.txt
print和printf命令(前者多一个换行符)
printf ’输出类型输出格式’ 输出内容
[root@localhost ~]# printf '%s %s %s\n' 1 2 3 4 5 6
printf "8686987698"
cut(无法使用在分隔符是空格,所以用awk)
cut -c 3 ttt.txt
sed文本编辑,选取、替换、删除、新增的命令
[root@localhost ~]# sed [选项] ‘[动作]’ 文件名
选项:
-n: 一般sed命令会把所有数据都输出到屏幕 ,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
sed -n '2p' student.txt
#查看文件的第二行
-e: 允许对输入数据应用多条sed命令编辑
# sed -e 's/Liming//g ; s/Gao//g' student.txt
#同时把“Liming”和“Gao”替换为空
-i: 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
#sed -i '3s/74/99/g' student.txt
#sed操作的数据直接写入文件
动作:
a \:
追加,在当前行后添加一行或多行。添加多行时,除最后 一行
外,每行末尾需要用“\”代表数据未完结。
[root@localhost ~]# sed '2a hello' student.txt
#在第二行后追加hello
c \:
行替换,用c后面的字符串替换原数据行,替换多行时,除最
后一行外,每行末尾需用“\”代表数据未完结。
i \:
插入,在当期行前插入一行或多行。插入多行时,除最后 一行
外,每行末尾需要用“\”代表数据未完结。
[root@localhost ~]# sed '2i hello world' student.txt
#在第二行前插入两行数据
d:
删除,删除指定的行。
[root@localhost ~]# sed '2,4d' student.txt
#删除第二行到第四行的数据,但不修改文件本身
p:
打印,输出指定的行。
s:
字串替换,用一个字符串替换另外一个字符串。格式为“行范
围s/旧字串/新字串/g”(和vim中的替换格式类似)。
排序命令sort
[root@localhost ~]# sort [选项] 文件名
[root@localhost ~]# sort /etc/passwd
#排序用户信息文件
选项:
-f: 忽略大小写
-n: 以数值型进行排序,默认使用字符串型排序
-r: 反向排序
-t: 指定分隔符,默认是分隔符是制表符
-k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
统计命令wc
[root@localhost ~]# wc [选项] 文件名
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数
流程控制
条件判断
1、按照文件类型进行判断
-d 文件
判断该文件是否存在,并且是否为目录文件(是目录为真)
[ -d /root ] && echo "yes" || echo "no"
#第一个判断命令如果正确执行,则打印“yes”,否则打印“no”
-e 文件
判断该文件是否存在(存在为真)
其他
-b 文件
判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)
-c文件
判断该文件是否存在,并且是否为字符设备文件(是字符设备
文件为真)
-f 文件
判断该文件是否存在,并且是否为普通文件(是普通文件为真)
-L 文件
判断该文件是否存在,并且是否为符号链接文件(是符号链接
文件为真)
-p 文件
判断该文件是否存在,并且是否为管道文件(是管道文件为真)
-s 文件
判断该文件是否存在,并且是否为非空(非空为真)
-S 文件
判断该文件是否存在,并且是否为套接字文件(是套接字文件
为真)
2、按照文件权限进行判断
-r 文件
判断该文件是否存在,并且是否该文件拥有读权限(有读
权限为真)
-w文件
判断该文件是否存在,并且是否该文件拥有写权限(有写
权限为真)
[ -w student.txt ] && echo "yes" || echo "no"
#判断文件是拥有写权限的
-x 文件
判断该文件是否存在,并且是否该文件拥有执行权限(有
执行权限为真)
-u 文件
判断该文件是否存在,并且是否该文件拥有SUID权限(有
SUID权限为真)
-g 文件
判断该文件是否存在,并且是否该文件拥有SGID权限(有
SGID权限为真)
其他
-k 文件
判断该文件是否存在,并且是否该文件拥有SBit权限(有
SBit权限为真)
3、两个文件之间进行比较
文件1 -nt 文件2
判断文件1的修改时间是否比文件2的新(如果新则为真)
文件1 -ot 文件2
判断文件1的修改时间是否比文件2的旧(如果旧则为真)
其他
文件1 -ef 文件2
判断文件1是否和文件2的Inode号一致,可以理解为两个
文件是否为同一个文件。这个判断用于判断硬链接是很
好的方法
[ /root/student.txt -ef /tmp/stu.txt ] && echo "yes" || echo "no"yes
#用test测试下,果然很有用
4、两个整数之间比较
整数1 -eq 整数2
判断整数1是否和整数2相等(相等为真)
整数1 -ne 整数2
判断整数1是否和整数2不相等(不相等位置)
整数1 -gt 整数2
判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2
判断整数1是否小于整数2(小于位置)
整数1 -ge 整数2
判断整数1是否大于等于整数2(大于等于为真)
[ 23 -ge 22 ] && echo "yes" || echo "no"
整数1 -le 整数2
判断整数1是否小于等于整数2(小于等于为真)
[ 23 -le 22 ] && echo "yes" || echo "no"
if语句
if [ 条件判断式 ];then
条件成立时,执行的程序
elif [ 条件判断式2 ]
条件成立时,执行的程序
else
执行的程序
fi
例子:判断分区使用率
#!/bin/bash
#统计根分区使用率
# Author: shenchao (E-mail: shenchao@lampbrother.net)
rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d "%" -f1)
#把根分区使用率作为变量值赋予变量rate
if [ $rate -ge 80 ]
then
echo "Warning! /dev/sda3 is full!!"
fi
例子1:备份mysql数据库
#!/bin/bash
ntpdate asia.pool.ntp.org &>/dev/null //同步时间
date=$(date +%y%m%d%H%M)
size=$(du -sh 位置)
if [ -d /tmp/dbbak ];then
echo "Date : $date!" >> /tmp/dbbak/dbinfo.txt
echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt
cd /tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz 位置 dbinfo.txt &>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt
else
mkdir /tmp/dbbak
echo "Date : $date!" >> /tmp/dbbak/dbinfo.txt
echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt
cd /tmp/dbbak
tar -zcf mysql-lib-$date.tar.gz 位置 dbinfo.txt &>/dev/null
rm -rf /tmp/dbbak/dbinfo.txt
fi
00 03 * * * /autobak.sh
mysqldump -uroot -p11111111 -B mysql | gzip > ./mysql.sql.gz
00 03 * * * /autobak.sh
例子2:判断apache是否启动
#!/bin/bash
# Author: shenchao (E-mail: shenchao@lampbrother.net)
port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk '{print$2}')
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port
if [ "$port" == "open" ]
then
echo “$(date) httpd is ok!” >> /tmp/autostart-acc.log
else
/etc/rc.d/init.d/httpd start &>/dev/null
echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
fi
例子,判断用户输入的是什么文件
#!/bin/bash
#判断用户输入的是什么文件
# Author: shenchao (E-mail: shenchao@lampbrother.net)
read -p "Please input a filename:" file
#接收键盘的输入,并赋予变量file
if [ -z "$file" ]
#判断file变量是否为空
then
echo "Error,please input a filename"
exit 1
elif [ ! -e "$file" ]
#判断file的值是否存在
then
echo "Your input is not a file!"
exit 2
elif [ -f "$file" ]
#判断file的值是否为普通文件
then
echo "$file is a regulare file!"
elif [ -d "$file" ]
#判断file的值是否为目录文件
then
echo "$file is a directory!"
else
echo "$file is an other file!"
case语句(雷同if)
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for循环
for 变量 in 值1 值2 值3…或者for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
例子,批量添加指定数量的用户
#!/bin/bash
#批量添加指定数量的用户
# Author: shenchao (E-mail: shenchao@lampbrother.net)
read -p "Please input user name: " -t 30 name
read -p "Please input the number of users: " -t 30 num
read -p "Please input the password of users: " -t 30 pass
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
then
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y" ]
then
for (( i=1;i<=$num;i=i+1 ))
do
/usr/sbin/useradd $name$i &>/dev/null
echo $pass | /usr/bin/passwd --stdin $name$i &>/dev/null
done
fi
fi
while循环
while循环是不定循环,也称作条件循环
。只要条件判断式成立,循环就会一直继
续,直到条件判断式不成立,循环才会停
止。这就和for的固定循环不太一样了。
while [ 条件判断式 ]
do
程序
done
例子,是否小于100
#!/bin/bash
#从1加到100
# Author: shenchao (E-mail: shenchao@lampbrother.net)
i=1
s=0
while [ $i -le 100 ]
#如果变量i的值小于等于100,则执行循环
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is: $s"
2、until循环(没p用,跟while相反)
日志管理
查
/var/log/messages系统日志
/var/log/secure安全日志
其他
/var/log/cron
记录了系统定时任务相关的日志。
/var/log/cups/
记录打印信息的日志
/var/log/dmesg
记录了系统在开机时内核自检的信息。也可以使用dmesg命令直接查看内核自检信息。
/var/log/btmp
记录错误登录的日志。这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看,命令如下:
[root@localhost log]# lastb
root tty1 Tue Jun 4 22:38 - 22:38 (00:00)
#有人在6月4日22:38使用root用户,在本地终端1登录错误
黑客尝试攻击
/var/log/lastlog
记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,不能直接vi,而要使用lastlog命令查看。
lastlog
/var/log/mailog
记录邮件信息。
/var/log/wtmp
永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看。
last
/var/run/utmp
记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询。
w
增
RPM包安装的 /var/log/httpd/apache 等服务的默认日志目录(不归系统管理,但是会轮替)
源码包安装的(需要配置轮替,轮替主要也是源码包)
logrotate轮替配置文件
[root@localhost ~]# vi /etc/logrotate.conf
/usr/local/apache2/logs/access_log {
daily
create
rotate 30
}
属性
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
rotate 数字 保留的日志文件的个数。0指没有备份
dateext
使用日期作为日志轮替文件的后缀。如secure20130605
其他
compress 日志轮替时,旧的日志进行压缩
create mode owner
group
建立新日志,同时指定新日志的权限与所有者和
所属组。如create 0600 root utmp
mail address
当日志轮替时,输出内容通过邮件发送到指定的
邮件地址。如mail shenc@lamp.net
missingok 如果日志不存在,则忽略该日志的警告信息
notifempty 如果日志为空文件,则不进行日志轮替
minsize 大小
日志轮替的最小值。也就是日志一定要达到这个
最小值才会轮替,否则就算时间达到也不轮替
size 大小
日志只有大于指定大小才进行日志轮替,而不是
按照时间轮替。如size 100k
删
改
rsyslogd日志服务 自启动
/etc/rsyslog.conf配置文件 cat一下
authpriv.* /var/log/secure
authpriv服务大于等于*日志等级的消息,记录在后面的位置
日志等级
debug 一般的调试信息说明
info 基本的通知信息
notice 普通信息,但是有一定的重要性
warning 警告信息,但是还不回影响到服务或系统的运行
err
错误信息,一般达到err等级的信息以及可以影响到服务或系统的运行了
crit 临界状况信息,比err等级还要严重
alert 警告状态信息,比crit还要严重。必须立即采取行动
emerg 疼痛等级信息,系统已经无法使用了
了解
网络服务
dhcp
dns
了解
CDN内容分发
智能dns解析(电信联通,或者DNDPOD)
缓存服务器squid
nginx也可以当
vsftpd
系统知识
FTP服务器软件
两种工作模式
主动模式:客户端向FTP服务器发送端口信息,由服务器主动连接该端口。
服务器:21控制,20传输
被动模式:FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。
服务器:21控制,随机端口传输
三种认证模式
匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器
本地用户模式:通过Linux系统本地账号进行验证的模式
虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务
查
增
https://help.aliyun.com/document_detail/92048.html
/etc/vsftpd/vsftpd.conf是vsftpd的核心配置文件。
配置
yum install -y vsftpd
systemctl start vsftpd.service
systemctl enable vsftpd.service
新建用户和目录和权限
vim /etc/vsftpd/vsftpd.conf
配置见连接
systemctl restart vsftpd.service
删
改
其他
SAMBA
知识
文件共享服务,用于window和linux
使用smb协议
TCP 139 445 smb 实现资源共享、权限验证
UDP 137 nmbd 实现计算机名解析
查
增
安装 yum -y install samba
修改配置文件 vi /etc/samba/smb.conf
添加
[y28]
comment = yjs share dir
path = /yjs/y28
public = yes
writable = yes
browseable = yes
设置上传文件的默认权限
create mask = 666
directory mask = 777
创建目录 和权限777
创建用户
useradd lisi
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
删
改
其他
NFS服务
知识
NFS是SUN开发的,用于UNIX机器之间的资源共享
samba自然主要用于在windows和unix之间共享资源 smb
通用:开源软件seafile
查
增
https://blog.51cto.com/mrxiong2017/2087001 超简单牛b
NFS服务,rpcbind服务
删
改
其他
rsync服务
知识
实时同步工具,主要用于备份,区别于scp主要是智能同步,而不是简单的覆盖且实时,快速
查
增
yum -y install rsync
下行同步(下载,同步目录)rsync -avz --delete root@192.168.64.22:/server/ssh/* /client/ssh/
基于ssh
上行同步(上传)rsync -avz /client/ssh/* root@10.0.0.254:/server/ssh
https://www.cnblogs.com/xiaozi/p/11018496.html
配置镜像源,且定时同步
实时同步
Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别
ersync是基于Inotify开发的,类似于Inotify-tools的工具
当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync
https://www.linuxidc.com/Linux/2017-10/147900.htm
删
改
其他
LNMP
https://help.aliyun.com/document_detail/97251.html,准备编译环境
关闭防火墙
systemctl status firewalld
systemctl stop firewalld
临时关闭防火墙
systemctl disable firewalld
防火墙的状态参数是是active,则防火墙为开启状态,inactive,则防火墙为关闭状态
最后重启系统使设置生效
关闭SELinux
getenforce
状态参数是Disabled,则SELinux为关闭状态,状态参数是Enforcing,则SELinux为开启状态
setenforce 0
临时关闭SELinux
永久关闭SELinux
永久关闭SELinux,运行命令vi /etc/selinux/config编辑SELinux配置文件。回车后,把光标移动到SELINUX=enforcing这一行,按i键进入编辑模式,修改为SELINUX=disabled,按Esc键,然后输入:wq并按Enter键以保存并关闭SELinux配置文件。
最后重启系统使设置生效
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
yum源
添加软件源 https://help.aliyun.com/document_detail/120851.html?spm=5176.22414175.sslink.4.29c9129droT0Ot
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all && sudo yum makecache
安装epel
sudo yum install epel-release
第三方软件源
Nginx
知识
编译环境
知识
高并发量5万,高性能的http 和反向代理web 服务器,同时提供邮件功能
查
增
二进制包(无需编译)
rpm格式:.rpm
yum -y install nginx
查看Nginx版本
nginx -v
启动,自启动Nginx服务
systemctl start nginx
systemctl enable nginx
二进制包:mysql-3.23.58-pc-linux-i686.tar.gz
源码包:php-5.2.14.tar.gz
https://www.kuangstudy.com/bbs/1464593977603792897
查找安装路径: whereis nginx
cd /usr/local/nginx/sbin/
./nginx 启动
./nginx -s reload 重新加载配置文件
ps aux|grep nginx 查看nginx进程
删
改
反向代理和负载均衡
location / { proxy_pass http://lb;}
upstream lb{ server 192.168.93.200:8848 weight=1; server 192.168.93.201:8848 weight=1;}
添加到日志查看效果
"$upstream_addr" "$upstream_status" 添加到log_format main
tailf access.log
动静分离
优化
基本不优化,根据需求来
连接数调整
文件传输类型,是否压缩,是否缓存,传输机制
https://www.cnblogs.com/struggle-1216/p/12911900.html
状态统计模块
目录保护(需身份验证)
访问控制ip
allow all;
deny 123.123.123.123;
虚拟主机
https
https://www.cnblogs.com/outsrkem/p/12182243.html
域名重写
rewrite ^(.*)$ https://10.0.0.254:443 permanent;
其他
http2.0
多帧合成
nginx配置2.0实验
Mysql
系统知识
开源免费,千百万量级的中小型关系型数据库(oracle大型,花钱的)
非关系型数据库按对象存储Redis,MongDB
稳定版 5.7
连接数据库(默认root只支持本地登录,增加账户)
mysql -u root -p
grant all privileges on *.* to afu@"%" identified by "Wx2020!!" with grant option;
afu账户,%所有路径
flush privileges;
刷新数据库
systemctl restart mysqld.service
重启数据库
查
netstat -antp
3306 LISTEN
文件位置
数据库/var/lib/mysql/mysql
日志/var/log/mysqld.log
配置/etc/my.cnf
增
创建数据库(支持中文)
字符集utf8
排序规则utf8_general_ci
主从复制,读写分离
主从复制
环境
mysql -u root -p -h 127.0.0.1
grant create on *.* to mysql01@"%" identified by 'Wx2020!!';
grant all privileges on *.* to mysql01@'%' identified by 'Wx2020!!';
flush privileges;
用于远程
中文编码设置
/etc/my.cnf
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
主从
[mysqld]
server-id=254
log-bin=mysql-bin
重启mariadb systemctl restart mariadb
grant replication slave on *.* to 'mysql'@10.0.0.253 identified by 'mysql'; 授权
MariaDB [(none)]> show master status;
[mysqld]
server-id=253
log-bin=mysql-bin
重启mariadb systemctl restart mariadb
mysql > change master to
master_host='10.0.0.254',
master_user='mysql',
master_password='mysql',
master_log_file='mysql-bin.000001',
master_log_pos=394;
接受授权
start slave;
验证
MariaDB [(none)]> show slave status\G
读写分离
环境
安装gcc环境 gcc*
安装 jdk
amoeba下载 https://jaist.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
读写分离
课程文档
配置权限和amoeba.xml,并授权
数据库备份还原,定时
创建一个autobak.sh且chmod770
mysqldump -uroot -p11111111 -B mysql | gzip > /sh/${date}mysql.sql.gz
定时任务
00 03 * * * /autobak.sh
备份
mysqldump -u root -p --all-databases > /tmp/db.sql
还原
mysql -uroot -p < /tmp/db.sql
删
改
数据库基本操作
数据库
show databases; use 数据库名; create database 数据库名; drop database 数据库名;
表
show tables; create table 表名 (字段1 类型1,...); drop table 表名;
字段
select * from 表名; insert into 表名(字段1,字段2,……) values(字段1的值, 字段2的值,……); update 表名 set 字段名=新数据 where 条件表达式; delete from 表名 where 条件表达式;
权限
show grants for 用户@登录位置; grant 权限1,权限2,...... on 数据库.数据表 to 用户@登录位置 (identified by ‘密码’); revoke 取消的权限1,取消的权限2,...... on 数据库.数据表 from 用户@登录位置;
管理Navicat
hxqxiaoqi.gitee.io
mysql -uroot -p
set password=password("123123");
grant all privileges on *.* to 'root'@'%' identified by '123123';
flush privileges;
其他
Win10安装MySQL5.7
https://www.bilibili.com/video/BV1NJ411J79W?p=3
PHP
更新YUM源
添加epel源
yum install \
https://repo.ius.io/ius-release-el7.rpm \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
添加Webtatic源
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php70w-devel php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-pdo.x86_64 php70w-mysqlnd php70w-fpm php70w-opcache php70w-pecl-redis php70w-pecl-mongodb
安装PHP
查看PHP
php -v
PHP 7.0.33......
配置PHP
新建文件
vi /usr/share/nginx/html/phpinfo.php
<?php echo phpinfo(); ?>
启动PHP-FPM,开机自启动
systemctl start php-fpm
systemctl enable php-fpm
http://10.0.0.200/phpinfo.php
JDK+tomcat
了解
java运行环境的JDK+类似nginx的tomcat
查
增
下载 https://blog.csdn.net/weixin_41903771/article/details/82668264
JDK
JDK环境变量 https://www.cnblogs.com/outsrkem/p/13657261.html
source /etc/profile
java -version
tomcat
cd到bin下
./startup.sh
默认8080(8005)端口
删
改
其他
网站
Discuz
系统知识
论坛系统
查
增
参考:https://www.cnblogs.com/laramia/p/5035744.html
删
改
其他
WordPress
系统知识
WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用
查
增
参考:https://blog.51cto.com/laotang6/2163983
删
改
其他
nacos
https://nacos.io/zh-cn/docs/quick-start.html?spm=a2c4g.11186623.0.0.291c68874aqikF
安装1.8.0的所有文件
yum install java-1.8.0-openjdk* -y
http://192.168.93.200:8848/nacos/
redis
系统知识
NoSQL数据库
针对sql对超大规模和高并发任务提供缓冲和保护
大数据应用
键值(key-value)
查
常用命令
select 0 选择数据库0-15
键值对命令
keys *或h*llo或h?llo 查找键名
del hello
rename name name1重命名键名
type name 返回类型
expire 过期时间 ttl 剩余时间
服务器命令
info 获取服务器的详细信息
config get * 服务器配置文件中的参数
quit 退出(ctrl+d)
save 保存所有数据,一般不用,会占用大量资源。用bgsave
dbsize 建数量
flushdb 删除当前数据库中所有的数据
flushall 删除所有数据库中的所有数据
增
安装启动连接
环境
wget http://download.redis.io/releases/redis-2.8.6.tar.gz
gcc*
net-tools
安装启动
tar -zxvf redis-2.8.6.tar.gz
cd redis-2.8.6
make
make PREFIX=/usr/local/redis install 指定安装位置
mkdir /usr/local/redis/etc
cp ./redis.conf /usr/local/redis/etc/ 复制配置文件/etc
redis-server 服务器端
redis-cli 客户端
/usr/local/redis/bin/redis-server 配置文件 启动
vi /usr/local/redis/etc/redis.conf
daemonize no 改为
daemonize yes #后台启动
连接,关闭
/usr/local/redis/bin/redis-cli 连接登录
/usr/local/redis/bin/redis-cli shutdown Redis关闭
另外一台虚拟机yum telnet 监听6379
了解
变成系统命令
ln -s /usr/local/redis/bin/* /usr/local/bin/
删
改
安全性
因为redis速度非常快,强大的密码来防止暴力破解,密码原则:复杂性
vi /usr/local/redis/etc/redis.conf
找到修改requirepass 123456
重启
验证,可以进入数据可以无法读取文件
auth 123456
或者登录时 redis-cli -a 123456
history -c 清空历史命令,里面有明文的密码
主从
同一服务器配置主从
复制从服务器 cp -r /usr/local/redis/ /usr/local/redis-slave
修改从服务器配置文件
vi /usr/local/redis-slave/etc/redis.conf
pidfile /usr/local/redis-slave/redis.pid #指定pid文件
port 63791 #指定端口号
dir /usr/local/redis-slave/ #指定数据库文件存放位置
slaveof 127.0.0.1 6379 #指定主服务器IP和端口
masterauth 123456 #指定主服务器密码
重启
从的链接方式redis-cli -a 123456 -p 63791
其他
数据库的五种类型,简单操作
string 字符串类型
set name lamp 设置变量name=lamp
del name 删除变量
get name 查询变量
hash散列类型
hset person_table name zhangsan
hset person_table age 18
hset person_table sex man
等价于hmset person_table name zhangsan age 18 sex man
hdel person_table name
hget person_table name
显示多个hmget person_table name age sex
显示全部hgetall person_table
list列表类型
lpush或rpush list1 hello 列表从头或者尾部添加元素
lrange 0 -1 查看所有
lset list1 0 nohello 修改第一个值
lrem list1 0 删除所有
set无序集合类型(合集并集,交集)
sadd name zhang li sun huang
smembers name
随机存取删除命令,集合命令
zset有序集合类型
zadd name 1 zhang 2 li 3 huang
zrange name 0 -1 whitscores 并显示序号
zrem name zhang
有序存取删除命令,集合命令
持久化
snapshotting(快照)--默认方式 900,300,60都有规则触发,默认的文件名为dump.rdb
append-only file(缩写aof)默认关闭,可每秒备份
事务处理
一件事情,要么处理完,要么回滚到最初
multi 开始批处理
命令
exec执行批处理
发布及订阅消息
邮件功能?
iptables
知识
防火墙:拒绝一切连接,除非匹配了放行的规则
基础类防火墙:根据数据包报文的结构特征进行对应处理的模块
iptables
IDS 防火墙:入侵检测系统 提供事后分析
跳板机:硬件级,类似mac和路由表功能
堡垒机:跳板机升级版,内置系统(用户列表,)
IPS 防火墙:入侵防御系统 拦截问题数据报文
病毒库
其他
性能指标:吞吐量(带机量)
安全审计:扫描漏洞
四表五链
表:对数据包的分类 raw跟踪表,mangle标记表,nat转换表,filter过滤表
链:规则的触发位置 INPUT入站,POSTROUTING转发前,FORWORD转发,PREROUTING转发后,OUTPUT出站
其他
用户空间(iptables,firewalld)和内核空间(netfilter)
规则
放行,丢弃,(拒绝,snat)
先粗后细,就是一种优化
其他
基础命令 firewalld(区别iptables,对服务做规则)
查
iptables -L 查看规则 等同iptables -t filter -L
iptables -L INPUT
iptables -L INPUT -n 数字显示
iptables -L INPUT -v -n --line-numbers 更详细的信息,v流量显示,和行号
iptables-save
增
iptables -A INPUT -p tcp --dport 80 -j ACCEPT A尾部添加
iptables -I INPUT -p tcp --dport 443 -j ACCEPT I头部添加
iptables -I INPUT 2 -p tcp --dport 443 -j ACCEPT 指定行数
iptables -I INPUT -s 10.10.10.3 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s 10.10.10.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT 多目的端口
snat
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31
MASQUERADE —— 地址伪装 适用于外网 IP地址 非固定的情况
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
dnat
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 2346 -j DNAT --to-destination 192.168.1.6:22
删
iptables -D INPUT 3 删除指定规则
iptables -F 临时清空
改
iptables -P INPUT DROP 修改默认规则
其他
TCP Wrappers
类似简单版防火墙,用在堡垒机(只能内网访问固定ip访问服务器)
selinux
知识
SELinux是Linux的一个扩展强制访问控制的安全模块,强制访问控制
ll -Z:类型(用户,角色,同一类型才能访问)
chcon设置,restorecon还原
SEliux布尔值(猫狗)就相当于一个开关,精确控制SElinux对某个服务的某个选项的保护
集群
集群技术lvs,vrrp
系统知识
高可用
集群 一组协同工作的服务器集合,类似百度
垂直扩展无法面对大规模高并发
水平扩展分布式处理
服务器上读和写的压力是完全不同级别的
nas存储就是网络附加存储,参考NFS共享
集群的组成
LBC 负载均衡集群
负载调度器(服务器池,共享存储)
软件:nginx,lvs,haproxy等
LVS:Linux 虚拟服务
ipvs:内核态,工作在内核空间,LVS 核心代码
ipvsadm:用户态,工作在用户空间,是用户管理LVS的唯一手段
工作模式
DR:直接路由
TUN:隧道模式
NAT
硬件:f5等,要钱,好用
HAC 高可用集群
主备:尽可能的保障服务的不间断运行
HPC 高性能运算集群
拆分任务:提供单台服务器提供不了的计算能力
查
增
LVS之nat
环境
主机1:10.0.0.254 192.168.93.1
主机2:192.168.93.10 nginx 挂载/www
主机3:192.168.93.20 nginx 使用自己的/www
主机4:192.168.93.30 NFS /www
仅主机上网 https://www.cnblogs.com/outsrkem/p/15651909.html
配置
LVS安装 yum
启动:ipvsadm --save > /etc/sysconfig/ipvsadm
service ipvsadm start
ipvsadm -A(添加一个负载调度器) -t 172.16.16.172:80 (集群地址,在NAT'模式下,就等于是外网口地址) -s rr(代表采用的 算法,rr代表轮询) 添加一个调度器规则
pvsadm -a(集群服务器) -t 172.16.16.172:80(集群地址) -r 192.168.7.21:80(集群服务器地址) -m(代表调度模式,-m代表 NAT模式) 添加一个集群服务器信息,一台需要添加一条
ipvsadm -Ln 查看已设规则
重启ipvsadm
curl 10.0.0.254:80
LVS之dr
环境
主机1:10.0.0.254 vip 10.0.0.200
主机2:10.0.0.10 nginx 挂载/www
主机3:10.0.0.20 nginx 使用自己的/www
主机4:10.0.0.30 NFS /www
配置
负载均衡器
service NetworkManager stop 启动虚拟借口,必须关闭此服务
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0:0
vim ifcfg-eth0:0 配置虚拟借口
DEVICE=eth0:0
IPADDR=虚拟IP
NETMASK=255.255.255.0
ifup eth0:0 启动虚拟网卡 重启网络
vim /etc/sysctl.conf
修改内核参数。防止相同网络地址广播冲突,如果有多快网卡需要设置多行
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
sysctl -p 刷新内核参数
ipvsadm -A -t 虚拟IP:80 -s rr
ipvsadm -a -t 虚拟IP:80 -r 网站1:80 -g
ipvsadm -a -t 虚拟IP:80 -r 网站2:80 -g ipvsadm -Ln
启动ipvsadm
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
真实服务器1
service NetworkManager stop
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
DEVICE=lo:0 IPADDR=虚拟IP
NETMASK=255.255.255.255
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
ifup lo:0
route add -host 虚拟IP dev lo:0
主备
配置
主
yum -y install keepalived 启动自启动
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id R1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.200
}
}
virtual_server 10.0.0.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.10 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
real_server 10.0.0.20 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
}
备
ps:启动虚拟网卡 vi /etc/sysconfig/network-script/ifup-eth 如果 报错修改文件 257
删
改
其他
持久化
优先于算法,例同个ip同个服务器等
hearbeat
简单版keepalived
Squid缓存
缓存服务器:缓存静态资源(主要图片和视频),作用类似CDN
工作模式
共享上网
代理web请求
配置:见文档
传 统 代 理
透 明 代 理
反 向 代 理
分布式存储MFS
系统知识
分布式存储解决如何将数据存到多台机器上,并且提供可用性,可靠性和一致性等问题
储存类型
块存储(硬盘)
快速
nas网络存储(局域网共享)
便捷
san存储区域网络
综合的,快速便捷
iscsi
yum -y install scsi-target-utils
service tgtd start
netstat -anpt | grep tgtd
tgtadm -L iscsi -o new -m target -t 1 -T iqn.2016-2.com.xdl.www:lvm
example:tgtadm -L iscsi -o new -m target -t 1 -T iqn.2016-2.com.xdl.www:lvm
tgtadm -L iscsi -o show -m target
等同
vim /etc/tgt/targets.conf
<target iqn.2016-2.com.xdl.www:lvm>
backing-store /dev/vg0/lv0
initiator-address 192.168.66.12
</target>
客户端绑定
yum -y install iscsi-initiator-utils
iscsiadm -m discovery -t st -p 192.168.66.11
iscsiadm -m node -T iqn.2016-2.com.xdl.www:lvm --login
重新分区 fdisk /dev/sdb 格式化,永久挂载(退出挂载和iscsiadm登录,不然第一次重启很慢,假死)
前置知识
LVM
Logical Volume Manager(逻辑卷管理)的简写,可以实现磁盘空间的动态管理
简单配置
pvcreate /dev/sdb
vgcreate vg /dev/sdb
lvcreate -n app -L 2G vg
mkfs -t xfs /dev/vg/app mkdir /app mount /dev/vg/app /app 然后df -h
增
RHCS
环境
vi /etc/hosts
10.0.0.10 node1.test.com node1
10.0.0.20 node2.test.com node2
10.0.0.30 node3.test.com node3
10.0.0.254 target.test.com target
配置
修改主机名hostnamectl set-hostname node1.test.com # 使用这个命令会立即生效且重启也生效
scp /etc/hosts root@10.0.0.10:/etc/hosts
ssh免密登录
ssh-keygen -t rsa
ssh-copy-id root@10.0.0.10
配置iscsi服务器
<target iqn.2013-08.com.test:teststore.sdb> #配置target名称
<backing-store /dev/sdb> #配置共享磁盘
vendor_id test #配置发行商(任意)
lun 6 #配置LUN号
</backing-store>
incominguser iscsiuser iscsiuser #配置认证的用户名和密码
initiator-address 192.168.18.0/24 #配置允许的网段
</target>
tgtd启动和自启动
tgtadm --lld iscsi --mode target --op show查看
节点配置
vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2013-08.com.test:teststore.sdb
vim /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP #开启CHAP认证
node.session.auth.username = iscsiuser #配置认证用户名
node.session.auth.password = iscsiuser #配置认证密码
iscsi启动和自启动
挂载 ha ssh node$I 'iscsiadm -m node -T iqn.2013-08.com.test:teststore.sdb -p 192.168.18.208 -l'; done
cman与rgmanager 集群安装与配置
都关闭网卡守护进程和自启动NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
cman与rgmanager,cLVM ,gfs2集群安装与配置,后面版本命令不对无法继续
MFS分布式文件系统
环境
10.0.0.10 client
10.0.0.20 chunker
10.0.0.30 chunker
10.0.0.40 logger
10.0.0.254 master
配置
yum install gcc gcc-c++ zlib-devel -y
开机自启动echo "mount -t xfs /dev/sdb1 /mnt/mfs" >> /etc/rc.local
详见视频
删
改
查
其他
时间同步
yum -y install ntp
vi /etc/ntp.conf
server全删除
server 127.127.1.0
fudge 127.127.1.0 stratum 10
restrict 取消注释,修改ip 主机网段10.0.0.0
主界面 date -s 2021-12-23
date -s 21:18:30
启动ntp systemctl start ntp
客户端修改
crontab -e
*/5 * * * * /usr/sbin/ntpdate -u 10.0.0.254 &> /dev/null
监控zabbix
zabbix
系统知识
拥有且优化了阈值和数据保留的功能
cacti和nagios以前的监控平台
增
https://www.cnblogs.com/outsrkem/p/10851255.html
钉钉
脚本+操作步骤
ps:ip填写我自己的公网ip
删
改
查
自动化安装kickstart,Cobbler
pxe网络安装系统+kickstart自动化脚本(批量安装)
配置(不成功)
Cobbler装机:封装镜像,选择自己需要的版本
只需在主机配置,相对简单
虚拟化pve,Esxi
pve安装:http://www.zxbblog.com/?id=273
Esxi安装 百度
配置
用户和权限管理,资源池
虚拟机自启动
双网卡,双通道
轻量虚拟化docker
知识
云计算
远程主机,无需服务商介入
IAAS:基础设施即服务 相当于给你一个主机 阿里云,百度云
PAAS:平台即服务 相当于给你一个文件夹
SAAS:office online,在线编辑保存文档
docker
底层是Linux Container 是一种内核虚拟化技术,基于 GO 语言并遵从 Apache2.0 协议开源
每个应用都是一个集装箱(+操作系统)
三大组件
容器:运行的环境
镜像:封装的环境
仓库:存放镜像的地方
规则
一个容器一个进程
多个容器构建系统,用--link联系
查
docker images Docker 镜像的查询
docker ps 容器的查询
docker ps -a
docker ps --no-trunc 查看
docker inspect MywordPress 查看容器所有基本信息 自动获取的ip,用--link联系
docker logs MywordPress 查看容器日志
docker stats MywordPress 查看容器所占用的系统资源
增
curl -sSL https://get.docker.com/ | sh
systemctl start docker
docker pull Docker 仓库的下载
docker run 容器的创建启动
docker start/stop 容器启动停止
docker stop/start CONTAINERID 停止
docker run --restart=always 容器的自动启动
WordPress安装
docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
镜像导入导出
docker save 镜像 ID > /home/xxx.tar 镜像的导出
docker load < /home/xx.tar 镜像的导入
镜像的特性
已有的分层只能读不能修改
上层镜像优先级大于底层镜像
镜像的封装Dockerfile
根据指令生成定制的 Image (容器也可以转镜像,但是不会有启动,可以加Dockerfile,但是不建议,可用性太差)
docker build -t wangyang/jdk-tomcat .
封装tomcat
环境,jdk和tomcat和Dockerfile
docker build -t tomcat:v1.0 .
docker run --name tomcat -p 80:8080 -d d77941dd5127
访问10.0.0.254
网易蜂巢
用户名fengye01 https://c.163yun.com/hub#/library/repository/info?repoId=3166
公司私有仓库
前置知识
registry
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always registry
vim /etc/docker/daemon.json
{
"insecure-registries": ["10.10.10.11:5000"]
}
systemctl restart docker
docker ps -a 查看5000是否启用
客户端
vim /etc/docker/daemon.json
{
"insecure-registries": ["10.10.10.11:5000"]
}
systemctl restart docker
curl -XGET http://10.0.0.10:5000/v2/_catalog 显示{"repositories":[]},表示成功
上传下载
docker tag nginx:latest 10.0.0.10:5000/nginx:v1.0
docker push 10.0.0.10:5000/nginx:v1.0
配置
vim /etc/docker/daemon.json
{
"insecure-registries": ["10.10.10.11"]
}
systemctl restart docker
python默认
docker安装
Compose 安装
harbor-offline-installer-v1.2.0下载
解压
配置 harbor.cfg
hostname = 10.0.0.10
ui_url_protocol = https
创建密钥在这个目录/data/cert/
mkdir -p /data/cert/
cd /data/cert/
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key 去除密码
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cd 到harbor ./install.sh
访问 10.0.0.10
推送
docker login 10.0.0.10
重命名docker tag nginx:latest 10.0.0.10/library/nginx:v1.0
docker push 10.0.0.10/library/nginx:v1.0
docker compose编排
按顺序自启动
配置
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
cd /root/wordpress && docker-compose up -d yml格式文件自己下载
更新阿里源服务器,加速源
cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
chmod 777 /etc/systemd/system/docker.service
vim /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd-current --registry-mirror=https://kfp63jaj.mirror.aliyuncs.com \
systemctl daemon-reload
systemctl restart docker
ps -ef | grep docker
数据持久化
-v [host-dir]:[container-dir]:[rw|ro] 持久化数据,容器之间的共享数据
备份数据库文件到本机
dockerfile VOLUME ["/tmp/data"] 如果-v那就,不使用VOLUME
删
docker rm 5335 删除ID号前四位
docker rm -f $(docker ps -a -q)
改
docker exec 容器名 容器内执行的命令 容器执行命令
docker exec -it 容器名 /bin/bash 登入容器的bash
ssh登录容器
其他
union filesystem
Docker 的镜像通过联合文件系统(union filesystem)将各层文件系统叠加在一起
镜像分层都是代码,最大不超过128行
版本控制器
gitlab(开发的环境),三条命令搭建
svn
网络管理
防火墙多了DOCKER链,做了dnat和snat,自动添加,容器和外部的互通
docker0
172.17.0.1/16
容器ip172.16.0.2/16 链接名(--link)
网络通讯方式
bridge:Docker 默认方式,网桥模式
none:容器没有网络栈
其他2个
实验1,隔离2个容器
使用Docker 网络化配置
实验2,使用 Linux 桥接器进行主机间的通讯
修改实际的网卡,给容器赋予ip10.0.0.x通讯(不推荐,使用第三方)
实验3,Overlay 全覆盖网络(主要用于跨机器间的数据通讯问题),集群化的方案
Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件
存储驱动
docker info
overlay2,很正要,如果不是改,一般不需要改
openstack
openstack 云技术,是一套技术框架,使用jun10版本
主要组件:nova虚拟化核心,swift云环境对象存储
公有云:公网用户
私有云:
混合云:
其他
ddos攻击的防御:
1,少量的ip,查找封禁
2,多个,但是流量小,防火墙超过连接数,不通讯
3,waf防火墙
4,公网的流量清洗,帮你过滤非正常请求
自动化运维ansible
知识
批量管理,动态集成到web管理平台
增
ansible工具
sudo yum install epel-release
yum -y install ansible
ansible --version
ssh免密登录
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.10
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.20
配置主机清单
vim /etc/ansible/hosts
192.168.31.168
192.168.31.178
vim /etc/ansible/ansible.cfg
1 禁用每次执行ansbile命令检查ssh key host
host_key_checking = False
2开启日志记录
log_path = /var/log/ansible.log
测试:
#ansible all -m ping
setup
查看远程主机基本信息
# ansible [HostGroup or IP] -m setup
file
设置文件属性
copy
复制文件到远程主机
ansible [HostGroup or IP] -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
command
在远程主机上执行命令
ansible all -m command -a "ls -al /tmp/ansible.cfg"
shell
创建脚本,远程复制
ansible [HostGroup or IP] -m shell -a "/tmp/test.sh"
cron
创建和删除计划任务
nsible [HostGroup or IP] -m cron -a "name='test cron' job='/bin/bash /tmp/test.sh' minute=30 hour='*/8' day='1,10,20' weekday=6"
安装 rpm 包
ansible [HostGroup or IP] -m yum -a "name=wget"
管理服务
ansible [HostGroup or IP] -m service -a "name=httpd state=started enabled=no"
Ansible定义节点的清单
[dbservers]
192.168.56.212
192.168.56.213
ansible -m ping 'dbservers'
删
改
查
其他
CMDB配置管理数据库,类似erp,自动化方向
相关
clear或者ctrl+l 清屏
有时候退格键无效,加个ctrl
date
修改当前系统时间 date -s "2018-2-22 19:10:30
同步系统时间和硬件时间 hwclock --hctosys
xshell
安装版+绿化版
yum -y install lrzsz
上传下载rz sz
停电,温度低,电阻高,容易烧
tail 命令可用于查看文件的内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示