Skip to content

Latest commit

 

History

History
463 lines (286 loc) · 10.8 KB

File metadata and controls

463 lines (286 loc) · 10.8 KB

linux_skill

前言

记录平时见到的一些技巧,以备不时之需


yum源问题

添加epel源,参考 http://fedoraproject.org/wiki/EPEL 选取对应版本的‘epel-release’,添加源后即可查询到,以EL6为例:

yum install http://mirrors.opencas.cn/epel/6/i386/epel-release-6-8.noarch.rpm

yum本地源

mkdir -p /mnt/centos
mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /mnt/centos/


cat /etc/yum.repos.d/CentOS-Media.repo

# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c6-media [command]
#  
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c6-media [command]
 
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

yum 问题记录

[root@core /]# yum list

Loaded plugins: fastestmirror

Determining fastest mirrors

Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
	
--->解决方法
yum upgrade ca-certificates --disablerepo=epel

yum 系列问题

1. yum  install salt-minion

....
file /usr/lib64/python2.6/zipfile.pyo from install of python-libs-2.6.6-64.el6.x86_64 conflicts with file from package python-2.6.6-36.el6.x86_64

Error Summary

--->缩小范围
2. yum install python-libs  问题一样

最后得出应先升级python

yum update python

然后在 yum  install salt-minion

yum 使用

#反查相关内容由哪个安装包提供
yum whatprovides *xx*	

rpm解压

rpm2cpio xxx.rpm | cpio -div

yum 下载

yum install yum-utils
yumdownloader xxx-xx

网络类

查看机器公网IP:

curl ifconfig.me
telnet cip.cc  ---  ip.cip.cc 返回纯ip

查看网站使用服务器:

curl -I  website

获取google SPF 记录中包含的网段

nslookup -q=TXT _netblocks.google.com 8.8.8.8   --失败则替换为114.114.114.114
nslookup -q=TXT _netblocks2.google.com 8.8.8.8
nslookup -q=TXT _netblocks3.google.com 8.8.8.8

转发3389,访问远程桌面

iptables -t nat -A PREROUTING -d [跳转机外网IP] -p tcp --dport 3389 -j DNAT --to-destination [winIP]:3389

iptables -t nat -A POSTROUTING -d [winIP] -p tcp --dport 3389 -j SNAT --to-source [跳转机内网IP]

远程端口检测

1.nmap -p [port] ip

#无须输入即可批量得到返回值
2.echo -e '\n' | telnet [port] ip

编辑类

替换输出:

echo $a | tr . ' '

grep

grep的语法支持正则表达式,下面是一些有用的参数:

-A num, --after-context=num: 在结果中同时输出匹配行之后的num行
-B num, --before-context=num: 在结果中同时输出匹配行之前的num行,有时候我们需要显示几行上下文。
-i, --ignore-case: 忽略大小写
-n, --line-number: 显示行号
-R, -r, --recursive: 递归搜索子目录
-v, --invert-match: 输出没有匹配的行

#排除空行和注释行
egrep -v "#|^$"  filename

awk

#使用环境变量
a=q.w.e
b=2

#这种写法其实际是双括号变为单括号的常量,传递给了awk.
echo $a | awk -F . '{print "'$b'"}'  

echo $a | awk -F . '{print $2}'
echo $a | awk -F . "{print $"${b}" }"  
echo $a | awk  -v r="$b" -F. '{print $r}'

#从file文件中找出长度大于80的行
awk 'length>80' file
 
#按连接数查看客户端IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
 
#打印99乘法表
seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'

大小写

a="ATest"
echo ${a,}
echo ${a,,}
## 前面输出aTest,后面输出的是atest。	

字符匹配

[root@HSlave1 ~]# echo $a
abcdef
[root@HSlave1 ~]# echo $a  | sed -r 's/ab(.*)ef/\1/g'
cd

删除空格

#删除行首空格
sed ‘s/^[ \t]*//g'

#删除行末空格
sed ‘s/[ \t]*$//g'

#删除所有的空格
sed s/[[:space:]]//g

