前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记分享(2) Linux常用操作

笔记分享(2) Linux常用操作

原创
作者头像
大大刺猬
修改2021-04-01 14:13:10
5990
修改2021-04-01 14:13:10
举报
文章被收录于专栏:大大刺猬大大刺猬

本文是记录我之前工作中用到的关于linux的知识的一部分. 主要是针对OEL/RHEL/Centos的, (shell功能主要用的是bash的)

如果你都会了的话, 那你很棒棒哦.

基本上都是很实用的, 如果是零基础的,不推荐看本笔记.

后续的像awk,grep,sed,之类的, 或者像基础文件描述符,标准输入输出, 变量 正则之类的可能会专门讲(之前太熟了,就没记笔记, 再过一段时间,就该忘完了....).

这笔记量大概是2.5年的.

代码语言:javascript
复制
#设置历史记录格式 /etc/profile
export HISTTIMEFORMAT="%F %T: "

#修改主机名:
6:hostname ddcw   
     vim /etc/sysconfig/network
7:  hostnamectl set-hostname ddcw

#修改时间:
     date -s  15:33:00
     date -s "20190530 14:50:00"
     date -s "2019-05-30 14:50:00"
#获取时间赋值给变量:
     dt=$(date +%Y%m%d-%H:%M:%S)


#安装图形化桌面
yum grouplist
yum groupinfo "Server with GUI"
7:    yum -y groupinstall x11
         yum -y groupinstall gnome-desktop
systemctl get-default
systemctl set-default graphical.target
#systemctl set-defaultmulti-user.target
reboot


#设置开机启动级别
7:		systemctl get-default
		systemctl set-default graphical.target
		systemctl set-default multi-user.target
		
6:		vim /etc/inittab


#VNC
7:    yum -y install tigervnc-server
       cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@.service
      vi /etc/systemd/system/vncserver@.service
                        ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i -geometry 1024x768"
                        PIDFile=/root/.vnc/%H%i.pid
      #vncpasswd
      cd ~/.vnc  
      vncserver  按tab键就明白了
	  或者 vncserver :1
	  vncserver :2
	  
VNC:
	yum install tigervnc-server -y
	vncpasswd << 123456
	vncserver :1
	vncserver -list #查看vnc端口
	vncserver -kill :1 #杀掉vnc :1
	  
	  
#NFS
server:
    yum install nfs-utils -y
	mkdir /shared_data
	vim /etc/exports
		/shared_data                 *(rw,sync,no_wdelay,insecure_locks,no_root_squash)
	chkconfig nfs on
	service nfs restart
client:
    yum install nfs-utils -y
	mkdir -p /u01/oradata
	vim /etc/fstab
		nfs_serverip_or_name:/shared_data   /u01/oradata  nfs  rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0  0 0
	mount /u01/oradata


#SWAP扩分区
cat /etc/fstab
 swapoff -v /dev/mapper/vg01-lv01    #停用
  lvresize -L 2560M /dev/mapper/vg01-lv01      #扩为2.5G
  mkswap /dev/mapper/vg01-lv01     #格式化为swap
  swapon -v /dev/mapper/vg01-lv01   #启用
  free -m #查看

#df -h
#lsblk
#dh -sh .    || du -sh ./* 



#vim全局替换
:%s/str1/str2/g

#去掉空白行
cat /home/oracle/db.rsp | grep -v "#" | sed '/^$/d' | grep  -e '=.'

#去掉行首空格
sed -i 's/^\s*//' fileName.txt	

#sed去掉匹配的上一行
sed -i '$!N;/\n.*STRINGS/!P;D' FILENAME

#sed去掉匹配的下一行
sed -i '/STRINGS/{n;d}' FILENAME


#vim交换数据
:%s/str1/temppppppppp/g
:%/str2/str1/g
:%/temppppppppp/str2/g

#查看端口进程命令
lsof -i


#限制部分主机SSH登录
cat /etc/hosts.allow
	sshd:192.168.1.2
	sshd:192.168.1.3
