工作中有可能用到的运维小知识《现查现用》
时间:2023-10-29 12:07:02
第一部分:基础部分
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 表 达 式 通 常 是 用 单 引 号 表 示 , 但 是 在 使 用 变 量 字