删除指定换行符

sed ':label;N;s/\n/:/;t label' filename

#:label是标签   N;下一行放到模式空间合并处理    t\b 跳转到标签
[root@ns1 ~]# echo -e "a\nb\nc\nd" | sed 's/\n/,/;'
a
b
c
d

#可以看出,单行选取是\n作为分隔符的,因此无法取到\n字符进行处理。需要N;将此行和下一行放入模式空间执行处理。
[root@ns1 ~]# echo -e "a\nb\nc\nd" | sed 'N;s/\n/,/;'
a,b
c,d

# 可以看出,N;执行将下一行放入模式空间合并处理后,被放入模式空间的行,属于已经处理过的,不会进入下一次操作。因此需要打标签,跳回放入合并操作前,才能被执行。
[root@ns1 ~]# echo -e "a\nb\nc\nd" | sed ':a;N;s/\n/,/;b a'
a,b,c,d

文件编码

#vim 中查看文件编码:
set fileencoding
(备注:如果vim按照fileencodings提供的编码尝试不到文件编码,就用latin1编码打开)
(比如:中文编码gb2312 ,vim提示编码就为latin1)

#vim修改编码,前提识别对编码才可
set fileencoding=utf-8

#iconv转码编码
iconv -t utf-8 -f gb2312 -c my_database.sql > new.sql
iconv -t utf-8 -f gb2312 -c my_database.sql | tee my_database.sql

#iconv参数解析:
	-f  原编码
	-t  目标编码
	-c 忽略无法转换的字符

加密类

随机密码

pwgen 10 1  (10位长度,一个)
makepasswd --char 50 --count 7
openssl rand -base64 10

加密

mkpasswd mytest -s tt  (指定加密使用文)

对称加密

echo Tecmint-is-a-Linux-Community | openssl enc -aes-256-cbc -a -salt -pass pass:tecmint
>U2FsdGVkX18Zgoc+dfAdpIK58JbcEYFdJBPMINU91DKPeVVrU2k9oXWsgpvpdO/Z

解密

echo U2FsdGVkX18Zgoc+dfAdpIK58JbcEYFdJBPMINU91DKPeVVrU2k9oXWsgpvpdO/Z | openssl enc -aes-256-cbc -a -d -salt -pass pass:tecmint

系统类

查看服务器型号

dmidecode | grep Product

查看cpu

numactl --hardware

cat /proc/cpuinfo

查看磁盘属性

yum install sg3_utils
#显示硬盘转速
sg_vpd  /dev/sda --page=0xb1

yum install epel-release
yum install inxi

#显示详细信息(-b简略信息)
inxi -F  

挂载ntfs

#安装文件系统包
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-1.el6.rf.i686.rpm
yum install ntfs-3g

#找出挂载点
fdisk -l

#挂载
mount -t ntfs-3g /dev/sdb1 /mnt/winC

清除Cache

# sync; echo 1 > /proc/sys/vm/drop_caches    ---仅清除页面缓存(PageCache)
# sync; echo 2 > /proc/sys/vm/drop_caches    ---清除目录项和inode
# sync; echo 3 > /proc/sys/vm/drop_caches    ---清除页面缓存,目录项和inode

sync 将刷新文件系统缓冲区(buffer),命令通过“;”分隔,顺序执行,shell在执行序列中的下一个命令之前会等待命令的终止。
正如内核文档中提到的,写入到drop_cache将清空缓存而不会杀死任何应用程序/服务,echo命令做写入文件的工作。
如果你必须清除磁盘高速缓存,第一个命令在企业和生产环境中是最安全,"...echo 1> ..."只会清除页面缓存。 
在生产环境中不建议使用上面的第三个选项"...echo 3 > ..." ,除非你明确自己在做什么,因为它会清除缓存页,目录项和inodes。

清除交换分区

# swapoff -a && swapon -a

综合使用

#!/bin/sh 
echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'

chmod +x clear_cache_swap.sh

crontab -e
0 3 * * * /path/to/clear_cache_swap.sh

