最近看了一些老男孩linux运维视频,挺不错的,特此记录一下
linux组成 gun组件 shell等 linux内核 其他软件 linux主要内核: linux kernel2.2 linux kernel2.4 linux kernel2.6 发行商: rehat suse centos ubuntu rehat9.0之后分版本收费 分为rehat3.x rehat4.x rehat5.x rehat6.x Fedora :rehat的一个分支,可以认为是rehat的预发布版本 Centos:rehat的另外一个分支,是把rehat里面收费的东西去掉,再编译发布 CentOS是国内使用最多的一套linux系统 ------------------------------------------------------------ 分区 主分区,扩展分区,逻辑分区 egg: 5个分区(一般最多4个主分区) 1p+le(4个L)P1 L5 L6 L7 L8 2p+le(3个L) P1 P2 L5L6L7 3p+le(2L) p+e<=4 e(扩展分区)最多只能有一个 L(逻辑分区)只能从5开始 IDE 接口 /dev/hd hda 第一块盘 hda1 第一个分区 hda2 第二个分区 hdb 第二块盘 SCI 接口:SAS/SATA/SSD /dev/sd* sda 第一块盘 sda1 sda2 sdb 第二块盘 linux的分区要求 /根分区,只有一个,存放系统程序,及文件 交换分区swap,相当于win的虚拟内存,内存不够的时候会用到 /boot分区,linux系统的引导分区,一般100--200M 文件系统 ext2/ext3/ext4 ext4效率更高,建议ext4 uname -r 内核版本 uname -a 所有 ---------------------------------------------------------- #表示超级管理员 echo 111 1>xx.log 2>xc.log 1> 表示正常输出 2>表示错误输出 命令 --help 命令的简单帮助 man 命令 命令帮助 help 命令 bash的内置命令帮助 find /root/data -type f(文件) d(目录) filename find /root/data -type f -exec rm -f {} \; 按照文件类型查找 -exec 对前面的结果进行处理 rm -f 对前面的查找的内容进行处理 {} 表示查找的内容 \;转移 特殊字符按 \ 让一个有意义的字符按,脱掉马甲 比如. 当前目录,\.就代表点 find /root/data -type f | xargs rm -f xargs 把查找到结果在后面一个个处理 find /root -type f !-name "oldgirl.txt" | xargs rm -f linux 命令可以接多个参数,and的作用,! 非,取反 -a and -o or find ./ -type d maxdepth 1 maxdepth 1 查找的深度为一级 find /log -type -f -name "*.log" -mtime +7 | xargs rm -f -mtime 文件的修改时间 ----------------------------------------------------- grep 过滤器,linux三剑客,老三 grep -v "oldbody" test.txt -v 除了oldboy -B 匹配的行前面多少行 -A 匹配的行后面多少行 -C 匹配的前后多少行 -E 可以过滤多个字符串 grep -E "hicloud|hello" xx.log grep -C 'Exception' 20 root.log 输出异常的前后20行 grep --color=auto "Exception" root.log 过滤的字符加颜色输出 ------------------------------------------------------- cat >test.xtx<<EOF test hello EOF ---------------------------------------------------- sed命令,三剑客老二,过滤(擅长取行) sed -n(取消默认完整输出) '/oldboy/p' test.txt sed -n(取消默认完整输出) '/过滤的内容/处理的内容' test.txt -i 改变文件内容 p 打印 d delete,删除 sed -n "20,30p" xx.txt 取20--30行 sed 's#oldboy#oldgirl#g' xx.txt 把oldboy 替换成oldgirl,并未改变文件实体 -i 改变文件实体 -r 不用转义 g 代表全局替换 # 可以用其他符号替换,比如= / @做分隔符 fing ./ -type f -name "xx.txt" | xargs sed "s#olgboy#olggirl#g" eg: old fff 2old fff 3old fff sed -r 's#(.*) fff#\1#g' xx.txt \1 取的是(.*) old 2old 3old 尽可能的往后匹配 ---------------------------------------------------- mkdir -p /data01/hicloud 递归创建 yum update -y 更新所有软件到最新版本,线上系统最好不做 yum remove 会删除所有依赖的包,所以最好不用 rpm -qa tree 查询这个包(已经安装) tree /root/ 展示目录结构 /bin/cp /mnt/test.txt /tmp/ 覆盖copy \cp /mnt/test.txt /tmp/ env 环境变量 alias 别名 ll='ls -l' cp='cp -i' 全路径可以屏蔽这个别名,所以可以直接覆盖,不再提示 定义别名 alias rm='echo "rm can not be used "' unalias 取消别名 别名的位置 cat /root/.bashrc 所有用户生效 /etc/bashrc /etc/profiles source /etc/profiles ---------------------------------------------- ~ 用户的家目录 root用户就代表 /root zp 用户就代表zp seq 2 5 序列 2 3 4 5 seq 1 2 10 只打印奇数 seq 2 2 10只打印偶数 seq -s ":" 5 -s是指定分隔符 {1..10} {a..z} 类似seq ----------------------------------------------------------------- awk 三剑客的老大 一门语言,擅长过滤(取列),打印,删除 awk 'print $1' 文件 $1第一列,$2第二列 egg: oldboy oldgirl ddd fff awk '{print $1}' xx.txt 结果: oldboy ddd awk -F ":" 'print $1' xx.txt 指定分隔符 awk -F "[, ]" '{print $1 " " $3}' xx.log 多个分隔符 $NF 最后一列 awk 'if(NR<31 && NR>19) prinf $1 "\n"' test.txt ls -l | awk '/^d/' 过滤目录 正则表达式 [root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $2}'????? 1 [root@oldboy ~]# echo ---1:----2|awk -F '[-:]+' '{print $3}' 2 [root@oldboy ~]# echo ---1:::::2|awk -F '[-:]+' '{print $3}' 2 awk也可以过滤 [root@masters ~]# ifconfig eth0 | awk '/inet addr/' inet addr:192.168.1.106 Bcast:192.168.1.255 Mask:255.255.255.0 --------------------------------------------------- cd - 切换到上次的目录 bash which 查找命令所在的路径,PATH的路径, linux里面大多数的命令都会在PATH里面去找 which cp whereid -b useradd locate useradd linux 时间同步的问题 date -s "xxx" 设置时间 echo "ssssssss" >> /var/spool/cron/root /dev/null 空设备 黑洞 文件描述符 ulimit -n 查看文件描述符 调整文件描述符 ulimit -nSH 65535 /etc/rc.local less 按屏或者行查看文件 ========================================================== 用户管理 useradd oldboy /etc/passwd /etc/group /etc/shadow 添加一个用户,信息会保存在这三个文件里面 passwd oldboy 为oldboy设置密码 su - root 切换到root环境 su 直接切换,环境变量还是原来的用户 所以要带- -------------------------------------------------------- 系统的优化 SELinux /etc/selinux/config /etc/inittaab 运行级别,一般3模式,没桌面 init 3,切换运行级别 开机自启动: 1,setup 2,chkconfig chkconfig --level 查看服务 chkconfig --level 235 hicloud off 把hicloud自启动235级别的关掉 -------------------------------------------------------- 正则表达式 .单个任意字符 *重复前面多个字符 .* 匹配任意字符 ^ 以什么开头的,^old 代表以old开头 $ 以什么结尾的, /$ 以/结尾的 ^$ 空行 grep "0*" root.log 匹配至少前面一个0的 grep -o "0*" root.log 精确匹配的 [abc] 匹配括号里面任意一个字符 [a-z] 匹配a-->z [^a-z] ^在括号里面是取反,即排除a-z 0{3} 重复前面000, grep -E "0{3}" root.log 0{3,} 至少三次 0{,3} 之多三次 0{3,5} 至少三次 sed -n "s#^.*ddr:##g" xx.log ^.*: 以目标前的匹配 Bc.*$目标后的匹配 第二个#之间不要写东西,相当于把匹配的替换成空的 [root@masters log]# [root@masters log]# ifconfig | sed -n "2p" | sed -r 's#(^.*dr:)##g' | sed -r 's#( Bc.*$)##g' 192.168.1.106 [root@masters ~]# ifconfig eth0 | sed -nr 's#^.*dr:(.*) Bc.*$#\1#gp' 192.168.1.106 \1 取值(.*) sed -ir 's#()#oldboy#g' xx.txt r 不用转义 主要就是用在三剑客上面 扩展的正则表达式: 主要是用在Egrep 或者grep-E + 重复一个或者一个以上的前面字符 | 查找多个字符串 ----------------------------------------------------------- 内核 /etc/sysctl.conf ----------------------------------------------------------- 目录: /etc/sysconfig/network-scripts/ 网卡目录 /etc/init.d/network restart 网卡生效 ifdown eth0 停掉网卡 ifup eth0 启动网卡 /etc/resolv.conf dns配置 /etc/hosts 相当于局域网的dns,主机名和ip的解析 ip 域名 192.168.1.106 hicloud.test.com 更改主机名: hostname hicloud 临时生效 /etc/sysconfig/network 永久生效 ------------------------------------------------------------------- /etc/fstab 有关文件系统的静态信息 开机挂在磁盘,设置文件系统挂在信息的文件,使得能够开机自动挂在 df -h 查看磁盘挂在信息 mkfs.ext4 /dev/sbd1 格式化磁盘 挂在: 1,mount -t ext4 -o noexec /dev/sbd1 /mnt 2.fstab 设置fstab自动挂在 /dev/sdb1 /mnt/ ext4 defaults 0 0 mount -a 自动挂在生效 fstab配置错了之后,系统起不来,不能挂在网络设备,只能挂在本机设备 1,开机提示,输入密码,修复 2,救援模式,rescue ------------------------------------------------------- /etc/rc.local 类似windows的启动 开机启动: 1,chkconfig 2,rc.local 建议 用/etc/rc.local,linux启动流程最后的加载文件 ---------------------------------------------------------- /etc/inittab 运行级别文件 ---------------------------------------- /etc/init.d yum/rpm安装的大部分在这下面 -------------------------------------------- /etc/profile.d 登陆的时候执行下面的脚本 ----------------------------------- usr/local 相当于win prog -------------------------------------- /var 路径 /var/log/messages 系统日志 /var/log/srcure ssh连接日志 /var/spool/cron/crontab 定时任务 ----------------------------------------------------- chkconfig 处理的命令在/etc/init.d/ sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 数字值的是运行级别,分别对应 drwxr-xr-x. 2 root root 4096 Mar 21 2015 rc0.d drwxr-xr-x. 2 root root 4096 Mar 21 2015 rc1.d drwxr-xr-x. 2 root root 4096 Mar 21 2015 rc2.d drwxr-xr-x. 2 root root 4096 May 21 06:27 rc3.d drwxr-xr-x. 2 root root 4096 Mar 21 2015 rc4.d drwxr-xr-x. 2 root root 4096 Mar 23 2015 rc5.d drwxr-xr-x. 2 root root 4096 Mar 21 2015 rc6.d 比如运行界别是3 在rc3.d下面 S***sshd-->../init.d/sshd 代表on状态 K***sshd-->../init.d/sshd 代表off状态 也可自己创建删除软连接,实现on off的状态 S55sshd -> ../init.d/sshd 55是怎么来的? 是在服务脚本里面的配置的,前几行 #!/bin/bash # # sshd Start up the OpenSSH server daemon # # chkconfig: 2345 55 25 # description: SSH is a protocol for secure remote shell access. \ # This service starts up the OpenSSH server daemon. # ---------------------------------------------------------------------- tar 打包以及压缩,尽量切换到打包文件的上一级目录 tar zcvf etc.tar.gz /etc 压缩 tar tf etc.tar.gz 查看里面的文件 ------------------------------------------ cut cut -d" " -f2,3 xx.log 指定分隔符,取2,3列 ---------------------------- wc -l /etc/passwd 显示行数 ps -ef | grep tomcat | wc -l ---------------------------