常用命令
/
|---- bin 存放用户二进制文件
|---- boot 存放内核引导配置文件
|---- dev 存放设备文件
|---- etc 存放系统配置文件
|---- home 用户主目录
|---- lib 动态共享库
|---- lost+found 文件系统恢复时的恢复文件
|---- media 可卸载存储介质挂载点
|---- mnt 文件系统临时挂载点
|---- opt 附加的应用程序包
|---- proc 系统内存的映射目录,提供内核与进程信息
|---- root root用户主目录
|---- sbin 存放系统二进制文件
|---- srv 存放服务相关数据
|---- sys sys虚拟文件系统挂载点
|---- tmp 存放临时文件
|---- usr 存放用户应用程序
|---- var 存放邮件,系统日志等变化文件
mv 123.txt 321.txt 重命名文件
cp:复制文件
rm:删除
ln -s source.txt target_link.txt 创建链接文件(软链接)
ln source.txt target_link_2.py 创建链接文件(硬链接)
find ./ -name xxx.txt 查找当前目录下匹配的文件名
-size 2M 查找当前目录下匹配大小的文件
find ./ -name "NEA???" -type d -print
find ./ -name '*test*' -exec dirname {} \; | uniq
find ./ -type f -mtime +10 | xargs \rm
find ./ -mtime +30 -name "*.txt" -exec rm -rf {} \;
find ./ -type f -name "*txt" -delete
whereis 参数 服务名:搜索二进制文件-b,man说明文件-m,源码文件-s
locate /etv/sh:搜索etc下所有sh开头的文件
which ls:查找ls命令的可执行文件
whatis ls:查看ls的介绍及使用简要
cut -d '/' -f 2 字符串切割,以‘/’为分隔符,取第二个字段
wc -c(字节数) -l(行数) -w(字数) 内容统计命令
grep -iv:忽略大小写,不含该串
awk -F , '{print $1,$2}' log.txt:以,分隔log.txt的内容,取1,2项
sed -i ':a;N;$!ba;s/\n//g' filename /替换文件中所有换行
tar -cvf test.tar *.py 打包
tar -xvf test.tar 解包
gzip -r test.tar test.tar.gz 压缩(gzip test.tar)
gzip -d test.tar.gz
tar -jcvf xxx.tar.bz2 打压缩包
tar -jxvf xxx.tar.bz2 -C ./test… 解压缩包
xz -z 要压缩的文件 (tar.xz文件)
xz -d 要解压的文件
zip myzip *.* 打rar包
unzip -d test myzip.zip 解rar包
sudo -s
du -a:目录或文件占磁盘大小
df -hl:看磁盘占用空间
repquota:显示出一个文件系统的配额信息
ntpdate -u xxx.xxx.xxx.xxx
jobs -l:查看运行的后台进程;fg %jobnumber:将后台命令调至前台继续运行;bg jobnumber:将后台暂停的命令变成后台继续运行;ctrl+z:将前台正在执行的命令放到后台,并处于暂停状态;
ps -elf:查看正在运行的进程;D不可中断睡眠,R正在运行或可运行,S可中断睡眠,T已停止的进程收到sigstop,sigstp,sigtin,sigtou信号后停止运行,X死进程,Z僵尸进程
chage -l 用户组 查看下情况;chage -M 99999 www,对www用户组密码期限做了修改,其中99999代表永久
showkey -a:查看按键对应的字符序列
compgen -c:可以打印出所有支持的命令列表
disown -r:可以将所有正在运行的进程移除
hash:打印出你所使用过的命令以及执行的次数
useradd dreamlee -m /home/dreamlee 添加用户
passwd laowang 给用户设置密码
cat /etc/passwd 查看系统当前用户名
userdel -r laowang 删除用户
cat /etc/group 查看有哪些用户组
groupmod 加两次tab键
groupadd -g 7100 hadoopgroup
useradd -u 7100 -g hadoopgroup hadoopuser
groupdel www
groups laowang 查看用户所属的用户组有哪些
usermod -g AAA laowang 修改用户所在组(默认组)
usermod -a -G BBB laowang 增加用户的用户组
chmod 修改文件权限
chmod u(goa)+(-=)w(rx) 1.py
chmod 421 1.py
chown 修改文件所有者
chown bingbing 1.py
chgrp 修改文件所属组
添加用户到wheel用户组:useradd opsuser -G wheel;vim /etc/pam.d/su
sudo命令操作: root用户执行visudo,添加opsuser ALL=(root) NOPASSWD:/bin/su 执行sudo su登录root用户
查看Linux内核版本命令:cat /proc/version;uname -a
查看Linux系统版本的命令:lsb_release -a;cat /etc/redhat-release;cat /etc/issue
输入“nmcli con show”命令查看网卡uuid即可
alias la='ls -a':对命令取别名
env:查看环境变量;shell中表示在一个修改后的环境里执行命令
nohup:不挂断地运行命令;一般用法nohup [command] &;
eval:会对后面的cmdline进行两遍扫描,如果第一遍扫描后,cmdline是个普通命令,则执行此命令,如果cmdline中含有变量的间接引用,则保证间接引用的语义。
let c=a+b:进行整型数的数学运算
修改时区timedatectl
timedatectl list-timezones# 列出所有时区
timedatectl set-local-rtc 1# 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
timedatectl set-timezone Asia/Shanghai# 设置系统时区为上海
或者:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
同步NTP时间:ntpdate -u ntp.sjtu.edu.cn
磁盘挂载
查看未分区磁盘:fdisk -l
划分分区并格式化:fdisk /dev/vdb
格式化:mkfs.ext4 /dev/vdb1
挂载磁盘:mount /dev/vdb1 /home #取消挂载 umount /home
开机自动挂载:编辑/etc/fstab文件,添加:/dev/vdb1 /home ext4 defaults 0 0 #0 0 表示开机不检查磁盘。
#查看磁盘uuid =====>>> ls -l /dev/disk/by-uuid/
##虚拟机新增加硬盘,不用重启读到新加的硬盘
# cd /sys/class/scsi_host/
# echo "- - -" > host0/scan
# fdisk -l
centos7扩容根目录(/dev/mapper/centos-root)
partprobe /dev/vdb 或者 partx -u /dev/vdb1 #任一命令通知内核更新分区表
e2fsck -f /dev/sdb1 # 检查文件系统
resize2fs /dev/sdb1 # 变更文件系统大小
mount -t cifs -o username=DELL,password=gsglpt //192.168.18.158/ManagementPlatform /mnt/share --Linux访问Windows共享目录
shell判断
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
= 等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
!=不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
< 小于 应用于:整型比较 在[] 中,不能使用 表示字符串
> 大于 应用于:整型比较 在[] 中,不能使用 表示字符串
-eq 等于 应用于:整型比较
-ne 不等于 应用于:整型比较
-lt 小于 应用于:整型比较
-gt 大于 应用于:整型比较
-le 小于或等于 应用于:整型比较
-ge 大于或等于 应用于:整型比较
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式
-z 空字符串
-n 非空字符串
for循环使用参数:$0(这个程式的执行名字);$n(这个程式的第n个参数);$*(这个程式的所有参数,可超过9个);$#(这个程式 参数个数);$$(这个程式的PID);$!(执行上一个景指令的PID);$?(执行上一个命令的返回值);$-(显示shell使用的当前选项);$@(跟$*类似,但可以当作数组用)
使用linux命令dos2unix filename,直接把文件转换为unix格式
日志
# 日志颜色
COLOR_G="\x1b[0;32m"
COLOR_Y="\x1b[0;33m"
COLOR_R="\x1b[0;31m"
RESET="\x1b[0m"
DATE=`date +%F`
TIME=`date "+%Y-%m-%d %H:%M:%S"`
function info(){
echo -e "${COLOR_G}[$TIME] [Info] ${1}${RESET}"
}
function warn()
{
echo -e "${COLOR_Y}[$TIME] [Info] ${1}${RESET}"
}
fuser
echo "你被管理员踢出了" > /dev/pts/1 && fuser -k /dev/pts/1
配置ssh免密登录
#ssh-keygen -t rsa:生成ssh免密登录密钥
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
#ssh-copy-id [nodeIP]:将公钥复制到免密登录的目标机器上 ~/.ssh/authorized_keys
sshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" $IP
截取字符串
注:匹配的内容为去掉的
获取字符串长度:${#str}
最小限度从前面截去:${str#*/}
最大限度从前面截去:${str##*/}
最小限度从后面截去:${str%/*}
最大限度从后面截去:${str%%/*}
0表示左边第一个字符开始,7表示子字符总个数:${str:0:7}
echo "xxx=xxx=xxxxx=xxxx" | awk -F '=' '{s="";for(i=2;i<=NF;i++)s=s""(i==NF?$i:$i"=");print s}'
开放/关闭端口号
文件:/etc/init.d/iptables;/etc/sysconfig/iptables
查看哪些端口号被打开:netstat -anp
打开23端口:nc -lp 23
端口访问量:netstat -nao|awk '{print $4}'|grep :8089|wc -l
查看带宽占用情况:iftop -i eth0 -P
-- 查找所有规则:iptables -L INPUT --line-numbers
-- 删除一条规则:iptables -D INPUT 11
iptables -I DOCKER -ptcp --dport 3306 -j DROP;
关闭:
iptables -A INPUT -ptcp --dport [端口号] -j DROP;
iptables -A OUTPUT -ptcp --dport [端口号] -j DROP;
开启:
iptables -A INPUT -ptcp --dport [端口号] -j ACCEPT;
iptables -A OUTPUT -ptcp --sport [端口号] -j ACCEPT;
保存设置:service iptables save
重启防火墙:service iptables restart
关闭防火墙开机启动:chkconfig iptables off
添加80端口的访问权限,这里添加后永久生效
#firewall-cmd --zone=public --add-port=80/tcp --permanent
#firewall-cmd --reload
查看80端口访问权限情况
#firewall-cmd --zone=public --query-port=80/tcp
关闭80访问权限
#firewall-cmd --zone=public --remove-port=80/tcp --permanent
将指定IP主机加入(删除)trusted域
#firewall-cmd --permanent --zone=trusted --add-source=192.168.31.127
#firewall-cmd --permanent --zone=trusted --remove-source=192.168.31.127
拒绝主机的所有网络连接(有回应/无回应)
#firewall-cmd --permanent --zone=block --add-source=192.168.31.127
#firewall-cmd --permanent --zone=drop --add-source=192.168.31.127
配置路由:
route -n
route add -net 192.168.19.0 netmask 255.255.255.0 gw 192.168.18.1
route del -net 192.168.19.0 netmask 255.255.255.0 gw 192.168.18.1
配置静态路由static-routes
any net 192.168.3.0/24 gw 192.168.3.254
any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129
rpmbuild制作RPM包
1.安装rpmbuild:
yum install rpmbuild
yum install rpmdevtools
rpmdev-setuptree
查看是否安装完成:rpmbuild --showrc|grep topdir
配置文件位置:/usr/lib/rpm/macros %_topdir
2.rpmbuild目录
BUILD:编译rpm包的临时目录
BUILDROOT:编译后生成的软件临时安装目录
RPMS:最终生成的可安装rpm包的所在目录
SOURCES:所有源代码和补丁文件的存放目录
SPECS:存放spec文件的目录(重要)
SRPMS:软件最终的rpm源码格式存放路径
3.写spec文件
生成spec文件模板:rpmdev-newspec -o Name-version.spec
%prep:将%_sourcedir目录下的源码解压到%_builddir目录下。如果有补丁,需要在这个阶段进行打补丁操作
%build:在%_builddir目录下执行源码包的编译。一般是执行./confiure和make指令
%install:将需要打包到rpm软件包里的文件从%_builddir下拷贝到%_buildrootdir目录下。当用户最终用rpm -ivh name-version.rpm安装软件包时,这些文件会安装到用户系统中相应的目录里
制作rpm包:这个阶段是自动完成的,所以在SPEC文件里面是看不到的,这个阶段会将%_buildroot目录的相关文件制作成rpm软件包最终放到%_rpmdir目录里
%clean:编译后的清理工作,这里可以执行make clean以及清空%_buildroot目录等
4.打包
rpmbuild
-ba 既生成src.rpm又生成二进制rpm
-bs 只生成src的rpm
-bb 只生成二进制的rpm
-bp 执行到pre
-bc 执行到build段
-bi 执行install段
-bl 检测有文件没包含
关于IP地址
开启/关闭网卡:ifup ens33/ifdowm ens33
注意:在桥接模式下
cd /etc/sysconfig/network-scripts/
其中“ifcfg-ens33”的文件,为我们需要修改的网络配置文件
BOOTPROTO=static
修改ONBOOT=“yes” 意思是将网卡设置 为开机启用
IPADDR=192.168.0.230 #静态IP
GATEWAY=192.168.0.1 #默认网关,在cmd中输入ipconfig/all,再查找;虚拟机是192.168.0.2
NETMASK=255.255.255.0 #子网掩码
vim /etc/resolv.conf的配置自动配置为如下图示:
$:hostnamectl set-hostname master
/etc/hosts文件内配置:192.168.200.128 master
这两步使得hostname -i返回结果为192.168.200.128
若出现ping不通域名的情况,则直接在/ect/syconfig/network-scripts/ifcfg-ens33里面添加:
DNS1=8.8.8.8
DNS2=114.114.114.114
centOS查看网卡UUID:nmcli con show
CPU负载过高的问题
1.定位进程:top -c 显示进程列表,输入P,按cpu使用率排序
2.定位线程:top -Hp [进程PID],输入P,找到哪个线程耗费cpu最高
3.定位代码:把线程pid转换成16进制,printf "%x\n" [线程PID]; jstack [进程PID] | grep '[16进制线程PID]' -C5 --color
4.查看网卡访问 iftop -i eth0
查看占用内存最高的进程:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head -n 10
linux下获取占用CPU资源最多的10个进程:ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
查看linux机器版本
查看内核版本:cat /proc/version;uname -a;uname -r
查看系统版本信息:cat /etc/issue;cat /etc/lsb-release;lsb_release -a;cat /etc/redhat-release
vi vim
替换第n行开始到最后一行的每一个str为newstr -> :n,$s/str/newstr/g
sed命令
进行文本替换工作。
常用符号
^:行首定位符
$:行尾定位符
.:匹配除换行外的单个字符
*:匹配0个或多个前导字符
[]:匹配制定字符组内任一字符
[^]:匹配不在制定字符组内任一字符
..:保存已匹配的字符
&:保存查找串以便在替换串中引用
<:词首定位符
>:词尾定位符
x{m}:连续m个x
x{m,}:至少m个x
x{m,n}:大于等于m个,小于n个x
常用选项
-n:使用安静模式。在一般sed的用法中,所有来自stdin的资料一般都会被列出到屏幕,但如果加上-n参数后,则只有经过sed特殊处理的一行(或者command)才会被列出来。
-e:允许多点编辑
-f:直接将sed的动作写在一个档案内,-f filename则可以执行filename内的sed动作
-r:sed的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i:直接修改读取的档案内容,而不是由屏幕输出。
动作说明
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
g:全局
示例
sed '2,5 s/old/new/' file ----分隔符有/#!,行寻址2到5行
sed -r 's/[0-9][0-9]$/&.5/' datafile ----&代表在查找串中匹配到的内容
sed -n '/root/,/nologin/ s/old/new/p' /etc/passwd ----找到root行或nologin行
awk命令
ELK
elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
action.auto_create_index: true
#action.auto_create_index: .security,.monitoring*,.watches,.triggered_watches,.watcher-history*
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"
kibana.yml
server.host: "0"
elasticsearch.hosts: [ "http://elastic_es:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "elastic@PROD"
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"
logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://localhost:9200" ]
#xpack.monitoring.enabled: true
#xpack.monitoring.elasticsearch.username: "elastic"
#xpack.monitoring.elasticsearch.password: "elastic@PROD"
path.config: /opt/cloud/elastic/logstash-7.13.4/config/conf.d/
path.logs: /var/log/logstash
prod-mp-backend-log.conf
input {
file {
type => "mp-log"
path => "/usr/local/pm_jeecg2.2/catalina.out"
start_position => "beginning"
stat_interval => "5"
}
codec => multiline {
pattern => "^\d+"
negate => "true"
what => "previous"
charset => "UTF-8"
auto_flush_interval => 3
}
}
output {
if [type] == "mp-log" {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "prod-mp-backend-log-%{+YYYY.MM.dd}"
user => "elastic"
password => "elastic@PROD"
}
}
}