cat /etc/hosts.deny
	sshd:all
	

	
dstat
	
#创建镜像
cp ks.cfg isolinux/ks.cfg	
mkisofs -R -J -T -v -no-emul-boot -boot-load-size 4 -boot-info-table -V OEL68mini -b isolinux/isolinux.bin -c isolinux/boot.cat -o /u01/oel68mini.iso .


#vsftpd添加用户
usermod -d /oradata/utf8db/test  test

#查看连接数
SYN_RECV表示正在等待处理的请求数;
ESTABLISHED表示正常数据传输状态;
TIME_WAIT表示处理完毕,等待超时结束的请求数。
netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s\n", a, S[a]);++I}printf("%-20s %s\n","TOTAL_IP",I);for(a in s) printf("%-20s %s\n", a, s[a]);printf("%-20s %s\n","TOTAL_LINK",N);}'
netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}'

#sqlplus界面可以用 backspace (退格键)
cat .bash_profile
........
stty erase ^H


#本地连接中 time_wait 
netstat -tnp | grep TIME_WAIT | awk '{print $4}' |sort | uniq -c | sort -nr

#连接中外地的IP
netstat -tnp  | awk '{print $5}' | sort | uniq -c |sort -nr

#查看本地TCP状态排序
netstat -ntp |awk '{print $6}' | sort | uniq -c

#查看服务器某地址端口的连接数
netstat -nat | grep 222.143.12.8:7005 |awk '{print $5}' | sort | uniq -c | sort -rn

#每个2秒打印一次,一共打印3次
#vmstat 2 3

#安装telnet
yum install telnet-server -y
yum install xinetd -y
systemctl enable xinetd.service
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd
yum install telnet -y

#查看内存占用前10 的进程
ps aux --sort -rss | awk  '{print $1"      "$2"      "$3"      "$4"      "$NF}' | head -10
ps aux --sort -rss | awk  '{print $1"\t"$2"\t"$3"\t"$4"\t"$NF}' | head -10

#查看CPU占比
cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'

#每个5秒执行一次
warch -n 5 ls

#推荐设置DISPLAY
export DISPLAY=`last | head -1 | awk '{print $3}'`:0.0

#tar
打包       			tar -cvf filename.tar.gz file1 file2
打包并压缩gzip  	tar -zcvf filename.tar.gz file1 file2
解压gzip       		tar -zxvf filename.tar.gz
打包并压缩bzip2 	tar -jcvf filename.tar.gz file1 file2
解压bzip2			tar -jxvf filename.tar.gz 


#开放本地端口8888
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --add-service=http

#每隔两秒打印一次PID的gc情况
jstat -gcutil PID 2000

#java dump PID 的内存情况
jmap –dump:format=b,file=PID.dumpfile PID

#查看排名第一的java jstack
javajc=`top -n 1 | tail -n +8 | grep java | awk '{print $2}' | head -1 `
top -n 1 | tail -n +8 | grep java | awk '{print $2}' | head -1 |  xargs -t -i top -n 1 -Hbp  {}  | tail -n +8 | awk '{print $1}' > TOPPID.info
for i in {1..5}
do
	top -n 1 | tail -n +8 | grep java | awk '{print $2}' | head -1 |  xargs -t -i top -n 1 -Hbp  {}  | tail -n +8 | awk '{print $1}' >> TOPPID.info
done
threadn1=`cat TOPPID.info | sort | uniq -c | sort -rn  | head -1 |awk '{print $2}'`   



#查看服务器厂商
[root@ddcwnfs ~]# dmidecode -s system-product-name
VMware Virtual Platform
[root@ddcwnfs ~]# 

#这个是当初分析java的时候用的,不全. 
thread16=`xargs -t -i printf "%x\n" ${threadn1}` 
jstack ${threadn1} | grep ${thread16} -A 30


#linux下数组使用(数组下标是变量的时候,不要$)
#!/bin/env /bash
shuzu=(1 2 3 4)
for i in ${!shuzu[@]}
do
	echo ${shuzu[i]}
done


