赞
踩
命令行的一般格式
– 命令字 [选项]… [参数1] [参数2]…
• pwd — Print Working Directory
– 用途:查看当前所在的位置
[root@A ~]# cd ~lisi #去往lisi的家目录
[root@A lisi]# pwd
/home/lisit
• cd — Change Directory
– 用途:切换工作目录
格式: cd [目标文件夹位置]
cd ~:表示用户的家目录
cd ~user表示用户到user的家目录
cd ~lisi #去往lisi的家目录
. 表示当前目录
ls — List
– 格式:ls [选项]… [目录或文件名]…
蓝色:目录
黑色:文本文件
• 常用命令选项
– -l: 以长格式显示目录内容的详细属性
– -A: 包括名称以 . 开头的隐藏文档
– -d: 显示目录本身(而不是内容)的属性
– -h: 提供易读的容量单位(K、M等)
– -R : 递归显示
cat
查看文本文件内容
cat -n 按行号显示
cat -n /etc/passwd
1 root❌0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序
cat -n a.txt b.txt >c.txt #把a b 的内容加上行号输入到c(可以不存在的文件会自动创建)中
cat /dev/null > /a.txt #清空a.txt内容
cat << EOF >/etc/a.txt (内容) EOF #EOF是“end of file”表示文本结束符 也可以使用其他符合如:<<EO EO结束
例: [root@node1 ~]# cat <a.txt
abc
EOF
[root@node1 ~]# cat a.txt
abc
脚本创建yum源
cat <<EOF >/etc/yum.repos.d/rhel.repo
[rhel]
name=rhel7
baseurl=ftp://localhost/rhel7
enabled=1
gpgcheck=0
EOF
mkdir
创建空目录
• mkdir — Make Directory
– 格式:mkdir [-p] [/路径/]目录名…
mkdir -p /vod/movie/cartoon #创建多层目录
[root@A /]# mkdir /root/nsd01 /mnt/nsd02
touch
– 用途:新建空文件
– 格式:touch 文件名
[root@A /]# touch /opt/1.txt
[root@A /]# ls /opt/
1.txt abc rh
[root@A /]# cat /opt/1.txt
rm
删除 — Remove
格式:rm [选项]… 文件或目录…
黄金组合 :rm -rf
• 常用命令选项
– -r、-f:递归删除(含目录)、强制删除
[root@A ~]# rm -rf /opt/*
mv
移动/重命名 • mv — Move
– 格式:mv 原文件… 目标路径
[root@A ~]# mv /opt/2.txt /opt/nsd01
重命名:路径不变的移动
[root@A ~]# mv /opt/nsd01 /opt/student
[root@A ~]# mv /opt/test/ /opt/abc
cp
复制• cp — Copy
– 格式:cp [选项]… 原文件… 目标路径
• 常用命令选项
– -r:复制目录时必须有此选项
-p 不改变文件属性的拷贝
[root@A ~]# cp -r /boot/ /opt/ #把/boot/复制到/opt/
[root@A ~]# cp /etc/redhat-release /opt/
复制支持两个以上的参数,
永远把最后一个参数作为目标,其他参数全部作为源
复制的时候,可以重新命名,目标路径下文档的名字
[root@A /]# cp /etc/redhat-release /mnt/a
# cp -r /home /mnt/redhat
#将home目录,复制到/mnt下命名为redhat
# cp -r /home /mnt/redhat
#将home目录,复制到/mnt/redhat/ 路径下
less
分屏阅读工具
• 格式:less [选项] 文件名…
– 优势:支持前后翻页• 基本交互操作
– 按 / 键向后查找(n、N切换)
按键盘上 q键 #退出
diff
逐行比较 (修复补丁的工具)(仅仅提示)
选项: -u 输出统一内容的头部信息(打补丁使用)
-r 递归对比目录中的所有资源(可以对比目录
-a 所有文件视为文本(包括二进制程序)
-N 无文件视为空文件
diff -u test1.sh test2.sh
patch
打补丁
安装包 : patch
(可以给文件或在目录打补丁)
patch -p0 < 3.patch
patch -RE < 3.patch #还原旧版本,反向修复
• head tail
– 格式: head -n 数字 文件名
tail -n 数字 文件名
默认为前10行 和 后10行
显示/etc/passwd文件内容的8~12行
[root@A ~]# head -12 /etc/passwd | tail -5
grep
– 用途:输出包含指定字符串的行
– 格式:grep ‘查找字符串’ 目标文件
[root@server0 ~]# grep nsd01 /etc/passwd
-v 取反
-i 忽略大小写
grep -v root /etc/passwd #包含root的行
[root@server0 ~]# grep -i ROOT /etc/passwd
find
查找文件
– 常用条件表示:
-type 类型 ( f文件、d目录、l快捷方式)
-name “文档名称”
-size +|-文件大小(k、M、G)
-user 用户名
-iname “文档名称” 忽略大小写根据名称查找,
-maxdepth 限制目录查找的深度(最大层数)
-mtime 文件修改日期
– find … … -exec ; // 要以" \ " 结尾
[root@server0 ~]# find /boot/ -type l #查找快捷方式
[root@server0 ~]# find /boot/ -type d #查找是目录
[root@s ~]# find /boot/ -name “vm*” #以vm开头
[root@s ~]# find /boot/ -name “vm*” #以vm结尾
[root@server0 ~]# find /root/ -name “nsd*” -type d
[root@server0 ~]# find /boot/ -size +10M #以大小
[root@server0 ~]# find / -user student #以用户名
[root@server0 ~]# find /etc/ -iname “PASSWD”
[root@s~]# find /var/log/ -mtime +10 #10天之前的文档
[root@s ~]# find /var/log/ -mtime -2 #最近2天之内的文档
• 使用find命令的 -exec 操作
– find … … -exec 处理命令 {} \ ;
– 优势:以 {} 代替每一个结果,逐个处理,遇 ; 结束
找出所有用户 student 拥有的文件 ,把它们拷贝到 /root/findfiles/ 文件夹中
vim (文本编辑器) 命令模式 : Home 键 或 ^、数字 0 跳转到行首 End 键 或“$”键 跳转到行尾 1G 或 gg 跳转到文件的首行 G 跳转到文件的末尾行 复制 yy、5yy 复制光标处的一行、复制5行 粘贴 p、P (大写) 粘贴到光标处之后、之前 x 或 Delete键 删除光标处的单个字符 dd、#dd 删除光标处的一行、#行 d^ 从光标处之前删除至行首 d$ 从光标处删除到行尾 插入模式 : 按 i 进入编辑 ,按 o 换行进入编辑 按 c 删除光标之后内容进入编辑 (按Esc回到命令模式) 末行模式: :wq 保存并退出 :q! 强制不保存退出 :wq!强制保存退出 ZZ 保存退出 (shift+zz) 插入文本 :r /etc/filesystems 读入其他文件内容 :r /etc/passwd #读入/etc/passwd到当前文件中 字符串替换 :s/root/abc 替换当前行第一个“root” :s/root/abc/g 替换当前行所有的“root” :1,10 s/root/abc/g 替换第1-10行所有的“root” :% s/root/abc/g 替换文件内所有的“root 开关参数的控制(显示行号) :set nu|nonu 显示/不显示行号 :set ai|noai 启用/关闭自动缩进 awk awk -F: '{print $1}' /etc/passwd awk -F"[:/]" '{print $1,$10}' /etc/passwd awk -f: '{pirnt $1, "的解释器:" $7}'/etc/passwd 打印常量一定要用“”号 awk '{print $NF}' /etc/passwd free |awk '{print $4}' $0 表示当前行 $1 第一列 $2第二列 $3 第三列 NF 文件当前行的列数 NR 文件当前行的行号 文件内容对齐命令 column -t tab 补全键 安装包:bash-completion cron 周期性计划任务 软件包:cronie、crontabs系统服务:crond 日志文件:/var/log/crond • 使用 crontab 命令 – 编辑:crontab -e [-u 用户名] – 查看:crontab -l [-u 用户名] – 清除:crontab -r [-u 用户名] # crontab -e -u root #编写root计划任务 * * * * * date >> /opt/time.txt # crontab -l -u root #查看root计划任务 # cat /opt/time.txt #检测结果 ################################################## mount (umount)卸载挂载 –格式: mount 设备路径 挂载点目录 挂载操作:让目录成为设备的访问点 在系统中显示光盘的内容 挂载尽量自己创建目录进行挂载 Linux:光盘ISO镜像文件------>光驱设备-------->访问点(目录) /dev/cdrom 查看Linux的光驱设备 [root@A /]# ls /dev/cdrom #挂载到/dvd [root@A ~]# mount /dev/cdrom /dvd [root@s ~]# mount /dev/vdb1 /part1 [root@A ~]# umount /dvd #卸载该挂载点的设备 开机自动挂载 配置文件 /etc/fstab 的记录格式 设备路径 挂载点 类型 参数 备份标记 检测顺序 /dev/vdb1 /part1 ext4 defaults 0 0 ssh 远程管理的命令: -x #可以查看远程图形 ssh [-选项] 用户名@服务器的IP地址 [root@room9pc01 ~]# ssh root@172.25.0.11 [root@room9pc01 ~]# ssh root@172.25.0.10 [root@room9pc01 ~]# ssh -X ro ot@172.25.0.11 Ctrl+Shift+t: 开启一个新的终端 加 -X 在远程管理时,本地运行对方的图形程序 [root@room9pc01 ~]# vim /root/.bashrc #设置别名 alias goa='ssh -X root@192.168.4.7' [root@server0 ~]# exit #退出远程管理登出 ssh -i /root/id_rsa.pem (密钥对公钥) root@192.168.4.2 #密钥对登录 非对称钥匙对 ssh-keygen -f /root/.ssh/id_rsa -N '' #生成免钥匙命令非交互式 ssh-copy-id 192.168.4.50 #发送给ip ssh-add 本机添加 su (substitute User) 切换用户身份 格式 用法1: su - 目标用户 (加上 - 是连家目录一起切换,如果不加 - 切换用户之后家目录默认是原来用户的家目录) 用法2: su - -c “命令” 目标用户 例: whoami su - tom -c "mkdir /home/tom/nihao" sudo 提升执行权限 这个要管理员预先为用户设置执行许可 被授权用户有权执行授权的命令,验证口令 格式 用法1: sudo 特权命令 用法2: sudo -u 目标用户 特权命令 -l 查看自己的sudo授权(为小写字母l) 例:sudo -l sudo -u student mkdir /mnt/a ls -ld /mnt/a 验证所有者是谁 配置sudo授权 修改方法 :visudo 配置文件也可以: vim /etc/sudoers 授权记录格式 -用户 主机列表=命令列表 grep ^root /etc/sudoers root ALL=(ALL) ALL 可以是%组名 目标身份,省略时表示root 例:允许Tom 以root权限执行/sbin/下的所有命令 ,但是,禁止修改eth0网卡的参数 [root@node1 ~]# visudo -----很多内容 插入 Tom localhost,svr1=/sbin/*,!/sbin/ifconfig etho 例2 wheel组的用户无需验证可执行所有命令 [root@node1 ~]# visudo 、、、 %wheel ALL=(ALL) NOPASSWD:ALL rsync (Remote Sync) 远程同步 支持本地复制,或与其他ssh、rsync主机同步 命令用法: rsync 选项 源目录 目标目录 (本地) rsync 选项 user@host(ip):远程目标/ 例: rsync -a /boot /todir #同步整个目录 rsync -a /boot/ /todir/ #只同步目录下数据 rsync操作选项 -n :测试同步过程,不做实际修改 --delete :删除目标文件夹内多余的文档 -a : 归档模式,相当于 -rlptgoD -v : 显示详细操作信息 -z : 传输过程中启用压缩/解压 -r :递归,包括目录/子目录所有文件 -l :保留符号链接文件 -p -t 保留文件的权限、时间标志 -o 、-g :保留文件的属主/属组标记 -D :保留设备文件及其他特殊文件 rsync+ssh 同步 下行:rsync 选项 user@host:远程目录 本地目录 上行:rsync 选项 本地目录 user@host:远程目录 例:将远程主机的/boot/ 目录备份到本地 rsync root@192.168.4.7:/boot/ /tmp/ 例:将本地的/etc 目录备份到远程主机 du -sh /etc/ rsync -az /etc root@192.168.4.7:/opt/ ping ping 选项 ip -c 包个数 -n 大小 -W 超时 -i 时间间隔 -s 包大小 ping测试时间,可以只发送3个测试包(-c 3)、缩短发送测试包的间隔秒数(-i 0.2)、等待反馈的超时秒数(-W 1)。比如,检查可ping通的主机: ping -c 3 -i 0.2 -W 1 $1 &> /dev/null netstat netstat命令可以查看系统中启动的端口信息,该命令常用选项如下: -a显示所有端口的信息 -n以数字格式显示端口号 -t显示TCP连接的端口 -u显示UDP连接的端口 -l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口 -p显示监听端口的服务名称是什么(也就是程序名称) [root@node1 ~]# netstat -anptu | grep memcached #netstat -anptu | ss (和netstat功能一样) ss命令可以查看系统中启动的端口信息,该命令常用选项如下: -a显示所有端口的信息 -n以数字格式显示端口号 -t显示TCP连接的端口 -u显示UDP连接的端口 -l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口 -p显示监听端口的服务名称是什么(也就是程序名称) 例 1:[root@node1 ~]# netstat -nutlpa | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11957/nginx: master 例 2 :[root@node1 ]# ss -nutlpa | grep nginx tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=23078,fd=6),("nginx",pid=11957,fd=6)) alias [别名名称] (unalias)取消别名 • 定义新的别名(临时) – alias 别名名称= '实际执行的命令行' [root@A ~]# alias hn='hostname' #定义别名 [root@A ~]# alias #查看当前有效别名 设置永久的别名 /root/.bashrc #只对当前用户有效 /etc/bashrc #对所有用户有效 • 取消已设置的别名 – unalias [别名名称] #临时取消别名 unalias rht wget 下载 通过命令在命令行实现下载:默认下载到当前路径下 下载到当前位置 wget http://classroom.example.com/content/rhel7.0/x86_64/dvd/Packages/ 下载到指定的位置并改名 wget -Oo /root/a http://classroom.example.com/ rpm 传统的安装软件包的命令 – rpm -q 软件名... #查询软件包是否安装 – rpm -ivh 软件名-版本信息.rpm... #安装包 – rpm -e 软件名... #卸载 # rpm -q firefox #查询软件包是否安装 # rpm -ql vsftpd #查询软件包安装的内容 # rpm -ivh /root/vs(tab) #安装 # rpm -e vsftpd #卸载 # rpm -qa #查看系统安装了什么软件 # rpm -qa |grep httpd #rpm -qa |wc -l Yum (yum remove 名)#卸载 自动解决依赖关系,安装软件 服务:为客户端自动解决依赖关系,安装软件 配置路径及名称:/etc/yum.repos.d/*.repo 错误的文件会影响正确文件 [root@server0 ~]# rm -rf /etc/yum.repos.d/* 一般情况下不要删除新建一个目录把移动过去 [root@server0 ~]# vim /etc/yum.repos.d/nsd.repo [rhel7] #仓库的标识,随意写不要出现空格 name=rhel7.0 #仓库的描述信息,随意写 baseurl=http://classroom.ex #指定服务端位置 enabled=1 #是否启用本文件 gpgcheck=0 #是否检测软件包红帽签名 [root@server0 ~]# yum clean all #清空Yum所有缓存 让客户端重新读取配置文件 yum repolist 检测yum仓库 [root@server0 ~]# yum remove 软件名 #卸载 • 快速建立repo配置文件 – yum-config-manager --add-repo 软件仓库地址 ############################################### 四 为虚拟机A与虚拟机B搭建Yum仓库 服务端:虚拟机A 1.搭建FTP服务 2.共享光盘所有内容 1)图形将光盘内容,放入虚拟光驱中 [root@svr7 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 [root@svr7 ~]# ls /mnt/ 2)安装vsftpd软件包 # ls /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm # rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm # rpm -q vsftpd 3)利用FTP共享光盘所有内容,默认共享路径下/var/ftp [root@svr7 ~]# mkdir /var/ftp/rhel7 [root@svr7 ~]# ls /var/ftp/rhel7 [root@svr7 ~]# cp -r /mnt/* /var/ftp/rhel7/ 4)重起vsftpd服务验证: [root@svr7 ~]# systemctl restart vsftpd [root@svr7 ~]# systemctl enable vsftpd [root@svr7 ~]# firefox ftp://192.168.4.7/rhel7 客户端:虚拟机B [root@pc207 ~]# vim /etc/yum.repos.d/rhel7.repo [rhel7] name=rhel7 baseurl=ftp://192.168.4.7/rhel7 enabled=1 gpgcheck=0 [root@pc207 ~]# yum repolist 自定义yum createrepo createrepo --update /tools/other #更新自定义yum 生成仓库数据文件 [root@svr7 ~]# createrepo /tools/other #生成自定义仓库 [root@svr7 ~]# ls /tools/other/ 书写yum客户端配置文件 [root@svr7 ~]# vim /etc/yum.repos.d/rhel7.repo ....... [myrpm] name=myrpm baseurl=file:///tools/other #指定本地路径 enabled=1 gpgcheck=0 ############################################## useradd (usermod)(userdel) 添加用户 – useradd [选项]... 用户名 用户基本信息存放在 /etc/passwd 文件 • 常用命令选项 – -u 用户id、-d 家目录路径、-G 附加组、-s 登录Shell root:x:0:0:root:/root:/bin/bash 用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序 [root@ser~]# useradd nsd01 [root@ser~]# id nsd01 #查看用户基本信息 [root@ser~]# useradd -u 1500 nsd04 #指定UID [root@ser~]# useradd -d /mnt/nsd06 nsd06#指定家 [root@server0 ~]# useradd -G tarena nsd07 #指定附加组 -s 登录Shell(登陆的解释器程序) /sbin/nologin :禁止用户登陆操作系统 /bin/login 默认 [root@server0 ~]# useradd -s /sbin/nologin nsd08 [root@server0 ~]# usermod -s /bin/login nsd08 [root@server0 ~]# usermod #修改已存在用户的属性 usermod – usermod [选项]... 用户名 #修改已存在用户的属性 – -u 用户id、-d 家目录路径、-G 附加组、-s 登录Shell [root@A ~]# usermod -u 1600 -d /opt/nsd11 -s /sbin/nologin -G tarena nsd11 userdel 删除用户 – userdel [-r] 用户名 -r: 连同家目录一并删除 – userdel 用户名 #仅删除用户信息 passwd 设置登录密码 格式 :– passwd [用户名] (这种是交互式) echo '密码' | passwd --stdin 用户名 (非交互式修改密码) -l 锁定用户账号(是小写字母l不是1) 例:passwd -l student #锁定用户student的密码 -u 解锁 例: passwd -u student #解锁student的密码 -S 看密码状态 例: passwd -S student #查看student目前密码的状态 用户密码信息存放在 /etc/shadow 文件 #交互式设置密码 [root@A ~]# passwd nsd01 非交互式设置密码 [root@A ~]# echo 123456 | passwd --stdin nsd01 [root@A ~]# useradd harry [root@A ~]# echo redhat | passwd --stdin harry 强制定期修改密码 配置文件为 /etc/login.defs 对新建用户有效 主要控制属性 -PASS_MAX_DAYS -PASS_MIN_DAYS -PASS_WARN_AGE groupadd 添加组 – groupadd [-g 组ID] 组名 [root@server0 ~]# groupadd tarena #创建组 gpasswd 管理组成员 – gpasswd -a 用户名 组名 – gpasswd -d 用户名 组名 [root@A ~]# gpasswd -a natasha stugrp [root@A ~]# gpasswd -d natasha stugrp groupdel 删除组 – groupdel 组名 在Linux系统中创建一个用户,会由那些文件改变内容? /etc/passwd /etc/shadow /etc/group /etc/gshadow 权限和归属 基本权限的类别 –r 读取: 允许查看内容-read –w 写入: 允许修改内容-write –x 可执行: 允许运行和cd切换-execute 基本权限 r=4 w=2 x=1 – 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1 功能 读取 r : cat less head tail 写入 w : vim 可以保存退出 重定向 > >> 可执行 x : 学习Shell脚本 权限适用对象(归属): – u 所有者:拥有此文件/目录的用户-user – g 所属组:拥有此文件/目录的组-group – o 其他用户:除所有者、所属组以外的用户other 所有者>所属组>其他人 权限的数值表示 • 权限的数值化 – 基本权限:r = 4,w = 2,x = 1 – 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1 • 采用数值形式设置权限 – chmod [-R] nnn 文档... – chmod [-R] xnnn 文档.. chmod 设置基本权限 常见提示:权限不足 Permission denied – chmod [-R] 归属关系+-=权限类别 文档.. [-R]:递归设置权限 [root@server0 ~]# chmod u-w /nsd01 所有者-w [root@server0 ~]# chmod o=rwx /nsd01 t=1 u=7 g=7 o=0 [root@server0 ~]# chmod 1770 /nsd01 以root用户新建/nsddir/目录,在此目录下新建readme.txt文件 并进一步完成下列操作 1)使用户lisi能够在此目录下创建子目录 切换用户 su - lisi chmod o+w /nsddir/ 2)使用户lisi不能够在此目录下创建子目录 chmod o-w /nsddir/ 3)使用户lisi能够修改readme.txt文件 chmod o+w /nsddir/readme.txt 4)调整此目录的权限,使所有用户都不能cd进入此目录 chmod u-x,g-x,o-x /nsddir/ 5)为此目录及其下所有文档设置权限 rwxr-x--- chmod -R u=rwx,g=rx,o=--- /nsddir/ chown 设置文档归属 – chown 属主 文档... – chown :属组 文档... – chown 属主:属组 文档... [root@server0 /]# chown lisi:tarena /nsd03 [root@server0 /]# chown zhangsan /nsd03 [root@server0 /]# chown :root /nsd03 利用root用户新建/nsd06目录,并进一步完成下列操作 1)将属主设为gelin01,属组设为tarena组 [root@server0 /]# useradd gelin01 [root@server0 /]# groupadd tarena [root@server0 /]# chown gelin01:tarena /nsd06 2)使用户gelin01对此目录具有rwx权限 除属主与属组之外的人,对此目录无任何权限 [root@server0 /]# chmod o=--- /nsd06 3)使用户gelin02能进入、查看此目录 [root@server0 /]# gpasswd -a gelin02 tarena 4)将gelin01加入tarena组, 将nsd06目录的权限设为rw-r-x--- 再测试gelin01用户能否进入此目录 [root@server0 /]# chmod u=rw,g=rx /nsd06 chage 设置账号有效期 -d 0 强制初次登录修改密码(是零不是O) 例:chage -d 0 student -E yyyy-mm-dd 指定失效日期 chage -E 2017-12-31 lizhigui -l 查看 chage -l student chcon (复制模版) -t 指定访问类型 -R 递归修改 一般移动的文件,原有的上下文属性不变 复制的文件,自动继承目标位置的上下文 例:ls -Z /var/ftp/rt.txt -rw-r--r-- root root system_u:object_r:admin_home_t:s0 chcon -t public_content_t /var/ftp/rt.txt restorecon 重置安全上下文 例: restorecon /var/ftp/rt.txt 方式1:参照标准目录,重设新目录的属性 – chcon [-R] --reference=模板目录 新目录 # chcon -R --reference=/var/www/ /webroot [root@server0 ~]# ls -Zd /var/www/ [root@server0 ~]# ls -Zd /webroot/ 附加权限(特殊权限) Set GID:附加在属组的 x 位,属组的权限上标识会变为 s Set UID:附加在所有者的 x 位,权限上标识会变为 s Sticky Bit(粘滞位) • 附加在其他人的 x 位上 – 其他人的权限标识会变为 t – 适用于开放 w 权限的目录,可以阻止用户滥用 w 写入 权限(禁止操作别人的文档) [root@server0 /]# chmod g+s /nsd07 #设置set GID权限 [root@server0 ~]# chmod u+s /usr/bin/hahach 不管什么用户都可以在此目录中拥有root权限 [root@server0 ~]# chmod o+t /home/public chattr 和 lsattr 锁定/解锁保护文件 用法:" + " "- " " = " 属性i:内容不可变 (immutable) 属性a:内容仅可追加 (append only) 例:chattr +i /etc/hosts #文件这样就不能修改了,修改就会说权限不够 chattr +a /etc/hosts #这样可以追加 chattr -a /etc/hosts 去除 lsattr /etc/hosts # 查看文件是否有特殊权限 ACL 命令 setfacl 设置acl getfacl 查看acl acl访问控制列表(ACL策略 ACL权限) – 能够对个别用户、个别组设置独立的权限 – 大多数挂载的EXT3/4、XFS文件系统默认已支持 # setfacl -m u:lisi:rx /nsd09 #为lisi设置ACL策略 -m:modify修改 u: 用户 实现一个用户lisi可以读取文件redhat.txt内容,请问入如何设置权限,你有几种方法? 第一:利用其他人进行配置 chmod o+r redhat.txt 第二:利用所属组进行配置 将lisi加入到redhat.txt所属组中 chmod g+r redhat.txt 第三:利用所有者进行配置 chown lisi redhat.txt chmod u+r redhat.txt 第四:利用ACL进行配置 setfacl -m u:lisi:r redhat.txt • 使用 getfacl、setfacl 命令 – getfacl 文档... 查看acl策略 – setfacl [-R] -m u:用户名:权限类别 文档... – setfacl [-R] -m g:组名:权限类别 文档... – setfacl [-R] -x u:用户名: 文档...#删除指定的ACL策略 – setfacl [-R] -b 文档... #删除所有的ACL策略 ACL策略设置黑名单 [root@server0 /]# setfacl -m u:zhangsan:--- /nsd11 [root@server0 /]# getfacl /nsd1 > 重定向操作 :将前面命令的输出结果写入到文本文件中 > : 覆盖重定向 >>:追加重定向 [root@server0 ~]# hostname > /opt/ls.txt [root@server0 ~]# hostname >> /opt/ls.txt [root@A ~]# echo A.tedu.cn > /etc/hostname [root@A ~]# cat -n /etc/passwd | head -12 | tail -5 > /opt/1.txt | 管道操作: 将前面命令的输出结果,交由后面命令再处理一遍,作为后面命令的参数 [root@A ~]# head -12 /etc/passwd | tail -5 [root@A ~]# cat -n /etc/passwd | head -12 | tail -5 > /opt/1.txt tar 备份与恢复 压缩与解压缩源文件均不会消失 归档及压缩: 1.减小占用的空间 2.将零散的文件归成一个压缩包 Linux独有压缩格式及命令工具: gzip---> .gz bzip2---> .bz2 xz---> .xz 归档及压缩的格式: tar 选项 /路径/归档压缩之后的名字 被归档压缩源文档. 解包: tar 选项 /路径/压缩包 -C 释放路径 – -c:创建归档 – -x:释放归档 – -f:指定归档文件名称 – -C:指定释放的位置 – -t:查看tar包中文件清单 –-z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理 # tar -zcf /opt/file.tar.gz /home/ /etc/passwd !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 使用 tar 工具完成以下备份任务: – 创建一个名为 /root/backup.tar.bz2 的归档文件 – 其中包含 /usr/local 目录中的内容 – tar 归档必须使用 bzip2 进行压缩 # tar -jcf /root/backup.tar.bz2 /usr/local/ # ls /root/ 查看包内容/解包: [root@A ~]# tar -tf /opt/abc.tar.xz #查看包内容 [root@A ~]# tar -xf /opt/file.tar.gz -C /mnt/ #解包 zip/unzip压缩与解压缩: 制作zip压缩包:zip [-r] 备份文件.zip 被归档的文档... 释放zip压缩包:unzip 备份文件.zip [-d 目标文件夹] history 历史命令 • 管理/调用曾经执行过的命令 – history :查看历史命令列表 – history -c :清空历史命令 – !n :执行命令历史中的第n条命令 – !str :执行最近一次以str开头的历史命令 • 调整历史命令的数量 [root@svr7 ~]# vim /etc/profile du 统计文件的占用空间 – du [选项]... [目录或文件]... – -s:只统计每个参数所占用的总空间大小 – -h:提供易读容量单位(K、M等) [root@svr7 /]# du -sh /root/ /etc/ [root@server0 ~]# du -h /var/spool/anacron 12K /var/spool/anacron date 查看/调整系统日期时间 [root@server0 ~]# date +%F 2018-11-13 [root@svr7 /]# date +%Y #显示年份 [root@svr7 /]# date +%m #显示月份 [root@svr7 /]# date +%Y-%m-%d #显示 年-月-日 [root@svr7 /]# date +%H:%M #显示 时与分 date -s "yyyy-mm-dd HH:MM:SS" #更改时间 ln 创建软连接 – ln -s 原始文件或目录 软连接文件 若原始文件或目录被删除,连接文件将失效 软连接可存放在不同分区/文件系统 制作快捷方式: [root@svr7 /]# ln -s /路径/源文件 /路径/快捷方式 [root@svr7 /]# cat /etc/redhat-release [root@svr7 /]# ln -s /etc/redhat-release /opt/test [root@svr7 opt]# ln -s /opt/A /opt/B #制作软连接 [root@svr7 opt]# ls /opt/ • ln,创建硬连接 – 硬连接 --> i节点 --> 文档数据 – ln 原始文件 硬连接文件 若原始文件被删除,连接文件仍可用 硬连接与原始文件必须在同一分区/文件系统 [root@svr7 opt]# ln /opt/A /opt/C #制作硬连接 curl 测试服务器页面 curl -o /etc/yum.repos.d/centos.alyun.repo http://mirrors.aliyun.com/Centos7-repo 或者 wget -O 的功能一样 [root@client ~]# curl http://192.168.4.5 ################################################################### 快速创建虚拟机 真机: [root@room9pc01 ~]# ls /usr/local/bin/clone-vm7/usr/local/bin/clone-vm7 clone-vm7 [root@room9pc01 ~]# clone-vm7 #快速产生新的虚拟机rhel7.4 Enter VM number: 9 clone-auto7 [root@room9pc01 ~]# clone-auto7 number of vms: 2 快速产生两台虚拟机 virsh console C 虚拟机不需要配置IP地址 利用 virsh console 虚拟机名 可以直接链接 localhost login: Ctrl + ] #回到真机 1.搭建虚拟机C服务端 要求:配置永久主机名svr8.tedu.cn 配置eth0永久 IP地址:192.168.4.8/24 使用真机ftp服务器作为Yum源 ##################################################### NTP 时间同步 NTP网络时间协议 • Network Time Protocol – NTP服务器为客户机提供标准时间 – NTP客户机需要与NTP服务器保持沟通 1.安装chrony软件,寻找NTP服务端进行沟通 [root@A ~]# yum -y install chrony 2.修改配置文件/etc/chrony.conf [root@A ~]# vim /etc/chrony.conf 以#开头的行代表注释 #server 0.rhel.pool.ntp.org iburst #server 1.rhel.pool.ntp.org iburst #server 2.rhel.pool.ntp.org iburst server classroom.example.com iburst 3.重起程序(重起服务) daemon:超级守护程序 # systemctl restart chronyd #重起服务 # systemctl enable chronyd #设置开机自起 4.验证 [root@A ~]# date #查看时间 2018年 10月 09日 星期二 17:44:38 CST LDAP LDAP认证:作用:实现网络用户认证,用户集中管理 LDAP服务器:提供用户名,及密码认证 客户端: 1.安装软件sssd,与LDAP服务端沟通 [root@server0 /]# yum -y install sssd 2.安装图形的工具authconfig-gtk,配置sssd软件 [root@server0 ~]# yum -y install authconfig-gtk 3.运行图形的工具 [root@server0 ~]# authconfig-gtk 选择LDAP dc=example,dc=com #指定服务端域名 classroom.example.com #指定服务端主机名 勾选TLS加密 使用证书加密:http://classroom.example.com/pub/example-ca.crt 4.重起服务 [root@server0 ~]# systemctl restart sssd [root@server0 ~]# systemctl enable sssd 5.验证: [root@serv ~]# grep ldapuser0 /etc/passwd [root@serv ~]# id ldapuser0#识别LDAP服务器上用户 NFS 家目录漫游 • Network File System,网络文件系统 – 由NFS服务器将指定的文件夹共享给客户机 – 客户机将此共享目录 mount 到本地目录,访问此共享 类似于 EXT4、XFS等类型,只不过资源在网上
• 查看NFS资源
– showmount -e [服务器地址]
[root@s ~]# showmount -e classroom.example.com
• 挂载NFS共享目录
– mount 服务器地址:目录路径 本地挂载点
#将共享挂载到本地目录/home/guests
配置NFS共享
(服务端:) 只读NFS共享的实现
1.安装软件包
[root@server0 /]# yum -y install nfs-utils
2.创建共享目录发布共享
[root@server0 /]# mkdir /public
3.修改 /etc/exports
– 文件夹路径 客户机地址(权限) 客户机地址(权限) … …
[root@server0 /]# vim /etc/exports
/public *(ro)
3.重起nfs-server服务
[root@server0 /]# systemctl restart nfs-server
[root@server0 /]# systemctl enable nfs-server
客户端:
查看NFS资源
– showmount -e [服务器地址]
[root@desktop0 ~]# showmount -e 172.25.0.11
挂载NFS共享目录
[root@desktop0 /]# mkdir /mnt/nfs
– mount 服务器地址:目录路径 本地挂载点
[root@desktop0 /]# vim /etc/fstab
172.25.0.11:/public /mnt/nfs nfs defaults,_netdev 0 0
[root@desktop0 /]# mount -a
[root@desktop0 /]# df -h
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
########################################################################################
分区的规划
MBR分区模式 (此模式支持最大空间 2.2T)
三种分区类型: 主分区 扩展分区 逻辑分区
3个主分区, 1个扩展分区, N个逻辑分区
理论上最多4个主分区
fdisk
创建新的分区
[root@server0 ~]# fdisk /dev/vdb
n 创建新的分区—>回车—>回车–>回车—>在last结束时 +2G
p 查看分区表
n 创建新的分区–>回车—>回车—>回车—>在last结束时 +1G
d 删除分区
w 保存并退出
q 不保存并退出
l 查看分区情况
lsblk
#查看划分的分区信息
[root@server0 ~]# lsblk #查看划分的分区信息
mkfs
#格式化分区,赋予文件系统
mkfs.ext4 #格式化成ext4
mkfs.xfs #格式化成xfs
root@server0 ~]# mkfs.ext4 /dev/vdb1 #格式化成ext4
[root@server0 ~]# mkfs.xfs /dev/vdb2 #格式化成xfs
df -h
#查看正在挂载分区的使用情况
[root@server0 ~]# df -h #查看正在挂载分区的使用情况
mount -a
[root@server0 ~]# mount -a
partprobe #刷新所有分区
######################################################
总结:
1.识别硬盘 lsblk
2.分区 fdisk
3.刷新所有分区 partprobe
4.进行格式化 mkfs.ext4 mkfs.xfs blkid(查看文件系统)
5.挂载使用 mount —> df -h (查看是否挂载成功)
6.书写配置文件/etc/fstab —> mount -a(测试)
######################################################
vgcreate lvcreate
(创建卷组)(创建逻辑卷)
创建卷组命令格式: vgcreate 卷组名 设备路径
创建卷组指定大小: vgcreate -s 大小 卷组名 设备路径
创建逻辑卷命令格式: lvcreate -L 逻辑卷的大小 -n 逻辑卷的名称 设备路径
建逻辑卷指定PE个数 lvcreate -l PE个数 -n 逻辑卷名 卷组名
卷组划分空间的单位: PE 默认 4M
[root@server0 ~]# pvs #查看物理卷信息
[root@server0 ~]# vgs #查看卷组信息
[root@server0 ~]# lvs #查看逻辑卷信息
[root@server0 ~]# vgdisplay #显示卷组详细信息
逻辑卷删除
创建:先创建物理卷,再创建卷组,最后创建逻辑卷
删除:先删除逻辑卷,在删除卷组,最后删除物理卷
###########################################################
vgextend lvextend
扩展卷组 扩展逻辑卷
查看卷组有没有足够的剩余空间
[root@server0 ~]# lvs
[root@server0 ~]# vgs
1.卷组有足够的剩余空间,直接扩展逻辑卷的空间
[root@server0 ~]# lvextend -L 18G /dev/systemvg/mylv
A:文件系统的扩大
resize2fs :刷新ext4文件系统
xfs_growfs :刷新xfs文件系统
[root@server0 ~]# resize2fs /dev/systemvg/mylv
2.卷组没有足够的剩余空间
A:首先扩展卷组
[root@server0 ~]# vgextend systemvg /dev/vdc3
B:直接扩展逻辑卷的空间
[root@server0 ~]# lvextend -L 25G /dev/systemvg/mylv
C:文件系统的扩大
[root@server0 ~]# df -h
[root@server0 ~]# resize2fs /dev/systemvg/mylv
逻辑卷也可以减小
ext4文件系统支持减小 xfs文件系统不支持减小
vgchange (指定划分空间大小)
-s #大小
请创建一个大小为250M的逻辑卷redhat.
swap 交换分区
什么是交换空间
• 相当于虚拟内存
– 当物理内存不够用时,使用磁盘空间来模拟内存
– 在一定程度上缓解内存不足的问题
– 交换分区:以空闲分区充当的交换空间
创建交换分区
1.格式化交换文件系统
[root@server0 ~]# mkswap /dev/vdb1
[root@server0 ~]# blkid /dev/vdb1
2.启用交换分区
[root@server0 ~]# swapon /dev/vdb1
[root@server0 ~]# swapon -s #查看交换分区组成信息
3.停用交换分区
[root@server0 ~]# swapoff /dev/vdb2
[root@server0 ~]# swapon -s
4.实现开机自动启用交换分区
[root@server0 ~]# vim /etc/fstab
/dev/vdb1 swap swap defaults 0 0
[root@server0 ~]# swapon -a #专用于检测swap分区
[root@server0 ~]# swapon -s
NMAP (nmap) 网络探测工具
安装包:nmap
-sS tcp syn扫描(半开)
-sT tcp 连接扫描(全开)
-sU udp扫描
-sP ICMP扫描
-A 目标系统全面分析
例: nmap www.baidu.com
nmap 192.168.4.1
网络抓包工具(tcpdump)
格式: tcpdump 选项 过滤条件
-i 指定监控的网络接口
-A 转换维ACSII码,
-w 将数据包信息保存到指定文件
-r 从指定文件读取数据包信息
过滤的条件:类型:host net port protrange
方向:src(本地文件路径) dst(远程机器路径)
协议:tcp udp ip wlan arp 、、、
多个条件组合:and or not
例: tcpdump -A -w ftp.cap host 192.168.4.1 and prot 21 #抓包 主机21端口
tcpdump -A -r ftp.cap |egrep ‘(User|PASS)’ #分析抓包里面内容
arp -n 查看 mac地址
route -n 查看 路由表
设置默认网关
systemctl stop NetwrokManager
route add default gw 192.168.4.254
nm-connection-editor 图形配置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.1/24
connection.autoconnect yes
ip a 查看ip
iptables
包过滤防火墙
安装包:iptables-services
用法:
iptables -t 表名 [选项] 链名 条件 -j [目标操作]
默认为 filter表 不指定链就为所有链
选项--------------------------------------------------------
选项(插入):-A 在链的末尾追加一条规则
-I 在链的开头(或指定序号)插入规则
例:iptables -t filter -I INPUT -p icmp -j REJECT(-p 协议名或协议号)
默认策略 -P 为指定的链设置默认规则
例:iptables -t filter -P INPUT DROP (设置input默认值)
———————————————————————————
4表 5链 (四个表、五种规则链)
规则链之间的
入站:PREROUTING -->INPUT
出站:OUTPUT–>POSTROUTING
转发:PREROUTING --> FORWARD ->POSTROUING
raw(状态跟踪表) :prerouting output
mangle(包标记表) :prerouting postrouting
output input forward
[目标操作]
:ACCEPT 允许通过/放行
:DROP 直接丢弃,不给出任何回应
:REJECT 拒绝通过,必要时会给出提示
:LOG 记录日志,然后传给下一条规则 (匹配即停止 规律的唯一例外)
条件
协议匹配 -p 协议名
通过匹配 地址匹配 -s 源地址、-d 目标地址
接口匹配 -i 收数据的网卡、 -o发数据的网卡
端口匹配 --sport源端口 --dport 目标端口 隐含匹配 ICMP类型匹配 --icmp-type icmp类型
需要取反条件时,用叹号!
-m 扩展模块 --扩展条件 条件值
mac地址匹配 -m mac --mac-source mac地址
扩展匹配 -m multiport --sport源端口列表
多端口匹配
-m multiport --dport目标端口列表
ip范围匹配 -m iprange --src-range ip1-ip2
-m iprange --dst-range ip1-ip2
==============================================================================================
开启内核的ip转发
封禁ip地址/网段
1.主机防护 、针对入站访问的源地址
例:iptables -A INPUT -s 192.168.4.120 -j DROP
iptables -A INPUT -s 10.10.10.0/24 -j DROP
2.网络防护、针对转发访问的源地址
例:iptables -A FORWARD -s 192.168.0.0/16 -j DROP
3.保护特定网络服务 (限制对指定服务端口的访问)
例:iptables -A INPUT -S 192.168.4.0/24 -p tcp --dport 22 -j ACCEPT (或者DROP) #允许远程22端口访问192.168.4.0网段
4.禁止ping相关策略处理(允许本机ping其他主机、但禁止其他主机ping本机)
例:iptables -A INPUT -p icmp --icmp-type echo-request -j DROP(ACCEPT)
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT(DROP)
5.根据mac地址封锁主机
iptables -A INPUT -m mac --mac-source 00:0c:29:74:BE:21 -j DROP
6.开放多个端口
iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,1650,:16800 -j ACCEPT
7.配置SNAT (共享上网)
局域网段 :192.168.4.0/24
外网接口 tcp 80
外网接口的ip :192.168.2.5
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --dport 80 -j SNAT --to-soure 192.168.2.5
8.地址伪装策略
共享动态公网ip地址实现上网
主要针对不固定ip 将SNAT 改为 MASQUERADE
对于ADSL宽带拨号连接,网络接口可写为ppp+
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -O eth1 -j SNAT -to-source 192.168.2.5 (可改为 -j MASQUERADE伪装)
team
聚合连接
获取配置team聚合连接的用法帮助 ——man nmcli-examples
config ‘{“runner”: {“name”: “activebackup”}}’ //可以通过man teamd.conf查找 在所有的帮助中查找:/example 按G到末行
链路聚合的优势:
team 聚合连接(也称为链路聚合):
由多块网卡(team-slave)一起组建而成的虚拟网卡,即组队。
作用1:轮询式的流量负载均衡
作用2:热备份连接冗余
实现链路聚合的条件:
2块或2块以上的物理网卡
步骤如下:
1.创建虚拟网卡team0 【为聚合连接提供配置(类型,连接名,运行器,IP地址)】
[root@server0 ~]# nmcli connection add type team con-name team0 ifname team0 autoconnect yes config ‘{“runner”: {“name”: “activebackup”}}’
解释 numcli connection 添加 类型 team 配置文件名称 team0 ifconfig显示的名字为team0 每次开机自动启动配置 热备份方式
2.添加成员【为成员网卡提供配置(类型,连接名,主连接)】
[root@server0 ~]# nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0
[root@server0 ~]# nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0
3.配置IP地址
[root@server0 ~]# nmcli connection modify team0 ipv4.method manual ipv4.addresses 192.168.1.1/24 connection.autoconnect yes
4.激活 【分别激活聚合连接,成语连接】
[root@server0 ~]# nmcli connection up team0
[root@server0 ~]# nmcli connection up team0-1
[root@server0 ~]# nmcli connection up team0-2
5.验证查看【检查聚合连接状态】
[root@server0 ~]# teamdctl team0 state
[root@server0 ~]# ifconfig eth1 down
[root@server0 ~]# teamdctl team0 state
#################################################################
Shell 脚本
什么是脚本:可以执行的一个文本文件,可以实现某种功能
将回显功能关闭(stty -echo),
将回显功能恢复(stty echo)
案例1:书写一个shell ,在屏幕输出hello world
echo hello world
bc
小数运算工具
交互式运算
[root@svr5 ~]# bc
非交互式
[root@svr5 ~]# echo ‘scale=4;12.34/5.678’ | bc
2.1733
expr
整数运算工具
1)使用expr命令
乘法操作应采用 * 转义
[root@node1 ~]# expr 12 + 15
27
[
]
或
[]或
[]或(())
算式替换
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出
[root@node1 ~]# echo
[
89
+
12
]
101
l
e
t
e
x
p
r
或
[89+12] 101 let expr或
[89+12]101letexpr或[]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看:
shell脚本的元素
规范Shell脚本的一般组成
• #! 环境声明,下面的代码用哪一个程序来解释
• # 注释文本
• 可执行代码
变
量
名
•
基
本
格
式
–
引
用
变
量
值
:
变量名 • 基本格式 – 引用变量值:
变量名•基本格式–引用变量值:变量名
– 查看变量值:echo $变量名、echo ${变量名}
变量名=储存的值 使用变量储存的值 $变量名
– 变量名只能由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符
[root@server0 ~]# echo $a7 #输出为空,会将a7作为整体
[root@server0 ~]# echo ${a}7
重定向输出
> :只收集前面命令的正确信息
2> :只收集前面命令的错误信息
&> :收集前面命令的错误信息与正确信息
黑洞设备 :/dev/null
单引 ’ ’ :取消所有特殊字符含义
案例2:书写一个创建用户的脚本,并设置密码
#!/bin/bash
read -p ‘请输入您要创建的用户名:’ a
useradd KaTeX parse error: Expected 'EOF', got '&' at position 5: a &̲> /dev/null e…a创建成功
echo 123 | passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 3: a &̲> /dev/null ec…a密码设置成功
$( )或 反撇号
将命令的输出,作为参数参与下一个命令执行
%F 完整日期格式,等价于 年-月-日
[root@server0 opt]# mkdir $(date +%F)
环境变量 USER=永远储存当前登陆的用户名
[root@server0 opt]# echo $USER #环境变量
root
[root@node1 ~]# echo $USER $HOME $SHELL $UID
root /root /bin/bash 0
env
3)查看系统变量
使用env可查看所有环境变量:
[root@svr5 src]# env
set
使用set可查看所有变量(包括env能看到的环境变量):
位置变量 bash内置,存储执行脚本时提供的命令行参数(非交互) 系统定义赋值完成,用户直接使用即可
[root@server0 /]# vim /root/1.sh #位置变量
#!/bin/bash
echo $1 echo $2 echo $3
预定义变量 bash内置,可直接调用的特殊值,不能直接修改
系统定义赋值完成,用户直接使用即可
$# 已加载的位置变量的个数
$* 所有位置变量的值
$? 程序退出后的状态值,0表示正常,其他值异常
echo
#!/bin/bash
echo $0 //脚本的名称
echo $1 //第一个参数
echo $2 //第二个参数
echo $* //所有参数
echo $# //所有的综合输入几个
echo $$ //当前进程的进程号
echo $? //上一个程序的返回状态码 //查看结果0为对,非0为错
!= 比较两个字符串是否不相同
#!/bin/bash
echo $1 echo $2 echo $3
echo $# #统计一共输入了几个命令行参数
echo $* #输出所有的命令行参数
[root@server0 /]# cat /etc/
cat: /etc/: 是一个目录
[root@server0 /]# echo $?
1
条件测试判断 –[ 测试表达式 ]
0 零为真 其他数字为假
检查文件状态
-e:文档存在为真 exist
-e 判断对象是否存在(不管是目录还是文件)
-d:文档存在,且必须为目录才为真 directory
-d 判断对象是否为目录(存在且是目录)
-f:文档存在,且必须为文件才为真 file
-f 判断对象是否为文件(存在且是文件)
-r:文档存在,且必须对其有读取权限才为真 read
-r 判断对象是否可读
-w:文档存在,且必须对其有写入权限才为真 write
-w 判断对象是否可写
-x:文档存在,且必须对其有执行权限才为真 execute
-x 判断对象是否具有可执行权限
-z 检查变量的值是否未设置(空值)
-n 可以测试变量是否不为空(相当于 ! -z)
&&,逻辑与
||,逻辑或
[root@server0 /]# [ -e /etc ]
[root@server0 /]# echo $?
0
[root@server0 /]# [ -d /etc/passwd ]
[root@server0 /]# echo $?
1
比较整数大小
-gt:大于 greater than
-ge:大于等于 great or equal
-eq:等于 equal
-ne:不等于 not equal
-lt:小于 less than
-le:小于等于 less or equal
[root@svr5 ~]# [ $A -gt 10 ] //不支持小数比较
[root@svr5 ~]# [ $X -gt 10 ] && echo “大于” || echo “否”
大于
[root@server0 /]# [ 1 -gt 1 ]
[root@server0 /]# echo $?
1
• 字符串比对
== :两个字符串一致为真
!= :两个字符串不一致为真
[root@server0 /]# [ redhat == CentOS ]
[root@server0 /]# echo $?
1
[root@server0 /]# [ root == $USER ]
[root@server0 /]# echo $?
0
if 双分支处理 if [条件测试];then 命令序列xx else 命令序列yy fi ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if 多分支处理 if [条件测试1];then 命令序列xx 命令序列bb elif [条件测试2];then 命令序列yy elif [条件测试3];then 命令序列aa ...... else 命令序列zz fi 案例: 利用read 读取用户输入的成绩. 如果成绩 大于等于90,则输出 优秀 如果成绩 大于等于80,则输出 良好 如果成绩 大于等于70,则输出 一般 如果成绩 大于等于60,则输出 合格 以上条件均不满足,则输出 一首凉凉送给你! [root@server0 /]# vim /root/if02.sh #!/bin/bash read -p '请输入您的成绩:' num if [ $num -ge 90 ];then echo 优秀 elif [ $num -ge 80 ];then echo 良好 elif [ $num -ge 70 ];then echo 一般 elif [ $num -ge 60 ];then echo 合格 else echo '一首凉凉送给你!' fi for循环 for循环处理 • 遍历/列表式循环 – 根据变量的不同取值,重复执行xx处理 for 变量名 in 值列表 do 命令 done for i in {1..5} do echo $i done for i in `seq 5` do echo $i done for i in `cat /a.txt` do echo $i done 造数机制: {起始值..结束值} {1..10}: 1到10 所有的数字 {20..38}: 20到38所有的数字 案例4:编写一个判断脚本 在 server0 上创建 /root/foo.sh 脚本 1)当运行/root/foo.sh redhat,输出为fedora 2)当运行/root/foo.sh fedora,输出为redhat 3)当没有任何参数或者参数不是 redhat 或者fedora时, 其错误输出产生以下信息: /root/foo.sh redhat|fedora [root@server0 ~]# vim /root/foo.sh #!/bin/bash if [ $# -eq 0 ];then #判断用户是否输入参数 echo '/root/foo.sh redhat|fedora' >&2 #变成错误输出 exit 1 #程序退出返回值为1 elif [ $1 == redhat ];then echo fedora elif [ $1 == fedora ];then echo redhat else echo '/root/foo.sh redhat|fedora' >&2 #变成错误输出 exit 2 #程序退出返回值为2 fi echo -e "\033[32mOK\033[0m" 3X为字体颜色,4X为背景颜色 while 循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环 while 格式 1. while 条件测试 do 命令序列 done 2.while : do 命令序列 done [root@svr5 ~]# vim while01.sh #!/bin/bash i=1 while [ $i -le 5 ] do echo "$i" done case 格式: case 变量 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; .. .. *) 默认命令序列 esac 例: #!/bin/bash case $1 in redhat) echo "fedora";; fedora) echo "redhat";; *) //默认输出脚本用法 echo "用法: $0 {redhat|fedora}" esac fork 炸弹 Shell版本的fork炸弹 [root@svr5 ~]# vim test.sh #!/bin/bash .(){ .|.& } . 中断及退出 通过 break、 continue、 exit 在Shell脚本中实现中断与退出的功能。 break可以结束整个循环;continue结束本次循环,进入下一次循环;exit结束整个脚本,案例如下: 1)编写脚本文件 注意:要求打印所有6的倍数的平方值,也就是非6的倍数都跳过!!! [root@svr5 ~]# vim test.sh #!/bin/bash for i in {1..20} do [ $[i%6] -ne 0 ] && continue echo $[i*i] done [root@svr5 ~]# chmod +x test.sh [root@svr5 ~]# ./test.sh 字符串截取及切割 子串截取的三种用法: ${变量名:起始位置:长度} (默认从0开始) expr substr "$变量名" 起始位置 长度 (从1开始) echo $变量名 | cut -b 起始位置-结束位置 (从第1个字符开始(编号也是从1开始) 子串替换的两种用法: 只替换第一个匹配结果:${变量名/old/new} 替换全部匹配结果:${变量名//old/new} 例:将phone字符串中的所有8都替换为X: [root@svr5 ~]# echo ${phone//8/X} 137XX76XX97 字符串掐头去尾: 从左向右,最短匹配删除:${变量名#*关键词} 删除从左侧第1个字符到最近的关键词“:”的部分,* 作通配符理解: [root@svr5 ~]# echo ${A#*:} x:0:0:root:/root:/bin/bash 从左向右,最长匹配删除:${变量名##*关键词} 删除从左侧第1个字符到最远的关键词“:”的部分: [root@svr5 ~]# echo ${A##*:} 从右向左,最短匹配删除:${变量名%关键词*} 删除从右侧最后1个字符到往左最近的关键词“:”的部分,* 做通配符理解: echo ${A%:*} 从右向左,最长匹配删除:${变量名%%关键词*} 删除从右侧最后1个字符到往左最远的关键词“:”的部分: [root@svr5 ~]# echo ${A%%:*} 正则表达式 表-1 基本正则列表 echo ${变量} 只输出变量 echo ${变量::} 截取 echo ${变量///} 替换 echo ${变量#*:} 删除从头部开始 echo ${变量%:*} 去尾 echo ${变量:-1234} 变量初始值,当变量没有初始值会输出1234 数组 定义数组 x={11 12 13 14} 或 x【0】=11 x【1】=12 x【2】=13 x【3】=14 echo ${x[0]} 11 sed 用法1: 前置命令 | sed [选项] '条件指令' 用法2: sed [选项] '条件指令' 文件.. .. 指令可以是增、删、改、查等指令 sed命令的常用选项如下: -n(屏蔽默认输出,默认sed会输出读取文档的全部内容) -r(让sed支持扩展正则) -i(sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响) 1)sed命令的 -n 选项 执行p打印等过滤操作时,希望看到的是符合条件的文本。但不使用任何选项时,默认会将原始文本一并输出,从而干扰过滤效果。比如,尝试用sed输出/etc/hosts的第1行: sed命令的p、d、s等常见操作 p(打印) print d(删除) delete s(替换) substitution sed工具的多行文本处理操作: i (insert) : 在指定的行之前插入文本 a (append) :在指定的行之后追加文本 c (change) :替换指定的行 r w H G r /a.txt 读入 w / a.txt 保存到a.txt ############################## 总结知识点: #sed [选项] '条件指令' 文件 选项: -n 屏蔽默认输出 -r 支持扩展正则 -i 修改源文件 条件: 行号 4 4,5 4~2 (4开始每隔2行) 4,+10 /正则/ 指令: p 打印 d 删除 s 替换s/旧/新/g a 追加 后 i 插入 前 c 替换行 p [root@svr5 ~]# sed -n 'p' a.txt //输出所有行,等同于cat a.txt [root@svr5 ~]# sed -n '4p' a.txt //输出第4行 [root@svr5 ~]# sed -n '4,7p' a.txt //输出第4~7行 [root@svr5 ~]# sed -n '4,+10p' a.txt //输出第4行及其后的10行内容 [root@svr5 ~]# sed -n '/^bin/p' a.txt //输出以bin开头的行 [root@svr5 ~]# sed -n '$=' a.txt //输出文件的行数 2)下面看看sed工具的d指令案例集锦(自己提前生成一个a.txt文件) [root@svr5 ~]# sed '3,5d' a.txt //删除第3~5行 [root@svr5 ~]# sed '/xml/d' a.txt //删除所有包含xml的行 [root@svr5 ~]# sed '/xml/!d' a.txt //删除不包含xml的行,!符号表示取反 [root@svr5 ~]# sed '/^install/d' a.txt //删除以install开头的行 [root@svr5 ~]# sed '$d' a.txt //删除文件的最后一行 [root@svr5 ~]# sed '/^$/d' a.txt //删除所有空行 )下面看看sed工具的s指令案例集锦(自己提前生成一个a.txt文件) 注意:替换操作的分隔“/”可改用其他字符,如#、&等,便于修改文件路径 [root@svr5 ~]# sed 's/xml/XML/' a.txt //将每行中第一个xml替换为XML [root@svr5 ~]# sed 's/xml/XML/3' a.txt //将每行中的第3个xml替换为XML [root@svr5 ~]# sed 's/xml/XML/g' a.txt //将所有的xml都替换为XML [root@svr5 ~]# sed 's/xml//g' a.txt //将所有的xml都删除(替换为空串) [root@svr5 ~]# sed 's#/bin/bash#/sbin/sh#' a.txt //将/bin/bash替换为/sbin/sh [root@svr5 ~]# sed '4,7s/^/#/' a.txt //将第4~7行注释掉(行首加#号) [root@svr5 ~]# sed 's/^#an/an/' a.txt //解除以#an开头的行的注释(去除行首的#号) ################################################################ SELinux 一套增强Linux系统安全的强制访问控制体系 • SELinux的运行模式 – enforcing(强制)、permissive(宽松) – disabled(彻底禁用) -a 使用 getsebool 查看 可列出所有布尔值 例:getsebool -a |grep samba -P 加 P 永久 更改‘ 重启一样有效 临时配置 setenforce :设置selinux的运行模式 参数(0 或 1 ) getenforce : #查看当前SELinux状态 [root@server0 ~]# setenforce 1 #设置当前SELinux状态为 enforcing [root@server0 ~]# getenforce #查看当前SELinux状态 [root@server0 ~]# setenforce 0 #设置当前SELinux状态为 permissive 永久配置 固定配置:/etc/selinux/config 文件 [root@server0 ~]# vim /etc/selinux/config SELINUX=permissive ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 防火墙 作用: 隔离 过滤 硬件防火墙:一般保护的一个网络所有主机 软件防火墙:一般保护本机 管理工具:firewall-cmd(命令)、firewall-config(图形) 预设安全区域: – public:仅允许访问本机的sshd dhcp ping少数几个服务 – trusted:允许任何访问 – block:拒绝任何来访请求(明确拒绝) – drop:丢弃任何来访的数据包(非明确拒绝,直接丢弃,节省资源) 配置永久防火墙模式:vim /etc/firewalld/firewalld.conf DefaultZone=public # firewall-cmd --get-default-zone #查看默认区域 # firewall-cmd --set-default-zone=block #修改默认区域为block (临时) # firewall-cmd --reload #重新加载防火墙所有配置文件规则 # firewall-cmd --zone=public --list-all #列出所有public区域的服务 永久防火墙策略 parmanent (添加永久防火墙策略) add (添加端口或服务加--permanent 为永久设置) # firewall-cmd --zone=public --add-service=ftp # firewall-cmd --permanent --zone=public --add-service=ftp # firewall-cmd --permanent --zone=public --add-service=httpd 临时删除 remove # firewall-cmd --zone=public --remove-service=http 永久删除(删除配置文件中规则) # firewall-cmd --permanent --zone=public --remove-service=http 在区域添加源IP地址 加入到block区域中 (明确拒绝端口172.25.0.10访问本机) # firewall-cmd --zone=block --add-source=172.25.0.10 # firewall-cmd --permanent --zone=block --add-source=172.25.0.10 端口转发 (例:5423 >> 80) 端口重定向(端口1 --> 端口2) – 从客户机访问 端口1 的请求,自动映射到本机 端口2 #firewall-cmd --permanent --zone=trusted --add-forward-port=port=5423:proto=tcp:toport=80 互联网常见的协议 http:超文本传输协议 :80 https:安全超文本传输协议 :443 FTP:文件传输协议 : 21 ssh 22 DNS:域名解析协议 : 53 telnet:远程管理协议 23 tftp:简单文件传输协议 : 69 SMTP:邮件协议(用户发邮件):25 pop3:邮件协议(用户收邮件):110 snmp:网络管理协议 :161 ISCSI 网络磁盘 :3260 NTP 网络时间同步协议 :123 NFS(TCP/UDP 2049)、RPC(TCP/UDP 111) SMB samba (TCP 139)、CIFS(TCP 445) nginx 80 mysql 3306 tomcat 8005 8009 8080 php 9000 ############################################################################################################## Web (软件httpd) 端口:http =80 https=443 主配置文件:/etc/httpd/conf/httpd.conf 调用文件 : /etc/httpd/conf.d/ *conf (一般使用调用配置文件) 静态网站的运行 >> •服务端的原始网页 = 浏览器访问到的网页 – 由Web服务软件处理所有请求 – 文本(txt/html)、图片(jpg/png)等静态资源 动态网站的运行 >>• 服务端的原始网页 ≠ 浏览器访问到的网页 – 由Web服务软件接受请求,动态程序转后端模块处理 – PHP网页、Python网页、JSP网页...... Web通信基本概念 基于 B/S (Browser/Server)架构的网页服务 • Hyper Text Markup Language(HTML),超文本标记语言 • Hyper Text Transfer Protocol(HTTP),超文本传输协议 – Listen:监听地址:端口(80) – ServerName:本站点注册的DNS名称(空缺) – DocumentRoot:网页根目录(/var/www/html) – DirectoryIndex:起始页/首页文件名(index.html) 搭建普通web服务 防火墙 环境设置为trusted 1.安装httpd(Apache)软件包(服务端软件) [root@server0 ~]# yum -y install httpd 2.书写一个页面文件 默认存放网页文件的路径: /var/www/html 默认网页文件的名字: index.html(访问显示的页面) [root@server0 ~]# vim /var/www/html/index.html <marquee><font color=red><h1>NSD1809 阳光明媚 滚动 字体颜色为红色 最大字体 3. 重起httpd服务 [root@server0 ~]# systemctl restart httpd [root@server0 ~]# systemctl enable httpd 4.本机测试 [root@server0 ~]# firefox 172.25.0.11 案例3:在原网站创建子目录内容访问 在 Web 网站 http://server0.example.com 的 DocumentRoot 目录下创建一个名为 private 的子目录,要求如下: 1.查看 server0.example.com 的DocumentRoot 目录 # cat /etc/httpd/conf.d/nsd01.conf 2.创建目录,写入页面文件 # mkdir /var/www/myweb/private # echo '<h1> wo shi private' > /var/www/myweb/private/index.html 3.在虚拟机server与虚拟机desktop上 访问测试 firefox server0.example.com/private 4.从 server0 上,任何人都可以浏览 private的内容, 但是从其他系统不能访问这个目录的内容 [root@server0 ~]# vim /etc/httpd/conf/httpd.conf [root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf <Directory "/var/www/myweb/private"> Require ip 172.25.0.11 [::1]/128 127.0.0.0/8 #仅本机可访问 </Directory> [root@server0 ~]# systemctl restart httpd 5.在虚拟机desktop0进行验证: [root@desktop0 ~]#firefox server0.example.com/private Forbidden You don't have permission to access /private on this server. ################################################################# 虚拟Web主机 – 由同一台服务器提供多个不同的Web站点 • 区分方式 – 基于域名的虚拟主机 – 基于端口的虚拟主机 – 基于IP地址的虚拟主机 – 基于域名的虚拟主机 <VirtualHost IP地址:端口> ServerName 此站点的DNS名称 DocumentRoot 此站点的网页根目录 </VirtualHost> • 配置文件路径 – /etc/httpd/conf/httpd.conf 主配置文件 – /etc/httpd/conf.d/*.conf 调用配置文件 # mkdir /var/www/qq /var/www/baidu # echo '<h1>企鹅' > /var/www/qq/index.html # echo '<h1>百度' > /var/www/baidu/index.html # vim /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> #所有IP地址开放80端口 ServerName www0.example.com #指定网站名称 DocumentRoot /var/www/qq #指定网页文件存放路径 </VirtualHost> <VirtualHost *:80> ServerName webapp0.example.com DocumentRoot /var/www/baidu </VirtualHost> <VirtualHost *:80> ServerName server0.example.com DocumentRoot /var/www/myweb </VirtualHost> # systemctl restart httpd 网页内容访问限制客户机地址 • 使用 <Directory> 配置区段 – 每个文件夹自动继承其父目录的访问权限 – 除非针对子目录有明确设置 <Directory 目录的绝对路径> .. .. Require all denied|granted Require ip IP或网段地址 .. .. </Directory> <Directory /var/www/html> Require all denied | granted #拒绝所有 | 允许所有 Require ip 172.25.0.10 #仅允许172.25.0.10进行访问 </Directory> ############################################################# 安全的Web的构建 (软件:httpd mod_ssl ) • Public Key Infrastructure,公钥基础设施 – 公钥:主要用来加密数据 – 私钥:主要用来解密数据(与相应的公钥匹配) – 数字证书:证明拥有者的合法性/权威性(单位名称、有效期、公钥、颁发机构及签名、......) – Certificate Authority,数字证书授权中心:负责证书的申请/审核/颁发/鉴定/撤销等管理工作 1.部署网站证书(营业执照) # cd /etc/pki/tls/certs/ #默认存放网站证书路径 # wget http://classroom.example.com/pub/tls/certs/server0.crt 部署根证书(公安局信息) # cd /etc/pki/tls/certs/ # wget http://classroom.example.com/pub/example-ca.crt 部署私钥匙(解密) # cd /etc/pki/tls/private/ # wget http://classroom.example.com/pub/tls/private/server0.key 2.安装软件包 [root@server0 /]# yum -y install httpd [root@server0 /]# yum -y install mod_ssl(支持加密通信) 3.修改配置文件/etc/httpd/conf.d/ssl.conf # echo '<h1>NSD1809 Web' > /var/www/html/index.html [root@server0 /]# vim /etc/httpd/conf.d/ssl.conf 在末行模式下 :set nu 显示行号 59 DocumentRoot "/var/www/html" 60 ServerName www0.example.com:443 指定网站证书 100 SSLCertificateFile /etc/pki/tls/certs/server0.crt 指定私钥 107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key 指定根证书 122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt 4.重起httpd服务 [root@server0 /]# systemctl restart httpd 5.验证: [root@desktop0 ~]# firefox https://www0.example.com 点击 了解安全的风险 ---->添加例外----->确认安全例外 ############################################################# 自定Web根目录 调整 Web 站点 http://server0.example.com 的网页 目录,要求如下: 1)新建目录 /webroot,作为此站点新的网页目录 # mkdir /webroot # echo '<h1>wo shi webroot' > /webroot/index.html 2)修改虚拟Web主机配置文件,指定新的网页目录 # vim /etc/httpd/conf.d/nsd01.conf <VirtualHost *:80> ServerName server0.example.com DocumentRoot /webroot </VirtualHost> 3)修改Web访问控制配置文件,允许所有人访问 # vim /etc/httpd/conf.d/nsd02.conf <Directory "/webroot"> Require all granted #允许所有人访问 </Directory> 4)重起服务 [root@server0 ~]# systemctl restart httpd 5) 修改SELinux策略,安全上下文值(标签值) [root@server0 ~]# ls -Zd /var/www/ [root@server0 ~]# ls -Zd /webroot/ # chcon -R --reference=/var/www/ /webroot [root@server0 ~]# ls -Zd /var/www/ [root@server0 ~]# ls -Zd /webroot/ ########################################################### 部署动态网站 LAMP (Linux Apache MySQL/MariaDB php/python) 方案3 :以webapp0.example.com部署Python页面为例 # cat /etc/httpd/conf.d/nsd01.conf #查看DocmentRoot 1.安装mod_wsgi软件包,翻译Python页面代码 [root@server0 /]# yum -y install mod_wsgi 2.修改配置文件,进行翻译Python页面代码 # vim /etc/httpd/conf.d/nsd01.conf 此虚拟主机侦听在端口8909 Listen 8909 #配置httpd程序监听8909端口 <VirtualHost *:8909> #虚拟web主机监听8909 ServerName webapp0.example.com DocumentRoot /var/www/baidu WsgiScriptAlias / /var/www/baidu/webinfo.wsgi # 当客户端直接访问网页文件根目录时,webinfo.ws呈现 </VirtualHost> 3. SELinux非默认端口的开放 # semanage port -l | grep http # semanage port -a -t http_port_t -p tcp 8909 -a:添加 -t:类型 -p:协议 4. 起服 systemctl restart httpd systemctl enable httpd 5.验证: http://webapp0.example.com:8909 ##################################################### FTP (软件vsftpd) ftp://用户名:密码@服务器地址[:端口号]/目录/文件名 端口:ftp=21 搭建简单FTP服务(实现文件的传输) 1.安装vsftpd服务端软件 2.FTP共享数据的路径: /var/ftp (默认) #把要共享的文件和目录放到这个目录下 3.重起vsftpd服务 [root@server0 ~]# systemctl restart vsftpd [root@server0 ~]# systemctl enable vsftpd 4.本机测试 [root@server0 ~]# firefox ftp://172.25.0.11 Samba Samba服务基础:实现跨平台的共享(Windows与Linux) – 协议:SMB(TCP 139)、CIFS(TCP 445) • 所需软件包:samba • 系统服务:smb Samba用户 —— 专用来访问共享文件夹的用户 pdbedit • 使用 pdbedit 管理工具 – 添加用户:pdbedit -a 用户名 – 查询用户:pdbedit -L [用户名] – 删除用户:pdbedit -x 用户名 samba 配置文件 :/etc/samba/smb.conf [自定共享名] path = 文件夹绝对路径 ; public = no|yes //默认no ; browseable = yes|no //默认yes ; read only = yes|no //默认yes ; write list = 用户1 .. .. //默认无 ; valid users = 用户1 .. .. //默认任何用户 ; hosts allow = 客户机地址 .. .. ; hosts deny = 客户机地址 .. . 搭建(简单)samba 环境配置 (服务端) # firewall-cmd --set-default-zone=trusted 1.安装samba软件包 [root@server0 ~]# yum -y install samba 2.创建Samba的共享帐号 # useradd -s /sbin/nologin harry # pdbedit -a harry #将harry添加为共享帐号 # pdbedit -L #查看所有Samba的共享帐号 3.修改配置文件/etc/samba/smb.conf 1)创建目录 [root@server0 ~]# mkdir /common 2)vim /etc/samba/smb.conf 89 workgroup = STAFF #此服务器必须是 STAFF 工作组的一个成员 命令模式 按 G(大写) 到全文最后 321 [common] #共享名 322 path = /common #共享实际路径 4.SELinux的布尔值策略(功能的开关) – 需要加 -P 选项才能实现永久设置(需要内存的支持) # getsebool -a | grep samba #查看samba服务布尔值 # setsebool samba_export_all_ro on #修改samba服务布尔值 5.重起smb服务 [root@server0 ~]# systemctl restart smb [root@server0 ~]# systemctl enable smb ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ samba 客户端 (1) 配置环境 # firewall-cmd --set-default-zone=trusted 1.安装客户端软件包samba-client [root@desktop0 ~]# yum -y install samba-client • 列出共享资源 – smbclient -L 服务器地址 # smbclient -L 172.25.0.11 • 连接到共享文件夹 – smbclient -U 用户名 //服务器地址/共享名 # smbclient -U harry //172.25.0.11/common samba 客户端 (2) mount挂载:本地目录作为Samba服务的访问点 1.安装cifs-utils软件包,支持cifs文件系统的软件包 [root@desktop0 /]# yum -y install cifs-utils 2.挂载访问 [root@desktop0 /]# mkdir /mnt/smb 普通挂载 # mount -o user=harry,pass=123 //172.25.0.11/common /mnt/smb/ 开机自动挂载/etc/fstab _netdev:网络设备 指明本设备需要具备所有网络参数后,在进行挂载 [root@desktop0 /]# vim /etc/fstab //172.25.0.11/common /mnt/smb cifs defaults,user=harry,pass=123,_netdev 0 0 [root@desktop0 /]# mount -a #检测开机自动挂载是否书写正确 [root@desktop0 /]# df -h 读写的Samba共享 服务端 1.创建共享目录 [root@server0 /]# mkdir /devops 2.修改配置文件/etc/samba/smb.conf [devops] path = /devops write list = chihiro #允许chihiro用户可以写入 3.重起smb服务 [root@server0 /]# systemctl restart smb 4.修改SELinux布尔值 [root@server0 /]# getsebool -a | grep samba [root@server0 /]# setsebool -P samba_export_all_rw=on 5.服务端本地目录权限 [root@server0 /]# setfacl -m u:chihiro:rwx /devops [root@server0 /]# getfacl /devops 客户端: [root@desktop0 /]# mkdir /mnt/dev 1.完成开机自动挂载 [root@desktop0 /]# vim /etc/fstab //172.25.0.11/devops /mnt/dev cifs defaults,user=chihiro,pass=123,_netdev 0 0 [root@desktop0 /]# mount -a [root@desktop0 /]# df -h ################################################## 总结:读写Samba共享 搭建Samba服务: 1.修改防火墙策略 2.安装软件包samba 3.创建Samba共享帐号 pdbedit 4.创建共享目录,修改配置文件发布共享,添加可写用户 5.重起smb服务 6.修改SELinux功能的开关(rw读写功能) 7.赋予本地目录(可写用户身份)读写执行的权限 客户端: 1.修改防火墙策略 2.安装软件包cifs-utils 3.利用mount挂载的方式 4.实现开机自动挂载 multiuser机制(多用户) – multiuser,提供对客户端多个用户身份的区分支持 – sec=ntlmssp,提供NT局域网管理安全支持 将共享,开机自动挂载到/mnt/samba -发布共享/public,共享名为haxi -共享用户chihiro对共享具备读写权限 //172.25.0.11/devops /mnt/dev cifs defaults,username=chihiro,password=123,mnltiuser,sec=ntlmssp _netdev 0 0 iSCSI ( 软件包 :服务端targetcli 客户端iscsi-initiator-utils) 网络磁盘(共享分区或整个磁盘) 默认端口:3260 backstore,后端存储( 对应到服务端提供实际存储空间的设备,需要起一个管理名称 target,磁盘组 – 是客户端的访问目标,作为一个框架,由多个lun组成 lun,逻辑单元 – 每一个lun需要关联到某一个后端存储设备,在客户端 会视为一块虚拟硬盘 – iqn.yyyy-mm.倒序域名:自定义标识 搭建iscsi磁盘共享 1.利用fisk /dev/vdb命令,划分一个5G的主分区 服务端 一 防火墙设置为trusted 二 .安装软件包targetcli(服务端软件),进行配置 root@server0 ~]# yum -y install targetcli [root@server0 ~]# targetcli 1.创建后端存储 backstore,后端存储(冰箱进行纸质包装) /> backstores/block create name=nsd dev=/dev/vdb1 后端存储/块设备 创建 名字 实际设备 2.创建 target,磁盘组 (木质箱子) /> iscsi/ create iqn.2018-10.example.com:server0 3.进行关联, lun 逻辑单元 [root@server0 ~]# targetcli /> ls /> iscsi/iqn.2018-10.example.com:server0/tpg1/ luns create /backstores/block/nsd 4.访问控制, 设置客户端访问服务端时,声称的名字(符合iqn格式) /> iscsi/iqn.2018-10.example.com:server0/tpg1/acls create iqn.2018-10.example.com:desktop0 5.开放本机的IP地址与端口 /> iscsi/iqn.2018-10.example.com:server0/tpg1/ portals create 172.25.0.11 /> ls 6.重起服务端target服务 [root@server0 ~]# systemctl restart target [root@server0 ~]# systemctl enable target 客户端: 1.防火墙设置默认区域为trusted 2.安装软件包(客户端软件包) [root@desktop0 ~]# rpm -q iscsi-initiator-utils 3.指定客户端声称的名字 # vim /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2018-10.example.com:desktop0 4.重起iscsid服务,刷新客户端声称的名字 [root@desktop0 ~]# systemctl restart iscsid [root@desktop0 ~]# systemctl daemon-reload [root@desktop0 ~]# systemctl restart iscsid 5.发现服务端共享存储 书写发现的命令, 参考# man iscsiadm 搜索全文 /example scsiadm --mode discoverydb --type sendtargets -- portal 172.25.0.11 --discover 6.加载共享存储 # lsblk # systemctl restart iscsi #重起服务加载共享存储 # systemctl enable iscsi ############################################################### 总结: 服务端: 1.防火墙默认区域设置为trusted 2.安装软件包targetcli A:建立后端存储 B:建立target磁盘组 C:关联lun D:设置acl访问控制,客户端声称的名字 E:开启本机的IP地址及端口 3.重起target服务 客户端: 1.防火墙默认区域设置为trusted 2.安装软件包iscsi-initiator-utils 3.修改文件/etc/iscsi/initiatorname.iscsi客户端声称的名字 4.重起iscsid服务刷新客户端iqn标识 5.书写客户端发现命令,参照man iscsiadm 6.重起iscsi服务,加载共享存储 最终利用lsblk查看新磁盘 ############################################################### 数据库管理 (软件 MariaDB-server) 数据库:存放数据的仓库 – 社区开源版 MariaDB 默认端口:3306 一 安装数据库 [root@server0 ~]# yum -y install mariadb-server [root@server0 ~]# systemctl restart mariadb [root@server0 ~]# systemctl enable mariadb 二 数据库基本操作 show (查看) create(创建) > show databases; #显示所有库 > create database nsd1809; #创建nsd1809库 > exit #结束退出mariadb >drop datebase nsd1809 #删除1809库 三 为数据库管理员设置密码 • 为数据库账号修改密码 – mysqladmin [-u用户名] [-p[旧密码]] password '新密码' [root@server0 ~]# mysqladmin -u root password '123' 进入数据库 [root@server0 ~]# mysql -u root -p123 #非交互式进入数据库 [root@server0 ~]# mysql -u root -p #交互式进入 MariaDB [(none)]> use nsd; #进入nsd库 MariaDB [nsd]> show tables; #显示所有表格 • 禁止监听,只服务于本机,MariaDB主配文件为/etc/my.cnf #vim /etc/my.cof skip-networking #跳过网络 • 导入数据 /恢复到数据库 – mysql [-u用户名] [-p[密码]] 数据库名 < 备份文件.sql # mysql -u root -p123 nsd < users.sql #导入数据 # mysql -u root -p123 nsd > users.sql #导出数据 案例5:使用数据库查询 1. 在系统 server0 上使用数据库 nsd,并使用相 应的 SQL 查询以回答下列问题: 1)密码是 solicitous 的人的名字? MariaDB [(none)]> use nsd; #切换到库nsd MariaDB [nsd]> show tables; #查看所有的表格 > select * from base; > select * from base where password='solicitous'; > select * from base where name='tom'; > select * from base where password='456'; 2)有多少人的 姓名是 Barbara 同时居住在 Sunnyvale > select * from base,location where base.name='Barbara' and location.city='Sunnyvale' and base.id=location.id; 2. 禁止空密码root用户访问 mariadb 数据库 > use mysql; > desc user; #查看表结构 > select user,host,password from user where password=''; 查询空密码的用户 > delete from user where password=' '; #删除空密码的用户 > select user,host,password from user; #查询是否还存在空密码用户 > flush privileges; #刷新user表记录 测试登陆失败,利用域名方式登陆 # mysql -u root -h server0.example.com ################################################# 表格操作: insert(增) delete(删) update(改) select(查) 查看表结构的命令: desc > desc user; #查看表结构 查询表格内容 MariaDB [(none)]> use nsd; #切换到库nsd MariaDB [nsd]> show tables; #查看所有的表格 select 表字段 from 表名; select 表字段 from 库名.表名; MariaDB [nsd]> select * from base; MariaDB [nsd]> select name from base; MariaDB [mysql]> select user,host,password from user; MariaDB [(none)]> use nsd; MariaDB [nsd]> desc base; ################################################## 数据库的授权: –GRANT 权限列表 ON 数据库名.表名 TO 用户名@客户机地址 IDENTIFIED BY '密码'; [root@server0 ~]# mysql -u root -p123 > grant select on nsd.* to dc@localhost identified by '123'; #当dc从locahost登陆输入密码123,将会获得nsd库所有表的查询权限 ################################################################# mail 邮件服务 (软件 :postfix) SMTP:用户发出的邮件的协议 默认端口 25 pop3:用户收到的邮件的协议 默认端口 110 搭建简单邮件服务 1.检查是否安装postfix软件包,搭建为邮件服务器 [root@server0 /]# rpm -q postfix postfix-2.10.1-6.el7.x86_64 2.修改配置文件 [root@server0 /]# vim /etc/postfix/main.cf 末行模式 :set nu 开启行号 99 myorigin = server0.example.com #默认补全的域名后缀 116 inet_interfaces = all (或者loopback-only 仅自己)#允许本机所有接口使用邮件服务 164 mydestination = //此行的值设为空 mynetworks=127.0.0.0/8 [::1]/128 //仅本机 relayhost=[smtpX.example.com] //后端邮件服务器 local_transport = error:local dirvctory 3.重起服务 [root@server0 /]# systemctl restart postfix 发信操作与收信操作 • mail 发信操作 – mail -s '邮件标题' -r 发件人 收件人[@收件域]... mail -s " test" student (直接收件人) • mail 收信操作 – mail -u 用户名 ############################################################### 源码编译安装 • 主要优点 – 获得软件的最新版,及时修复bug – 软件功能可按需选择/定制,有更多软件可供选择 – 源码包适用各种平台 步骤1:安装gcc与make [root@svr7 ~]# yum -y install gcc make 步骤2:tar解包,释放源代码至指定目录 # ls /tools/ # tar -xf /tools/inotify-tools-3.13.tar.gz -C / 步骤3: ./configure 配置, # cd /inotify-tools-3.13/ # ./configure --prefix=/opt/myrpm #指定安装位置 步骤4:make 编译,生成可执行的二进制程序文件 [root@svr7 inotify-tools-3.13]# make 步骤5:make install 安装,将编译好的文件复制到安装目录 [root@svr7 inotify-tools-3.13]# make install ################################################################## DNS 服务器的功能 – 正向解析:根据注册的域名查找其对应的IP地址 – 反向解析:根据IP地址查找对应的注册域名,不常用 所有完整的域名都必须以点结尾 根域名: . 顶级域名: .cn .us .jp .kr .tw .hk ...... 二级域名: .com.cn .net.cn .org.cn .tedu.cn 三级域名: .nb.com.cn .haxi.com.cn .xixi.com.cn 完整域名(FQDN): www.nb.com.cn ftp.nb.com.cn • BIND服务器端程序 – 系统服务:named – 默认端口:TCP/UDP 53 – 运行时的虚拟根环境:/var/named/chroot/ • 主配置文件:/etc/named.conf 指定本机负责解析的域名 • 地址库文件:/var/named/etc/ 完整的域名与IP对应关系 • NS,域名服务器(Name Server)记录 • A,地址(Address)记录,仅用于正向解析区域 搭建基本DNS服务 虚拟机A 1.安装软件包 [root@svr7 ~]# yum -y install bind-chroot bind 2.修改配置文件/etc/named.conf [root@svr7 ~]# cp /etc/named.conf /root/named.bak [root@svr7 ~]# vim /etc/named.conf options { directory "/var/named"; #指定地址库文件路径 }; zone "tedu.cn" IN { #指定本机负责解析的域名 type master; #本机为权威主DNS服务器 file "tedu.cn.zone"; #指定地址库文件名字 }; 3.创建地址库文件/var/named/tedu.cn.zone # cd /var/named # cp -p named.localhost tedu.cn.zone #保持属性不变 # vim tedu.cn.zone #没有以点结尾,默认补全tedu.cn. tedu.cn. NS svr7 #tedu.cn.区域有svr7负责 svr7 A 192.168.4.7 #svr7的IP地址为192.168.4.7 www A 1.1.1.1 ftp A 2.2.2.2 4.重起named服务 # systemctl restart named 5.客户端验证 指定DNS服务器位置 # echo nameserver 192.168.4.7 > /etc/resolv.conf 2.域名解析测试 # nslookup www.tedu.cn # nslookup ftp.tedu.cn ################################################# 多区域的DNS服务器 虚拟机A: 1.修改配置文件/etc/named.conf ...... zone "qq.com" IN { type master; file "qq.com.zone"; }; 3.创建地址库文件/var/named/qq.com.zone # cd /var/named # cp -p tedu.cn.zone qq.com.zone # vim qq.com.zone qq.com. NS svr7 svr7 A 192.168.4.7 www A 3.3.3.3 ftp A 4.4.4.4 4.重起named服务 # systemctl restart named 5.客户端验证 1.指定DNS服务器位置 # echo nameserver 192.168.4.7 > /etc/resolv.conf 2.域名解析测试 # nslookup www.qq.com # nslookup ftp.qq.com ################################################ 特殊的解析记录,以tedu.cn.zone为例 一 DNS的负载均衡,轮询的相同解析记录(了解) [root@svr7 /]# vim /var/named/tedu.cn.zone tedu.cn. NS svr7 svr7 A 192.168.4.7 www A 192.168.4.1 www A 192.168.4.2 www A 192.168.4.3 www A 192.168.4.4 ftp A 2.2.2.2 [root@svr7 /]# !sys systemctl restart named ############################################################# 二 泛域名解析 [root@svr7 /]# vim /var/named/tedu.cn.zone ....... * A 10.11.12.14 [root@svr7 /]# !sys systemctl restart named 客户端验证: [root@pc207 /]# nslookup wwwwww.tedu.cn [root@pc207 /]# nslookup hahaxixi.tedu.cn 三 解析记录的别名(了解) [root@svr7 /]# vim /var/named/tedu.cn.zone ....... tts CNAME ftp #tts解析结果与ftp解析结果一致 [root@svr7 /]# !sys systemctl restart named 客户端验证 [root@pc207 ~]# nslookup tts.tedu.cn 四 有规律的泛域名解析 pc1.tedu.cn ----> 192.168.10.1 pc2.tedu.cn ----> 192.168.10.2 pc3.tedu.cn ----> 192.168.10.3 ...... pc50.tedu.cn ----> 192.168.10.50 内置函数: $GENERATE 产生连续的数字 [root@svr7 /]# vim /var/named/tedu.cn.zone ....... $GENERATE 1-50 pc$ A 192.168.10.$ [root@svr7 /]# !sys systemctl restart named [root@svr7 /]# 客户端验证 [root@pc207 ~]# nslookup pc1.tedu.cn [root@pc207 ~]# nslookup pc2.tedu.cn [root@pc207 ~]# nslookup pc18.tedu.cn [root@pc207 ~]# nslookup pc50.tedu.cn ############################################## DNS服务器常见的资源解析记录都有那些? NS解析记录 A解析记录 CNAME解析记录 ############################################### DNS子域授权 ,qq.com域名为例 父域:www.qq.com 子域:www.bj.qq.com 父域的DNS服务器为虚拟机A,负责解析qq.com 子域的DNS服务器为虚拟机B,负责解析bj.qq.com 虚拟机B 1.安装软件包 [root@pc207 ~]# yum -y install bind-chroot bind 2.修改配置文件/etc/named.conf [root@pc207 ~]# cp /etc/named.conf /root/named.bak [root@pc207 ~]# vim /etc/named.conf options { directory "/var/named"; #指定地址库文件路径 }; zone "bj.qq.com" IN { #指定本机负责解析的域名 type master; #本机为权威主DNS服务器 file "bj.qq.com.zone"; #指定地址库文件名字 }; 3.创建地址库文件/var/named/bj.qq.com.zone # vim bj.qq.com.zone bj.qq.com. NS pc207 pc207 A 192.168.4.207 www A 5.5.5.5 4.重起named服务 # systemctl restart named ############################################### 子域授权 通过父域的DNS服务器为虚拟机A,能够解析www.bj.qq.com 虚拟机A: [root@svr7 /]# vim /var/named/qq.com.zone qq.com. NS svr7 bj.qq.com. NS pc207 svr7 A 192.168.4.7 pc207 A 192.168.4.207 www A 3.3.3.3 ftp A 4.4.4.4 [root@svr7 /]#systemctl restart named [root@pc207 /]# nslookup www.bj.qq.com 192.168.4.7 Server: 192.168.4.7 Address: 192.168.4.7#53 Non-authoritative answer: #非权威解答 Name: www.bj.qq.com Address: 5.5.5.5 递归查询: 客户端向首选DNS服务器寻求解析,首选DNS服务器与其他DNS服务器交互,最终将解析结果,带回来的过程 options { directory "/var/named"; recursion no; #禁止递归 }; [root@pc207 /]# dig www.bj.qq.com 192.168.4.7 迭代查询:首选DNS服务器与其他DNS服务器交互 ################################################ 直接起到DNS解析的功能(只能对本机解析) /etc/hosts 主机名映射文件(本地主机名与IP地址对应关系) [root@svr7 /]# vim /etc/hosts [root@svr7 /]# tail -1 /etc/hosts 192.168.4.110 www.360.com [root@svr7 /]# ping www.360.com /etc/hosts(DNS解析过程中,最高优先级) 客户端解析域名顺序: 1./etc/hosts 2./etc/resolv.conf 3.找寻DNS服务器 ############################################### 缓存DNS: 利用内存进行缓存解析记录,加速解析 真机搭建缓存DNS服务器 1.搭建Yum仓库 [root@room9pc01 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@room9pc01 ~]# ls /iso/ CentOS-7-x86_64-DVD-1708.iso [root@room9pc01 ~]# mkdir /dvd/ [root@room9pc01 ~]# mount /iso/CentOS-7-x86_64-DVD-1708.iso /dvd/ # ls /dvd/ # cd /etc/yum.repos.d/ # mkdir repo # mv *.repo repo # vim dvd.repo [dvd] name=CentOS7.4 baseurl=file:///dvd #指定本地Yum enabled=1 gpgcheck=0 # yum -y install bind bind-chroot 2.查看达内 内网DNS服务器地址 [root@room9pc01 /]# cat /etc/resolv.conf nameserver 172.40.1.10 [root@room9pc01 /]# 3.修改DNS服务器主配置文件,指定转发给内网DNS服务器 [root@room9pc01 /]# vim /etc/named.conf options { directory "/var/named"; forwarders { 172.40.1.10; }; }; 4. 重起named服务 [root@room9pc01 /]# systemctl restart named 5.在虚拟机上验证: [root@svr7 /]# nslookup www.taobao.com 192.168.4.254 ################################################################### Split分离解析(视图解析) 什么是分离解析 • 当收到客户机的DNS查询请求的时候 – 能够区分客户机的来源地址 – 为不同类别的客户机提供不同的解析结果(IP地址) – 为不同的客户端,提供最近最适合的服务器 • 根据源地址集合将客户机分类 – 不同客户机获得不同结果(待遇有差别) 注意事项: 1.客户端必须找到,自己的分类,需要管理员分类合理 2.view客户端由上及下,匹配及停止 3.所有的zone都必须在view中 view "haha" { match-clients { 192.168.4.207; }; zone "12306.cn" IN { ...... 地址库1; }; }; view "xixi" { match-clients { 192.168.4.110; }; zone "12306.cn" IN { ...... 地址库2; }; }; view "hehe" { match-clients { any; }; zone "12306.cn" IN { ...... 地址库3; }; }; ########################################## 案例需求及要点 • 环境及需求 – 权威DNS:svr7.tedu.cn 192.168.4.7 – 负责区域:tedu.cn – A记录分离解析 —— 以 www.tedu.cn 为例 客户机来自 解析结果 192.168.4.207----------》 192.168.4.100 其他地址 ----------》 1.2.3.4 view nsd { match-clients { 192.168.4.207; }; zone "tedu.cn" { type master; file "tedu.cn.zone"; }; }; view other { match-clients { any; }; zone "tedu.cn" { type master; file "tedu.cn.other"; }; }; 请去建立相应的地址库文件,写入不同的解析结果 ################################################3 acl地址列表 • 为大批量的客户机地址建立列表 acl "liantong" { IP地址1; IP地址2; .. .. 网段1; 网段2; .. .. .. .. }; acl "tietong" { IP地址3; IP地址4; .. .. 网段3; 网段4; .. .. .. .. }; acl test { 192.168.4.207; 192.168.4.1; 192.168.4.2; 192.168.4.3; }; view nsd { match-clients { test; }; zone "tedu.cn" { type master; file "tedu.cn.zone"; }; }; ############################################### 补充:多区域的分离解析 每一个view中,zone的个数保持一致,域名的个数保持一致 [root@svr7 /]# vim /etc/named.conf options { directory "/var/named"; }; acl test { 192.168.4.207; 192.168.4.1; 192.168.4.2; 192.168.4.3; }; view nsd { match-clients { test; }; zone "tedu.cn" { type master; file "tedu.cn.zone"; }; zone "sina.com" { type master; file "sina.com.zone"; }; }; view other { match-clients { any; }; zone "tedu.cn" { type master; file "tedu.cn.other"; }; zone "sina.com" { type master; file "sina.com.other"; }; }; 请去建立相应的地址库文件,写入不同的解析结果 RAID磁盘阵列 RAID阵列概述 • 廉价冗余磁盘阵列 – Redundant Arrays of Inexpensive Disks – 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘 – 阵列的价值:提升I/O效率、硬件级别的数据冗余 – 不同RAID级别的功能、特性各不相同 • RAID 0,条带模式 – 同一个文档分散存放在不同磁盘 – 并行写入以提高效率 – 至少由两块磁盘组成 • RAID 1,镜像模式 – 一个文档复制成多份,分别写入不同磁盘 – 多份拷贝提高可靠性,效率无提升 – 至少由两块磁盘组成 • RAID5,高性价比模式 – 相当于RAID0和RAID1的折中方案 – 需要至少一块磁盘的容量来存放校验数据 – 至少由三块磁盘组成 • RAID6,高性价比/可靠模式 – 相当于扩展的RAID5阵列,提供2份独立校验方案 – 需要至少两块磁盘的容量来存放校验数据 – 至少由四块磁盘组成 RAID0/1/10 • RAID 0+1/RAID 1+0 – 整合RAID 0、RAID 1的优势 – 并行存取提高效率、镜像写入提高可靠性 – 至少由四块磁盘组成 ################################################# 进程管理 程序:静态的代码,仅占硬盘空间 进程:动态的代码,占用CPU、内存资源 PID:进程的编号 父进程/子进程 查看进程树 • pstree — Processes Tree – 格式:pstree [选项] [PID或用户名] • 常用命令选项 – -a :显示完整的命令行 – -p :列出对应PID编号 systemd:上帝进程是所有进程的父进程 PID编号为1 [root@svr7 ~]# pstree [root@svr7 ~]# pstree lisi bash───vim [root@svr7 ~]# pstree -p lisi bash(13952)───vim(13996) [root@svr7 ~]# pstree -ap lis 查看进程快照 • ps — Processes Snapshot – 格式:ps [选项]... • 常用命令选项 – aux:显示当前终端所有进程(a)、当前用户在所有 终端下的进程(x), 以用户格式输出(u) – -elf:显示系统内所有进程(-e)、以长格式输出(-l) 信息、包括最完整的进程信息(-f) ps aux :输出进程信息非常详细 – 列出正在运行的所有进程 ps -elf :输出进程信息比较详细,有该进程的父进程信息 – 列出正在运行的所有进程 tree 树 安装包 tree (可以查看目录里面树状表示) 例: mkdir /a cat /etc/passwd > a/a.txt tree a PPID:父进程的PID号 ############################################################### WC 统计 用法:wc -l 请统计Linux一共有多少个用户? [root@svr7 ~]# wc -l /etc/passwd #统计有多少行 42 /etc/passwd 请统计/etc目录下以tab结尾的文件,一共有多少个? # find /etc/ -name "*tab" -type f # find /etc/ -name "*tab" -type f | wc -l 请统计/etc目录下以 .conf 结尾的文件,一共有多少个? # find /etc/ -name "*.conf" -type f # find /etc/ -name "*.conf" -type f | wc -l 请统计Linux正在运行的进程,一共有多少个? [root@svr7 ~]# ps aux | wc -l ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 进程动态排名 top 交互式工具 – 格式:top [-d 刷新秒数] [-U 用户名] 按键盘上 P(大写)按照CPU排序 按键盘上 M(大写)按照内存排序 检索进程 • pgrep — Process Grep • 常用命令选项 – -l :输出进程名,而不仅仅是 PID – -U :检索指定用户的进程 – -t :检索指定终端的进程 – -x :精确匹配完整的进程名 [root@svr7 ~]# who #当前系统有哪些用户正在登陆 pts:图形命令行终端 [root@svr7 ~]# pgrep crond [root@svr7 ~]# pgrep -l crond [root@svr7 ~]# pgrep -l log [root@svr7 ~]# pgrep -lU lisi [root@svr7 ~]# pgrep -lU lisi -t pts/3 [root@svr7 ~]# pgrep -lU lisi -t pts/2 ############################################################ 控制进程 • 后台启动 – 在命令行末尾添加“&”符号,(运行并转入后台) • Ctrl + z 组合键 – 挂起当前进程(暂停并转入后台) • jobs 命令 – 查看后台任务列表 • fg 命令 – 将后台任务恢复到前台运行 • bg 命令 – 激活后台被挂起的任务 [root@svr7 ~]# sleep 800 & #运行放入后台 [root@svr7 ~]# jobs #查看后台运行的进程 [root@svr7 ~]# sleep 1000 ^Z #按键盘上 Ctrl + Z 暂停放入后台 [2]+ 已停止 sleep 1000 [root@svr7 ~]# jobs #查看后台运行的进程 [root@svr7 ~]# bg 2 #将后台编号为2的进程继续运行 [root@svr7 ~]# jobs [root@svr7 ~]# fg 2 #将后台编号为2的进程,恢复到前台 sleep 1000 ^C #按键盘上 Ctrl + C 结束 [root@svr7 ~]# jobs [root@svr7 ~]# fg 1 #将后台编号为1的进程,恢复到前台 sleep 800 ^C #按键盘上 Ctrl + C 结束 [root@svr7 ~]# job kill 杀死进程 • 干掉进程的不同方法 – Ctrl+c 组合键,中断当前命令程序 – kill [-9] PID... – killall 进程名... – pkill 查找条件 进程调度及终止的主要命令工具: 命令行 &:将命令行在后台运行 Ctrl + z 组合键:挂起当前进程(暂停并转入后台) jobs:列出当前用户当前终端的后台任务 bg 编号:启动指定编号的后台任务 fg 编号:将指定编号的后台任务调入前台运行 kill [-9] PID...:杀死指定PID值的进程 kill [-9] %n:杀死第n个后台任务 killall [-9] 进程名...:杀死指定名称的所有进程 pkill:根据指定的名称或条件杀死进程 [root@svr7 ~]# sleep 800 & [root@svr7 ~]# sleep 900 & [root@svr7 ~]# jobs [root@svr7 ~]# jobs -l [root@svr7 ~]# kill 15519 [root@svr7 ~]# jobs -l [root@svr7 ~]# killall sleep [root@svr7 ~]# jobs -l w 显示已经登录的用户及正在进行的操作 [root@room9pc01 ~]# w 15:55:58 up 7:19, 2 users, load average: 0.47, 0.35, 0.22 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root :0 :0 08:38 ?xdm? 54:57 0.30s /usr/libexec/g root pts/0 :0 15:41 6.00s 0.08s 0.00s w who 显示已经登录的用户名、终端名称、登录时间及登录IP [root@room9pc01 ~]# who root :0 2019-01-24 08:38 (:0) whoami 显示当前用户的用户名 [root@room9pc01 ~]# who root :0 2019-01-24 08:38 (:0) uptime 执行该命令将会显示出系统的当前时间、上线时间、当前的用户数量以及过去1、5、15分钟内的系统负载 [root@room9pc01 ~]# uptime 17:44:35 up 9:07, 3 users, load average: 0.41, 0.20, 0.16 free 查看实际内存占用(和可用空间)内存利用率 选项:-h (人类易读) 或者:-k (KB)-g (GB) -m(MB) -tera(TB) 默认以KB为单位 -l 按内存高低总计信息 -t 在linux后面加-t 显示linux 全部内存 [root@room9pc01 ~]# free -h total used free shared buff/cache available Mem: 15G 1.7G 11G 95M 2.5G 13G Swap: 0B 0B 0B total 内存总数: 128 used 已经使用的内存数: 119 free 空闲的内存数: 8 shared 当前已经废弃不用,总是0 buffers Buffer Cache内存数: 1 cached Page Cache内存数: 22 例:free -m free -hs 3 #每3秒显示一次统计内存利用率 free -l free 命令使用 /proc/meminfo 作为基准来显示内存利用率信息 ############################################################ 内核及系统日志 • 由系统服务rsyslog统一记录/管理 • 常见的日志文件 /var/log/messages 记录内核消息、各种服务的公共消息 /var/log/dmesg 记录系统启动过程的各种消息 /var/log/cron 记录与cron计划任务相关的消息 /var/log/maillog 记录邮件收发相关的消息 /var/log/secure 记录与访问限制相关的安全消息 日志分析 tailf:实时跟踪日志 tail -f • 通用分析工具 – tail、tailf、less、grep等文本浏览/检索命令 – awk、sed等格式化过滤工具 用户登录分析 • users who w 命令 – 查看已登录的用户信息,详细度不同 • last、lastb 命令 – 查看最近登录成功/失败的用户信息 [root@svr7 ~]# users [root@svr7 ~]# who [root@svr7 ~]# w [root@svr7 ~]# last -2 #最近登陆成功的2条用户信息 [root@svr7 ~]# lastb -2 #最近登陆失败的2条用户信息 日志消息的优先级 • Linux内核定义的事件紧急程度 – 分为 0~7 共8种优先级别 – 其数值越小,表示对应事件越紧急/重要 0 EMERG(紧急) 会导致主机系统不可用的情况 1 ALERT(警告) 必须马上采取措施解决的问题 2 CRIT(严重) 比较严重的情况 3 ERR(错误) 运行出现错误 4 WARNING(提醒) 可能会影响系统功能的事件 5 NOTICE(注意) 不会影响系统但值得注意 6 INFO(信息) 一般信息 7 DEBUG(调试) 程序或系统调试信息等 使用journalctl工具 • 提取由 systemd-journal 服务搜集的日志 – 主要包括内核/系统日志、服务日志 • 常见用法 – journalctl | grep 关键词 – journalctl -u 服务名 [-p 优先级] – journalctl -n 消息条数 – journalctl --since="yyyy-mm-dd HH:MM:SS" -- until="yyyy-mm-dd HH:MM:SS" [root@svr7 ~]# yum -y install httpd [root@svr7 ~]# systemctl restart httpd #查看关于httpd服务日志 [root@svr7 ~]# journalctl -u httpd systemctl 控制 • Linux系统和服务管理器 – 是内核引导之后加载的第一个初始化进程(PID=1) – 负责掌控整个Linux的运行/服务资源组合 对于服务的管理 systemctl restart 服务名 #重起服务 systemctl start 服务名 #开启服务 systemctl stop 服务名 #停止服务 systemctl status 服务名 #查看服务当前的状态 systemctl enable 服务名 #设置服务开机自启动 systemctl disable 服务名 #设置服务不开机自启动 systemctl enable 服务名 #查看是否开机自启动 [root@svr7 /]# systemctl is-enabled httpd disabled #禁止开机启动 [root@svr7 /]# systemctl enable httpd [root@svr7 /]# systemctl is-enabled httpd enabled #允许开机启动 [root@svr7 /]# systemd • 一个更高效的系统&服务管理器 – 开机服务并行启动,各系统服务间的精确依赖 – 服务目录:/lib/systemd/system/ [root@svr7 /]# vim /lib/systemd/system/httpd.service RHEL6:运行级别 200 0:关机 0 1:单用户模式(基本功能的实现,破解Linux密码)50 2:多用户字符界面(不支持网络) 80 3:多用户字符界面(支持网络)服务器默认的运行级别 100 4:未定义 5:图形界面 190 6:重起 0 切换运行级别:init 数字 RHEL7:运行模式 字符模式:multi-user.target 图形模式:graphical.target 当前直接切换到图形模式 [root@svr7 /]# systemctl isolate graphical.target 当前直接切换到字符模式 [root@svr7 /]# systemctl isolate multi-user.target 查看每次开机默认进入模式 # systemctl get-default multi-user.target 设置永久策略,每次开机自动进入graphical.target # systemctl set-default graphical.target # reboot ################################################# DHCP 部署DHCP服务器 • Dynamic Host Configuration Protocol – 动态主机配置协议,由 IETF(Internet 网络工程师任 务小组)组织制定,用来简化主机地址分配管理 • 主要分配以下入网参数 – IP地址/子网掩码/广播地址 – 默认网关地址、DNS服务器地址 • DHCP地址分配的四次会话(广播进行,先到先得) – DISCOVERY --> OFFER --> REQUEST -->ACK 在一个网络中只能有一台DHCP • 装软件包 dhcp • 配置文件 /etc/dhcp/dhcpd.conf • 起服务 dhcpd 虚拟机A: 1.安装软件包 [root@svr7 /]# yum -y install dhcp 2.修改配置文件 [root@svr7 /]# vim /etc/dhcp/dhcpd.conf #读入其他文件内容 :r /usr/share/doc/dhcp*/dhcpd.conf.example subnet 192.168.4.0 netmask 255.255.255.0 { 分配的网段 range 192.168.4.20 192.168.4.100; 分配范围 option domain-name-servers 192.168.4.7; 分配DNS服务器 option routers 192.168.4.254; 分配网关地址 default-lease-time 600; 默认租约时间 max-lease-time 7200; 最大租约时间 } 3.重起服务 [root@svr7 /]# systemctl restart dhcpd ################################################ PXE 网络装机概述 网络装机的优势 • 规模化:同时装配多台主机 • 自动化:装系统、配置各种服务 • 远程实现:不需要光盘、U盘等物理安装介质 • 需要哪些服务组件? – DHCP服务,分配IP地址、定位引导程序 – TFTP服务,提供引导程序下载 – HTTP服务,提供yum安装源 ################################################ 一、搭建配置DHCP服务 1.指定写一个服务器地址 [root@svr7 /]# vim /etc/dhcp/dhcpd.conf subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.20 192.168.4.100; option domain-name-servers 192.168.4.7; option routers 192.168.4.254; default-lease-time 600; max-lease-time 7200; next-server 192.168.4.7; #指定下一个服务器地址 filename "pxelinux.0"; #指定引导文件名称 } 2.重起服务 [root@svr7 /]# systemctl restart dhcpd pxelinux.0:网卡引导文件,安装说明书,二进制文件 安装一个软件,会自动生成该文件 二、配置TFTP服务 tftp:简单的文件传输协议 默认端口为: 69 默认共享路径:/var/lib/tftpboot 1.安装tftp-server软件 [root@svr7 /]# yum -y install tftp-server 2.重起tftp服务 [root@svr7 /]# systemctl restart tftp [root@svr7 /]# systemctl enable tftp 3.部署pxelinux.0文件 # yum provides */pxelinux.0 #查询那个软件包产生该文件 # yum -y install syslinux #安装软件 # rpm -ql syslinux | grep pxelinux.0 #查看安装清单 # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # ls /var/lib/tftpboot/ 4.部署菜单文件 默认存放路径/var/lib/tftpboot/pxelinux.cfg/ pxelinux.0--》/var/lib/tftpboot/pxelinux.cfg/default # mkdir /var/lib/tftpboot/pxelinux.cfg # mount /dev/cdrom /mnt # ls /mnt/ # cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # ls -l /var/lib/tftpboot/pxelinux.cfg/default # chmod u+w /var/lib/tftpboot/pxelinux.cfg/default # ls -l /var/lib/tftpboot/pxelinux.cfg/default ################################################# 在真机上,利用clone-vm7新建一台虚拟机,名字:PXE-Server 1.设置防火墙为trusted 2.当前及永久关闭SELinux 3.配置IP地址:192.168.4.122/24 4.搭建Yum仓库 5.主机名:PXE.tedu.cn ###################################################### 搭建一键装机平台 一 、搭建DHCP服务 1.安装dhcp 2.修改配置文件 subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.180 192.168.4.230; next-server 192.168.4.122; filename "pxelinux.0"; } 3.重起dhcpd服务,设置开机自起动 ##################################################### 二、搭建tftp 1.安装tftp-server 2.启动tftp服务,设置开机自起动 3. 部署pxeliunx.0 # yum provides */pxelinux.0 # rpm -ql syslinux | grep pxelinux.0 # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # ls /var/lib/tftpboot/ 4. 部署光盘内容 [root@PXE ~]# yum -y install httpd [root@PXE ~]# mkdir /var/www/html/rhel6 [root@PXE ~]# mkdir /var/www/html/rhel7 [root@PXE ~]# mount /dev/cdrom /mnt/ #光盘为rhel7 [root@PXE ~]# ls /mnt/ [root@PXE ~]# cp -r /mnt/* /var/www/html/rhel7/ [root@PXE ~]# umount /mnt [root@PXE ~]# mount /dev/cdrom /mnt/ #光盘为rhel6 [root@PXE ~]# ls /mnt/ [root@PXE ~]# cp -r /mnt/* /var/www/html/rhel6/ [root@PXE ~]# du -sh /var/www/html/rhel7/ [root@PXE ~]# du -sh /var/www/html/rhel6/ 5.部署rhel7、rhel6 的启动内核与驱动程序 # mkdir /var/lib/tftpboot/rhel6 # mkdir /var/lib/tftpboot/rhel7 # cp /var/www/html/rhel6/isolinux/vmlinuz /var/www/html/rhel6/isolinux/initrd.img /var/lib/tftpboot/rhel6/ # cp /var/www/html/rhel7/isolinux/vmlinuz /var/www/html/rhel7/isolinux/initrd.img /var/lib/tftpboot/rhel7/ # ls /var/lib/tftpboot/rhel7 # ls /var/lib/tftpboot/rhel6 6.部署图形模块与背景 # cp /var/www/html/rhel6/isolinux/vesamenu.c32 /var/lib/tftpboot/ # rpm -ql syslinux | grep jpg # cp /usr/share/doc/syslinux-4.05/sample/syslinux_splash.jpg /var/lib/tftpboot/ # ls /var/lib/tftpboot/ 7.部署菜单文件 # mkdir /var/lib/tftpboot/pxelinux.cfg # cp /var/www/html/rhel6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # chmod 644 /var/lib/tftpboot/pxelinux.cfg/default # ls -l /var/lib/tftpboot/pxelinux.cfg/default 8.修改菜单文件内容 # vim /var/lib/tftpboot/pxelinux.cfg/default ...... menu background syslinux_splash.jpg menu title Welcome to PXE Server! ...... label linux menu label Install RHEL7.2 kernel rhel7/vmlinuz append initrd=rhel7/initrd.img label vesa menu label Install RHEL6.7 kernel rhel6/vmlinuz append initrd=rhel6/initrd.img label local menu label Boot from local drive menu default #读秒结束最后默认选择 localboot 0xffff ##################################################### 三、搭建httpd服务共享光盘所有内容 1.启动服务 [root@PXE /]# systemctl restart httpd [root@PXE /]# systemctl enable httpd 2.测试访问 [root@PXE /]# firefox http://192.168.4.122/rhel6 [root@PXE /]# firefox http://192.168.4.122/rhel7 #################################################### 四、生成ks文件 [root@PXE /]# yum -y install system-config-kickstart 修改Yum客户端配置文件的标示名 [development] [root@PXE /]# system-config-kickstart #先看“软件包选择” 软件包选择: 在“桌面”一栏选择----->第一个为GNOME 则为rhel7 RHEL7的文件系统为xfs ##################################################### [root@PXE ~]# vim /etc/yum.repos.d/rhel7.repo 执行向rhel6的光盘 [development] name=rhel7 baseurl=http://192.168.4.122/rhel6 enabled=1 gpgcheck=0 [root@PXE ~]# yum clean all #清空Yum缓存 [root@PXE ~]# system-config-kickstart 软件包选择: 在“桌面”一栏选择----->第一个为KDE桌面 则为rhel6 RHEL6的文件系统为ext4 [root@PXE ~]# ls /root/ks* /root/ks6.cfg /root/ks7.cfg ############################################# 五、指定ks应答文件 1.共享ks应答文件 [root@PXE ~]# cp /root/ks* /var/www/html/ [root@PXE ~]# ls /var/www/html/ 2.修改菜单文件 # vim /var/lib/tftpboot/pxelinux.cfg/default label linux menu label Install RHEL7.2 kernel rhel7/vmlinuz append initrd=rhel7/initrd.img ks=http://192.168.4.122/ks7.cfg label vesa menu label Install RHEL6.7 kernel rhel6/vmlinuz append initrd=rhel6/initrd.img ks=http://192.168.4.122/ks6.cfg #################################################### Cobbler 装机平台,不同版本的多系统的安装 一 安装一个CentOS虚拟机 真机: [root@room9pc01 ~]# ls /iso/ CentOS-7-x86_64-DVD-1708.iso 虚拟机要求: 1.硬盘大小50G 2.网络类型private1 3.软件包选择 "带GUI的服务器" 4.分区选择 "自动分区" 5.将CentOS放入光驱设备,搭建本地Yum仓库 6.配置IP地址:192.168.4.120/24 7.配置主机名:Cobbler.tedu.cn ################################################## zip压缩与解压缩(跨平台) 压缩: zip -r /路径/压缩包名.zip 被压缩的源文档 解压缩: unzip /路径/压缩包名.zip -d 指定释放位置 # zip -r /opt/nsd.zip /home /etc/passwd # ls /opt/ # unzip /opt/nsd.zip -d /opt/rh/ # ls /opt/rh # zip -r /opt/test.zip /etc/shadow /etc/fstab # ls /opt/ # unzip /opt/test.zip -d /opt/rh/ ################################################### 二、虚拟机设置 1.设置防火墙为trusted # firewall-cmd --set-default-zone=trusted 2.当前及永久设置SELinux状态为permissive [root@Cobbler ~]# setenforce 0 #当前临时关闭 [root@Cobbler ~]# getenforce [root@Cobbler ~]# vim /etc/selinux/config SELINUX=permissive 三、利用scp真机传递Cobbler.zip包到虚拟机192.168.4.120中 # scp /root/桌面/Cobbler.zip root@192.168.4.120:/root/ ################################################## 重设root密码 案例1:为虚拟机 server 重设管理密码 1)重启系统,进入 recovery 恢复模式(修复模式) 按e键,找到 linux16 行,末尾添加 rd.break console=tty0 按 ctrl + x 启动 2)以可写方式重新挂载 /sysroot,并切换到此环境 switch_root# mount -o remount,rw /sysroot switch_root# chroot /sysroot sh-3.2# 3)将root用户的密码设置为 redhat # echo redhat | passwd --stdin root 4)重设SELinux安全标签(安全增强版Linux) # touch /.autorelabel #让 SElinux 失忆 5)先后执行 exit、reboot 完成修复 # exit # reboot ################################################## 四、搭建Cobbler装机平台 Cobbler概述软件,管理dhcp、tftp、Web服务 自由的导入镜像与ks应答文件 1.解压Cobbler.zip包 # unzip /root/Cobbler.zip -d / # cd /Cobbler/ # ls # unzip /Cobbler/cobbler.zip -d /opt/ # ls /opt/cobbler ##################################################### 五、安装cobbler主程序、工具包等 [root@cobbler /]# yum -y install /opt/cobbler/*.rpm ################################################################ cobbler网络装机部署 1.安装软件 cobbler cobbler-web dhcp tftp-server pykickstart httpd tftp-server cobbler #cobbler程序包 cobbler-web #cobbler的web服务包 pykickstart #cobbler检查kickstart语法错误 httpd #Apache web服务 dhcp #dhcp服务 tftp-server #tftp服务 2.配置cobbler [root@cobbler /]# vim /etc/cobbler/settings next_server: 192.168.4.120 #设置下一个服务器还为本机 server: 192.168.4.120 #设置本机为cobbler服务器 manage_dhcp: 1 #设置cobbler管理dhcp服务 pxe_just_once: 1 #防止客户端重复安装操作系统 开机启动: 匹配及停止 1.硬盘启动 2.光驱设备 3.U盘 4.网络引导 3.配置cobbler的dhcp [root@svr7 /]# vim /etc/cobbler/dhcp.template :%s /旧/新/g #全文替换 :%s /192.168.1/192.168.4/g #全文替换 5 次替换,共 4 行 4.绝对路径解压cobbler_boot.tar.gz #众多的引导文件 # tar -tf /Cobbler/cobbler_boot.tar.gz #查看包里面内容 # tar -xPf /Cobbler/cobbler_boot.tar.gz #绝对路径释放 # ls /var/lib/cobbler/loaders/ 5.启动相关服务 [root@svr7 /]# systemctl restart cobblerd [root@svr7 /]# systemctl enable cobblerd [root@svr7 /]# systemctl restart httpd [root@svr7 /]# systemctl enable httpd [root@svr7 /]# systemctl restart tftp [root@svr7 /]# systemctl enable tftp [root@svr7 /]# systemctl restart rsyncd #同步服务 [root@svr7 /]# systemctl enable rsyncd 6.同步刷新cobbler配置 [root@svr7 /]# cobbler sync ...... *** TASK COMPLETE *** # firefox https://192.168.4.120/cobbler_web 用户名:cobbler 密码:cobbler ######################################################################################################### cobbler应用 cobbler import --path=挂载点 --name=导入系统命名(随意起) 导入安装镜像数据 # mount /dev/cdrom /dvd # ls /dvd/ # cobbler import --path=/dvd --name=CentOS7 cobbler导入的镜像放在:/var/www/cobbler/ks_mirror [root@cobbler /]# cobbler list #查看有哪些系统 distros: CentOS7-x86_64 #安装客户端至少2G内存 profiles: CentOS7-x86_64 ############################################## 删除 # cobbler list # cobbler profile remove --name=CentOS7-x86_64 #删除菜单信息 # cobbler distro remove --name=CentOS7-x86_64 #删除镜像信息 ########################################### # umount /dvd/ # mount /dev/cdrom /dvd 将光盘换成RHEL7 # ls /dvd/ 安装完成机器 默认root 密码 cobbler ############################################################################################################ 自定义应答文件:开头注释行删除 [root@cobbler ~]# system-config-kickstart #生成ks文件 必须默认kickstart文件存放位置:/var/lib/cobbler/kickstarts/ [root@cobbler ~]# cobbler list 修改kickstart文件: [root@cobbler ~]# cobbler profile edit --name=CentOS7.4-A --kickstart=/var/lib/cobbler/kickstarts/自定义.cfg [root@cobbler ~]# cobbler profile report [root@cobbler ~]# cobbler sync #同步配置 ############################################################################################### nginx 源码安装Nginx需要提前安装依赖包软件: gcc,openssl-devel,pcre-devel 加密nginx (模块 --with-http_ssl_module) auth_basic ''Input Password'' auth_basic_user_file "/usr/local/nginx/pass" 1.yum -y install httpd-tools htpasswd -c /usr/local/nginx/pass 用户名 (第一个用户要加c pass 这个文件是自己自由创建的) LNMP (Linux Nginx MySQL/MariaDB php/python) yum -y install gcc openssl-devel pcre-devel yum -y install mariadb mariadb-server mariadb-devel (MariaDB) yum -y install php php-mysql yum -y install php-fpm-5.4.16-42.el7.x86_64.rpm (另外下载) 步骤: 一.php-fpm配置文件(相当于配置Nginx+fastCGI) [root@proxy etc]# vim /etc/php-fpm.d/www.conf [www] listen = 127.0.0.1:9000 //PHP端口号 pm.max_children = 32 //最大进程数量 pm.start_servers = 15 //最小进程数量 pm.min_spare_servers = 5 //最少需要几个空闲着的进程 pm.max_spare_servers = 32 //最多允许几个进程处于空闲状态 二.修改Nginx配置文件并启动服务 root@proxy ~# vim /usr/local/nginx/conf/nginx.conf location / { root html; index index.php index.html index.htm; #设置默认首页为index.php,当用户在浏览器地址栏中只写域名或IP,不说访问什么页面时,服务器会把默认首页index.php返回给用户 } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; #将请求转发给本机9000端口,PHP解释器 fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi.conf; } root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload 三:创建PHP页面,测试LNMP架构能否解析PHP页面 1)创建PHP测试页面1,可以参考lnmp_soft/php_scripts/test.php: [root@proxy ~]# vim /usr/local/nginx/html/test1.php <?php $i="This is a test Page"; echo $i; ?> ------------------------------------------------------------------------------------ 2)创建PHP测试页面,连接并查询MariaDB数据库。 可以参考lnmp_soft/php_scripts/mysql.php: [root@proxy ~]# vim /usr/local/nginx/html/test2.php <?php $mysqli = new mysqli('localhost','root','密码','mysql'); //注意:root为mysql账户名称,密码需要修改为实际mysql密码,无密码则留空即可 //localhost是数据库的域名或IP,mysql是数据库的名称 if (mysqli_connect_errno()){ die('Unable to connect!'). mysqli_connect_error(); } $sql = "select * from user"; $result = $mysqli->query($sql); while($row = $result->fetch_array()){ printf("Host:%s",$row[0]); printf("</br>"); printf("Name:%s",$row[1]); printf("</br>"); } ?> ------------------------------------------------------------------------------------ 地址重写 rewrite 旧地址 新地址 [选项]; last 不再读其他rewrite break 不再读其他语句,结束请求 redirect 临时重定向 permament 永久重定向 步骤一:修改配置文件(访问a.html重定向到b.html) 1)修改Nginx服务配置 server { listen 80; server_name localhost; rewrite /a.html /b.html; #修改配置文件(访问a.html重定向到b.html) 步骤二:访问a.html重定向到b.html(跳转地址栏) 1)修改Nginx服务配置: [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf .. .. server { listen 80; server_name localhost; rewrite /a.html /b.html redirect; 步骤三:修改配置文件(访问192.168.4.5的请求重定向至www.tmooc.cn) 1) 修改Nginx服务配置 [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf .. .. server { listen 80; server_name localhost; rewrite ^/ http://www.baidu.com; location / { root html; index index.html index.htm; 步骤四:修改配置文件(访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面) 1) 修改Nginx服务配置 rewrite ^/(.*)$ http://www.tmooc.cn/$1; 步骤五:修改配置文件(实现curl和火狐访问相同链接返回的页面不同) server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } #这里,~符号代表正则匹配,*符号代表不区分大小写 if ($http_user_agent ~* firefox) { //识别客户端firefox浏览器 rewrite ^(.*)$ /firefox/$1; lftp 命令行连接ftp 包:lftp yum -y install lftp 用法:lftp +ip cd :切换位置 ls 查看 pwd/lpwd 可看当前位置 下载: get或者 mget get 用于下载一个文件, mget 用于下载多个文件 6、上传 put、mput put用于上传一个文件,mput用于上传多个文件 git 版本控制系统 从现有仓库克隆 git clone git://github.com/schacon/grit.git 从克隆回来变成新的目录库 git clone git://github.com/schacon/grit.git mygrit 检查当前文件状态 git status (一般要跟踪才打这命令) 跟踪新文件 git add 文件名 查看前后的变化 git diff 提交更新 git commit 移除文件(要从git中移除某个文件) git rm git rm --cached readme.txt 移动 mv git 图形化工具 :gitk
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。