warning:当所有的用户都从磁盘读取数据时,这将导致服务器崩溃并损坏数据库。

修改时区

#查看时区
cat /etc/sysconfig/clock 
	ZONE="Asia/Shanghai"

#替换时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#时区写入bios
clock -w

#查看硬件时区
hwclock

#同步网络时间
#NTP服务器(上海) :ntp.api.bz
ntpdate -u 210.72.145.44        --中国国家授时中心

自动化定时任务

#继承以前的,追加一个新的
(crontab -l 2>/dev/null ;echo "* * * 2 * hostname")  | crontab -
or
/var/spool/cron/admin   (只适合root操作) 

获取时间

#查看明天日期
date -d next-day +%Y%m%d
date -d tomorrow +%Y%m%d

#查看昨天日期
date -d last-day +%Y%m%d
date -d yesterday +%Y%m%d

#查看上个月日期
date -d next-month +%Y%m

#查看明年日期
date -d next-year +%Y

#获取昨天或多天前的日期
date +%Y%m%d -d '2 days ago'

#获取2周后日期
date -d '2 weeks'

#高级功能展示
date -d '50 days'   	(50天后的日期)
date -d '-100 days' 	(100天以前的日期)
date -d 'dec 14 -2 weeks' (相对:dec 14这个日期的两周前的日期)

ssh

远程重启tomcat时,简单采用ssh,会报JAVA_HOME找不到,可采用

ssh user@host "source /etc/profile;/path/to/tomcat/bin/shutdown.sh"

ssh使用awk,$2打印失效,原因是变量被ssh执行过程中解析,需要逃逸

ssh 192.168.1.123 "source /etc/profile; if [ $( ps -ef | grep /web/service/tomcat9_xx_8003|grep -v grep | wc -l) -eq 1 ];then ps -ef | grep /web/service/tomcat9_xx_8003|grep -v grep | awk '{print \$2}'| xargs kill -9;fi"

进程类

获取命令当前进程号(pid)

tail -f access.log & echo $! 

获取脚本执行时当前进程号

#!/bin/sh	
echo $$
#echo $$ > /tmp/xxx.pid
sleep 100
echo 'over'

SOA

zookeeper客户端

#连接查看注册信息
bin/zkCli.sh -server host port     

rsync

有没有/问题

rsync -av /web/work   test:/web/work    ---结果是 test:/web/work/work/*

rsync -av /web/wrok/  test:/web/work    ---结果是 test:/web/work/*

=>通过v选项可以看出复制目录层级,target目录不影响

假同步

-n, --dry-run               perform a trial run with no changes made

同步跳过某些文件

--exclude=PATTERN       exclude files matching PATTERN
--exclude-from=FILE     read exclude patterns from FILE

rsync -av /web/eln4share/xuemall/  --exclude="WEB-INF/classes/env.properties"  web@xx.xx.xx.xx:/web/eln4share/xuemall/

指定端口

 rsync -arv -e 'ssh -p 100' source-file remotehost:/target-path

git

放弃本地修改,强行更新

git fetch --all
git reset --hard origin/master

iptables

列出含有序号的INPUT规则,通过num删除

iptables -L INPUT --line-numbers 

#举例:删除指定的第4行规则
iptables -D INPUT 4

权限类

粘滞位

普通文件的sticky位会被linux内核忽略,  
目录的sticky位表示这个目录里的文件只能被owner和root删除,验证如下: 

[dev@nagios tmp]$ id web
uid=6001(web) gid=6002(web) groups=6002(web)
[dev@nagios tmp]$ id dev
uid=6002(dev) gid=6002(web) groups=6002(web)
[dev@nagios tmp]$ ll
total 8
drwxrwxr-t 2 web web 4096 Mar  4 09:27 test
drwxrwxr-x 2 web web 4096 Mar  4 09:27 test2

[dev@nagios tmp]$ rm -fr test/a
rm: cannot remove `test/a': Operation not permitted
[dev@nagios tmp]$ rm -fr test2/b 
[dev@nagios tmp]$