#设置随机密码(8位)
mkpasswd -l 8

#设置PS1
cat .bashrc
export PS1="\t [\u@\h \W]\$ "


#扫描本地端口
for i in {1..65536}; do if echo &>/dev/null > /dev/tcp/127.0.0.1/${i} ;then echo -e "\t\033[31;40m${i}\033[0m  is open"; fi; done


#扫描其它主机端口
other_host=127.0.0.1
for i in {1..65536}; do if echo &>/dev/null > /dev/tcp/${other_host}/${i} ;then echo -e "\t\033[31;40m${i}\033[0m  is open"; fi; done



#循环插入数据的shell脚本
for i in {1..1000}
do
sqlplus ygss/ygss@192.168.101.171:1521/oggspdb <<EOF
`echo -e "insert into student values($(date +%s%N),'$(cat /dev/urandom | head -n 10 | md5sum | head -c 10)');\ncommit;"`
EOF
sleep 0.5
done


#RPM查询
rpm --query --queryformat "%{NAME}-%{VERSION}.%{RELEASE} (%{ARCH})\n" binutils

#yum查看包组 
yum groupinfo 'core'


#RPM强制卸载,安装也可以使用--nodeps去忽略依赖
rpm -e rlwrapDDCW --noscripts --nodeps
#--nodeps 忽略依赖
#--noscripts %postun脚本失败也继续



#设置默认shell  #cat /etc/shells可以看见有哪些shell
chsh -s '/bin/bash'
#echo $SHELL #查看当前的SHELL


#查看字体:
fc-list
fc-list  | grep -i simsun   #查看宋体
fc-list  | grep -i nsimsun   #查看新宋体

#安装字体:
cp simsun.ttc  /usr/share/fonts/  #拷贝字体到字体目录,只要拷贝过去就行
mkfontscale       #字体扩展
mkfontdir          #新增字体目录,可以省略
fc-cache -fv      #刷新缓存

#echo 颜色:
for COLOR in {1..255}; do echo -en "\e[38;5;${COLOR}m \\e\[38;5;${COLOR}m"; done;echo -e "\n\033[31;40mecho -e \"\\\eCOLOR STRINGS_BY_YOURSELF\"\033[0m"


#先修改目录,再修改文件,注:不能把标准错误输出去掉(2>/dev/null),因为mv存在的名字时,会提示是否覆盖,这个需要人工去比对,这个提示属于标准错误输出
for dname in `find ./ -type d`; do mv $dname `echo $dname|tr [A-Z] [a-z]` ; done
for fname in `find ./ -type f`; do mv $fname `echo $fname|tr [A-Z] [a-z]` ; done


#yum下载包
1.直接下载包
yumdownloader htop
2.本地没有安装才能下载(本地安装了就下载不了)
yum install --downloadonly --downloaddir=/tmp htop


#定制bash自动补全变量
shopt -s direxpand histappend


#ping域名慢,加个超时即可.
cat /etc/resolv.conf
options timeout:1 attempts:1 rotate

#tcpdump抓包,然后把test.cap下载下来用wireshark打开分析即可.
tcpdump dst host 114.114.114.114  and src host 172.30.0.17 -c 100 -i eth0 -w test.cap
#-c 100 表示抓完100个包自动退出.默认是直到kill或者ctrl+c 
#-w test.cap 保存到test.cap里面去,不停止的话,是不会写文件的.
#-i eth0   表示抓取网卡eth0的包




RAID技术(以下的盘,可以代表磁盘组):
raid 0  : 把数据分散到每块盘上,所以IO是翻倍的,至少两块盘, 坏一块盘就GG了.
radi 1  : 镜像,也就是每块盘都有一份数据. 读取速度会提升, 写不会(甚至降低一点点,可忽略)
raid 2  : 专门拿一块盘做校验(海明码校验,比特级别的),最少三块盘.
raid 3  : 专门拿一块盘做校验(字节级别的),最少三块盘.
raid 4  : 类似raid2 或者 3, 只是分割单位不一样.
raid 5  : 以块为单位校验, 校验码会被写入不同的磁盘.
raid 10 : 把做了raid1的盘做raid0.


