第一部分:基础部分 1.1window到linux互传文件 1.1.1使用rz/sz命令 安装:yum install lrzsz –y 最好安装以下内容: yum install telnet nmap dos2unix lrzsz
rz –y 上传文件 –y直接覆盖(只能上传文件) sz -y anaconda-ks.cfg 下载(默认路劲)SCRT内部配置)
SCRT配置上传和下载路径: 会话选项-Xmodem/Zmodem 上传和下载路劲 1.2Linux调整和安全设置 防止爆破ssh: http://www.cszhi.com/20120413/block-abuse-ssh-ip.html 1.2.1 关闭SELinux功能 临时关闭:setenforce 0 设置SELinux状态1 启用 0警告不启用 可以用:getenforce 查看一下SELinux的状态
永久关闭:修改/修改/etc/selinux/config 中的SELINUX=disabled,如下: sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config 检查:grep =disabled /etc/selinux/config 需要重启服务器 1.2.2 设置操作级别 /etc/inittab 有这样一行文件 id:5:initdefault: 5图形界面,6重启,0关机,3命令行 如果设置为6,启动时重启无限循环 解决:在进入grub引导界面时,请输入e,选择第二行输入e,最后输入1(单用户级),然后按b进入单用户模式,再进入文件inittab修改成5
Centos7默认进入图形化界面: ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
切换到多用户命令模式: systemctl set-default multi-user.target 可以用systemctl get-default 查看当前模式 1.2.3 启动简化启动系统 1.2.3.1 启动服务必须启动 sshd rsyslog network crond sysstat 1.2.3.2 设置启动自启动程序 1.2.3.2.1使用 /etc/rc.local文件 另一个目录:cd /etc/profile.d 只要下面的脚本重新登录或启动,就会执行 /etc/motd 登录后显示的字符串
Centos7 在路径 /etc/rc.d/rc.local 下面 详细请看6.5节,NFS启动自启动 1.2.3.2.2 使用命令chkconfig chkconfig mysqld on 设置启动自启动 chkconfig –level 2 mysqld on 设置操作级别
chkconfig –level 3 mysqld off 关闭启动程序
chkconfig –list 查看启动了那些服务
下面的命令可以使用 批量关闭或开启服务 chkconfig --list | awk ‘{print $1}’ | grep -Ev “netconsole|sshd” 然后使用循环
Centos7中使用: 参考:http://www.cnblogs.com/startcentos/p/6147444.html 使用下列命令查看并启动服务 systemctl list-unit-files|grep enabled
systemctl enable jenkins.service #设置jenkins为自启动服务 sysstemctl start jenkins.service #启动jenkins服务
使用脚本停止服务: vi stop-off.sh
systemctl list-unit-files|grep enabled|awk ‘{print $1}’|grep -E “abrt-ccpp.service|abrt-oops.service” > /root/data1.txt
while read line do echo $line systemctl stop $line done < /root/data1.txt 1.2.4 防火墙关闭防火墙 1.2.4.1基于Centos6的版本 service iptables start 启用防火墙 service iptables stop 关闭防火墙 service iptables status 检查防火墙的状态
在防火墙中添加开发端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
将白名单添加到防火墙中: -A INPUT -s 192.168.1.10/24 -j ACCEPT -A INPUT -s 192.168.1.11/24 -j ACCEPT -A INPUT -s 192.168.1.12/24 -j ACCEPT
将黑名单添加到防火墙中 -A INPUT -s 192.168.1.12/24 -j DROP
命令:iptables -I INPUT -s 111.44.251.19 -j DROP
防火墙需要重启 service iptables restart 1.2.4.2基于Centos7的版本 systemctl start firewalld.service systemctl stop firewalld.service systemctl status firewalld.service systemctl disable firewalld.service 禁止启动防火墙
在防火墙中添加开发端口 参考文档:http://blog.csdn.net/u012486840/article/details/52472704
firewall-cmd --zone=public --add-port=3306/tcp --permanent 命令含义: –zone #作用域 –add-port=80/tcp #添加端口的格式为:端口/通信协议 –permanent #永久生效,重启后无此参数无效
防火墙需要重启: firewall-cmd --reload 1.2.4.3将firewalld换成iptables 参考网址:http://blog.csdn.net/zhldt2008/article/details/52626892 关闭firewalld systemctl stop firewalld.service systemctl disable firewalld.service systemctl mask firewalld.service
安装iptables yum install iptables-services –y
启动设置防火墙 systemctl enable iptables systemctl start iptables
检查防火墙的状态 systemctl status iptables
编辑防火墙,增加端口 vi /etc/sysconfig/iptables #编辑防火墙配置文件 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT :wq! #保存退出
重启生效 systemctl restart iptables.service #重启防火墙,使配置生效 systemctl enable iptables.service #设置防火墙启动启动 1.2.5 更改SSH远程登录配置服务端 修改/etc/ssh/sshd_config 文件 Port 改变口号 #ListenAddress 0.0.0.0 ##内网修改为服务器ip地址 #PermitRootLogin yes #改为no 禁止客户端通过root用户登录 #GSSAPIAuthentication yes #改为no之后,解决ssh连接慢的问题 #UseDNS yes #改为no没有必要通过解析域名来快速连接
Centos7修改ssh端口 http://blog.csdn.net/jasper_success/article/details/38537049 1.2.6 sudo控制用户对系统命令的使用权限 使用root用户: visudo == vi /etc/sudoers 在第98行: root ALL=(ALL) ALL 添加: hadoop ALL=(ALL) NOPASSWD:ALL 这样就跟root同样的权限 hadoop ALL=(ALL) /bin/touch,/usr/bin/yum 只有两个命令的权限 NOPASSWD: 为输入sudo的时候不用入密码了 第一个 ALL=(ALL) 表示可以执行所有的用户里面的东西 第二个All 表示可以执行所有的命令权限
然后在普通用户下使用 sudo yum install tree –y 1.2.7 显示中文字符集 Centos6对应文件 /etc/sysconfig/i18n 修改下面内容: sed -i ‘s#en_US.UTF-8#zh_CN.UTF-8#g’ /etc/sysconfig/i18n 然后执行 source /etc/sysconfig/i18n
Centos7对应文件 /etc/locale.conf 1.2.8 设置客户端超时时间 export TMOUT=10 表示为10秒
以下永久生效: echo “export TMOUT=10” >> /etc/profile source /etc/profile
使用 echo $TMOUT 查看 1.2.9 历史记录数控制 history 默认保留1000个 export HISTSIZE=5 只保留5个
永久生效:需要设置到/etc/profile中 1.2.10 历史记录文件的命令数量 export HISTFILESIZE=10 1.2.11 加大文件描述符 第一步: vi /etc/security/limits.conf 添加如下内容: hadoop soft nofile 65535 (将hadoop改为*,表示所有用户) hadoop hard nofile 65535
hadoop soft nproc 32000 hadoop hard nproc 32000
解释: hadoop为运行hadoop的用户名 soft nofile 软限制是操作系统内核强制限制的打开文件描述符的个数 hard nofile硬限制是软限制的上限 soft nproc软限制是操作系统内核强制限制的开启线程的个数 hard nporc硬限制是软限制的上限
第二步:在/etc/pam.d/login文件中添加如下内容 vi /etc/pam.d/login 添加下面内容: session required pam_limits.so
第三步:然后在以hadoop账户登录即可 使用ulimit –u 和 ulimit –n 查看是否修改成功 ulimit –a 查看所有 1.2.12 服务器内核参数优化 net.ipv4.tcp_fin_timeout = 2 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_keepalive_time = 600 net.ipv4.ip_local_port_range = 4000 6500 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_max_tw_buckets = 36000 控制TIME-WAIT状态的数量 net.ipv4.route.gc_timeout = 100 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.core.somaxconn = 16384 net.core.netdev_max_backlog = 16384 net.ipv4.tcp_max_orphans = 16384 以下参数是对iptables防火墙的优化, net.ipv4.ip_conntrack_max = 25000000 net.ipv4.netfilter.ip_conntrack_max = 25000000 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180 net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120 net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60 net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait =120 将上面的内核参数加入到 /etc/sysctl.conf 然后执行sysctl -p 生效
参考链接: http://yangrong.blog.51cto.com/6945369/1321594 http://oldboy.blog.51cto.com/2561410/1336488 1.2.13 锁定系统重要文件 有时候为了安全,我们需要锁定系统的文件,例如/etc/passwd /etc/shadow等 用下面的命令锁定: chattr +i /etc/passwd isattr /etc/passwd 查看 chattr –i /etc/passwd 解除 1.2.14 禁止IP被ping和设置临时IP echo “net.ipv4.icmp_echo_ignore_all=1” >> /etc/sysctl.conf sysctl –p 生效
设置临时IP ifconfig eth0 192.168.27.78 只是临时生效 1.2.15 更改yum的下载地址 yum安装软件的时候,默认是从centos的官网去下载,这样导致要链接到国外的服务器,有时候就会很慢,所以我们要更改成国内的,比如:阿里云,搜狐等
首先需要备份: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下面我们以阿里云为例: 进入阿里云的镜像网站 http://mirrors.aliyun.com/ 找到Centos 点击 help
找到对应的版本:
1.2.16 及时清理垃圾邮件服务 邮件小文件过多,就会导致inode过多,从而导致inode被过多的消耗.因此需要及时清理。 在路劲 /var/spool/postfix/maildrop 写如下命令清理: find /var/spool/postfix/maildrop/ -type f|xargs rm -f 1.3 Linux目录结构 1.3.1 目录总体介绍 bin 可执行文件,存放常用命令的目录(用户命令,系统启动要用的) boot 存放引导相关的文件(系统启动相关的文件,如:内核,initrd,grub),一删掉系统就起不来了 dev 系统中的所有设备文件 etc 存放配置相关的文件 home 存放普通用户的相关文件 lost+found 在ext3文件系统中,当系统意外崩溃或机器意外关机,会产生一些文件碎片在这里。当系统在开机启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。当系统发生问题。可能会有文件被移动到这个目录中,可能需要用手工的方式来修复,或移到文件到原来的位置上。 media 挂载点目录,移动设备 mnt 默认挂载光驱和软驱的目录,用于移动设备的可挂载点 opt 可选目录,第三方程序的安装目录 proc 伪文件系统,内核映射的文件,关机后目录就空了 root 存放root用户的相关文件 sbin 存放具有一定权限才能使用的命令(管理命令,系统启动要用的) sys 伪文件系统,跟硬件设备相关的属性映射文件,关机后就空了 tmp 系统的临时目录 /var/tmp usr 安装一个软件默然安装的文件夹 var 存放经常变化的文件 1.3.2 /etc/目录 /etc/rc /etc/rc.d /etc/rc*.d 启动、或改变运行级时运行的scripts或scripts的目录. /etc/hosts 本地域名解析文件 /etc/sysconfig/network IP、掩码、网关、主机名配置 /etc/resolv.conf DNS服务器配置 /etc/fstab 开机自动挂载系统,所有分区开机都会自动挂载 /etc/inittab 设定系统启动时Init进程将把系统设置成什么样的runlevel及加载相关的启动文件配置 /etc/exports 设置NFS系统用的配置文件路径 /etc/init.d 这个目录来存放系统启动脚本 /etc/profile, /etc/csh.login, /etc/csh.cshrc 全局系统环境配置变量 /etc/issue 认证前的输出信息,默认输出版本内核信息 /etc/motd 设置认证后的输出信息 /etc/mtab 当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如df 命令 /etc/group 类似/etc/passwd ,但说明的不是用户而是组. /etc/gshadow 用户组的密码 /etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息. /etc/shadow 在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对root可读.这使破译口令更困难. /etc/sudoers 可以sudo命令的配置文件 /etc/syslog.conf 系统日志参数配置 /etc/login.defs 设置用户帐号限制的文件 /etc/securetty 确认安全终端,即哪个终端允许root登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权 /etc/printcap 类似/etc/termcap ,但针对打印机.语法不同. /etc/shells 列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在 /etc/shells 文件中,如果不是将不允许该用户登录. /etc/xinetd.d 如果服务器是通过xinetd模式运行的,它的脚本要放在这个目录下。有些系统没有这个目录,比如Slackware,有些老的版本也没有。在Redhat Fedora中比较新的版本中存在。 /etc/opt/ /opt/的配置文件 /etc/X11/ X_Window系统(版本11)的配置文件 /etc/sgml/ SGML的配置文件 /etc/xml/ XML的配置文件 /etc/skel/ 默认创建用户时,把该目录下的文件拷贝到家目录下 /etc/default/useradd 添加新的用户的时候,一些参考信息全部来自这个文件里面的内容,包括/etc/skel的目录也是在这个文件中设置的 /etc/profile.d 该目录下面的脚本只要是重新登录或者开机启动都会执行
1.3.3 /var/目录 /var/log/message 日志信息,按周自动轮询 /var/spool/cron/root 定时器配置文件目录,默认按用户命名 /var/log/secure 记录登陆系统存取信息的文件,不管认证成功还是认证失败都会记录 /var/spool/clientmqueue/ 当邮件服务未开启时,所有应发给系统管理员的邮件都将堆放在此 /var/spool/mail/ 邮件目录 1.4 网卡配置 1.4.1 在/etc/sysconfig/network-scripts/ifcfg-em1配置 1.4.1.1全文件配置 DEVICE=em1 --网卡对应的设备别名 HWADDR=00:24:E8:67:DC:8B --网卡mac地址,物理地址 TYPE=Ethernet --网络接口格式,一般为以太网 UUID=a184e168-ae42-4a9d-ade5-4d81cfa47c9f ONBOOT=yes --系统启用时是否启用网卡 NM_CONTROLLED=yes BOOTPROTO=static --网卡获得Ip地址的方式,默认dhcp自动获取 IPADDR=192.168.1.11 --IP地址 NETMASK=255.255.255.0 --子网掩码 GATEWAY=192.168.1.1 --网关 DNS1=222.246.129.80 --DNS为域名到ip的解析器,陪了它才能
配置完后,重启网络服务: /etc/init.d/network restart 1.4.1.2命令配置网关 命令行优先,而且只能临时生效 route add default gw 192.168.1.1 增加网关 route del default gw 192.168.1.1 删除网关 route –n 或者 netstat -an 查看网关信息 1.4.2 修改dns配置 cat /etc/resolv.conf ; generated by /sbin/dhclient-script nameserver 222.246.129.80 nameserver 59.51.78.210 1.4.3 DNS的解析原理
通过命令查看baidu的解析原理: dig @8.8.8.8 www.baidu.com +trace nslookup 输入域名 hosts ping 1.4.4 修改hostname Centos6修改: vi /etc/sysconfig/network ,修改 HOSTNAME=hadoop1
Centos7修改: 使用hostnamectl命令,hostnamectl set-hostname name , 再通过hostname或者hostnamectl status命令查看更改是否生效
永久生效: /etc/hostname 直接添加:hadoop1 或者:echo hadoop1 > /etc/hostname 1.6Linux权限对应 1.6.1权限介绍 第一组表示当前用户的权限, 第二组表示所在组的其他用户的权限, 第三组表示其他组的用户的权限 r用4 w用2 x用1 这样4+2+1就为7 例如:r-x 就应该为4+1 为5 -rw------- (600) – 只有属主有读写权限。 -rw-r–r-- (644) – 只有属主有读写权限;而属组用户和其他用户只有读权限。 -rwx------ (700) – 只有属主有读、写、执行权限。 -rwxr-xr-x (755) – 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。 -rwx–x--x (711) – 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。 -rw-rw-rw- (666) – 所有用户都有文件读、写权限。这种做法不可取。 -rwxrwxrwx (777) – 所有用户都有读、写、执行权限。更不可取的做法 1.6.2 举例说明 chmod a-x myfile rw- rw- rw- 收回所有用户的执行权限 chmod og-w myfile rw- r-- r-- 收回同组用户和其他用户的写权限 chmod g+w myfile rw- rw- r-- 赋予同组用户写权限 chmod u+x myfile rwx rw- r-- 赋予文件属主执行权限 chmod go+x myfile rwx rwx r-x 赋予同组用户和其他用户执行权限
-R选项是连同子目录下的文件一起设置 chmod -R 664 /usr/local/home/dave/* 1.6.3chown的使用 注意:chown的操作权限一般为root(管理员) chown的作用是:把文件的所有权交个另外一个用户 例如: -rw-r–r--. 1 root root 0 Feb 13 17:52 my.txt my.txt文件最开始属于 root用户和root用户组 在执行: chown hadoop my.txt 命令后,查看是以下结果: -rw-r–r--. 1 hadoop root 0 Feb 13 17:52 my.txt 那么my.txt文件就属于hadoop用户了
同理得到以下命令:把文件的所有权交个另外一个用户和用户组 chown zhangfan:zhangfan my.txt
重要参数介绍: -R 处理指定目录以及其子目录下的所有文件 -v 显示详细的处理信息 1.6.4 inode和block 1.6.4.1 inode 得到inode的信息:通过 ll –i 第一列就是的 inode 相当于索引,书的目录。 文件被格式化之后会生成很多个inode和block. Block 是存储实际数据的,比如视屏,图片等 Inode 是存放数据的属性的,比如文件的修改时间,大小,用户以及用户组,还有文件实体的指针功能等,可以通过ls –l 查看,但是不包括文件名
查看一个分区inode的个数:(只针对ext2 ext3 ext4文件系统) dumpe2fs /dev/sda1|grep “Inode size” df –i 查看挂载磁盘inode的情况
原理如图:
1.6.4.2 block 磁盘读取数据是按照block为单位读取的。 一个文件可能占用多个block,每次去一个block都会消费一次磁盘的IO 要提升磁盘IO性能,就必须一次性读取数据尽量的多 一个block只能存放一个文件的内容,无论文件有多小。 Block的大小都是在磁盘格式化的时候确定的。 1.6.5 特殊权限suid-sgid-sbit 1.6.5.1 suid 针对命令或者二进制程序的,脚本不可以 1.用户或者属性对应的前三位的x位上如果有s,就表示suid权限 当x位上没有小写的x执行权限的时候,suid的权限就是大S 2.suid的作用就是让普通用户也可以像root的用户角色一样运行只有root才能执行的命令或者程序 设置suid的特殊权限 chmod 4755 /bin/rm 权限在前面加4 3.问题:系统普通用户能够删除本来无权删除的文件 a.给普通用户授权rm b.给rm命令设置suid, c.设置上级目录权限
查看有suid权限的命令: find / -type f -perm 4755|xargs ls –l suid的权限为4
例如:将cat命令设置为suid权限 chmod 4755 /bin/cat 那么,不管什么用户都可以去其他用户下面cat命令了 1.6.5.2 sgid 查看有sgid权限的命令: find / -type f -perm 2755|xargs ls –l sgid的权限为2 例如: 用s或S来表示 -rwxr-sr-x. 1 root cgred 15616 3月 6 2015 /usr/bin/cgclassify -rwxr-sr-x. 1 root cgred 15584 3月 6 2015 /usr/bin/cgexec -rwxr-sr-x. 1 root tty 19536 11月 20 2015 /usr/bin/write -rwxr-sr-x. 1 root root 11208 11月 20 2015 /usr/sbin/netreport -rwxr-sr-x. 1 root postdrop 218552 6月 10 2014 /usr/sbin/postdrop -rwxr-sr-x. 1 root postdrop 259992 6月 10 2014 /usr/sbin/postqueue 当他作用于文件时,和suid差不多 当他作用于一个目录时,当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。 1.6.5.3 sbit find / -type f -perm 1755|xargs ls –l sgid的权限为1 用t或者T来表示的 1.7文件属性 1.7.1文件属性介绍 用file命令查看文件类型: file /etc/hosts d 目录 f 文件 b 光驱,块 find /dev -type b|xargs ls -l l 链接文件 c 字符文件,串行接口的设备 find /dev -type c|xargs ls –l 创建:mknod oldboy c 5 1 p 管道文件 s socket相关 1.7.2链接 1.7.2.1硬链接 通过索引节点(inode)来链接,多个文件名指向同一个索引节点是正常而且允许的,这种情况的文件称为 硬链接(共用同一个inode) 作用:文件有多个入口,可以对文件进行快照,备份,防止误删数据。 创建硬链接:ln 源文件 硬链接文件
小结:
1.7.2.2软链接 相当于windows的快捷方式。 创建软链接:ln –s 源文件 软链接文件
1.7.2.3 文件删除原理
1.7.3/etc/passwd /etc/shadow字段解释
1.8磁盘相关 1.8.1 磁盘选购总结
1.8.2 不同类型磁盘数据表格对比
1.8.3 磁盘容量的计算方法 方法一:
方法二:
以下是相关名词的解释: Disk 磁盘 Head 磁头 Sector 扇区 Track 磁道 Cylinder 柱面 Units 单元块(一个柱面的大小) Block 数据块 Inode 索引节点 1.8.4 磁盘分区 1.对新添加磁盘的快速分区方法: echo -e “n\np\n1\n\n+10G\nn\np\n2\n\n+20G\nw”|fdisk /dev/sdb partprobe /dev/sdb 2.手动分区fdisk(推荐使用) fdisk/dev/sdb 进入分区模式: 按 n -> 按p 出现分区数目 按1 设置第一个扇区的大小 大小开始为默认 结束为+10M 这样就分好了一个区 使用p查看一下。
再按 n -> p 依次设置分区即可。 如果觉得分区出错了,可以使用d 删除分区数目
分区扩展分区: 按 n -> 按 e 然后按照提示做 就可以了
在扩展分区上在设计 逻辑分区: 再按n -> 按l 然后按照提示 设计大小即可
所有完成之后 按w 保存退出 按q不保存退出
partprobe /dev/sdb 通知linux内核,已经改了分区表
然后格式化 自己的分区: mkfs.xfs /dev/sdb5 centos7是xfs文件系统,centos6是ext4文件系统
最后挂载到磁盘: mount /dev/sdb5 /mnt
使用df –h 就可以查看到挂载的东西
然后在/etc/fstab 添加下面的内容,开机挂载(错误就起不来了,谨慎使用) /dev/sdb5 /mnt xfs defaults 0 0 另外一种方式: 也可以将mount /dev/sdb5 /mnt 写入到/etc/rc.local文件中 3.使用parted分区(大于2T)
4 手动挂载 1.创建一个虚拟的磁盘,或者以块设备 dd if=/dev/zero of=/dev/sdb1 bs=4906 count=1000 2.格式化 mkfs.ext4 /dev/sdb1 3.挂载 mount -t ext4 -o loop,noatime,noexec /dev/sdb1 /mnt 4.查看 df –h 或者 cat /proc/mounts
/etc/fstab文件解析:(开机自动挂载磁盘分区信息) 数据例如下面的格式:
一共分为6列: 第一列:磁盘设备名称 也可以挂载uuid 第二列:磁盘文件名称 第三列:磁盘文件类型 第四列:文件挂载属性的描述,自己搞设备可以配成loop,noatime,noexec 第五列:是否备份 0表示不备份 第六列:开机是否检查磁盘 0不检查 非0检查,根目录为1,其他目录为2 5.与磁盘相关命令汇总 fsck 磁盘检查修复文件系统,没有问题的分区不要操作 fdisk –l查看分区情况 df –h 查看磁盘挂载信息 df –i 查看磁盘挂载的Inode的情况 du –sh 查看文件或者文件夹的大小 free –m 查看内存状态的大小(buffer cached) mount /dev/sdb5 /mnt 挂载 unmount /mnt 取消挂载 第二部分:命令部分 2.0 正则表达式与通配符 前提: 注意字符集:export LC_ALL=C 2.0.1 正则表达式(用于三剑客) ^ 表示以某某开头 $ 以什么结尾 . 单个任意字符
- 重复前面任意0个或者多个字符 .* 匹配任意字符 ^$ 表示空行 \ 转义字符 .表示点 让有特殊意义的字符脱掉马甲 [abc] 匹配集合内的任意一个字符 [^abc] 匹配不包括^后的任意字符串的内容 a{n,m} 重复n到m次,如果用egrep/sed –r去掉代表转义的斜线
- 重复一个或一个以上前面的字符 ? 重复0个或者1个前面的字符 | 相当于或 过滤多个字符串的时候 () 找出用户组字符串 举例: ls -F | grep "^D.*s " 匹 配 以 D 开 始 s 结 尾 的 字 符 串 2.0.2 实 战 2.0.2.1 找 出 文 件 夹 下 的 所 有 一 级 目 录 方 法 一 : l s − F ∣ g r e p “ / " 匹配以D开始s结尾的字符串 2.0.2 实战 2.0.2.1 找出文件夹下的所有一级目录 方法一: ls -F | grep “/ "匹配以D开始s结尾的字符串2.0.2实战2.0.2.1找出文件夹下的所有一级目录方法一:ls−F∣grep“/” 有点瑕疵:就是有个/结尾的 结果:
方法二: ll | grep “^d” 出来所有的信息,包括权限等 ^d 表示以d开头的 结果:
方法三: ll | grep “^d” | awk ‘{print $NF}’ 结果:
方法四:使用find查询 find . -type d -maxdepth 1
方法五: 使用tree命令 tree –d –L 1 2.0.2.2 sed –i ‘s#(正则)#\1#g’ 模式使用 把前面正则匹配的括号内的结果,在后面用\1取出来操作 例如: 样例一:把前面通过正则匹配的结果,在后面用,通过\1拿出来 echo oldboy >> oldboy.txt echo oldboy1 >> oldboy.txt echo oldboy2 >> oldboy.txt
cat oldboy.txt 有下面的数据: oldboy oldboy1 oldboy2
sed -r ‘s#(.*)boy#\1gril#g’ oldboy.txt 得到下面的数据: oldgril oldgril1 oldgril2
解析: -r 表示自动识别特殊字符 (.) 表示匹配一行 从头开始 知道看到 boy就结束 那么后面的 \1表示取第一个括号 就会拿到 old 的数据 然后 boy 用 gril 替换 后面的数据不变 样例二:通过正则和反向表达式拿出ip ifconfig em1|sed -n ‘2p’|sed -r 's#^.inet addr:(.) Bc.KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲\1#g' 或者写更简单的: …#\1#gp’ 2.0.2.3 提取邮箱 egrep “^.@.…*$” log.txt 或者更精确点: egrep “[a-zA-Z0-9.]+@[a-zA-Z0-9.]+.[a-zA-Z]{2,4}” log.txt 2.0.3 通配符 用于bash 命令
- 代表0到多个 ? 代表1个字符 ; 连续命令的分隔符
配置文件注释
-
| 管道
- 用户的家目录 $ 变量前要加的符号 / 路劲分隔符
重定向符号 2.1 线上查询帮助命令 2.1.1 man-查看帮助命令 man ls 查看帮助文档 2.1.2 help-查看Linux内置命令 查看bash内置命令的帮助文档 内置命令包括如下: alias, bg, bind, break, builtin, caller, cd, command, compgen, complete, compopt, continue, declare, dirs, disown, echo, enable, eval, exec, exit, export, false, fc, fg, getopts, hash, help, history, jobs, kill, let, local, logout, mapfile, popd, printf, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, true, type, typeset, ulimit, umask, unalias, unset, wait
2.2目录操作命令 2.2.1 ls-ll-列出目录下的内容及属性信息 查看目录下的内容 -h 查看文件的大小 -a 查看全部的目录,包括隐藏文件或者文件夹 -F 给目录后面加上/ –time-style=long-iso 格式化时间 long full (可以使用别名) 2.2.2 tree-以树形结构显示目录下的内容 -d 显示目录 -L 表示层数 例如: tree –d –L 1 显示当前目录下的所有目录 2.2.3 pwd查看当前目录绝对路劲 pwd 2.2.4 mkdir-创建目录 -p 递归创建目录 2.2.5 rmdir-删除空目录 rmdir 目录名 2.2.6 cd-切换目录 2.3 文件操作命令 2.3.1 touch-创建空白文件 用命令 touch a 创建名为a的空文件 -a 改变访问时间 -c 不创建任何文件 -m 改变修改时间 2.3.2 cp复制与别名 cp text /home/hadoop/
-a 拷贝目录 相当于pdr -p 连同档案的属性一起复制过去,例如权限也复制过去 -d 若源文件为链接文件,则不跟随源文件中的符号链接 -r 递归复制目录 -i 需要提示确认
注意:一般的复制,如果目标文件存在,他会提示你是否覆盖,下面方式是不让他提示,直接覆盖。 /bin/cp /tmp/test.txt /mnt 或者 \cp /tmp/test.txt /mnt 原理:我们使用cp的时候,他走了别名cp –i ,然而使用全路劲就将别名覆盖了
那么可以使用先取消别名,在使用cp unalias cp cp /tmp/test.txt /mnt
别名的用法: alias lls=‘ls -l /app/sati’ 给ls -l 这个命令起一个别名为lls的 这个只是暂时的,当终端关闭后别名就会失效,要想长久生效需要在环境变量中配置 echo ‘alias lls=“ls -l /app/sai”’ >> ~/.bash_profile,这样就能在当前用户下生效
实战:给rm 命令做一个提示: alias rm=“echo ‘rm not can user,please use mv’”
unalias 取消别名 2.3.3 mv移动 mv text /home/hadoop/ 2.3.7 rename-重命名文件 rename “bai” “sina” baidu.html 将baidu.html 改为 sinadu.html 2.3.8 ln-建立连接 创建软链接:ln –s 源文件 软链接文件 创建硬链接:ln 源文件 硬链接文件 2.3.9 basename-显示文件名或者目录名 basename /home/hadoop 显示结果:hadoop 2.3.10 dirname显示文件或目录路劲 dirname /home/hadoop/redis-4.0.1.tar.gz 显示结果: /home/hadoop dirname /home/hadoop 显示结果:/home 2.3.11 md5sum-计算和校验文件的md5值 md5sum redis-4.0.1.tar.gz 输出结果: 26d17312b3fb4d0ac9cecda886d00421 redis-4.0.1.tar.gz 2.3.16 chattr-改变文件扩展属性 2.4文件查看及处理命令 2.4.1 cat-查看文件内容 将[文件]或标准输入组合输出到标准输出 cat –n file 打印行号 2.4.2 more-less less file 按屏或者按行(回车)查看文件 more file 不支持上下键查看 2.4.3 head-tail head –n 2 old.txt 取两行的数据
tail –n 2 old.txt 取后两行的数据 tail -f test.txt 跟踪文件尾部的实时变化 2.4.4 tac-倒过来输出文件内容 tac test.txt 2.4.5 cut-将文件的每一行按分隔符分割并输出 -d “,” 表示以逗号分隔符切分 -f2,6 切分玩后取第2和6列 -c 表示按照字符取
例如: cut -d " " -f3,6 oldboy.txt 按照空格切分,然后取第3列和第6列 cut -c 6-11,20- oldboy.txt 取第6到11,20到结尾的字符串 cut -c -3 oldboy.txt 取开头到3的字符串 2.4.6 paste-合并文件内容 paste xaa xab xac xad xae 将5个文件内容合并 -d 指定分隔符,默认为tab的制表符 -s 将文本的内容列 变成行后 在合并
例如: a.txt文件 有以下数据 abcd efgh b.txt文件 有以下数据 china hunan china beijing
paste -s a.txt b.txt 得到结果: abcd efgh china hunan china beijing
paste -s -d"," a.txt b.txt 输出结果: abcd,efgh china,hunan,china,beijing 2.4.7 sort-对文件文本内容排序 -n按照数字排序,默认升序 -r逆序 -k指定列 -b忽略文件中的前导空白字符 -d按照字典排序
sort debug.sh pid.sh > sortd.txt 将两个文件合并在一起而且按照字母排序后生成一个文件 sort -nrk 1 data.txt 对文件按照第一列数字进行逆序排序 sort -rk 2 data.txt 第二列按照逆序排序 sort -bd data.txt -b忽略文件中的前导空白字符 -d按照字典排序 2.4.8 uniq-去掉重复行 不加参数,只对相邻的重复的行去重,不相邻的不能去掉。 -c 统计各行在文件中出现的次数 -d 只找出重复的行 -u 只显示出现一次的行 -i 忽略大小写的
cat sortd.txt | uniq > uniq.txt 去掉文件中重复的行 uniq data.txt 去掉重复行 sort -dk 2 data.txt | uniq 对文件第二列按照字典排序并去重 uniq -u data.txt 只显示唯一的行,重复的行全部过滤掉 等价于sort -dk 2 data.txt|uniq -u uniq -c data.txt 统计各行在文件中出现的次数 uniq -d data.txt 只找出重复的行 2.4.9 wc-统计 wc -l a.txt 统计行数 wc -w a.txt 统计单词数 wc -c a.txt 统计字节数 wc –m a.txt 统计字符数 wc a.txt 会将行数 单词数 字符数以制表符分割显示出来 wc c.txt -L 打印最长行的长度 举例:echo -n dkfdkfkdjfkdjfkdj |wc –c 2.4.10 tr-替换或删除字符 2.4.10.1以大写字母的输出 cat test.sh | tr a-z A-Z 这样就将test.sh中的内容以大写字母输出了 cat test.sh | tr ‘\n’ ’ ’ 将换行符转换为空格, 这样就是一行输出了与cat sleep.sh | xargs相对应 2.4.10.2按照集合来删除 echo ‘hello world 123’ |tr -d 'a-z ’ 删除了字母和空格 echo 1 2 3 4 5| echo $[ $(tr ’ ’ ‘+’ )] 结果变成15了即变成相加了 echo -e ‘this\nis\na\nline’ |tr -d ‘\n’ 将回车符号\n去掉 2.4.10.3压缩连续单个字符 echo ‘hello world 123’ |tr -s ’ ’ 得到结果:hello world 123其中将连续的空格字符压缩掉了 echo ‘hello world 123’ |tr -s ‘l’ 2.4.11 iconv-转换文件的编码格式 2.4.12 dos2unix-将dos文件转换成unix格式 将windows下面编辑的文件,传到unix服务器上去,有可能会执行不了。 因为windows下的换行符是\n\r 而linux下面的是\n 就有问题 所有就需要用dos2unix来转换一下 yum install –y dos2unix 2.4.13 file-查看文件属性 file a.txt 2.4.14 diff-vimdiff-patch 2.4.14.1 基本用法 基本格式: diff file1 file2
例如: diff sshd_config sshd_config_back_2017_0918 输出两个文件的不同之处
vimdiff sshd_config sshd_config_back_2017_0918 将屏幕分成两半来进行对比 2.4.14.2 对文件进行修补 1)首先找出差异重定向到一个差异文件中 diff -u oldboy.txt oldgril.txt > back.txt
2)利用back.txt文件进行修补 patch -p1 oldboy.txt < back.txt 这样两个文件就变的一模一样了 2.4.14.3 撤销对文件的修改 patch -R oldboy.txt < back.txt 2.4.15 rev-字符串反转 echo 123 | rev 输出结果为: 321 2.4.16 split-分割文件 按照指定的行数或者大小来分割文件:
dd if=/dev/zero bs=100k count=1 of=data.file 首先创建100K的文件 其中 if 代表输入文件 of代表输出文件 count代表需要被复制的块数 bs表示大小,所创建的文件的大小为bscount,该例子为1001=100k /dev/zero 是一个字符设备,不断的返回0值字节\0
按照大小分割文件: split -b 10k data.file 将data.file分成10k大小的小文件 split -b 10k data.file -d -a 4 将data.file分成以数字结尾的长度为4的小文件
按照行数分割文件: split -l 2 qq.hql -d -a 3 qq 其中最后一个qq是自己定义的分割文件的前缀 split -l 3 cat.txt ne_ 将cat.txt文件按3行进行切割,然后命名为ne_系列的文件
-a 指定生成文件后缀的长度,默认是2 -d 使用数字为后缀 -b 按照指定大小进行分割文件 -l 按照行进行切割文件
csplit命令: 将文件以create为分割点重复分割 csplit weblog_create_external_table.hql /create/ { } -n 2 -f weblog -b “%02d.log” weblog_create_external_table.hql 文件名 /create/ 为分割点 { } 表示重复分割,{1}只分割一次 -n 指定分割后文件名后缀为数字的个数 如:01 02 -f 指定前缀名 -b 指定后缀名
2.4.17 comm-文本文件的交集和差集 2.4.17.1求交集 comm a.txt b.txt -1 -2 求a.txt和b.txt文件内容的交集,这两个文件必须是排好序的文件,用sort b.txt -o b.txt来排序 如果不带-1 -2就会出现三列,第一列是A文件的内容 第二列是B文件的内容,第三列才是共同的交集,所以要删除第一二列 2.4.17.2求A的差集 comm a.txt b.txt -2 -3 2.4.17.3求B的差集 comm a.txt b.txt -1 -3 2.4.18 join-按两个文件的相同字段合并 join jps1.txt jps2.txt 文件必须是key,value型的。然后文件必须是sort排好序的 2.5 信息显示命令 2.5.3 dmesg-显示开机信息 dmesg显示开机信息,用于诊断系统故障 2.5.4 uptime-查看负载情况 查看机器的负载情况:
2.5.6 stat-查看文件时间 stat /etc/hosts Access: 2017-09-20 13:49:05.055606723 +0800 访问时间 -atime Modify: 2017-07-18 13:45:11.058151323 +0800 修改时间 -mtime Change: 2017-07-18 13:45:11.094152012 +0800 变化时间 –ctime 与find 联合使用: find . -type f -atime -7 -print 2.5.8 top-查看cpu等性能 Top 2.5.9 w-查看连接的客户端 W命令为查看连接的客户端的个数的命令, 只能显示使用用户名登录的客户端,不能显示su切换的。 例如:客户端使用root登录,后来su – hadoop切换到hadoop下了, 那么显示的仍然是root用户 2.5.10 last-显示登录系统的用户 2.5.11 lastlog-显示系统所有用户最后一次登录的信息 lastlog -u hadoop 显示hadoop用户最后一次的登录信息 2.5.12 users-显示当前登录系统的所有用户和用户列表 2.5.13 finger-查找并显示用户信息 2.6 搜索文件命令 2.6.1 which-whereis-export which 查看命令所在路劲的命令 例如:which cp whereis –b cp 也可以执行查询 –b 表示值查bash的路径
临时修改环境变量: export PATH=”/tmp:$PATH” 如果要永久生效,则需要放到/etc/profile或者用户的.bashrc文件下 2.7 基本网络操作 2.7.1 telnet-使用telnet协议远程登录 2.7.2 ssh-使用ssh加密协议远程登录 2.7.3 wget-curl 2.7.3.1 wget 基本格式 wget 网址 -O 将下载下来的东西记录在一个文件中,默认在本地为index.html –spider 爬虫,检查网站是不是好的,不会下载只是检查 -T 或–timeout 指定超时时间 –tries=2 指定重试的次数
wget www.baidu.com -O master.html -o log.log 用这样的命令,屏幕上就不会出现任何信息,而是将日志记录在log.log中
检查一个连接是否是好的可以连的 wget -T 5 --spider -t 2 www.eee.com &> /dev/null
补充说明: 1.下载限速用–limit-rate 1k wget --limit-rate 1k -O master.html http://133.128.27.148:60010/master-status 2.从断点续传,下载终断,下次继续下载 wget -c url 3.复制整个网站,以递归的方式收集网络上的所有URl wget --mirror http://133.128.27.148:60010/master-status 2.7.3.2 curl 用curl下载,与wget不同的是它必须重定向一个文件 curl http://133.128.27.148:60010/master-status > html.html
–silent不显示日志信息, -O指定输出文件默认index.html curl http://133.128.27.148:60010/master-status --silent -O msater.txt
–referer指定参照页 –cookie-jar将Cookie另外存入一个文件 -u 进行认证 -I 只打印头部信息 -w 直接取状态码 curl -I www.baidu.com
以post方式发送数据 curl --data “name=WIRELESS_ALX_RNC_2G_01” http://133.128.27.148:60010/table.jsp -O output.html 这就相当于抓取网页 http://133.128.27.148:60010/table.jsp?name=WIRELESS_ALX_RNC_2G_01 如果发送多个变量用&号隔开 2.7.4 ping ping 133.128.27.76 -c 2 只发送2组echo就停止发送不用手动停止 2.7.5 route-显示和设置系统的路由表 route add default gw 192.168.1.1 增加网关 route del default gw 192.168.1.1 删除网关 route –n 或者 netstat -an 查看网关信息
参考视频:http://oldboy.blog.51cto.com/2561410/1119453 2.8 深入网络操作命令 2.8.1 mail-发送邮件命令 首先启动邮件服务: systemctl start postfix.service
mail –s “标题” 邮件地址 < 文件 例如:mail -s “old” 11@qq.com < /etc/hosts 或者 echo “ddd”|mail -s “old” 11@qq.com
用mailq查看邮件是否发送完毕 2.8.2 mutt-邮件管理命令 2.8.3 nslookup-交互式查询互联网DNS服务器的命令 nslookup www.baidu.com 2.8.4 dig-查找DNS的解析过程 查看百度的解析原理: dig @8.8.8.8 www.baidu.com +trace 2.8.5 host-查询DNS命令 需要安装:yum install bind-utils –y 2.8.6 traceroute-追踪数据传输路由状态 yum install -y traceroute traceroute www.baidu.com 2.8.9 tcpdump命令行的抓包工具 yum install tcpdump –y tcpdump -i enp4s0 监视指定网卡的数据包 2.9 有关磁盘空间命令 fsck 磁盘检查修复文件系统,没有问题的分区不要操作 fdisk –l查看分区情况 free –m 查看内存状态的大小(buffer cached) mount /dev/sdb5 /mnt 挂载 unmount /mnt 取消挂载 dd if=/dev/zero of=/dev/sdb1 bs=4906 count=1000创建一个虚拟的磁盘,或者以块设备
du file1 file2 du -a dir 递归统计dir目录下的文件结果 du -h qq.hql 以KB,MB为单位统计磁盘的使用情况 du -sh file 查看文件或者文件夹的大小 du -c sh 显示磁盘的使用总计 du -b sh 以字节为单位统计结果 du -k sh 以KB为单位统计结果 du -m sh 以MB为单位统计结果 du --exclude “*.txt” 排除txt 文件 du -ak .|sort -nrk 1 |head -n 10 找出指定目录中最大的前10个文件或目录 df –h 查看磁盘挂载信息 df –i 查看磁盘挂载的Inode的情况
2.10 关机和重启命令 关机命令: shutdown –h now 立刻关机(生成常用) shutdown –h +1 1分钟后关机 init 0 切换运行级别到0 halt 立刻停止系统,需要人工关闭电源(生成常用) halt –p poweroff 立刻停止系统,并且关闭电源
重启命令: reboot 生成常用 shutdown –r now 生成常用 shutdown –r +1 1分钟后重启
注销: logout exit Ctrl+d 2.12 系统管理相关命令 2.12.1 free-查看空闲内存命令 free 显示结果:free -m
2.12.2 vmstat-虚拟内存统计 2.12.3 mpstat-显示各个cpu状态的统计 需要安装工具:yum install -y sysstat 2.12.4 iostat-统计系统的IO 需要安装工具:yum install -y sysstat 2.12.5 sar sar命令是Linux系统中重要的性能检测工具之一,可以周期性的对CPU、内存的使用情况进行采样
例如:sar -u 1 3 统计CPU的使用情况,每秒采样一次一共三次 各个参数查看百度百科: http://baike.baidu.com/view/2816483.htm?fr=aladdin
查看当前进程的cpu 使用情况: pidstat -p 12249 -u 1 3
2.12.6 last 2.13 vi-vim-echo 2.13.1 vi-vim vi命令操作参考:https://www.pcsky.wang/archives/837.html vi file i e o进入到编辑模式
在vi中显示行号: Esc -> : -> setnu Esc -> : -> 3 直接跳到第三行 2.13.2 echo打印输出内容 echo 1 >> myid 追加到文件myid echo 1 > myid 覆盖文件myid
-n 不换行输出 echo -n boy;echo gril -e 解析转义字符 \t Tab \n回车 \b退格 例如:echo -e “boy\tgril” 2.14 重定向-追加重定向-标准输入输出 2.14.1 重定向
或者1> 输出重定向 < 或者 <0 输入重定向 举例: cat < for.sh > if.sh 将for.sh的内容作为输入,然后输出到if.sh 2.14.2 追加重定向
或者1>> 输出追加重定向 << 或者 <0 追加输入重定向 2.14.3 标准输入输出 标准输入:代码为0,使用<或者<< 数据留向从右往左 正常输出:代码为1,使用>或者>> 数据流向从左往右 错误输出:代码为2,使用2> 或2>>
ech 2> old.txt 将错误信息输入到文件old.txt echo > success.txt 2> error.txt exec 2 >> KaTeX parse error: Expected group after '_' at position 24: …/logs/sparkNews_̲mydate.txt 2.14.4 /dev/null 空设备,相当于黑洞,扔进去就没了 echo “dddd” > /dev/null 2>&1 相当于不给他输出任何结果 2.15删除命令 2.15.1 删除空目录 rmdir dfs //dfs必须是个空目录 2.15.2 强制删除目录 rm –rf dfs dfs可以不是空目录 2.15.3 删除软链接 ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock 创建软连接 rm /tmp/mysql.sock 删除软连接 2.15.4 删除用户 userdel -rf grid 删除用户以及用户的主目录 2.15.5 使用find删除 find . –type f –exec rm -f {} ; 删除old目录下的文件 find /home/hadoop/app/old -type f -exec rm -f {} ; -exec 表示进行处理(对前面的结果) ; bash中的转义 相当于:find /home/hadoop/app/old -type f | xargs rm –f(下面介绍) 2.16 find和xargs的用法 2.16.1 find的用法 2.16.1.1查看用户: cat /etc/passwd |cut -f 1 -d : 2.16.1.2 find 目录名 查找该目录下的所有文件或者目录 find /app/sati/script 2.16.1.3根据文件名或正则表达式匹配搜索 -name find /app/sati/script/sh -name “.sh" -print 2.16.1.4否定参数 ! 找出该目录下不是以.sh结尾的文件 find /app/sati/script ! -name ".sh” -print 2.16.1.5基于目录深度搜索 find . -maxdepth 2 -type f -print 打印两层目录的文件 find . -maxdepth 2 -type d -print 只打印目录 2.16.1.6基于时间进行搜索 find . -type f -atime -7 -print 打印最近7天访问过的文件 find . -type f -atime +7 -print 打印超过7天访问过的文件
find . –type f –mtime +7 –print 打印超过7天以前修改过的文件 find . –type f –mtime -7 –print 离当前时间最近的前七天 find . –type f –mtime 7 –print 在第七天 2.16.1.7基于文件大小的搜索 find . -type f -size -2k 搜索小于2KB的文件 find . -type f -size +2k 搜索大于2KB的文件 find . -type f -size 2k 搜索等于2KB的文件 2.16.1.8删除匹配文件 find . -type f -name “*.xx” -delete 2.16.1.9基于文件权限的匹配 find . -type f -perm 644 -print 打印644权限的文件 2.16.1.10过滤目录的查找 -prune find . ( -name “TempStatsStore” -prune ) -o ( -type f -print ) 打印当前目录下的所有文件,但是TempStatsStore目录下的文件不打印 2.16.2 xargs的用法 2.16.2.1 描述 xargs命令紧跟在管道操作符之后,他以标准输入作为源数据流,形如:command|xargs 2.16.2.2将多行输出转换成单行输出 例如:cat sleep.sh 会输出多行 cat sleep.sh | xargs 只输出一行 cat sleep.sh | xargs -n 3 每行输出3个单词 2.16.2.3用自己的分隔符分割参数 echo “split,xiao,ping,guo” | xargs -d , 指定用,号分割,其结果如下:
echo “split,xiao,ping,guo” | xargs -d , -n 2 每行输出两个字母 2.16.3 综合使用 2.16.3.1 替换字符串 方法一: find . -type f | xargs sed -i ‘s/133.128.27.35/133.128.27.149/g’ 将目录下所有文件中的133.128.27.35 字符串替换成 133.128.27.149
方法二: find . -type f -exec sed -i ‘s/four/r/g’ {} ; 2.16.3.2 将当前目录下以.txt文件结尾的文件删掉 find . -type f -name “*.txt” -print0 | xargs -0 rm -f 2.16.3.3 统计文件的行数 find . -type f -name “test.sh” -print0 | xargs -0 wc -l
2.16.3.4 删除一个目录下的所有文件保留一个指定文件 jps.txt为保留的指定文件 find . -type f ! -name jps.txt | xargs rm –f 或者 find . –type f ! –name jps.txt –exec rm –f {} ; 2.16.3.5 查找某个目录中包含kafka字样的文件 find . –type f | xargs grep –n kafka 2.17 grep-sed-awk(三剑客) 2.17.1 grep(擅长过滤)-seq 2.17.1.1 grep -a 在二进制文件中,以文本文件的方式搜索 -c 计算找到搜索字符串的次数 -o 仅仅显示出匹配regexp的内容 -i 忽略大小写 -n 显示行号 -v 反向选择,显示除了包含过滤字符串行的其他所有行 -E egrep的扩展, 可以过滤多个字符串 -l 搜索多个文件,找出在与之匹配的文件 -L 与-l相反 -A 除了显示匹配的一行之外,并显示该行之后的n行 -B 除了显示匹配的一行之外,并显示该行之前的n行 -C 除了显示匹配的一行之外,并显示该行之和之后的n行
格式:grep “要过滤的内容” –B n行 文件 例如: grep “30” -A 10 test.txt
grep 过滤器,把想要的和不想要的分开 格式: grep “过滤的内容” file
grep -n if sleep.sh test.sh 在文本中搜索if并显示它所在的行数 grep -v if sleep.sh 显示除了包含if行的其他所有行 grep -c echo sleep.sh 显示echo在文本中出现了几行
grep -l while sleep.sh test.sh 搜索多个文件找出while在那个文件中匹配 grep -L while sleep.sh test.sh 与-l刚好相反
grep “while” . -R -n 在当前目录进行递归搜索 echo hello world |grep -i “HELLO” -i忽略大小写
echo this is a line of text |grep -e “this” -e “line” -o 匹配多个样式 grep MemFree /proc/meminfo 查看空闲内存量 grep MemTotal /proc/meminfo 查看总的内存量 grep -nr “username” * 查看包含username的所有文件 -E 可以过滤多个字符串 grep ‘^$’ shell.txt 匹配空行
grep -o “if” sleep.sh -o表示只显示匹配到的内容 grep -E “if|for” sleep.sh -E 过滤多个值以|隔开 相当于egrep
echo “zhangfan-”|grep -E "[^a-z,A-Z,0-9,]" [^a-z,A-Z,0-9,] 正则表示:查找非字母数字下划线的值 2.17.1.2 seq 打印出匹配文本之前或之后的行: seq 10 |grep 5 -A 3 之前 seq 10 |grep 5 -B 3 之后 seq 10 |grep 5 -C 3 之前加之后
grep 30 -B 10 test.txt
-s 指定序列的分隔符,例如: seq –s “=” 5 输出:1=2=3=4=5 2.17.1.3 egrep 相当于 grep -E 2.17.2 sed(擅长取行,替换) 2.17.2.1 基本格式 sed ‘/过滤的内容/处理的命令’ 文件 其中处理的命令: p : print打印 d : delete 删除 a: 追加 i: 插入 c: 修改
-n 取消默认的输出,默认输出全部的数据 -r 为取消特殊的字符的转义 -i 改变文件输出 -e 执行多条命令 2.17.2.2 替换功能和另存 语法: sed ‘s/src/dest/g’ file -i 改变文件输出 -i.ori 自动备份一份文件
sed ‘s/1234567890/zhangsan/g’ data.txt 显示文件中1234567890被替换成zhangsan sed -i ‘s/1234567890/zhangs/g’ data.txt 上面只是显示,加上-i可以直接修改原文件 也可以: sed -i s#‘girl’#‘boy’#g oldboy.txt
sed -i ‘s/1234567890/zhangsan/’ data.txt 不加g就只是替换每一行的第一处 sed -i.ori ‘s#old#yound#g’ text.txt
sed ‘s#old#girl#g w person.txt’ text.txt 将修改的内容的行另存到person.txt文件中 sed ‘s#Alex#zuhai#gi’ text.txt 后面的i是忽悠大小写的
sed ‘y#CEO#ceo#’ text.txt 替换字符 这与sg 还不一样sg是将CEO换成ceo,是替换字符串,而这条命令是将C换成c E换成e O换成o 相当于 tr CEO ceo 2.17.2.3 取行功能 sed -n ‘2,3p’ oldboy.txt 取第2到3行 sed –n ‘2p’ oldboy.txt 取第2行 seq 1 10|sed -n ‘1~3p’ 从第一行开始,取步长为3的行 sed -n ‘/oldboy/,/liu/p’ text.txt 只匹配oldboy到liu之间的行,包括他们两者 sed -n ‘3, p ′ t e x t . t x t 取 第 三 行 到 末 尾 的 行 s e d − n ′ 5 p ; 35 p ; 70 p ′ s e q . t x t 取 第 5 行 , 35 行 , 70 行 的 数 据 s e d ′ 2 q ′ t e x t . t x t 取 前 两 行 的 数 据 s e d − n ′ p' text.txt 取第三行到末尾的行 sed -n '5p;35p;70p' seq.txt 取第5行,35行,70行的数据 sed '2q' text.txt 取前两行的数据 sed -n ' p′text.txt取第三行到末尾的行sed−n′5p;35p;70p′seq.txt取第5行,35行,70行的数据sed′2q′text.txt取前两行的数据sed−n′=’ text.txt 取最后一行行号 sed -n ' p ′ t e x t . t x t 获 取 最 后 一 行 数 据 2.17.2.4 引 用 功 能 s e d 表 达 式 通 常 是 用 单 引 号 表 示 , 但 是 在 使 用 变 量 字