systemctl get-default systemctl set-default graphical.target 由命令行模式更改为图形界面模式systemctl set-default multi-user.target 由图形界面模式更改为命令行模式
systemctl restart network.service:重启网卡 ascii vim /etc/sysconfig/network-scription/ 修改ip地址 echo 123|passwd --stdin root 修改口令 (centos7) 添加相应组件 rpm -i /run/media/root/CentOS\ 7\ x86_64/Packages/screen-4.1.0-0.25.20120314git3c2946.el7.x86_64.rpm (centos6) 添加相应组件 rpm -ivh /media/CentOS_6.10_Final/Packages/screen-4.0.3-19.el6.x86_64.rpm –rzsz rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm (黏贴互传) 【entos6】 rz安装路径 rpm -ivh /media/CentOS_6.10_Final/Packages/lrzsz-0.12.20 –finger(centos7):rpm -ivh /run/media/root/CentOS\ 7 x86_64/Packages/finger-0.17-52.el7.x86_64.rpm –patch rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/patch-2.7.1-8.el7.x86_64.rpm (备份补丁) –tree rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm (文件树形结构显示) –nmap rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/nmap-6.40-13.el7.x86_64.rpm (扫描网络工具)
字体颜色格式\e[F;Bm…\e[0m F B 前="\e[1;31m]" 后="\e[m]" 红色高亮 30 40 黑色 31 41 红色 32 42 绿色 33 43 黄色 34 44 蓝色 35 45 紫红色 36 46 青蓝色 37 47 白色 ----------------------------------------------------------------------I 第二节课 2018年9月19日09:45:01 ----------------------------------------------------------------------I 主分区 一个硬盘最多4个 只能有1个活动 不可分割 1-4 扩展分区 一个硬盘最多一个 (划分更小的逻辑分区) 1-4 扩展+主分区<4 逻辑分区 5以后 fdisk -l /dev/sda 查看sda的分区情况 du -sh /boot:查看boot目录有多大 分区规划:/ 50G /boot 1G /data 30G swap交换分区 7.5:4G 6.10:2G (win 拿文件来模拟内存 linux 拿分区模拟内存/进行交换) sha1sum /dev/sr0:计算校验码 vmnet1 34网段 192.168.34.1 centos6 34.6 centos7 34.7 本地网卡映射成vmnet0 cat /proc/meminfo:安装系统前查看内存 cat /proc/partitions:安装系统前查看系统硬盘情况 rpm -qa|wc -l:查看包的数量 命令 init 3 5 6 0 runlever startx halt(6关机且断电)(7关机不断电) whoami tty chvt(1-6) id -u uname -r lscpu free -h lsblk mii-tool eth0(网卡) echo $SHELL cat /etc/shells pwd help enable type:判断内外部命令 type enable /bin/csh >:创建空文件 hostname echo $PS1 df hash sleep (秒) 修改命令行提示符头部颜色 /etc/profile.d/env.sh nano etc/motd:登录提示 type -a enable -n显示所有禁用命令 enable -n :禁用命令 which:查看某个外部命令路径 whereis:查看某个外部命令路径及对应帮助文档 系统查找命令对应的方式:内部命令–hash–PATH变量 centos7 nmcli connetion modify ens33 connection.autoconnect yes centos6 其他方法 cat /etc/centos-release:查看系统版本 lsb_release -a:6 查看系统版本 PS1="[\e[1;33m][\u@\h \W]$[\e[0m]" centos6 黄色高亮 背景字体字符 centos7 绿色高亮 PS1路径:/etc/profile.d/env.sh 【练习】 1、显示当前时间,格式:2016-06-18 10:20:30 date “+%F %T” 2、显示前天是星期几 #date -d -2day +%w 3、设置当前日期为2019-08-07 06:05:10 date -s “2019-08-07 06:05:10”
【练习】 1、在本机字符终端登录时,除显示原有信息外,再显示当前登录终端号,主机名和当前时间 who am i 2、今天18:30自动关机,并提示用户 shutdown 18:30 ; wall “system is 18:50 shutdown!!” ----------------------------------------------------------------------I 第三节课 2018年9月21日09:04:22 ----------------------------------------------------------------------I 命令 type which:判断外部命令 hexdump -c :查看底层字符 man ascii echo “ibase=16;obase2;3ab2” |bc: 16进制2进制转换 iconv -l:显示系统中各种字符 iconv -f gb2312 w.txt -o:把w文件转成utf-8 linux能识别的文件 centos6版本:echo /etc/centos-release 内核版本:echo kerner history pwd -P显示真实路径 basename /etc/sysconfig/* 基名 dirname /etc/sysconfig/** 目录名 { } 组合引用,显示打印字串的简单形式 ‘’ 强引用:只显示字符 “”弱引用:能识别变量 绝对引用:能识别命令和变量(用途:一个命令调用另外一个命令时用)$()
ASCII码:计算机内部使用 127位 1字节 UTF-8码:世界通用 2-4字节 TAB补全 ctrl+r 搜索历史 ctrl+g 退出历史 alt加. 恢复上一条命令
查看时区:ll etc/localtime 列出所有的时区列表:timedatectl list-timezones centos7 调整时间:timedatectl set-timezone Asia/Shanghai cal:日历 cal -y:某年日历 cal 08 2008
HISTCONTROL=ignoredups 忽略连续且重复的命令 ignorespace 忽略以空格开头的命令 ignoreboth 上面两个命令的组合 erasedups 删除重复的命令 存放点:etc/profile 或 ~/.bash_profile
外部命令查看帮助 ** --help echo ‘- - - ’ > /sys/class/scsi_host2/Centos 7 x86_64 触发 主机硬件更新 nano etc/DIR_COLOR 修改/定义文件颜色
空格:翻屏 b:向文件首部翻屏 d:向文件尾部半屏 u:向首部半屏 q;退出 #**:跳到第几行 1G:首部 G:尾部 n:下一个 N:上一个 ==配合/和?用的 ?keyword:从当前位置出发,向文件首部搜索关键字 /keyword:从当前位置出发,向文件尾部搜索关键字 man bash > bash.txt:导出bash.txt文件 cat bash.txt sz bash.txt 复制到Windows 下载 sublime可以编辑TXT排版
echo $HISTSIZE cat /etc/profile (查看histsize 1000) . /etc/profile (立即生效) HISTFILE:存放历史文件 history -c:清空历史 history -a:刚添加的命令添加到历史文件后面 history -r:读取历史文件的内容添加到列表 (会全部重复存放) history -w:保存历史列表到指定的历史文件夹(另存为) history -p* *:把命令展示成多行 (命令不记录) $() $() 也可以 history -s *:展开历史参数成一行,但不执行,附在列表后面 histtimeformat(大写)="%F %T–":历史记录后显示时间 nano /etc/profile:里面修改后,时间后缀才生效 nano /etc/profile.d/env.sh→添加histtimeformat(大写)="%F %T–" 也可以
HISTIGNORE=ls:hostname :历史记录不显示ls/hostname命令(精确匹配) 环境变量:HISTCONTROL HISTCONTROL=ignoredups 忽略连续且重复的命令 =ignorespace 忽略所有以空白开头的命令 =ignoreboth 相当于以上两个 =ereasedups 删除重复命令 ctrl+l 清屏,相当于clear米宁 ctrl+o 执行当前命令,并重新显示本命令 ctrl+s 阻止屏幕输出,锁定 ctrl+q 允许屏幕输出 ctrl+c 终止命令 ctrl+z 挂起命令 ctrl+a 光标移到最前面 ctrl+e 光标移到最后面 ctrl+xx 光标在行首和目前位置来回切换 alt+r 删除当前整行 ctrl+u 光标之前的内容全删除 ctrl+k 光标之后的内容全删除 alt+n 重复显示某个** alt+r 清空本行 ctrl+shift+n 开启多个窗口 ctrl+shift+q 删除多个窗口 ctrl+shift+t 开启多个标签页 ctrlshift+w 删除多个标签页 ctrl+shift + 字体变大 ctrl+shift - 字体变小
ll /proc/$$/df 查看打开的文件对应的数字 exec 8 <>/data/hosts:把hosts对应对应编号改为8
标准输入和输出 先执行0,然后1,其次2 cat < :标准输入重定向(把内容显示出来) ls > ** 标准输出1的重定向,会覆盖 ls >> ** 追加重定向 ls > /dev/pts/5:把信息重定向到pts5 ls /error /data >all.log 2>&1 正确和错误重定向全部发往all.log ls ** ** &>all.log :1/2全部重定向到* (ls ** ** 2>&1)>all.log:1/2全部重定向到* set -C禁止覆盖 set +C 允许覆盖 >|强制允许 (1;2) >all:1,2全部重定向到all,而不发生覆盖 更改口令:echo Redhat |passwd --stdin wang 把wang改成Redhat 更改口令:echo Redhat |passwd --stdin root &> /dev/null 提示信息隐藏
面试题 A cmd > log 2>&1 log 有错有对 B cmd 2>&1 > log log 只有对 C cmd &> log log 有错有对 D cmd 2>log >&2 log 有错有对
----------------------------------------------------------------------I 第四节课 2018年9月24日09:02:32 ----------------------------------------------------------------------I ls -I:忽略
:通配符 ?:匹配任何单个字符 (小写) ~ :当前家目录 cd - 回到之前的目录 [*] 或 [^]除了预定义的字符类:man 7 glob [:digit:] 0-9 任意 [[:digit:]] [0-9] 其中一个 [:lower:] a-z 任意 [[:lower:]] [a-z] 其中一个 [:upper:] A-Z 任意 [[:upper:]] [A-Z] 其中一个 [:alpha:] 任意大小写字母 [[:alpha:]] 任意大小写字母其中一个 [:alnum:] 任意数字和字母 [[:alnum:]] 任意数字/字母的其中一个 [:space:] 任意空白字符 [[:space:]] 任意单个空白字符
练习题: 1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数 字的文件或目录 ls /var/1*[0-9][[:lower:]] 2:显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录 ls -d /etc/[[:gidit:]][1] 3: 显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符 的文件或目录 ls -d /etc/[2][[:alpha:]]* 4.显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符 的文件或目录 ls -d /etc/rc[0-6]* 5 显示/etc目录下,所有以.d结尾的文件或目录 ls /etc/.d 6 显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录 ls /etc/[mnrp].conf 7、只显示/root下的隐藏文件和目录 ls -d /root/.* l. 当前目录为root 8、只显示/etc下的非隐藏目录 ls -d /etc/[^.]*
–touch 创建空文件 (可以刷新文件的时间戳 3个数据都刷新) stat anaconda-ks.cfg (ll 默认只显示修改时间) ll --time=atime * :显示 读时间 ll --time=ctime * :显示 元数据 时间 ll * :显示 改内容 (更改数据)
… -a ===只更改 atime读 c元数据 touch -a * -m ===只更改 mtime写 c元数据 touch -m * -t ===只更改 atime读 mtime写 touch -t 201910200830.20 * (只限于-t用)
-c ===只刷新时间戳,文件不存在,则不予创建) (读a 写m 元数据c)
CP 复制 (只适合复制普通文件,内容复制,属性变化) cp -T 复制一个文件(可忽略) cp -t 复制多个文件夹 cp -t 目标 文件夹
cp -i 如覆盖会提示(root下 默认有) cp -r 递归(复制文件夹所有内容) cp -n 不覆盖 cp -a (相当于 -d -r -preserve)归档、备份 cp -v 显示详细的过程 cp -p 保留权限 所有者 时间戳 cp -d 保留链接属性(软链接) cp -u 只复制比你新的文件 (更新文件) cp -b/–backup 备份 --backup=numbered 备份文件加数字后戳 cp -f 强行复制(删除再复制) cp f1 – -f1:复制为-f1 文件,-- 也可以用于压缩和删除带-文件
练习题 1、定义别名命令baketc,每天将/etc/目录下所有文件,备份到/app独立的子目 录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见 alias baketc='cp -av /etc/ /app/backupdate +%F
?2、创建/app/rootdir目录,并复制/root下所有文件到该目录内,要求保留原文件的所有权限。 cp -rp /root/ /app/rootdir
–mv 移动和重命名文件 mv -i 提示 -f 强制 -b 若目标存在,覆盖前先备份
–rm 删除(usr/bin/rm) -i 提示 -r 递归 -f 强制
alias rm=“mv -t /data” (任何文件都复制到data) 缺陷:rm 加上选项后不能生效
把文件清空(重定向) >> 不存在,创建空文件or存在,叠加,不刷新属性
rename 1 2 con 把1批量换成2,符合con的文件(批量替换/改名)
touch – -a 或者touch ./-a 创建-a touch ~a 或者touch ./~a 创建~a rm -f ~wang 或者 rm -f ./~wang 删除wang
–tree 目录 tree -d :只显示目录/文件夹 -L 1:只显示1层 -p /*:只显示由指定名称显示的目录
–mkdir 创建目录 mkdir -p:创建多层目录 -v:显示过程 -m:创建指定权限
–rmdir 删除空目录 rmdir -p :递归删除空目录 逆向
练习 (1) 如何创建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b mkdir /testdir/dir1/{x,y}/{a,b}
(2) 如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b mkdir -p /data/testdir/dir2/{x/{a,b},y}
(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7 mkdir -p testdir/dir{3,4,5/dir{6,7}}
–inode 索引节点
ll -i :节点编号 df 默认空间大小 df -i;显示每个分区最多的节点编号 dd if=/dve/zere of=/boot/bigfile bs=1M count=860M
touch f{1…520843}| xargs touch 强制创建多个空文件
*面试题:磁盘节点编号占光了,会有什么提示? no space left on device;会跟磁盘空间占满提示一样,设备没有可用空间
*网易面试题 假设dir1 和 dir2是不同目录,mv /dir1/f1 /dir2/ 会有什么区别? /dir1 /dir2 同一分区:数据在在磁盘空间没有变动,只改变目录内容(文件名),节点编号不变,磁盘空间数据不变。 不同分区:数据从一个分区搬家到别的分区,分配新的节点编号,新的节点记录,生成各种属性。原来的空间清除之前的节点编号,加标记,表明空闲。
新的节点编号,新的目录 ll -i(前面节点编号,后面链接数)
硬链接:对一个文件起多个名称 指向的文件名 不能跨区,不支持目录,
软连接 用途广,支持跨区,支持目录 指向的数据块 ln -s f2 f2.link 链接红色:表示指向的原始文件没有了
原始文件一般路径用相对路径,相对路径一定相对于软链接文件的路径
绝对路径就是 以 / 根目录为参照的路径名; 相对路径就是以当前目录为参照的路径名;
硬链接和软链接区别: 硬 软 1)同一个文件 不同文件 2)不能跨分区 能跨分区 3)连接数不增长 链接数增加 4)节点编号一样 节点编号不一样 5)原始文件删除,硬链接正常访问 原始文件删除,软链接失效 6)相对路径写法不一样 大小不一样 7)不支持目录创建 支持目录创建 8)相对路径 一样 相对路径 节点不一样
–file 确定文件类型/内容 file -b:只显示结果,不显示文件名称 -l:查看软链接对应的文件类型(也可以查文件对应的路径文件类型) -F“-”:分割替换,默认“:”
reset:当出现乱码,可以重置
*面试题
–标准输入输出:I/O 0:键盘输入 1:标准输出 2:错误输出 fd:文件描述符 vim:进程 df(文件描述符) ps aux|grep vim
键盘输入: 0 标准输出:1 当前输出窗口 错误输出:2 当前输出窗口 hostnema > dev/pts/2:把当前命令重定向到pts2
set -C :禁止覆盖 set +C :允许覆盖 >| file 强行覆盖file dev/null 垃圾箱
all&>覆盖重定向 all&>>追加重定向 &=所有 2>&1 把错的变成对的 1>&2 把对的变成错的
新浪 A cmd &> /dev/null B cmd > /dev/null 2>&1 C cmd 2>&1 > /dev/null √ D cmd 2> /dev/null 1>&2
(;) > /data/cat.txt 多个命令重定向到txt echo magedu | passwd --stdin wang (显示密码magedu输入给wang账号)
标准输入的重定向 bc < f1.txt > bc.log 批量计算 f1.txt(2*3) cat < fi.txt > f2.txt 输出复制
–tr 转换和删除字符 (1:1对应的) --也是标准输出 tr ‘a-z’ ‘A-Z’ 把小写字母转换成大写字母 tr‘abcd’ ‘123’ 输入:abcd=123d 1=1对应,剩余直接输出 tr ‘abcd’ ‘123’ 输入:abcdef=1233 1=1对应,没对应符号对应最后一位 tr -t ‘abcd’ ‘123’ 输入abcdef=123def 对等转换,多出来的不做转换 tr -d ‘abc’ :abc删除,其余的显示 tr -d ‘0-9’ :把数字全删除,剩下的显示 tr -dc ‘0-9’ :c(反向)除了0-9,其余的全部删除 tr -s ‘ab’ :s(压缩)压缩aaabbb,结果显示为ab tr " " + < who.log 把who.log内容的空格替换成+ (ctrl+d退出) \n 换行 \r 回车 ^M=换行+回车 \t Tab键盘 hexdump -C:查看当前
----------------------------------------------------------------------I 第五节课 2018年9月26日09:00:01 ----------------------------------------------------------------------I 三种I/0设备 | 把I/O重定向至文件 | 使用管道
cat > f1 cat > f1 <<a(开始) 推荐用EOF aa > 123 bb > abc 单行重定向 > a(结束) 多行重定向
–发邮件: 实例:mail -s “1hello” root <<END ;goodmorning!END: 内容:发送邮件给root,主题是hello,用END结尾(区分)且单独起一行
–管道(STDERR默认不能通过管道转发,可利用2>&1 或|& 实现) cmd1 | cmd2 | cmd3 | > 输出,< 输入 命令(cmd1)一必须标准输出 如要错误命令正常输出:2>&1 或者|& 管道前面加上& 管道中-符号 tar:打包命令 tar -cvf - /home |tar -xvf -:把home目录打包给-,然后再把-解包,给- (- 打包生成的文件名;-cvf:其中c打包,如xvf中x则是解包)
–重定向tee
*面试题 1+2+…100=? echo {1…100} | tr ’ ’ + | bc
tee 命令 |tee tee -a :不覆盖,追加
练习 1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中 cat /etc/issu|tr ‘a-z’ ‘A-Z’ >/tmp/issue.out 2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中 who am i | tr ‘a-z’ ‘A-Z’ >/tmp/who,out 3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下: mail -s “help” root <<EOF Hello, I am who,The system version is here,please help me to check it ,thanks!cat etc/centos-release <<EOF
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开 ls /root|tr “\n” " "
5、计算1+2+3+…+99+100的总和 echo {1…100} | tr ’ ’ ‘+’ | bc
6、删除Windows文本文件中的‘^M’字符 dos2unix file
7、处理字符串“xt.,l 1 jr#!KaTeX parse error: Expected 'EOF', got '#' at position 48: …cho 'xt.,l 1 jr#̲!mn 2 c*/fe 3 uz 4’ | tr -dc '[0-9] ’
8、将PATH变量每个目录显示在独立的一行 echo $PATH | tr ‘:’ ‘\n’
9、将指定文件中0-9分别替代成a-j cat file|tr “0-9” “a-j”>file
10、将文件/etc/centos-release中每个单词(由字母组成)显示在独立一行,并无空行 cat /etc/centos-release | tr -d " "
–用户和组以及权限管理 系统用户:1-499,1-999 (centos7) 对守护进程获取资源进行权限分配 登录用户:500+,1000+(centos7) 用户ID:uid 组ID:gid id -u / id
【组/用户信息】 linux 组:groupname 管理员组:root,0 普通组:系统组1-499,1-999 普通组500+ 1000+ win:用户名组;不能同名 sid linux:用户名/组名;可以同名 uid (当创建一个新用户,默认会创建一个相同名称的主组对应新用户) 一个组队对个用户;一个用户对多个组;多对多的关系
etc/passwd:用户信息及其属性(名称、UID/主GID) etc/group:组/属性
etc/shadow:用户密码/相关属性 (限管理员查看) etc/gshadow:组密码/ 相关属性 (限管理员查看)
【passwd格式】 例: wang❌1000:1000:wang:/home/wang:/binbash 对应关系: name:password:UID:GID:GECOS:directory:shell pwunconv:转换加密口令→etc/passwd pwconv:返回加密口令
–passwd 设置密码 getent shadow mage -e **:强制用户下次登录修改密码 -d **:删除指定用户密码
【误删改uid为0的用户,恢复方法】 重启→按e键→在linux16尾部输入:init=/bin/bash →ctrl+x 启动→cd /root ;mount -o rw,remount / ; nano etc/pswd→然后更改该目录下root uid权限→重启
chfn user:修改user→passwd文件注释信息(GECOS)按回车键,清空信息 finger user:查看该用户passwd文件注释信息(GECOS) chsh -s /sbin/nologin wang:修改wang账户的shell类型为nologin (nologin:不能登录的账户Shell类型,一般给进程和服务用)
getent passwd:查看passwd文件(等价于cat /etc/passwd) passwd user:查看user单个或多个passwd属性 shadow user:查看user密码单个或多个shadow属性
grub-md5-crypt:生成MD5加密算法(centos 6)
【shadow格式】 ·密码(已加密) ·更改时间(距离1970.1.1多少小时) ·更改期限 (0表示随时可更改;只针对用户;root随时可改) ·过期时间(99999表示永不过期) ·警告时间(提前几天通知) ·宽限时间 (默认不设置;如设置,过期会被锁定;day) ·保留字段
–chage 更改口令属性及相关设置 -l 查看相关信息 -d0 设置口令过期,下次登录必须更改口令 chage root:更改口令属性(如最短/长时间,提前/到期警告等)
【加密算法】 cat /etc/login.defs:查看加密算法及其他相关信息 更改加密算法:(只影响之后创建的新用户) authconfig --passalgo=sha256 --update $1:128位加密算法 $5:256位加密算法 $6:512位加密算法
openssl rand -base64 12:随机生成一段16位口令
!!:(禁用口令) !:有口令 【组/用户 密码】 getent group :查看组 【组:密码 :编号 :成员】 nano etc/group:修改组 (多个成员用逗号隔开;gshadow也要修改才行)
–groupmems (更改/查看组成员) -a mage -g wang:把mage加到wang组(附加组) -d mage -g wang:把mage移除wang组 -l :查看组成员 -p :清除组所有成员 (gpasswd -a mage wang/gpasswd -d mage wang :效果一样)
newgrp mage:临时把mage变成自己的主组,(之前的主组改为附加组) (不建议这样用;不安全;退出时root不需要输入口令)
scp list.txt 192.168.34.2: (远程复制,若有该文件则覆盖) newusers /data/list.txt 批量账号创建 groups name:查看name用户组名
echo 123|passwd --stdin lh 或↓ nano pass.txt(输入口令)例:app1:123 app2:234 :app3:345 cat pass.txt|chpasswd:批量更改app1/app2/app3的口令
–gpaasswd -mage:给mage组添加口令 -A user1,user3 group : 设置user1,user2为group组管理员 -r mage:删除mage组的空口令 -a wang bin:把wang账号添加到bin组 -d wang bin:把wang账号删除bin组 getent gshadow :查看组密码 【组 :密码 :当前管理员 :成员】
【文件操作】 (vi 具有语法检查功能,输错会提示,优于nano) vipw 等价于vim /etc/passwd vigr 等价于wim /etc/group pwck 等价于getent passwd ftp (默认不存在) grpck 等价于gentent group ftp (默认不存在)
【用户/组管理命令】 (etc/default/useradd 创建用户时,目录默认属性) group user:查看用户都属于那些组
–useradd **:创建用户 -U :解禁用户的空口令 -L :把用户锁定 -u ** user:指定user的UID -d **:指定家目录 -o :忽略user的UID的唯一选项 (配合-u) -d /data/hudir hu:创建hu用户到/data/hudir目录下 -r :创建系统账号(系统默认不需要~目录)默认用较小ID -s:指定shell类型 (etc/bash) -c:添加描述 -g 主组 app3:把app作为app3用户的主组 -N :把users作为自己的主组 -m 强制创建家目录 (比如系统用户) -M 不创建加目录(比如普通用户) -D 显示etc/default/useradd
–usermod -aG root wang:把wang账号加入root组 G 附加组 -a 附加组不会丢失 (清空附加组 usermod “” wang ;usermod wang wang) -s 修改shell类型 -U **:解禁用户密码 (空口令不能解禁) -L :给用户加锁 -l newuser user:把user用户改名为newuse-sr
–userdel -r mysql 删除mysql用户 (邮件也必须删除 rm -rf /var/spool/mail/mysql)
【文件/文件夹权限】 --更改立即生效 (u:管理员 g:组内成员 o:其他 a:所有人) –chmod 更改文件权限 (更改权限:管理员不受限制) o+w *:给f1其他人添加写入权限 u=rwx,g=r,o=r f1:给3类人分别赋予权限 a=r *:给所有人赋予权限r wang f1:把f1所有者权限改为wang chgrp lh f1:f1改为lh组 –chmod 修改权限 -R:递归 a-:所有成员- +X:只针对文件夹添加执行权限 -g:修改shell类型 (如果一个文件有x权限,那上一层目录加X,也会其他用户x权限) chmod --reference f2 dir/wang1:把f2的权限复制给wang1 chmod who opt per file +权限 -权限 =覆盖权限
练习题: 1、创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为 “Gentoo Distribution”。 useradd gentoo -G bin,root -s /bin/csh -c GentooDistribution
2、创建下面的用户、成员关系 名字为webs 的组 usergroup webs 用户nginx 使用webs 作为附属组 ! useradd -Ga webs nginx 用户varnish,也使用webs 作为附属组 ! useradd -Ga wbs varnish 用户mysql,不可交互登录系统,且不是webs 的成员,nginx,varnish, mysql密码都是magedu usermod -s /sbin/nologin -G “” mysql echo passwd|passwd --stdin nginx varnish mysql
–su 切换用户(非完全切换)保留邮件、当前目录 - user 完全切换 - 默认切换到root -c (例:cp - -c **)切苏换到root执行命令完后在自动回来
groupadd–创建组 -g GID:创建GID -r ** :创建系统组
groupdel–删除组 (主组 不能删除,有用户占)
例: gpasswd 更改组密码 gpasswd -a mage sales:把mage添加到sales组 -d mage sales:把mage删除sales组
groupadd -g 123 lh useradd -g lh -u 123 lh (创建组lh,用户lh,使其id/主组保持一致)
对于文件 r read 读 文本文件 【看内容】 w write 写 == 文本文件 【写内容】 x excute 执行 程序(二进制/脚本) 【执行】【基础权限】搭配用
对于目录 r read 读 可浏览文件列表 w write 写 可以创建/删除文件(配合x权限才行) x excute 执行 cd访问目录内的文件
例子:chown name f2 :把f2所有者为wang (更改u或g) chgrp webs name:把name所属组改成webs chown -R mage.root f2 f2管理员mage,主组root
模式法 who:u g o a opt:+ - = per:r w x
数字法 chmod 755 file rwxr-xr-x chmod 764 f2 rwxrw-r–
rx属于目录的基础权限 (对于二进制可执行文件,r权限不是必须的,没有也不受影响) (rw禁用对于root账户不受限制,要执行,必须加上x) (对于目录,如果没有x权限 不能 查看文件属性/进入目录/访问文件内容) (对于文件,如果没有x权限 不能 运行)
实验:删除家目录,恢复 cp -r /etc/skel /home/mage chown -R mage.mage /home/mage :把/home/mage目录递归 mage.mage(u/g) chown wang file:把file的所有者改成wang chgrp webs name:name所属组改成webs
chmod 700 /home/mage:把所有者权限更改为7
【练习】 1、当用户docker对/testdir目录无执行权限时,意味着无法做哪些操作? 不能 查看文件属性/进入目录/访问文件内容
2、当用户mongodb对/testdir目录无读权限时,意味着无法做哪些操作? 不能ls该目录属性,也不能复制其他文件属性
3、当用户redis对/testdir目录无写权限时,该目录下的只读文件file1是否可修改和删除? 不能
4、当用户zabbix对/testdir目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除? 可以
5、复制/etc/fstab文件到/var/tmp下,设置文件所有者为tomcat读写权限,所属组为apps组有读写权限,其他人无权限 cp -a /etc/fstab /var/tmp;chown app.tomcat fstab;chmod 440 fstab
6、误删除了用户git的家目录,请重建并恢复该用户家目录及相应的权限属性 cp -r /etc/skel /home/git chown -R git.git git
–umask 设置默认权限: (用户 .bashrc) 全局:(etc/bashrc) 默认权限 777-002(文件夹) 666-002(文件)
umask -* 设置默认权限 umask -S:显示u,g,o的权限(新建文件夹默认权限) umask -p :显示umask值和命令 用法:umask -p >> ~wang/.bashrc(可把前面的值覆盖)
▲对于文件 666-umask 如果是奇数,则将权限+1 ▲对于文件夹 777-umask umask值 计算方式不变
【特殊权限】 ▲SUID/SGID只继承在二进制的可执行程序上 ▲sticky只作用在文件夹上
SUID ( 继承所有者的权限;用chmod 4*** file或u+s file 表示) 例:chmod u+s /file 删除s:chmod 0*** /file
SGID (继承所属组的权限 用chmod 2*** files或 g+s files表示) 例:chomod g+s /file 删除s:chmod 0*** /file
Sticky (只能删除此目录中自己的文件,root不受限 用chmod 1***/o+t表示) 例:chmod 1*** /files 删除t:chmod 0*** /files
设定文件特殊属性(防止误操作、删改移除都不行) –chattr (扩展元数据) + i file 禁止root删改文件 (包括所在目录) - i file 去除禁用属性 + a file (只能看/追加) - a file (去除属性) lsattr file 查看特殊属性
访问控制列表ACL –setfacl :显示所有成员的权限 -m u:wang:- f1 (wang用户→f1无权限) -m u:mage:rwx f1 (mage用户→f1有rwx权限) -m g:webs:rw f1 (wibs组→f1有rw权限) -aG webs zhang(zhang 用户添加到webs组) -x u:wang (删除wang用户的f1权限) -X file /data/f1 :读取file内容,批量删除f1 -b files:(删除files的acl权限) 例:setfacl -R -b .删除目录权限 -R :递归 -M file /data/f1:读取file的acl,批量应用到f1 -k file 删除默认files的默认ACL权限 -d:默认文件夹权限(例:setfacl -R -m d:u:mage:rw dir) (mage用户默认dir下设置rw权限,包括后期新建的文件) -m mask::r f1(限制所有人的权限为r) (chmod g=r f1 能攻实现同样的效果)
–getfacl file:查看file设置的acl权限 getfacl f1 | setfacl --set-file=-f3 (读取f1的内容,把相应权限设置到f3)
ACL生效顺序:所有者→自定义用户→自定义组→其他
备份和恢复ACL getfacl -R file > file1(备份file) setfacl --restore file1(还原file) (ACL只支持ext4,xfs ;centos 6后分区不支持ACL功能,7支持) ▲备注: tune2fs –o acl/dev/sdb1 mount –o acl/dev/sdb1 /mnt/test (cento7之前版本,装完系统后,人为分区无法使用ACL功能)
1、在/testdir/dir里创建的新文件自动属于webs组,组apps的成员如:tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹
先创建所有组以及用户: groupadd webs;groupadd apps;groupadd dbs; useradd tomcat;useradd mysql 把相应用户添加到组: gpasswd -a tomcat apps; gpasswd -a mysql dbs; 创建/testdir/dir目录并设置相应权限: mkdir -p /testdir/dir setfacl -R -m g:apps:wrx /testdir/dir setfacl -R -m g:dbs:rx /testdir/dir chown webs.webs /testdir/dir -R chmod 2770 /testdir/dir
2、备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限 getfacl -R /testdir/dir > /root/acl.txt setfacl -b /testdir/dir cp /root/acl.txt /testdir/dir setfacl --restore /root/acl.txt
–抽取文本的工具 文件内容:less
–cat 查看所有(不分页) -n 加行号 -b 只对内容加行号 -s 压缩连续的空行成一行 -A 能看空格和Tab键(^I) $结尾 -E 显示换行符(\n) $结尾 (cat < f1 > f1 :清空 cat < f1 >> f1 :无限循环)
tac:反向显示(行) rev:反向显示(字符) more:查看文件 (到最后一行退出) less:分页查看文件 (/ 搜索 n:下 N:上)
grep:检索目标行命令
【显示文本前行或后行的内容】 /dev/urandom (随机字符) –head:显示头部(默认前十行) -n 3 file:只显示前3行 (-3也行) -c 2:取前2个字节 数字/字母/下划线 -前10个
–tail 显示尾部 (默认后十行) -n 后几行 -c 后几个字节 或 -* -f 跟踪文件内容变化,常用日志监控 -F 跟踪文件名和文件状态(文件描述符) -3 显示后三行 tailf 类似tail -f,只监控文件增长的时候(节省服务资源)
–cut 显示列 -d 指定分隔符(默认tab) -f 列 -c 字符 –output-delimiter=+ 输出结果用“+”作为分隔符
–paste 黏贴 横向合并显示 (cat f1 f2 纵向合并显示) -d 分隔符 -f 所有的行合成一行 -s 合成一行显示
ss -tn:查看当前链接数
–wc (Word count 统计单词) 1:行 2:单词数 3:字节 -l 总行数 -w 单词总数 -c 字节总数 -m 字符总数 -L 最长行的长度
例:cat /user/share/dict/words |wc -l :统计该文档总行数
【sort文本排序】 sort file:默认a-z 相同的内容在一起 排序 -t 制定分隔符 -k 第几列 -n 按数字大小整理 number -r 倒叙 -R 随机排序 -u 去重 -k 制定排序的栏位(配合-t使用)
(例sort -nrk 3 -t: 按照数字大小排序,-r是以相反顺序,-k是指定需要排序的栏位,-t指定栏位分隔符为冒号)
netstat:访问链接状态 win:tasklist:显示运行在计算机上的所有进程 netstat -no | findstr **:查看具体的进程编号 【uniq】唯一 –uniq 删除连续的相邻重复行 -c:显示重复行的次数 -d:仅显示重复的行 -u:显示没有重复过的行(不相邻)
【diff】 区分不同之处 【patch】 -b 备份 -u 详细区分 diff -u f1 f2 > diff.log 生成f1/f2 补丁文件 rm -f f2 删除f2 pathch -b f1 diff.log 备份f1(原f1文件为f1.orig f1为f2)
练习 1、找出ifconfig “网卡名”命令结果中本机的IPv4地址 ifconfig|tr -dc [0-9.]\n|cut -dn -f3 2、查出分区空间使用率的最大百分比值 df|grep sda|tr -s " “|cut -d” " -f5|sort -nr|head -1
3、查出用户UID最大值的用户名、UID及shell类型 getent passwd|cut -d: -f1,3,7|sort -nrt : -k 2|head -1
4、查出/tmp的权限,以数字方式显示 stat /tmp|grep Uid|tr “/” “(”|cut -d"(" -f2
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序 netstat -na|grep ESTABLISHED|tr -s " " :|cut -d: -f6|sort|uniq -c|sort -nr
–grep:文本过滤 (行) grep- 选项 模式 文件 -v **: 取反 -i :忽略大小写 -n :显示行号 -c :统计匹配的行数 -o :仅显示匹配到的字符串 (换行) -q :静默模式 不显示结果 -A3 :包含后面三行都显示 -B3 :包含前面的三行都显示 -C3 :包含前后各三行都显示 -e 1 -e 2:包含1或者2的都显示 -w :匹配整个单词 (中横杠,数字,字母相连都算一个单词) -f f1 f2:判断f1内容,哪些跟f2相同 (取交集) -F 相当于fgrep,不支持正则表达式(取文件里的参数)相当于-e -E 扩展正则表达式 【正则表达式】REGEXP regular expressions 基本正则表达式:BRE grep -E 扩展正则表达式:ERE egrep 查看帮助:man 7 regex
【字符匹配】 \ 转义 * :匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配 . :任意一个字符 ?:匹配前面字符0或1次 +:匹配前面字符1次以上 {n}:匹配前面的字符n次 {m,n}:匹配前面的字符至少m次,至多n次 {,n}:匹配前面的字符至多n次 {n,}:匹配前面的字符至少n次
【位置锚定】 定位 ^* :行首锚定,用于模式的最左侧 *$ :行尾锚定,用于模式的最右侧 ^**$ :匹配固定字符 ^$ :空行 -v ‘^ ’ : 非 空 行 [ [ : s p a c e : ] ] ∗ ’:非空行 ^[[:space:]]* ’:非空行[[:space:]]∗ 空白行 < 或\b:词首锚定 > 或\b:词尾锚定 <word>匹配整个单词 (不能是数字,字母,下划线 _ ;其他的都可以做单词分隔符)
【分组】 把(abc)做一个整体处理 列: (abc).(xyz). \1:再次调用前面第一个分组 如:(abc).(xyz).(abc) \2:再次调用前面第二个分组 如:(abc).(xyz).(xyz) 【或者】:|
练习 1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法) cat /proc/meminfo | grep -i “^s” cat /proc/meminfo | grep “<[Ss]”
2、显示/etc/passwd文件中不以/bin/bash结尾的行 cat /etc/passwd | grep -v “bin/bash”$
3、显示用户rpc默认的shell程序 getent passwd rpc
4、找出/etc/passwd中的两位或三位数 cat /etc/passwd|grep -o “<[0-9]{2,3}>”
5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行 cat /etc/grub2.cfg|grep “3”"{1,}"[^[space]]
6、找出“netstat-tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行 netstat -tan|grep “LISTEN”[:space:]">"
7、显示CentOS7上所有系统用户的用户名和UID getent passwd
8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行 useradd basher -s /sbin/nologin; useradd bash -s /sbin/nologin; useradd basher -s /sbin/nologin; useradd sh -s /sbin/nologin; useradd nologin -s /sbin/nologin; getent passwd|grep ^“shell”
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序 df|grep sda|tr -s " " %|cut -d% -f5|sort -nr
正则表达式 1, QQ号 grep [1-9]"[0-9]{4,10}" 2,身份证号 grep -i [1-8][0-9X]"{16}"$ 3,手机号 grep 1"[0-9]{10}" 4,邮箱 grep [[:alnum:]]"{1,}"@[[:alnum:]]"{1,}".[[:alnum:]]"{1,}"
----------------------------------------------------------------------I 第七节课 2018年10月8日09:08:34 ----------------------------------------------------------------------I (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]) egrep ip地址过滤 【扩展正则表达式】
练习 1、显示三个用户root、mage、wang的UID和默认shell getent passwd|egrep mage"|"root"|"^wang|cut -d: -f1,3,7
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟 一个小括号的行 cat /etc/rc.d/init.d/functions|egrep ^"[[:alnum:]_]".*"[()]"
3、使用egrep取出/etc/rc.d/init.d/functions中其基名 echo “etc/re.d/init.d/functions”|grep -Eo “[^/]+$”
4、使用egrep取出上面路径的目录名 echo “/etc/re.d/init.d/functions”|egrep -o “.*/”
5、统计last命令中以root登录的每个主机IP地址登录次数 last|grep pts|grep root|tr -s " “|cut -d” " -f3|sort|uniq -c
6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255 echo {1…300} | egrep -o “\b[0-9]\b” echo {1…300} | egrep -o “\b[0-9]{2}\b” echo {1…300} | egrep -o “\b1[0-9]{2}\b” echo {1…300} | egrep -o “\b2[0-4][0-9]\b” echo {1…300} | egrep -o “\b25[0-5]\b”
7、显示ifconfig命令结果中所有IPv4地址 ifconfig|egrep -o “(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])” 或 ifconfig|egrep -o “([0-9]{1,3}.){3}[0-9]{1,3}”
8、将此字符串:welcome to magedulinux中的每个字符去重并排序,重复次数多的排到前面 echo welcome to magedulinux|grep -o [[:alpha:]]|sort|uniq -c|sort -r
【–vim 文本编辑器_增强版】 +# 打开文件跳到第几行行首 +/# 跳到到第一个匹配#的行 - d file1 file2… 比较多个文件 - m file 只读打开文件 ex file或vim -e 直接进入ex扩展模式
I 行首输入 A 行位输入 o 光标下方插入新行 O光标上方插入新行【使用多个“窗口”】 vim -o|-O FILE1 FILE2 … -o: 水平分割 -O: 垂直分割 –在窗口间切换:Ctrl+w, Arrow
–单文件窗口分割: Ctrl+w,s: split, 水平分割 Ctrl+w,v: vertical, 垂直分割 ctrl+w,q:取消相邻窗口 ctrl+w,o:取消全部窗口 :wqall退出
【命令模式】
–命令模式:ZZ保存退出 ZQ不保存退出
r file 读文件内容到当前文本 w file 当前内容写入到外部file !cmd 执行命令 r!cmd 读入命令的输出 w下一个单词 e 当前/下一单词词尾 b 上一个单词词首–行首行尾跳转: ^: 跳转至行首的第一个非空白字符 0: 跳转至行首 $: 跳转至行尾
–行间移动: #G、扩展命令模式下:# 跳转至由#指定行 gg: 第一行 G:最后一行
–句间移动:(.点儿结尾,算一句话) ):下一句(:上一句 ?段落间移动:(空行隔开的,算段落) }:下一段{:上一段
–字符编辑 x:删除光标处的字符 #x:删除光标处的#个字符 xp:剪切,粘贴(相当于位置交换) ~:转换大小写 J:删除当前行后的换行符 –替换命令(r, replace) r: 替换光标所在处的字符 R:切换成REPLACE模式 0Gu 行 首 到 行 尾 变 成 大 写 0 g u 行首到行尾 变成大写 0gu 行首到行尾变成大写0gu行首到行尾 变成小写
–删除命令(delete 也是剪切) dKaTeX parse error: Expected 'EOF', got '#' at position 46: … dd: 删除光标所在的行 #̲dd:多行删除 D:光标处删… 0dgg:当前行首删除上面所有 0dG: 当前行首删除下面所有 di:删除“ ”之间内容 dix:从当前删除字符直到第一个x
–复制命令(y, yank): y$:复制到行尾 y0:复制到行首 y^:复制非空行 yw:复制单词 yy:复制行 #yy: 复制多行 Y: 复制整行 yi:复制()之间的内容 ytx:从当前复制字符知道第一个x vi 选中[]之间的内容
–粘贴命令 (p, paste): p 复制到字符/行 后 P 复制到字符/行 前
–改变命令(c, change)【修改后切换到插入模式】 c$:当前位置删除到行尾 c^:当前位置删除到非空行首 c0:当前位置删除到行首 cb:当前位置往后删除单词 ce:当前位置往前删除单词 cc:删除当前行 C:当前光标删除到行尾
–撤销/重复 u/. u:撤销前一次更改 . :重复前一个操作 U:撤销此行所有更改
–寄存器(可跨文本) 3"nyy 复制三行 np 粘贴3行 [a-z]:一共26个及寄存器和一个无名寄存器(默认复制) 数字寄存器:保存之前变更的内容[0-9]
–标记和宏 m[a-z]:把当前位置标记为[a-z]–最多26个标记 '[a-z]:转到标记所在的位置 q[a-z]:录制宏 q:停止录制宏 @[a-z]: 启用宏 @@:重复执行上次的宏
练习 1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符 cp /etc/profile /tmp/ vim profile %s@4{1,}@@g
SHEll 编程脚本基础 scp $1 wang@172.20.102.77:/home/wang/bin 复制$1到远程ip的wang/bin目录 字体颜色 31-37 背景颜色 41-47
【变量引用】 临时存放在内存中,注销失效 (1) 可以是直接字串; name=“root" (2) 变量引用:name=" U S E R " ( 3 ) 命 令 引 用 : n a m e = ‘ c m d ‘ n a m e = USER" (3) 命令引用:name=`cmd` name= USER"(3)命令引用:name=‘cmd‘name=(cmd) ——外面可加双引号 显示已定义的所有变量:set 删除变量:unset name 例: cmd=hostname $hostname:命令引用
【脚本调试】 检测脚本中的语法错误 bash -n /path/to/some_script 调试执行 bash -x /path/to/some_script 【练习】 练习 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 #!/bin/bash #FileName:lh.sh #2018年10月8日19:31:59 #-------------------- RED="\e[1;31m" COLOREND="\e[0m"
echo -e “OS version is R E D ‘ c a t / e t c / c e n t o s − r e l e a s e ‘ RED`cat /etc/centos-release` RED‘cat/etc/centos−release‘COLOREND” echo -e “Kernel version R E D ‘ u n a m e − r ‘ RED`uname -r` RED‘uname−r‘COCOREND” echo -e “The cpu type is R E D ‘ l s c p u ∣ g r e p − i o I . ∗ z RED`lscpu|grep -io I.*z RED‘lscpu∣grep−ioI.∗z$COLOREND" echo -e "the memory is $REDfree -h|grep Mem|tr -s " “|cut -d” " -f2$COLOREND" echo -e "The number of disk id $REDdf|grep /dev/sda|tr -s " " “:”|cut -d: -f5|sort -nr|head -n1$COLOREND" echo -e "The hostname is $REDhostname$COLOREND" echo -e "The ipaddr is $REDifconfig|grep -Eoe “(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])”|head -n1`$COLOREND”
2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中 vim /root/bin/backup.sh echo “backup is begin…” today=date +%F cp -av /etc/ /data/root /etc$today unset today echo “Backup is finished”
3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值 df|grep sda|tr -s " " %|cut -d% -f5|sort -nr|head -1$
4、编写脚本/root/bin/links.sh,显示接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序 netstat -nt|grep ESTAB|tr -s " " :|cut -d: -f6|sort|uniq -c|sort -nr
pstree -p:(显示进程树)父子进程查看 echo $$查看子进程 (echo @BASHPID) echo $ppid:当前进程的父进程
echo “start sending …” sleeep 1 scp $* wang@192.168.34.7:/data/bin echo “send finished” 上传编写脚本
ping 192.168.34.1 -c1 -w1 (c 次数 w秒) echo $RANDOM 数值的范围是32767 (15个1的二进制)
只读变量 readonly variable (不能删改) readonly name=**:设置只读变量(退出失效) redonly -p 查看只读变量
位置变量 $1, $2, …:对应第1、第2个参数,shift [n]换位置 $0: 命令本身(可配合basename) $*: 全部参数合为一个字符串 $@: 每个参数为独立字符串 (双引号包起来的时候才会有差异) set --:清空所有位置变量
echo $? 判断前面命令是否成功 【练习】
ipconfig +网卡名称 = IP地址 ifconfig $1|grep inet|tr -s " “|cut -d” " -f3|head -1
【算术运算】 = - * / %取余 **乘方 实现算数运算:let n=1+2 显示结果:echo $n
也可以用$(()) $[] 进行运算,然后echo $*显cat示
–expr ecpr 1 + 2 或者 expr 2 * 3 可直接输出结果
–declare -i 声明一个变量是整数 用法:declare -i n=3+4
–var(支持&& !!) var ( ) v a r () var ()var{}
【练习】 1、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和 vim sumid.sh cat /etc/passwd -b|grep “\s"10’|’”\s"20|cut -d: -f3|tr “\n” +|cut -d+ -f1,2|bc
2、编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和 echo “calculated…”$ sleep 3$ cat $1 KaTeX parse error: Expected group after '^' at position 12: 2|grep -n "^̲"|wc -l$
3、编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件 echo “reding…” sleep 1$ etc= ( l s − l / e t c ∣ w c − l ) v a r = (ls -l /etc|wc -l) var= (ls−l/etc∣wc−l)var=(ls -l /var|wc -l) usr= ( l s − l / u s r ∣ w c − l ) e c h o " e t c = (ls -l /usr|wc -l) echo "etc= (ls−l/usr∣wc−l)echo"etc=etc var= v a r u r e = var ure= varure=usr" echo “OK!!”
–赋值 自增,自减: let var+=1 let var++ let var-=1 let var– 例:var=5 let var+=1 echo $var var=6 let var++(原数值+1) let var++(原数值-1)
【与&】 :并且 1与1:1 1与0:0 0与0:0 0与1:0 (和0与 结果都是0!!) 例:echo $[12&24]
【或|】 只要有1个是1,结果就是1 例:echo $[12|25]
【非!】 取反: !1=0 !0=1
【异或】 (同性相斥0,异性相吸1) ^异或:相同为假0,不同为真1 例 1^0 为1 2^1为1 0^0 为0
【同或】 :相同为真1,不同为假0
–短路与:&& 如果cmd1为真,则执行cmd2 如果cmd1为假,则不执行cmd2 cmd1为真 短路与 cmd2 取值决定于cmd2的值
–短路或:|| 如果cmd1为真,则不执行cmd2 如果cmd1为假,则执行cmd2
–条件测试:[空值最好用 " 引起来] 变量加[] test[=] test [[=]] [ = ] (用【】显示前后要加空格) [ “” ] :不空为真,空为假;可用来判断变量是否存在 [ $变量 ]:有内容是真0,无则是假的1 -z 如果字符串为空就是真(默认有内容是真) -n 如果字符串不空就是真
判断里面的逻辑表达,是真还是假,真0 假1 ; 也可做字符串匹配,相等为真0 不成立为假1
【用法】 [ $path ] 有内容是真0 [ -z “path” ] 不空为真0 [ k"path"=k ]判断变量是否为空,空则等式成立,为真0
path=/data/test/ unset path 取消变量
-eq 等于 - ne 不等 -lt 小与 - le 小与等于 -gt 大于 - ge 大于等于 != 是否不等于
(cd /etc/teset;rm -rf *)执行命令当前目录不变;
=~ 右边为正则表达式 (正则表达式不要加双引号)
配置文件
花括号{}是在一个进程里面,小括号[]/()会开启子进程
–判断文件 [ -x lh.txt ] 判断lh.txt是否有执行权限 -r 判断是否可读 -w 判断是否可写 -d 判断是否文件夹 -f 判断是否为文件 -z 判断是否为空 -e 判断是否存在 同/-a -suid 是否有suid权限 -g 是否有sgid -k 是否有sticky位
大小测试 -s 判断是否存在且非空 是否打开 -t 判断是否终端已经打开 -N 上次读取后是否被修改 -O 当前用户是否为属主 -G 当前用户是否为属组 1 -ot 2 :1是否旧与2
[file -a ] [file -o ] [file -z ] -a 并且 -o 或者 -z 是否为空 [[]]:只在通配符和正则表达式中使用
练习:判断lh.txt是否为.sh后缀,如果是,就加执行权限。 vim excute.sh;[[ KaTeX parse error: Can't use function '\.' in math mode at position 10: lh.txt =~\̲.̲sh ]] $$ chome +x $file 【练习】 1、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数 vim argnum.sh [ $1 -lt=1 ]&&echo “At least one parameter should be given”&&exit|| cat 1 ∣ g r e p " [ [ : s p a c e : ] ] 1|grep "^[[:space:]] 1∣grep"[[:space:]]"|wc -l
2、编写脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问” vim hostping.sh ping $1 -c3 -w3 &>/dev/null&&echo ‘IP addr is up’||echo ‘IP addr is down’
3、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满 vim checkdisk.sh inode=df -i|grep sda|tr -s " " %|cut -d% -f5|sort -nr|head -1 space=df|grep sda|tr -s " " %|cut -d% -f5|sort -nr|head -1 [ $space -gt 80 -o $inode -gt 80 ]&&wall ‘Disk space will be full’
【练习】 1、编写脚本per.sh,判断当前用户对指定参数文件,是否不可读并且不可写 vim test.sh read -p "请输入文件: " file [ ! -r $file -a ! -w $file ] && echo “Unreadable and unwritable”||echo “ke du ke xie” chomod +x test.sh
2、编写脚本excute.sh,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件 read -p "Please input a filename: " file [[ f i l e = . ∗ s h file =~ .*sh file= .∗sh ]]&&chmod +x $file|| echo “Non-script file”
3、编写脚本nologin.sh和login.sh,实现禁止和允许普通用户登录系统 (touch /etc/nologin 可实现普通用户无法登录) vim nologin.sh touch /etc/nologin
vim login.sh rm -f /etc/nologin
$-变量 hash i:交互 m B{ } h history set +“himBh” 赋予 set -“himBh” echo -n 不换行显示 echo -e 显示特殊字符 read -p 不换行显示
【read】读入内容给指定变量中 例:read "please input name:lh"name (定义变量为lh) $name 等于lh
-p 制定要显示的提示 -s 静默输入 -n 制定字符长度 -t ** 超时退出(秒)对多个变量赋值: read a b c <<“xxx yyy zzz”
【鸡兔同笼】 输入头数:35 输入脚的个数:94 几只鸡:x 几只兔:y x+y=头数 35 2x+4y=脚个数 94
(脚个数)94/2=**-35(头数)=12x兔子 35(头数)-12(x兔)=(y鸡)
【bash配置文件总结】 –全局配置 /etc/profile 1 /etc/profile.d/.sh 2 半1 /etc/bashrc 5 –个人配置 ~/.bash_profile 3 半3 ~/.bashrc 4 半2 完全切换:执行顺序 1 2 5 3 4 半切换:执行顺序 /etc/profile.d/.sh–/.bashrc–/.bash_profile
【profile类】 通常用户:环境变量;运行命令和脚本 添加PATH路径:PATH=/data/bin:$PATH
【bash退出任务】 ~/.bash_logout 退出shell的时候运行 用途:自动备份,清除临时文件
【$-】echo $- 系统默认变量 himBH h:hash i:交互式 m:监控模式 B:大括号扩展{ } H:命令历史 set +h 去掉 -h增加
【】练习】 1、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin echo “PATH=$PATH:/usr/local/apache/bin”>>/etc/profile.d/path.sh
2、用户root登录时,将命令指示符变成红色,并自动启用如下别名: rm=‘rm–i’ cdnet=‘cd /etc/sysconfig/network-scripts/’ editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’ editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或ifcfg-ens33 ’ (如果系统是CentOS7)
cat >> ~/.bashrc <<EOF alias rm=‘rm -i’ alias editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’ alias editnet= ‘vim /etc/sysconfig/network-scrpts/if-ens33’ PS1="\e[1;31m[\u@\h \W]$\e[0m"
3、任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous!” echo -e “\e[1;31m Hi,dangerous! \e[0m” >>/etc/motd
4、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
5、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等
【文件查找和压缩】 (需要r和x的权限)
基于数据库搜索,系统建立的关联索引,新文件不会立即放入locate数据库 路径:/var/lib/mlocate/mlocate.db
–locate(定位) 路径:加双引号搜索全路径,不加可能只搜索当前目录 【updatadb:可更新于locate数据库】 特点:搜索比较快,依赖于数据库,搜索有擅长文件比较稳定的,不经常更改的文件,不影响服务器性能,搜索有局限性。 -i 忽略大小写 -n 只列举前N个匹配项 -r 正则表达式
【–find 查找(功能强大,对整个磁盘搜索)默认递归搜索】 特点: 精确查找,实时查找,速度略慢,消耗服务器性能。 查找路径:默认只搜当前目录 语法: find [OPTION]… [查找路径] [查找条件] [处理动作] 默认是并且的关系(选项里)
–常用命令 -maxdepth N 指定最大深度目录(1目录本身,2下级子目录…) -mindepth N 指定最小深度目录 -depth:可先搜文件,后目录 -name 文件名/目录名 -inum 68:找节点编号68的文件 -ls 详细属性 -samefile f1 相同节点编号的文件(硬链接) -link n :连接数为n的文件 -regex :所搜整个文件路径,而非文件全名
–根据属主、属组查找: -user USERNAME:指定用户的文件 -group GRPNAME: 指定所属组的文件 -uid UserID:查找属主为指定的UID号的文件 -gid GroupID:查找属组为指定的GID号的文件 -nouser:查找没有属主的文件 -nogroup:查找没有属组的文件
–type(根据文件类型查找) -f普通文件 -d目录 -l链接文件 -b块设备文件 -c字符设备 -p管道
-empty 搜索空文件(大小为0) -prune 剪切–组合条件 (与/且 -a 或 -o 非/取反 -not;!) !A -a !B=!(A -o B) !A -o !B=!(A -a B) 【示例】 查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件 find /etc/sane.d -prune “/etc/sane.d” -a –prune -o -name “*.conf”
查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件 find /etc ( -path “/etc/sane.d” -o -path “/etc/fonts” ) -a -prune -o -name “*.conf”
– size 根据文件大小来查找 k,M,G,c /dir -size 10M (9-10M) /dir -size -10M (0-9M) /dir -size +10M (10M以上) /dir -size +5M -size -10M (5-9M)
– 根据时间戳 -atime -mtime -ctime(天) #: [#,#+1) +#: [#+1,∞] -#: [0,#) -amin -mmin -cmin (分钟) /file -mmin 最近一分钟内的文件
– perm 精确匹配 find -perm 644 精确查看644权限 /644 -ls 只要有一个满足u6/g4/o4 的就生效,如700/004 (或的关系)== +644 效果一样(7以前的版本 ) -664 -ls 必须满足644或以上才生效 (与的关系)必须的意思
– 处理动作 -print:默认显示至屏幕 -ls:类似于对查找到的文件执行“ls -l”命令 -delete:删除查找到的文件 -fls file:查找到的所有文件的长格式信息保存至指定文件中 (等价于 -ls >重定向)
-ok cmd {} /files \; 对查找到的每个文件执行由cmd指定的命令, 对于每个文件执行命令之前,都会询问 -exec cmd {} /files \; 【{}代表前面搜索的文件名】–xargs 参数替换 echo f{1…324}| xargs touch 创建f{324},不至于参数过多 把echo命令传给touch作为它的参数
实例:ls f*|xargs rm find /bin -perm 7000 | ls -l练习 1、查找/var目录下属主为root,且属组为mail的所有文件 find /var -name root -group mail
2、查找/var目录下不属于root、lp、gdm的所有文件 find /var -type f ! ( -user root -o -user lp -o -user gdm )
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件 find /var -mtime -7 ! -user root ! -name “postfix”
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件 find / ! ( -nouser -nogroup ) -atime -7
5、查找/etc目录下大于1M且类型为普通文件的所有文件 find /etc -size +1M -type f
6、查找/etc目录下所有用户都没有写权限的文件 find /etc ! -perm 222
7、查找/etc目录下至少有一类用户没有执行权限的文件 find /etc ! -perm /111
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件 find /etc/init.d -perm -112
---------------------------------------------------------------- ----I 第九节课 2018年10月12日09:00 ---------------------------------------------------------------------I 【压缩、解压缩、归档工具】 –file-roller 图形化界面的压缩工具 file-roller file:解包
–compress file 压缩 (压缩完,源文件删除).Z后缀 (gz压缩比比z高) uncompres :解压缩 (压缩完,源文件删除) -d 解压缩 (必须是相关的,Z后缀) -c 屏幕打印标准输出(可重定向备份) -v 详情 例 compress -c file > file1(压缩并保存源文件) zcat file > file1 (保存解压文件)
–gzip 解压缩 .gz 后缀 --gunzip:解压缩 -# 1-9 压缩比 例:gzip -9 file 默认6 -d 解压缩 -c 屏幕打印标准输出(可重定向备份) > t.gz :把输入的内容输入到t.gz zcat :预览压缩文件 zcat m.gz > m1 预览m.gz并且解压到m1
(不能保留文件属性) (解压缩 zcai 支持 .gz .Z)
man bash > bash.txt
–bzip2 解压缩 压缩比更高 .bz2后缀 --bunzip2 解压缩 -k 压缩后保留源文件 -d 解压缩 -# 压缩比 默认6 bzcat:预览压缩文件 例: bzcat f.gz >f1 预览压缩包并且解压到f1
–xz 解压缩(压缩比例最高).xz后缀 --unxz 解压缩 -k 压缩后保留源文件 -d 解压缩 -# 压缩比 默认6 xzcat:预览压缩文件 -----------------------------------(以上都是压缩单个文件)--------- 压缩比例:zip<gzip<bzip2<xz
–zip/unzip 压缩/解压 .zip (可对文件夹进行打包) zip b a :a文件压缩成b.zip (保留源文件) -r b ./a/ :把a目录打包压缩到b.zip -p 保留属性 例: cat /var/log/messages | zip messages - 压缩/messages到messages.zip
【tar】 主流打包工具 -cpvf:创建归档 c创建 p权限 v过程 f文件名 -cpvf etc.tar etc 创建归档(etc打包成etc.tar)
-r -f file.tar m 追加文件 -t -f 预览文件 -x -f 解包/展开归档 -C 指定目录(例 tar -xf etc.tavr -C /data 解压到/dadta目录) -j 打包带压缩 z:gz格式 j:bz2格式 J:xz格式 (例: tar zcvf 1.gz /data) 【z:gzip j:bzip2 J:xz】 打包后缀必须:. gz/.bz2/.xz --exclude=file 排除 (例: tar zcvf /a.gz --exclude=dir/c1 /b 打包b到a,并排除c ) -T 需要打包的文件 -x 不打包的文件 (文件里面指定可打包/不打包的文件列表)【split】 分割一个tar大文件为多个小文件 -b 一个块的大小 G M K -d 表示数字后缀的方式来显示切割块 split -b 1M -d file.tgz backup-parts 分割 cat file** > file.tar.xz 合并,且压缩
【cpio】打包、解包、预览 --不常用 解包文件: .cpio .tar .gz -o 打包 -i 解包(.gz .tar) <默认输入方式解包 -d 生成目录 -v 过程 -A 追加 -O 指定文件名 -f 指定备份文件夹 -x 从备份文件中还源文件
【SED】stream editor 批量行编辑器 可读键盘输入 –常规选项 w 写入文件保存 ‘p’ 重复显示 ‘’ file 默认显示 -n 关闭自动打印到屏幕 -p 只显示被替换过的行 -e 多点编辑 -r 正则表达式 |可以直接用,不用|转换 -i.bak 编辑并备份原文件 -i 直接修改文件
–地址定界 \定界 1)不给地址:默认全文处理 2)单地址:#指定的行 $最后一行 /patt/匹配指定单词 3)地址范围:#,# #,+# /part1/,/part2/ #,/part/ 4)~:步进 1~2 奇数行’1~2’ 2~2 偶数行’2-2’
–编辑命令: d 删除 a 行下追加 i 行上追加 c 替换 w 内容保存到指定文件 r 读入内容到指定位置下(变相实现追加) = 行号 ! 取反
s/// 查找替换 p 显示替换成功的行 g 全局替换 nl 显示行号(空行不加)【练习】: @@@修改/etc/selinux/config文件;selinux=disabled策略 sed /^SELINUX=/cSELINUX=disabled /etc/selinux/config
@@@用sed取IP地址 ifconfig ens33|sed -nr ‘2s/.t (.) net.*/\1/p’
cat /etc/httpd/conf/httpd.conf最后几行去掉#字符(centos6) sed -nr ‘/^#<VirtualHost /,/#</VirtualHost>$/s/#//p’ /etc/httpd/conf/httpd.conf
@@@echo /etc/sysconfig/network-scripts/取基名 echo /etc/sysconfig/network-scripts|sed -nr ‘s@./(.)/?$@\1@p’
@@@cat /etc/default/grub;最长行添加ifnames=0 xyz" cat /etc/default/grub|sed -nr ‘/LINUX./s/(.)"/\1 xyz"/p’
@@@当系统是7版本才执行修改/etc/default/grub version=cat /etc/centos-release|grep -o [[:digit:]]|head -1 版本号变量 [ $version =eq 7 ] || exit 1 && sed -ir '/LINUX.*/s/(.*)"/\1 net.ifnames=0"/p' /etc/default/grub
【sed命令里面包含变量引用==特殊用法】 str=666 sed -nr ‘/.CMDLINE_LINUX./s#(.*)#\1 ‘’’$str’’’#p’ /etc/default/grub
nl:显示行号 (空行不加)
练习 1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符 sed -nr ‘s/($)+//’ /etc/grub2.cfg
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 sed -nr ‘s/^#\s+.*//’ /etc/fstab
3、在centos6系统/root/install.log每一行行首增加#号 sed -inr ‘s/.*/#&/p’ /root/install.log
4、在/etc/fstab文件中不以#开头的行的行首增加#号 sed -inr ‘s/[#]/#&/p’ /etc/fstab
5、处理/etc/fstab路径,使用sed命令取出其目录名和基名 echo /etc/fsab|sed -nr ‘s@/(.)/(.)@\1@p’ 目录名 echo /etc/fsab|sed -nr ‘s@/(.)/(.)@\2@p’ 基名
6、利用sed取出ifconfig命令中本机的IPv4地址 ifconfig |sed -nr ‘s/.inet (.) netmask.*/\1/p’
7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数 ls(当前目录)/run/|rev|cut -d. -f2|rev|sort|uniq -c
8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现) cat /etc/init.d/functions|egrep -o “<[[:alpha:]]+>”|sort|uniq -c|sort -nr 390 cat /etc/init.d/functions|egrep -o “<[[:alpha:]]+>”|sort|uniq -c|sort -nr 423
---------------------------------------------------------------------I 第十节课 2018年10月15日10:35 ---------------------------------------------------------------------I 【软件包管理】 进入引导文件:实体 F2 delete /// 虚拟机按 esc –软件运行和编译 ABI:应用程序二进制接口 win PE格式 linux ELF格式 API:应用程序编译接口
库级别的虚拟化: Linux: WINE Windows: Cygwin程序源代码–预处理–编译–汇编–链接
开发分类:应用–库--OS–硬件 –静态/动态链接 静态链接 把程序对应的依赖库复制一份到包 libxxx.a 嵌入程序包 升级难,需重新编译 占用较多空间,迁移容易 动态链接 (目录:/lib /lib64) 只把依赖加做一个动态链接 libxxx.so 连接指向 占用较少空间,升级方便
(使用链接调用库生成最终文件,能节约空间,优化系统资源) ldd /bin/cat : 查看动态调用了那些库 .so 动态编译 .a 静态编译–系统级开发 C C++ 硬件 OS 底层 –应用级开发 java python go php网站开发 perl
程序包管理器: debian:deb文件, dpkg包管理器 redhat:rpm文件, rpm包管理器 rpm:RedhatPackage Manager RPM Package Manager
rpm包命名方式: 常见的arch: x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc 跟平台无关:noarch
rpm包命名: name-version-n.release.arch架构.rpm (version-编译打包的次数/基于linux版本进行编译-release) (中间字段redhat后期添加)
库文件: ldd /file 查看二进制程序所依赖的库文件
管理及查看本机装载的库文件 ldconfig 记载配置文件中指定的库文件 /sbin/ldconfig -p 显示本机已缓存的所有可用库及路径管理及查看本机装载的库文件 ldconfig 加载库文件(个别包带脚本) /sbin/ldconfig-p: 显示本机已经缓存的所有可用库文件名及文件路径映射关系 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 缓存文件:/etc/ld.so.cache
数据库(公共) /var/lib/rpm 记录当时 安装包信息以及管理数据 程序包名称及版本 依赖关系 功能说明 包安装后生成的各文件路径及校验码信息
管理程序包的方式: 使用包管理器:rpm 使用前端工具:yum, dnf
获取程序包的途径: (1) 系统发版的光盘或官方的服务器 CentOS镜像: https://www.centos.org/download/ http://mirrors.aliyun.com http://mirrors.sohu.com http://mirrors.163.com (2) 项目官方站点
程序包来源: (3) 第三方组织: Fedora-EPEL: Extra Packages for Enterprise Linux Rpmforge:RHEL推荐,包很全 搜索引擎: http://pkgs.org http://rpmfind.net http://rpm.pbone.net https://sourceforge.net/ (4) 自己制作
【rpm 包管理】 安装、卸载、升级、查询、校验、数据库维护 rpm -i install 安装 -v verbose 显示详细过程 -vv 更详细 -h 以#显示程序包管理执行进度 例:rpm -ivh file -q ** 查询安装成功 只输入包名称 -q scripts ** –scripts bash:查询包是否带脚本 -e ** 卸载软件包 只输入包名称
【rpm包 安装】 –test: 测试安装,但不真正执行安装,即dry run模式 –nodeps:忽略依赖关系 –replacepkgs| replacefiles只覆盖特定包 --force 相同效果 –nosignature: 不检查来源合法性 签名 –nodigest:不检查包完整性 不检查签名 –noscripts:不执行程序包脚本 %pre: 安装前脚本–nopre %post: 安装后脚本–nopost %preun: 卸载前脚本–nopreun %postun: 卸载后脚本–nopostun
【rpm包升级】不建议用,建议直接安装 -U (upgrade) 安装有旧版程序包,则 “升级” 如果不存在旧版程序包,则“安装” -F (freshen) 安装有旧版程序包,则 “升级” 如果不存在旧版程序包,则不执行升级操作 rpm -Uvh PACKAGE_FILE … rpm -Fvh PACKAGE_FILE … –oldpackage:降级 –force: 强制安装 (只能用于更新和升级)
例: umount /misc/cd 卸载光盘 rpm -q kernel 查看内核版本 ll -d */ find -type d只查询当前目录 rpm -qfl 查看为安装某个未安装程序的包信息【rpm查询】 -q **:查看包名 -f **此文件来自于哪个rpm包 -a :查找所有包 (基于数据库查询 /var/lib/rpm) -p rpmfile:针对尚未安装的程序包文件做查询操作 -q --whatprovides CAPABILITY:查询指定的能力由哪个包所提供 -q --whatrequires CAPABILITY:查询指定的能力被哪个包所依赖 rpm2cpio 包文件|cpio–itv预览包内文件 rpm2cpio 包文件|cpio–id “*.conf”释放包内文件
-c 查配置文件 -d 查文档 -i 查包说明信息 -l 文件列表 可配合|grep ** :模糊包名 --script 程序包自带的脚本 --provides: 列出指定程序包所提供的CAPABILITY -R: 查询指定的程序包所依赖的CAPABILITY rpm --import /misc/cd/RPM-GPG-KEY-Centos-7 导入秘钥 -K 查询秘钥 --root=/mnt/sysimage 指定/的位置例: /msic/cd df 可查看光盘和刷新 mount /dev/sro /mnt/cdrom 挂载光盘 rpm -ivh /mnt/cdrom/Pakages/Kernel-** --root=/mnt/sysimage/ 指定某个目录为根,安装rpm到该路径下
which rpm ;rpm -qf /user/bin/rpm 查某个命令属于哪个rpm包 rpm2cpio:指定要转换的rpm包为cpio格式 (rpm2cpio …/libstdc+±4.3.0-8.i386.rpm | cpio -idv)
【包校验】 rpm {-V|–verify} [select-options] [verify-options] S 文件大小 M 权限和文件类型 5 MD5 D 设备主次错配 L 路径/link U 用户所有者 G 组所有组 T 修改时间 P 能力 Va 查询所有包 K 完整性和签名
【移动库以及修复】 mv /lib64/libc.so.6 /root/ 按ESC进入引导程序 进入CM-ROM drive 光盘引导 troubleshooting 进入故障排除 Rescue a CentOS system 进入救援模式, 1)Continue 进入第一个选项 然后mv /dev/da2 找到所在文件移动恢复
【删除rpm,并且恢复】 /usr/bin/rpm rm -f /usr/bin/rpm rpm2cpio /run/media/root/CentOS\ 7\ x86_64/Packages/rpm-4.11.3-32.el7.x86_64.rpm | cpio -id user/bin/
ESC进入救援模式: mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom
rpm -ivh /mnt/cdrom/Packages/rpm-4.0**.rpm --root=/mnt/sysimage/ ls -l /mnt/sysimage/bin/rpm 查看是否安装
–设置支持misc目录↓ systemctl enable autofs systemctl start autofs
@ 表示已装好的包 anaconda:装系统时就已装好的包 /etc/yum.confg :yum主配置文件 yum repolist 仓库列表
【yum】解决包的依赖性 yum server yum repodate 仓库 (rpm包)(meta元数据)repodata–存放元数据 yum client *.repo 存放/etc/yum/repos.d/ (记录指定存放仓库服务器的路径) (缓存meta元数据)(缺点:server更新包,只能删除再下载)
【安装yum client】 cd /etc/yum.repos.d/ mount /dev/sr0 /mnt/cdrom vim base.repo 然后编辑vim:↓ [base] name=cdrom baseurl=file:///misc/cd/ 本地光盘文件夹路径 gpgcheck=0 (忽略秘钥检查) gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-7
【安装yum server】 yum install httpd 安装httpd-2.4.25服务 cd /var/www/html/ rpm -ql httpd|grep service systemctl start httpd.service 开启http,启用http服务 systemctl statup stop firewalld 停止防火墙=disable echo welcome to magedu ! > index.html 创建html文件可通过网页访问 mkdir -pv centos/{6,7}/os/x86_64/ 创建6和7的目录 monut /dev/sr0 /var/www/html/centos/7/os/x86_64/ 光盘挂载到centos/7 再加载另一个光驱 6.10 / 用scandisk 更新光驱 mount /dev/sr1 /var/www/html/centos/6/os/x86_64/ 挂载cento6到centos/6 再到centos6上复制$baseaurl路径,设置网络挂载enabled=0,禁用掉
cat /etc/yum.repos.d/bak/CentOS-Base.repo yum系统自带配置文件 rpm --import /run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7 导入证书秘钥 mirrorlist=(file)可以指定文本文件里面放http/ftp等多个路径
【设置别名】epel源 alias unepel=“ping www.baidu.com -c2 -w2 &>/dev/null||sed -i /enabled=1/cenabled=0 /etc/yum.repos.d/base.repo”
练习 1、查询命令java来自于哪个rpm包 rpm -q --whatprovides java
2、yum的配置和使用,包括yum仓库的创建
3、编写系统初始化脚本reset.sh,包括别名,提示符颜色,yum仓库配置文件,安装tree,ftp,lftp,telnet等包
4、在CentOS7上编译安装apache 2.4源码包,并启动此服务
yum history undo *:撤销历史步骤 um history redo 2:重新运行2步骤 dependencies:依赖关系
yum list autofs:查看autofs包是否安装 apm -q autofs:查看autofs包是否安装 yum repolist 查看仓库 yum deplist 查看依懒性 yum history 查看历史
yum clean all 清除现有缓存 info 2 查看第二个事件 undo 2 撤销第二个事件 redo 2 重做第二个事件
yum install 安装包 yum remove 卸载包-不含依赖包 yum groupinstall " "安装包组 yum groupremove 卸载包组 yum groupinfo 查看包信息 yum grouplist 查看包内容
yum --nogpgcheck 不检查key,直接安装 yum -q install samba -y 静默安装,不提示 yum -q remove Samba -y 静默卸载,不提示 yum clean all 清除缓存 yum makecache 构建缓存 yum-config-manager --disable “仓库名" 禁用仓库 yum-config-manager --enable “仓库名” 启用仓库 yum search 搜索rpm包 yum -nogpgcheck 不检查前面 createrepo /data/repodb 建立源meta数据 作为仓库路径 rebuild
【关闭防火墙】 centos7 systemctl disable firewalld 关闭防火墙 systemctl stop firewalld 立即马上关闭 systemctl status firewalld 查看防火墙状态 ss -tnl 查看端口 systemctl stop httpd停止httpd
yum remove libvirt-daemon 卸载多余网卡
centos6 chkconfig iptables off关闭防火墙 service iptables stop 立即停止
/etc/selinux/config 设置selinux=disable
---------------------------------------------------------------------I 第十一节课 2018年10月17日 ---------------------------------------------------------------------I 【软件包编译】 C、C++:make项目管理器 cconfigure脚本—→makefile.in—→mmakefile
2)make(根据Makefile文件,构建应用程序) make 编译 3)make install (复制文件到相应路径) make install 把编译完程序复制到安装目录下 echo ‘PATH=/app/httpd/bin:$PATH’ > /etc/profile.d/httpd.sh 定义别名
的 user/group daemon 改成 user/group httpd用户 ps aux 可查看该用户正在运行 vim /etc/man_db.conf centos7修改 vim /etc/man.config centos6修改 vim /etc/httpd24/httpd.conf 修改man帮助配置文件 /app/httpd/man 黏贴到man帮助
【cmatrix编译安装】 tar xf cmatrix-1.2a.tar.gz ./configure --prefix=/app/cmatrix make && make install yum install ncurses-devel
【磁盘存储和文件系统】
–硬盘术语 扇区:sectors 柱面:cylinders 磁道:track 磁头:heads 传统机械硬盘 3个盘片 每个盘片2个磁头 早期以柱面单位分区 8M,现在以扇面为单位分区512B,更精确(centos6以后) 服务器接口大多SAS
【早期硬盘容量计算】 柱面=扇区容量(512 )每磁道扇区数(63)(磁头 数)255=8M 硬盘总容量=柱面(8M)*每盘面磁道数(1024)=8G
磁道数和柱面数相同 每磁道扇区数:6bit 2^6=64 000000保留位 63 每盘面磁道数:10bit 2^10 1024 磁头数:8bit 2^8 255
机械硬盘HDD:价格、容量、使用寿命上占有绝对优势,硬盘破坏,数据无法修复。 固态硬盘SSD:防震抗摔、传输速率、功耗、重量、噪音有明显优势,硬盘损害无法修复,价格贵。
MBR最多4个主分区,单个分区不超过2T GPT 最多128主分区 fdisk -l /dev/sda 列出指定磁盘分区状况 (dos代表MBR分区)
【MBR分区结构】: 主分区:1-4 扩展分区:1 +主分区< =4 逻辑分区:n MBR装GPT盘只能读数据,不能用来做引导盘
前面保留512byte:主引导程序446byte+主分区表DPT_64byte 每个分区:16byte 可以用来存放信息 16byte:每字节8位,一共128位__每分区 第前511,512字节的55 aa 表示经过分区
第一个byte:80 表示是活动分区 00表示非活动分区 (so,第447个byte表示第一个分区是否活动;80表示活动,00表示活动) 用hexdump 的查看第27行第15个字节是80/00_____1b0行 第15个byte 第二个byte:磁头数 20 第三个byte:扇区数 00000344 第四个byte:柱面数 44444444
【GPT】 支持128主分区,分区使用64位支持8Z/64Z数据 分区表自动备份在头和尾,不支持扩展分区 需要支持有UEFI启动程序才支持GPT分区,使操作系统启动,老版本是BIOS
【实验:分区表的备份和还原】第446到第512字节备份 /dev/sda dd if=/dev/sda of=dpt bs=1 count=64 skip=446 导出/dev/sda 第446字节后64个字节到dpt scp dpt root@192.168.34.128 /data 复制dpt文件到centos6 dd if=/dev/zero of=/d ev/sda bs=1 count=64 seek=446 清空分区表(危险) 重启进入救援模式 ifconfig ens33 192.168.34.3/24 指定IP地址 scp 192.168.34.128:/data/dpt /data 复制dpt到本地 dd if=dpt of=/dev/sda bs=1 count=64 seek=446 把文件替换到/dev/sda sync 同步内存的信息到磁盘 退出查看!!
【管理分区】 列出块设备 lsblk 创建分区使用 fdisk 创建MBR分区 Gdisk 创建GPT分区 parted 高级分区操作 重新设置内存中的内核分区表版本 partprobe
cat /etc/fstab 查看UUID(全局唯一标识) uuidgen随机生成UUID
【parted】分区工具→实时生效 parted 交互式 工具(管理分区,即时发生作用) parted /dev/sdb mklabel msdos 创建MPR分区表 parted /dev/sdb mklabel gpt 创建GPT分区表 parted /dev/sdb mkpart primary 创建大小 parted /dev/sdb rm 1 删除 parted -l 列出分区信息 parted执行后立即生效
【fdisk】分区工具 →不推荐管理gpt fdisk /dev/sdb p 打印分区列表 n 选择主分区/扩展分区 1-4 选择分区编号 5以后 逻辑分区 分区大小 起始点 :2048-41***(可以默认) 结束点 :+1G (默认回车只分一个) v 校验分区 u 转换单位 d 删除分区 w 存盘退出 q 不保存退出 t 更改分区类型
【同步分区表】 cat /proc/partition;ls /dev/sdb;lsblk 只能看到内存中的磁盘信息 disk -l /dev/sdb 能看到硬盘上实际的分区信息 partprobe /dev/* 刷新硬盘分区列表 centos7以后同步 partx -a /dev/* 新增分区 centos6 partx -d -nr --* /dev/sda 同步删除分区 centos6
uptime 开机时间
【文件系统】 把数据以文件方式进行组织 先写日志,后写数据 ll /lib/modules/uname -r/kerner/fs 查看支持的文件系统 XFS 支持限制 500TB Ext4 支持限制 50TB 兼容Ext3、Ext2
【mkfs.ext*创建ext文件系统】进行格式化 mkfs.ext4 指定文件系统类型 (-t 功能类似) -b 块大小 文件分配的最小单位 例:mkfd.ext4 -b 1024/dev/sda1 -m 5 保留5%比例空间 -h 查看超级块信息,不显示分组信息 -l 定义磁盘inode空间 -L 加卷标 -i 为数据空间中每多少个字节创建一个inode;不应该小于block大小 -N 指定iNode数量
–blkid:块设备属性信息查看 -U 指定UUID来查对应设备 -L 指定的卷标来查对应设备
–e2label:添加/查看卷标label /dev/sda1 /boot 添加 /dev/sda1 查看
–findfs:查找分区 (类似blkid) LABEL= UUID= cat /etc/fstab
–tune2fs (设定ext系列文件参数的值) centos6 -l查看指定文件系统超级块信息;super block -L 'LABEL‘修改卷标 -m #修预留给管理员的空间百分比 -j将ext2升级为ext3 -O文件系统属性启用或禁用bl,–O ^has_journal -o 调整文件系统的默认挂载选项,–o ^acl -U UUID修改UUID号 –dumpe2fs 块分组管理,32768块,系统默认备份超级块 超级块:存放元数据/文件属性 -h:查看超级块信息,不显示分组信息(不加h也可查看)
【文件系统检测和修复】 能修复文件系统,不确保恢复数据 fsck /dev/sdb1 能自动识别etx4/xfs -p 自动修复 -r 交互式修复
e2fsck:ext系列文件专用的检测修复工具 -y自动回答为yes -f强制修复【mount挂载】
一个挂载点只能同时挂一个设备 一个设备可以同时挂多少目录 --mount挂载 --umount卸载【新硬盘】:分区fdisk→创建文件系统mkfs.ext→挂载mount
【实验】:增加新硬盘,分区,创建文件系统 efs、ext4 挂载使用
【命令汇总】: make & make install 编译安装 fdisk 管理mbr分区 gdisk 管理gbt分区 parted 磁盘分区 partx 同步硬盘分区 centos6 partprobe 同步硬盘分区 centos7 mkfs.ext 创建ext文件系统 blkid 文件类型 tune2fs 文件元数据 dumpe2fs 文件分组信息 e2label 卷标 findfs 搜索 fsck -y e2fsck 文件系统检测和修复 mount umount 挂载 卸载
---------------------------------------------------------------------I 第十一节课 2018年10月19日 ---------------------------------------------------------------------I 【mount】 挂载 (设备文件、卷标、UUID)推荐指定UUID 临时生效 umount离开目录,才能卸载 -U (UUID)指定,挂载设备 -r 只读 -w 读写挂载(默认已添加) -n 不更新/etc/mtab (隐藏挂载) -a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能) -L ‘LABEL’ 以卷标指定挂载设备 -U ‘UUID’ 以UUID指定要挂载的设备 -B --bind绑定目录到另一个目录上,目录挂目录 -a 查看挂载/etc/fstab中的所有文件系统
【mount -o】 常用选项(挂载文件系统的选项) async 异步挂载 sync 同步挂载,内存更改时,同时写磁盘 atime/noatime 包含目录和文件时间(关闭可提高性能) (↓↑只对设备挂载生效) diratime/nadiratime 目录的访问时间戳 auto/noauto 是否在文件系统上运行应用程序 exec/noexec 是否在文件系统上使用设备文件 suid/nosuid 是否支持suid/sgid权限 remount 重新挂载,可修改文件系统特性 ▲ ro 只读 rw读写 ▲ user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用 loop 是否允许文件挂载在目录上 centos7不用加该选项 defaults:相当于rw, suid, dev, exec, auto, nouser, async
mount -o remount,acl mnt/sdb1或tunne2fs -o acl /dev/sdb1 都可以加acl (centos 7 acl默认就有)
vim /boot/grub/grub.conf →max_lop=100 centos6加loop重启生效 OS6 cat /etc/mtab 记录当前的设备挂载情况 cat /proc/mount 查看内核中已挂载的所有设备,隐藏也能看见 cat /proc/mtab 存放mount信息 losetup -a OS6 / losetup OS7 查看设备和文件对应关系
losetup /dev/loop10 /data/extrfile 关联设备到目录 mount /dev/loop10 /mnt/ext4 通过设备挂载 ▲centso6挂载,需要加-o loop
【findmount卸载】 findmnt /boot 判断此目录是否是个挂载点 lsof /dir ;fuser -v /dir 查看目录是否在使用 fuser -km /mnt/sdb1 此目录所有进程,全部关闭 umount 卸载 设备/挂载点
【挂载点和/etc/fstab】 保存挂载信息 vim /etc/fstab 0 – dump备份命令 几天1次 0 – 在启动时是否以fsck检验分区 (0是不要检验,1是要检验 2也是要检验,不过1会比2早被检验。)
例:目录挂目录 /boot /mnt/boot none bind 0 0 文件挂目录 /data/ext4file /mnt/ext4 ext4 loop 0 0 光盘挂目录 /dev/sr0 /mnt/cdrom iso9660 defaults 0 0
【/etc/fstab文件错误修复】 1)进入救援模式 fsck -l /dev/sdb 2) mount -o remount ,rw / 把跟改成可读可写 vim /etc/fstab 把损害盘改成# 注释(7版本),或者把数字改成0 0
mem table 内存挂载信息
【swap】:模拟内存使用 当内存空间不够,临时存放数据(交换分区) fdisk /dev/add;n ;p;默认;默认;+4G;t;82;w 分区 mkswap /dev/sdd1 创建swap系统 vim /etc/fstab 保存到fstab swapon -a 刷新swap分区 swapon -s 查询 cat /proc/swaps也可以查询 ▲调整优先级 vim /etc/fstab defaults改成 pri=1(值越大优先级越高) swapoff 禁用 然后swapon -a 启用,就可以刷新,让参数生效
【以文件方式提供swap功能】 dd if=/dev/zero of=/swapfile bs=1M count=2048 创建2G文件 mkswaf /swafpfile 创建swap系统 vim /etc/fstab 保存参数 /swapfile swap swap defaults 0 0 swapon -a 刷新 swapon -s 查看 mv /swapfile /data/ 移动swap(vim /etc/fstab 修改路径) ▲删除swap分区 swapoff /data/swapfile 禁用 swapoff /data/swapfile /dev/sdd1 关闭↑以上两个swap分区 vim /etc/fstab 修改文件 rm -rf /data/swapfile / fdisk /dev/add1 d 删除以上分区和文件
实验:增加一块新硬盘,分区,创建文件系统,挂载 fdisk 分区 ; mkfs.ext4 创建系统 mount /dev/* /mnt/ 挂载
实验:/etc/fstab文件错误,无法启动,故障排错centos6,7 重启进入救援模式,vim /etc/fsta 修改成注释然后改后两位 0 0
实验:迁移/home目录到新分区中 fdisk /dev/sdd 10G 分区 mkfs.xfs /dev/sdd1 文件系统 mkdir /mnt/home 创建目录 ▲mkfs -t xfs /dev/sdd1 格式化swap分区为xfs mount /dev/sdd1 /mnt/home 挂载到目录 cp -a /home/. /mnt/home 复制/剪切 到/mnt/home du -sh /mnt/home 查看内容 vim /etc/fstab 修改配置到文件生效 mount -a ;刷新 ls /home 查看 rm -rf /mnt/home/* umount /home ; fdisk d 最后卸载;删除
【光盘】 eject 弹出光驱 eject -t 弹入 cp /dev/sr0 /data/centos7.iso 创建ISO文件 mkisofs -r -o /data/etc.iso /etc 把/etc/打包到/root/etc.iso wodim–v –eject centos.iso --刻录光盘
【USB】 dmesg | trep usb查看硬件信息 lsusb 查看usb是否识别 /var/log/messages 查看日志信息
文件字符输入会截断,设备输入不会
【常见工具】 –df 文件系统空间 -H 以1000/10^3为单位 -T 文件系统类型 -h 2^10为单位 -i 节点数 -P pssix兼容格式输出(自动对齐)
–du 目录总体空间占用状态 -h 读 -s 总容量
【工具dd】转换和复制文件__标准输出到屏幕 of=file 输出 if=file 读取 bs=size 块大小 skip=blocks 输入文件中,跳过N个block seek=blocks 输出文件中,跳过N个block count=n 块的数量 conv=** 用指定参数转换文件 (lcase小写 ucase大写 notrunc不截断输出 Fdatasync写入磁盘 )
【dd工具应用场景】__普通文件默认会截断输出,设备不会 –备份MBR dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 –破坏MBR中的bootloader dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446 ▲备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径 dd if=/dev/sdx| gzip>/path/to/image.gz ▲将压缩的备份文件恢复到指定盘 gzip-dc /path/to/image.gz | dd of=/dev/sdx ▲拷贝内存资料到硬盘 dd if=/dev/mem of=/root/mem.bin bs=1024 ▲从光盘拷贝iso镜像 dd if=/dev/cdrom of=/root/cd.iso ▲销毁磁盘数据 dd if=/dev/urandom of=/dev/sda1
▲测读写速度 dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000 写 dd if=/root/1Gb.file bs=64k | dd of=/dev/null 读 ▲修复硬盘 dd if=/dev/sda of=/dev/sda
【练习】 1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项 mkfs.ext4 -m 1 /dev/sdb1 mkdir /test mount /dev/sdb1 /test mount -o remount,acl /test e2label /dev/sdb1 TEST 打开 vim /etc/fstabetc 添加 UID=** /test ext4 defaults 0 0 partprobe
2、写一个脚本,完成如下功能: (1) 列出当前系统识别到的所有磁盘设备 (2) 如磁盘数量为1,则显示其空间使用信息 否则,则显示最后一个磁盘上的空间使用信息 vim disk.sh disk_sum=fdisk -l /dev/sd*|grep -o "^Disk /dev/sd[a-b]"|wc -l [ $disk_sum -eq 1] && df -H|grep “system|/dev/sd”|tr -s " " |cut -d" " -f1,5||fdisk -l fdisk -l /dev/sd[a-z]|grep -o "^Disk /dev/sd[a-z]"|tail -1|cut -d" " -f2
3、将CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-x86_64-bin-DVD2.iso两个文件,合并成一个CentOS-6.10-x86_64-Everything.iso文件,并将其配置为yum源
【RAID】廉价(独立)磁盘冗余阵列 两块磁盘空间一样_fd
RAID 0: 读、写提升,磁盘2+… 无容错能力,增大数据损坏几率 RAID 4: 占用其中一块硬盘空间,放校验值,对RAID0的补充,校验磁盘损坏几率较快,3+ RAID 5: 校验位分别放各个磁盘,3+…,最多支持一块损坏,标配 RAID 6: 校验位2份分别放各个磁盘,4+…最多支持两块损坏 RAID 1: 镜像,数据两份,2+…利用率低 RAID 10: 两份RAID1合成RAID0,每组最多坏1块,4+… 容错性1/3 RAID 01: 两份RAID0合成RAID1, 只允许一组有损坏, 容错性2/3 1;5;10比较常见
JBOD:一串磁盘 堆叠组合使用 RAID7:独立电脑,自带管理工具和系统,独立运行,性能最高,成本高 ▲RAID:特征;容错性,提升性能
mdadm :模式化工具 -C 创建 -A 启用raid -F 监控 -S 禁用 -D 详细信息 -G 增加新成员(默认) -R 强制启动 -f 标记该磁盘损坏, -r 移除 -x 空闲盘/备用 -l raid级别 -c 块大小_k -n n个设备创建raid -a {yes/no} 自动创建
【raid0配置】 fdisk t fd 指定磁盘容量类型 mdadm -C -a yes /dev/md0 -l 0 -n 2 /dev/sd{d,c}1 ▲mdadm -D /dev/md0 :查看当前状态 mkfs.ext4 /dev/md0 :创建文件系统 mkdir /mnt/raid 建立目录 mount /dev/md0 /mnt/raid 挂载 vim /ect/fstab 写到配置文件
删除raid umount /mnt/raid* mdadm -S /dev/md* 禁用raid (mdadm -A /dev/md* 启用raid) ▲mdadm --zero-superblock /dev/sd2 删除元数据信息 dd if=/dev/zero of=/dev/sdc bs=1 count=512 删除分区 partx -d --nr 1-3 /dev/sd vim /etc/fsta 清除配置文件
练习 1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录 fdisk /dev/sda;n;9;;;+1G;w mkfs.ext4 /dev/sdb mkdir /backup mount /dev/sda9 /backup vim /etc/fstab
2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录
【逻辑卷管理】(LVM)_ 扩展空间_8e pvs 查看物理卷 pvdisplay 查看物理卷(更详细) vgs 查看卷组列表 vgdisplay 查看卷组 lvs 查看逻辑卷 lvdisplay查看逻辑卷
-s 指定pe物理盘区 ▲给逻辑卷分配空间的最小单 (默认4M) -n 指定逻辑卷名 -l pe单位 -L 容量 15G 10G:在原来基础上增加到10G +10G:增加10G
【创建逻辑卷】 fdisk 分区sde1 8e sdc pvcreate /dev/sd{e1,c} 创建物理卷 vgcreate vg0 /dev/sd{e1,c} 加入vg0卷组 ----vgcreate -s 可指定物理盘区 16M vg0 /dev/sd{e1,c} lvcreate -n lv_mysql -L 15G vg0 创建逻辑卷_15G容量指向vg0 mkfs.ext4 /dev/vg0/lv_mysql 创建文件系统 mkdir /mnt/mysql 新建目录 mount /dev/vg0/lv_mysql /mnt/mysql 挂载 lvextend -l +100%FREE /dev/vg0/lv_mysql 扩展到100%_逻辑卷系统▲ ▲resize2fs /dev/vg0/lv_mysql 扩展逻辑卷 ext4 centos6 ▲xfs_growfs /mnt/mysql 扩展逻辑卷 efs centos7
扩展卷组 centos7 (xfs不支持缩减) mkfs.xfs /vg0/lv_data 创建系统 mount /dev/vg0/lv_data/ /mnt/data 挂载 lvextend -L +2G /dev/vg0/lv_data 扩展 xfs_growfs /mnt/data 或↓↓↓ lvextend -r -l +100%FREE /dev/vg0/lv_mysql 通用扩展逻辑卷系统▲ (相当于lvextend、resize2fs 合成一条命令)▲
增加卷组↓sdb 20G centos6 pvcreate /dev/sdb 创建物理卷 vgextend vg0 /dev/sdb 添加/dev/sdb物理卷 lvextend -l +100%FREE /dev/vg0/lv_mysql 扩展到100%_逻辑卷系统 resize2fs /dev/vg0/lv_mysql 缩减逻辑卷↓ umount /mnt/mysql e2fsck -f /dev/vg0/lv_mysql 检查系统完整性 resize2fs /dev/vg0/lv_mysql 20G 缩减至 20G逻辑卷系统 (或者xfs_growfs /mnt/mysql 20G) lvreduce -L 20G /dev/vg0/lv_mysql ; y 缩减逻辑卷 mount /dev/vg0/lv_mysql /mnt/mysql 重新挂载
【逻辑卷删除】 pvmove /dev/sde1 把sde1占用的pe空间搬到同一个卷组的其他pv上 vgreduce vg0 /dev/sde1 从vg0中删除sde1 fdisk /dev/sde1 d 1 删除分区 partx -d --nr 6 /dev/sde 刷新
【逻辑卷迁移顺序】 1)卸载逻辑卷 2)缩减逻辑卷系统 3)卸载物理卷 4)重新挂载到其他系统 5)pvmove迁移数据 6)删除空间 – 缩减逻辑卷__不支持在线__可能会数据丢失 – 在线扩展 支持xfs系列,不支持缩减 – 挂载的时候也可以加-o or,只读
centos6 vgrename vg0 newvg0 该卷组名 umount /mnt/mysql/ 卸载 vgchange -an newvg0 禁用卷组 ▲ vgexport newvg0 导出newvg0 ▲ pvdisplay 查看要导出的盘 (关机)(迁移盘) pvscan 查看卷信息 vgimport newvg0 导入newvg0 vgchange -ay newvg0 激活卷组 (建立目录、挂载、完成)
【逻辑卷快照】vg0/lv_mysql lv_snap快照只读 centos6▲ umount /mnt/mysql lvcreate -n lv_snap -s -p r -L 1G /dev/vg0/lv_mysql 创建1G快照指向vg0 -s 快照 -p选项r读 mkdir /mnt/snap mount /dev/vg0/lv_snap /mnt/snap 挂载快照 (修改数据后) umount /mnt/mysql ; umount /mnt/snap 取消挂载 lvconvert --merge /dev/vg0/lv_snap 合并快照还原有的逻辑卷 (快照会自动删除) mount /dev/vg0/lv_mysql /mnt/mysql 重新挂载
【逻辑卷快照】vg1/lv_data lv_snap快照只读 centos7▲ mount /dev/vg1/lv_data /mnt/data lvcreate -n lv_snap -s -p r -L 1G /dev/vg1/lh_data 创建1G快照指向vg1 mkdir /mnt/snap mount -o nouuid /dev/vg1/lv_dsnap /mnt/snap 忽略uuid挂载 (取消所有挂载↓) lvconvert --merge /dev/vg1/lv_snap 合并快照到原有逻辑卷 (快照会自动删除) mount /dev/vg1/lv_data /mnt/data 重新挂载
【删除快照】 lvremove/vgremove/pvremove
【命令总结】 mdadm:元数据信息 mkisofs:打包iso mkswap:创建swap系统 swapon/swapoff:swap开启/关闭 dd:转换和复制文件工具 lsusb:USB设备的详细信息 ject eject:光驱弹出/弹入 fuser :进程处理 findmnt 确认当前是否处于挂载状态 mkisofs:将指定的目录与文件做成ISO 9660格式的映像文件 wodim:刻录光盘 dmesg:查询硬件信息
pv/pvdisplay/pvremove 物理 vg/vgdisplay/vgremove 卷组 lv/lvdisplay/lvremove 逻辑卷
lvrename/lvreduce/lvconvert vgrename/vgcreate/vgreduce/vgcvgimport/vgxport
----------------------------------------------------------------------I 第十二节课 2018年10月22日09:02:22 ----------------------------------------------------------------------I
【网络协议和管理】
OSI 开放系统互联 IOS 苹果系统/思科路由路由交换系统 ISO 镜像文件/国际标准化组织
批处理应用程序 FTP/带宽很重要 交互式应用程序 人机交互/等待相应时间很关键 实时应用程序 网络电话、视频/端到端延时至关重要
–OSI网络模型分层 应用层:为应用程序进程提供网络服务、提供用户身份验证 表示层:格式化数据、构建数据、协商应用层传输语法、提供加密 会话层:建立、管理和终止应用程序之间的会话 传输层:确保传输可靠性,建立、维护、终止虚拟电路、错误检测、加密,流控 网络层:地址管理和路由选择 数据链路层:互连设备之间传送和识别数据帧 物理层:定义电气规范、机械规范、过程规范和功能规范
–PDU 协议数据单元(对等层次传递的数据单位) 物理层:bit 数据链路层:frame 网络层:packet 传输层:segment 更高层:message
三种通讯模式:广播、组播、多播
–网络线缆和接口 双绞线 RJ45 Unshielded(UTP) 非屏蔽双绞线 Shielded(STP) 屏蔽双绞线 同轴电缆 Coaxial cable 光纤 fibre-optical RX收 TX发
–双绞线(12发,36收) 同类设备:交叉线 异类设备:直通线 T568B:国内标准 橙白1、橙2、绿白3、蓝、蓝白、绿6、棕白、棕 T568A:国际标准 绿白3、绿6、橙白2、蓝、蓝白、橙1、棕白、棕
传输模式:单工/双工/半双工
【以太网帧格式】字节 –Ethernet II 协议报头结构 === 数据链路层 总大小72-1526 抓包数据→60-1514 前导信息_8 目的MAC_6 源MAC_6 类型_2 数据_46-1500 FCS_4
–IEEE 802.3 前导信息_7 SOF_1 目的MAC_6 源MAC_6 长度_2 数据_46-1500 FCS_4 SOF=起始定界符 FCS=帧校验序列
无线局域网: 802.11 以太网标准: 802.3 中继协议标准 802.1q VLAN
–MAC 2^48地址 48位 前24 组织唯一标志符 (前两位 广播/本地地址) 后24 厂商自由分配
【课后作业】 tcpdump -i eth0 -nn (icmp) 抓包信息 (捕获网络中到达的网卡的所有数据包)
–CSMA/CD 冲突检查的载波侦听多路访问
–TCP/IP 传输控制协议/因特网互联协议 ----------------------------------------------------------------------I 第十三节课 2018年10月24日09:02:22 ----------------------------------------------------------------------I 【TCP格式】 源端口_16 目的端口_16 序号_32 确认号_32 | 前20字节固定
–端口号:应用程序的唯一标识 0-65535 仅管理员可用:0-1023 用户软件开发:1024-49151 客户端随机:49152- cat /etc/services linux查看端口号 cat /proc/sys/net/ipv4/ip_local_port_range 查看端口范围32769-60999
–TCP ssh :22 Telnet :23 ftp :21/20 http :80 https :443 dns :53 kerbors:88 安全相关的协议 smtp :25 pop3 :110 imap :143
–UDP dns :53 tftp:69 qq :8000 snmp:161 dhcp:67/68 smb :445
mysql 3306 | oracle 1521 | sqlserver 1433
tasklist:本机所有应用程序进程列表 ping -a :显示对方电脑的名称
–sync半连接和accept全连接队列 ss -lnt /proc/sys/net/ipv4/tcp_max_syn_backlog 半连接,默认128 /proc/sys/net/core/somaxconn 全连接,默认128
ss -nt|sed -nr ‘1!s/([ ]+) .*/\1/p’|sort|uniq -c 统计建立的连接数
【UDP格式】_无状态链接 源端口16 目的端口16 长度16 校验和16 data
ICMP ping -c 次 -s 大小 -w 秒 -f 泛洪
ping 192.168.34.1 -f -s 65507 泛红
arp -n 查看mac地址和ip地址对应关系 arp -d x.x.x.x 删除arp缓存 【IP pdu】报头 最小20字节
cat /proc/sys/net/ipv4/ip_default_ttl echo 128 ↑可修改ttl值
路由→ARP→三次握手
203.110.200.199/22 主机数:2^10-2 nemask:255.255.252.0 网络ID: 110010 主机ID 00.199
A 192.168.1.100 255.255.255. B 192.168.2.100 255.255.0.0 A不可以访问B B不能访问A
100.123.199.124/20 主机数:2^12-2 子网掩码:255.255.240.0 网络ID:100.123.192.0 最小和最大IP:100.123.192.1 100.123.207.254
10.0.0.0/8 给32省划分各自子网 1 子网掩码 255.248.0.0
2 最小子网,最大子网的网络ID 10.0.0.0/13 10.248.0.0/13 3 每子网主机数 2^19-2 4 第20个子网分给河南使用,最小IP,最大IP范围 10.10011 000.0.0 10.152.0.1 10.159.255.254
10.152.0.0/13 河南省 给15个市划分各自子网 1 子网掩码 10.152.0.0/17 10011 000.0 0000000
2 最小子网,最大子网 10011111.1 0000000 10.152.0.0/17 10.159.128.0/17
3 每个子网的主机数 2^15-2 =32766
4 最大子网的最小IP,最大IP范围 10.159.128.1 10.159.255.254
【课后练习】 10.152.0.0/13 87个县
1 子网掩码255.255.240.0 /20
2 最小子网,最大子网 10.152.0.0 10.159.240.0
3 每个子网的主机数 2^12-2
4 最大子网的最小IP,最大IP范围 10.159.240.1 10.159.240.254 route -n :查看路由表
----------------------------------------------------------------------I 第十四节课 2018年10月26日09:09:00 ----------------------------------------------------------------------I
动态主机配置协议DHCP 【client】 →DHCP发现(广播) 【server】 DHCP提供(广播)← →DHCP客户端请求 DCCP确认消息← DHCP端口: client:68 server:67
/etc/hosts(优先级比DNS要高) 可以指定网站的ip地址,解析
/etc/nsswitch.conf (可配置DNS优先级,一般不会改)↓ 编辑hosts:dns files myhostanme
【centos6主机名设置】 vim /etc/sysconfig/network 更改文件→重启生效,保存 hostname xxxx 更改内存 (exec bash刷新) vim /etc/host:修改后的主机名写在127后面 (例:vim /etc/sysconfig/network ;HOSTNAME=centos66)
【centos7主机名设置】 vim /etc/hostname 更改文件→重启生效 hostnamectl set-hostname xxxxx (exec bash刷新,直接保存) vim /etc/host:修改后的主机名写在127后面
【centos 6 网卡名称配置】 vim /etc/udev/rules.d/70-persistent-net.rules (重启或卸载添加网卡生效)
查看网卡 ifconfig -a /ip a:查看禁用/启用的网卡 ethtool -i eth1:查看网卡驱动 dmesg|grep -i eth0: 查看网卡名称 lsmod :查看系统加载的所有模块
安装网卡 modprobe e1000 重新安装网卡
卸载网卡 modprobe -r e1000 卸载内存中网卡 rmod e1000
禁用网卡 ifconfig eth1 down 禁用 | ifdown eth1 up 启用 | ifup ech0
【网络配置方式】 cd /etc/sysconfig/network-scripts vim ifcfg-ens33 ↓编辑 DEVICE=ens33 BOOTPROTO=static IPADDR=10.0.0.100 PREFIX=24 或NETMASK=255.0.0.0 ONBOOT=yes GATWAY=10.0.0.1
arping -I eth0 192.168.34.6 查看是否IP地址冲突 systemctl restar NetworkManager service NetworkManager stop(↑关闭以上服务)
systemctl restart network 重启网卡 service network restart 重启网卡 /proc/sys/net/ipv4/ip_forwar
–ifconfig,route,netstat,ip,ss,tc (修改完即生效,无法保存)
–system-config-network 网络设置 –setup :工具集(包括网络设置) esc切换回来 (修改完保存在文件,无法生效)
–ifconfig eth0 192.168.34.1/24 临时生效 eth0:2 10.0.0.100/8 一个网卡添加多个地址
【route命令】route -n:查看路由表 route add -host x.x.x.x gw x.x.x.x dev eth1 添加主机路由 route del -host x.x.x.x gw x.x.x.x dev eth1 删除路由
route add -net x.x.x.x/24 gw x.x.x.x dev eth1 添加网络路由 route del -net x.x.x.x/24 gw x.x.x.x dev eth1 删除网络路由
route del -net x.x.x.x/24 gw x.x.x.x dev eth1 metric 200
【跨网段路由】 1)环境准备,克隆虚拟机 2)/etc/udev/rules.d/70-persistent-net.rules cento6 网卡名称更改 modprobe -r e1000 ; modprobe e 重装网卡刷新 3)添加IP地址并保存到文件 ifconfig ens33 x.x.x.x cd /etc/sysconfig/network-scripts/ 配置到文件 (exec bash刷新) 4)配置路由 route add -net x.x.x.x/24 default dev eth0 5) 启用启用路由转发 echo 1 > /proc/sys/net/ipv4/ip_forward
【路由协议实现】 yum install quagga 路由协议安装包 cd /etc/quagga/ cp ripd.conf.sample ripd.conf service ripd status --开启rip协议
–netstat命令(较老工具) -t tcp协议 -u udp协议 -w raw cocket相关 -l 处于监听状态 -a 所有状态 -n 数字显示ip和端口 -e 扩展格式 -p 显示相关进程及PID -r 内核路由表 -i 显示接口的统计信息 -Ieth0 显示某个接口吞吐量 (ifconfig -s eth0 ↑同上)
–网卡绑定多个IP 【添加】 ifconfig eth1:2 x.x.x.x/24 up ip addr add 172.16.1.2/16 dev eth0 ip addr add 172.16.1.2/16 dev eth0 label eth0:0 【删除】 ipconfig eth1:2 down ip addr del 172.16.1.2/16 dev eth0 label eth0:0 ip addr flush dev eth0 label eth0:0 (网卡别名,只能设置静态地址)
–ip命令(centos6 需要安装 yum bash-completion才能补全) link set eth1 down:物理网卡关闭 link set eth1 up :物理网卡启用
route :查看本机路由 route add x.x.x.x/24 via x.x.x.x dev eth0 添加路由 route del x.x.x.x/24 via x.x.x.x dev eth0 删除路由 route flusk dev eth0 :清空路由表 addr 显示当前网卡 add x.x.x.x/8 dev eth1 添加网卡地址 del x.x.x.x/8 dev eth1 删除网卡地址 flush dev eth1 清空网卡所有地址 x.x.x.x/8 dev eth1:global 全局使用(默认) x.x.x.x/8 dev eth0:link 仅链路可用 x.x.x.x/8 dev eth0:host 仅本机可用–ss命令(类似netstat,性能好) -l 显示本地打开的所有端口 -pl 显示每个进程具体打开的socket -t -a 显示所有TCP socket -u -a 显示所有UDP socekt ss-o state established ‘( dport= :sshor sport = :ssh)’ 显示所有已建立的ssh连接 ss-o state established ‘( dport= :http or sport = :http )’ 显示所有已建立的HTTP连接 ss-s 列出当前socket详细信息
–修改mac地址:MACADDR=03:c5:01:c2:4d:09 到网卡配置文件 重启服务↓ service network restart service NetworkManager stop
–添加domain解析:DOMAIN=magedu.com 到网卡配置文件 ping www可自动补后缀为www.magedu.com ↑【cat /etc/resolv.conf 查看最后配置的dns/domain是否生效】
–指定静态固定路由 cd /etc/sysconfig/network-scripts vim route-eth1 10.0.0.0/8 via 172.18.0.1 去10网段给172网关 service network restart 重启网卡
【–网络接口配置-bonding】 –mode 0 轮转 策略:从头到尾顺序的在每一个slave接口上面发送数据包。本模式提供负载均衡和容错的能力
–mode 1 主备 活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.为了避免交换机发生混乱此时绑定的MAC地址只有一个外部端口上可见
–mode 3 广播 广播策略:在所有的slave接口上传送所有的报文,提供容错能力
==vim ifcfg-bond0 编辑↓ DEVICE=bond0 IPADDR=192.168.34.100 PREFIX=24 BONDING_OPTS=“mode=1 miimon=100” (mode1模式,100毫秒监听1次) GATWAY=192.168.34.1 DNS=114.114.114 然后创建两个网卡的物理文件 ==vim ifcfg-eth0 DEVICE=eth0 MASTER=bond0 SLAVE=yes 然后复制cp ifcfg-eth0 ifcfg-eth1,顺便把eth1改成eth0 (service NetworkManager stop)→最后把服务停掉 service network restart重启网卡验证… 【查看bond0状态】 cat /proc/net/bonding/bond0
【删除bond绑定】 ifconfig bond0 down 先禁用网卡 rm -f ifcfg-bond0 然后删除文件 vim ifcfg-ens33 / ens37 修改网卡文件 rmmod bonding 卸载模块 service network restart 重启服务
【CentOS 7网络属性配置】 yum info biosdevname 网卡名称配置包
–恢复传统命名方式eth0 编辑/etc/default/grub ==GRUB_CMDLINE_LINUX=“rhgbquiet …quiet net.if.name=0” grub2.mkconfig -o /etc/grub2/grub.cfg 最后生成覆盖该文件
(或者↓) vim /boot/grub2/grub.cfg (覆盖↑同上)不推荐使用这种! ==linux16 UTF-8尾部添加net.if.name=0 reboot
【nmcli】centos7
–nmcli 地址配置工具 centso7 device 查看网卡的链接状态 connetction 管理链接 modify (System\) eth1 connection.id eth1 修改网卡名称 add coon-name eth1-home type ethernet ifname 增加一份网卡配置 modify eth1-home ipv4.mothod manual connetion.autoconnet yes ipv4.addressess 10.0.0.8/8 ipv4.gatway…ipv4.dns…
配置网卡文件 modify eth1 connection.id eth1-office 更改网卡名称 up eth1-home 启用这套网卡配置 show ens37 判断此网卡是自动获取还是手动配置 modity eth1-home +ipv4.addresses 1.1.1.1/24 网卡添加多个地址 图形工具:nm-connection-editor 字符配置tui工具:nmtui 命令行工具:nmcli nmcli connetction eth0 up 生效配置 nmcli connetction reload 重新加载 nmcli connetction delete eth0删除网卡配置–跟踪网络路由 traceroute x.x.x.x tracepath x.x.x mtr x.x.x
–广播 ping -b x.x.255.255 发广播 echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 回应所有广播 (是否忽略icmp的广播报文,1:忽略 0:响应)
命令总结: ifconfig/ifup/ifdown/nmcli/nmtui/netstat/ss/route/traceroute/mtr rmmod/lsmod/modprobe/ethtools/mii-tto eth0/ethtool eth0/ grub2-mkconfig -o 生成配置文件 /etc/grub2.cfg /etc/grub2.cfg/nmtui字符工具
:gidit: ↩︎
:alpha: ↩︎
[:space:] ↩︎
[:space:] ↩︎