#查看本地TCP连接状态:
netstat -natp | tail -n +3 | grep -v tcp6 | awk 'BEGIN {printf "%-30s%-30s%-30s%-15s\n","Local_IP/PORT","Foregin_IP/PORT","Stat","PID/Program name"} {printf "%-30s%-30s%-30s%-15s\n", $4,$5,$6,$7}'







#查看oralce alert_日志,高亮显示 (还挺好用的)
need_day='2020-08-31' #2020.8.31及之后的日志
logfile='alert_*.log'
KEY_VAR='error'

#查看某时间之后的日志:
eval sed -n '/${need_day}T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/,\$p' ${logfile}

#把时间变为绿色:  格式为: 2020-09-01T13:02:00
eval sed 's/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/$(echo -e "\033[32;40m\\\0\033[0m")/g'

#把关键词  KEY_VAR 变成红色
eval sed 's/${KEY_VAR}/$(echo -e "\033[31;40m\\\0\033[0m")/g'

tail -10000 alert_ddcw19.log | eval sed 's/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/$(echo -e "\033[32;40m\\\0\033[0m")/g' | eval sed  's/error/$(echo -e "\033[31;40m\\\0\033[0m")/g\;s/ORA-[0-9][0-9][0-9][0-9][0-9]/$(echo -e "\033[31;40m\\\0\033[0m")/g' | more








#一键生成war包index.war.  当前目录不能有index.html和index.war
mkdir -p /tmp/.flag_war_dir_by_ddcw && echo -e "<h1>IP DETAIL</h1>$(ifconfig | grep inet | grep -v inet6 | awk '{print $2"<br>"}')<br><br> <h1>CPU</h1>pyhsical: $(cat /proc/cpuinfo | grep physical | grep id | sort | uniq |  wc -l)<br>processor:$(cat /proc/cpuinfo | grep processor | wc -l)<br><br> <h1>MEMINFO</h1>Total:$(cat /proc/meminfo | grep MemTotal | awk -F : '{print $2}' | awk '{print $1}')<br>MemAvailable:$(cat /proc/meminfo | grep MemAvailable | awk -F : '{print $2}' | awk '{print $1}')" > index.html && jar -cvf index.war index.html


#rpm查询依赖:
rpm -qpR ansible-2.9.10-1.el7.noarch.rpm

#rpm查询所安装的文件:
rpm -ql ansible

#rpm查询安装包信息
rpm -qi ansible

#rpm查询命令所属rpm包
rpm -qf /bin/split


#删除匹配内容上面的所有内容
cat /etc/passwd | sed '1,/test/d'

#vim设置tab建空格为4
set ts=4


#ssh 测试端口连通性
ssh 127.0.0.1 -p 22 -o BatchMode=yes
echo $(ssh 127.0.0.1 -p 22 -o BatchMode=yes -o StrictHostKeyChecking=yes 2>&1 ) | grep refused >/dev/null 2>&1 || echo " is open"
#refues  表示端口未开放, 其它均为开放.

#ssh 扫描服务器开放的端口(比较慢)
for i in {1..15000}; do echo $(ssh 127.0.0.1 -p ${i} -o BatchMode=yes -o StrictHostKeyChecking=yes 2>&1 ) | grep refused >/dev/null 2>&1 || echo "${i} is open"   ; done

#ssh并发扫描端口(并发数为CPU的2倍)


#telnet扫描服务器端口:
for i in {1..65536}; do (echo 'q')|telnet -e 'q' 127.0.0.1 ${i} >/dev/null 2>&1 && echo -e "\033[31;40m${i}\033[0m\tis open"; done

#nmap扫描端口
nmap 127.0.0.1


#每行显示长度, 每行显示6个字段
echo  {1..20} | xargs -n 6


#批量杀进程(如nginx), 这个有很多方法实现的.
ps -ef | grep nginx | grep -v grep | xargs -t -i kill -9 {}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档