Linux运维命令:
防火墙:
1、查看firewall服务状态:
systemctl status firewalld
出现Active: active (running)切高亮显示则表示是启动状态。
出现 Active: inactive (dead)灰色表示停止,看单词也行。
2、查看firewall的状态:
firewall-cmd --state
3、开启firewalld.service服务:
service firewalld start
重启:service firewalld restart
关闭:service firewalld stop
4、查看防火墙规则:
firewall-cmd --list-all
5、查询、开放、关闭端口:
查询端口是否开放:firewall-cmd --query-port=8080/tcp
开放80端口:firewall-cmd --permanent --add-port=80/tcp
移除端口:firewall-cmd --permanent --remove-port=8080/tcp
重启防火墙(修改配置后要重启防火墙):firewall-cmd --reload
查看端口:
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
netstat 查看端口占用语法格式:
netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
例如查看 8000 端口的情况,使用以下命令:
netstat -tunlp | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 26993/nodejs
更多命令:
netstat -ntlp //查看当前所有tcp端口
netstat -ntulp | grep 80 //查看所有80端口使用情况
netstat -ntulp | grep 3306 //查看所有3306端口使用情况
lsof多重用法:
lsof -i //显示所有网络连接
lsof -i:80 //查看所有80端口使用情况
lsof -i@129.128.122.15 //检查是否开放连接到网络中或互联网上某个指定主机的连接
lsof -i -sTCP:LISTEN //找出正等候连接的端口。
lsof -u hdfs//使用-u显示指定hdfs用户打开了什么
kill -9 `lsof -t -u hdfs` //杀死指定用户所做的一切事情,-t选项只返回PID
lsof -c syslog-ng //使用-c查看指定的命令正在使用的文件和网络连接
lsof -p 10075 //使用-p查看指定进程ID已打开的内容
lsof /var/log/messages/ //显示与指定目录交互的所有一切
lsof /home/daniel/firewall_whitelist.txt //显示与指定文件交互的所有一切
lsof -u hdfs -i @129.128.122.15 //显示hdfs连接到129.128.122.15所做的一切
curl命令:
# 调试类
-v, --verbose 输出信息
-q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效,这个参数会影响到 -K, --config -A, --user-agent -e, --referer
-K, --config FILE 指定配置文件
-L, --location 跟踪重定向 (H)
# CLI显示设置
-s, --silent Silent模式。不输出任务内容
-S, --show-error 显示错误. 在选项 -s 中,当 curl 出现错误时将显示
-f, --fail 不显示 连接失败时HTTP错误信息
-i, --include 显示 response的header (H/F)
-I, --head 仅显示 响应文档头
-l, --list-only 只列出FTP目录的名称 (F)
-#, --progress-bar 以进度条 显示传输进度
# 数据传输类
-X, --request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST
-H, --header <header> 设定 request里的header 例如 -H "Content-Type: application/json"
-e, --referer 设定 referer (H)
-d, --data <data> 设定 http body 默认使用 content-type application/x-www-form-urlencoded (H)
--data-raw <data> ASCII 编码 HTTP POST 数据 (H)
--data-binary <data> binary 编码 HTTP POST 数据 (H)
--data-urlencode <data> url 编码 HTTP POST 数据 (H)
-G, --get 使用 HTTP GET 方法发送 -d 数据 (H)
-F, --form <name=string> 模拟 HTTP 表单数据提交 multipart POST (H)
--form-string <name=string> 模拟 HTTP 表单数据提交 (H)
-u, --user <user:password> 使用帐户,密码 例如 admin:password
-b, --cookie <data> cookie 文件 (H)
-j, --junk-session-cookies 读取文件中但忽略会话cookie (H)
-A, --user-agent user-agent设置 (H)
# 传输设置
-C, --continue-at OFFSET 断点续转
-x, --proxy [PROTOCOL://]HOST[:PORT] 在指定的端口上使用代理
-U, --proxy-user USER[:PASSWORD] 代理用户名及密码
# 文件操作
-T, --upload-file <file> 上传文件
-a, --append 添加要上传的文件 (F/SFTP)
# 输出设置
-o, --output <file> 将输出写入文件,而非 stdout
-O, --remote-name 将输出写入远程文件
-D, --dump-header <file> 将头信息写入指定的文件
-c, --cookie-jar <file> 操作结束后,要写入 Cookies 的文件位置
#抓取页面内容到一个文件中
curl -o home.html http://www.sina.com.cn
#模拟用户登录,此参数相当于设置http头 Authorization:
curl --user user:password http://blog.mydomain.com/login.php
curl 127.0.0.1:80
systemctl命令
systemctl start $服务 启动服务
systemctl stop $服务 停止服务
systemctl restart $服务 重启服务
systemctl status $服务 查看服务详细的运行状态
systemctl disable $服务 让服务开机不要运行
systemctl enable $服务 让服务开机运行
systemctl is-active $服务 检查确认服务是否运行
systemctl is-enable $服务 检查确认服务是否运行
编辑查看文件:
1、vim:
vim 编辑,遇到突然中断,重新vim 打开之前在编辑的文件,会有类似如下的警告:
执行D,会在打开文件前把这个暂存文件删除
也可以按下q 离开vim,回到命令提示符,手动删除缓存文件 rm -rf 缓存文件名。以.swp结尾的是缓存文件。
2、less/more:查看日志的时候使用。
less添加以下字符的作用:::::
-N 显示每行的行号。
-S 行过长时将超出部分舍弃。
-e 当文件显示结束后,自动离开。
-g 只标志最后搜索到的关键同。
-Q 不使用警告音。
-i 忽略搜索时的大小写。
-m 显示类似 more 命令的百分比。
-f 强迫打开特殊文件,比如外围设备代号、目录和二进制文件。
-s 显示连续空行为一行。
-b <缓冲区大小> 设置缓冲区的大小。
-o <文件名> 将 less 输出的内容保存到指定文件中。
-x <数字> 将【Tab】键显示为规定的数字空格。
less打开文件后可执行的操作::::
/字符串 向下搜索“字符串”的功能。
?字符串 向上搜索“字符串”的功能。
n 重复*前一个搜索(与 / 成 ? 有关)。
N 反向重复前一个搜索(与 / 或 ? 有关)。
b 向上移动一页。
d 向下移动半页。
h 或 H 显示帮助界面。
q 或 Q 退出 less 命令。
y 向上移动一行。
空格键 向下移动一页。
回车键 向下移动一行。
PgDn键 向下移动一页。
PgUp键 向上移动一页。
Ctrl+f 向下移动一页。
Ctrl+b 向上移动一页。
Ctrl+d 向下移动一页。
Ctrl+u 向上移动半页。
j 向下移动一行。
k 向上移动一行。
G 移动至最后一行。
g 移动到第一行。
ZZ 退出 less 命令。
v 使用配置的编辑器编辑当前文件。
[ 移动到本文档的上一个节点。
] 移动到本文档的下一个节点。
p 移动到同级的上一个节点。
u 向上移动半页。
3、tail -f:实时监控日志
tail -100f file 显示最后100行再实时监控
tail -c 50 file 从50字节位置读取指定文件
tail -n 50 file 显示最后50行
4、cat :查看文件
cat file |wc -l 统计文件行数
ls -l | grep "^-" | wc -l 统计当前目录下文件的个数(不包括目录)
ls -lR| grep "^-" | wc -l 统计当前目录下文件的个数(包括子目录)
ls -lR | grep "^d" | wc -l 查看某目录下文件夹(目录)的个数(包括子目录)
5、diff 比较文本文件:
diff <变动前的文件> <变动后的文件>
diff file1 file2
#上下文格式的diff,它的使用方法是加入c参数
diff -c file1 file2
#合并格式的diff,将f1和f2的上下文合并在一起显示。它的使用方法是加入u参数:
diff -u file1 file2
#git格式的diff,版本管理系统git,使用的是合并格式diff的变体
定时任务crontab
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数
来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执
行的程序
Linux修改系统时间
#修改为北京时间
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#临时修改系统时间
hwclock --set --date '2022-08-20 00:00:05'
#永久修改系统时间
hwclock --show
hwclock --set --date '2022-08-20 00:00:05'
hwclock --hctosys
clock -w
hwclock --show
Linux用户操作
#查看系统当前登录用户
w
03:46:23 up 2:08, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
zzx pts/0 192.168.56.1 03:38 7.00s 0.03s 0.03s -bash
root pts/1 192.168.56.1 01:40 7.00s 0.69s 0.00s w
#useradd添加用户
#useradd命令一般用于添加用户,该命令常见参数如下:
-M 表示不创建家目录
-s 表示指定用户的shell环境
-u 表示指定用户的uid
-g 表示指定用户的gid(需要指定的gid存在)
-p 指定用户的密码(必须以密文的方式指定)
-G 表示指定用户的附属组(需要指定的gid存在)
使用示例:
useradd zzx
#userdel删除用户
userdel zzx
#更改用户密码
passwd zzx
#BAD PASSWORD: The password is shorter than 8 characters
#Linux用户密码太简单会报这个错误。可用这个命令设置
echo zzx|passwd --stdin zzx
#####Linux中普通用户配置sudo权限(带密或免密)########
#1、添加sudo文件的写权限,命令是:
chmod u+w /etc/sudoers
#2、编辑sudoers文件:
#找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (注:这里的xxx是你的用户名)
vi /etc/sudoers
zzx ALL=(ALL) NOPASSWD:ALL
#xxx ALL=(ALL) ALL #允许用户youuser执行sudo命令(需要输入密码)。
#%xxx ALL=(ALL) ALL #允许用户组youuser里面的用户执行sudo命令(需要输入密码)。
#xxx ALL=(ALL) NOPASSWD: ALL #允许用户youuser执行sudo命令,并且在执行的时候不输入密码。
#%xxx ALL=(ALL) NOPASSWD: ALL #允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码。
#3、撤销sudoers文件写权限,命令:chmod u-w /etc/sudoers
#普通用户就可以使用sudo了。
查看连接数
##查看总连接数
netstat -na | grep 2181 | wc -l
1232
##查看各种连接状态 连接数
netstat -an| grep 2181 |awk '$1~/tcp/{aa[$NF]++}END{for (h in aa)print h,aa[h]}'
LISTEN 1
CLOSE_WAIT 1
ESTABLISHED 1203
SYN_SENT 1
TIME_WAIT 13
##查看各IP 连接数
netstat -an| grep 2181 | awk '{print $5}' |awk -F: '{print $1}' | sort | uniq -c | sort -rn
netstat -an| grep ESTABLISHED | awk '{print $5}' |awk -F: '{print $1}' | sort | uniq -c | sort -rn
HADOOP
YARN命令:
防火墙:
systemctl start firewalld.service
systemctl stop firewalld.service
systemctl status firewalld.service
--添加规则add,去除规则remove
firewall-cmd --zone=public(作用域) --add-port=80/tcp(端口和访问类型) --permanent(永久生效)
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.9.250.0/24" accept"
--指定端口对指定IP开放:
firewall-cmd --permanent --zone=public --add-rich-rule 'rule family="ipv4" port protocol="tcp" port="5006" source address="10.9.250.117" accept'
--开启0-5002端口
firewall-cmd --permanent --zone=public --add-port=0-5002/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口
hive
hive连接:
kinit -kt /export/kerberos/1/hive.keytab hive/ocean@JD.COM
beeline -u 'jdbc:hive2://11.243.32.215:10000/default;principal=hive/jxq-11-243-32-215.h.abchost.local@JD.COM'
UDF函数相关操作:
hdfs dfs -put dependencies.jar /udf
create function dw_join as 'com.jd.jr.udf.kms.KmsDecodeIndex' using jar 'hdfs:///udf/dependencies.jar';
reload function;
DROP FUNCTION IF EXISTS dw_join;
hive库表权限
一、库级的权限
-- 授予所有权限给某个用户
grant all on msta to user {userName};
-- 授权admin privilege权限
grant ADMIN PRIVILEGE on database {dbName} to user {userName};
-- 授予某个库的权限给某个用户
grant select on database {dbName} to user {userName};
grant insert on database {dbName} to user {userName};
grant update on database {dbName} to user {userName};
grant delete on database {dbName} to user {userName};
-- 回收某个库的权限给某个用户
revoke select on database {dbName} from user {userName};
revoke insert on database {dbName} from user {userName};
revoke update on database {dbName} from user {userName};
revoke delete on database {dbName} from user {userName};
-- 查看指定用户在所有库下面的权限
show grant user {userName};
-- 查看指定用户在某个库的权限
show grant user {userName} on database {dbName};
二、表级的权限
-- 授予表的权限给某个用户
grant create on database {dbName} to user {userName};
grant select on table {dbName}.tableName to user {userName};
grant insert on table {dbName}.tableName to user {userName};
grant update on table {dbName}.tableName to user {userName};
grant delete on table {dbName}.tableName to user {userName};
-- 回收某个用户的表的权限
revoke create on table {dbName}.tableName from user {userName};
revoke select on table {dbName}.tableName from user {userName};
revoke insert on table {dbName}.tableName from user {userName};
revoke update on table {dbName}.tableName from user {userName};
revoke delete on table {dbName}.tableName from user {userName};
-- 查看指定用户在指定表的权限
show grant user {userName} on table {dbName}.{tableName};
hbase
hbase连接:
kinit -kt /export/kerberos/1/hbase.keytab hbase/ocean@JD.COM
hbase shell
查看表行数:
hbase org.apache.hadoop.hbase.mapreduce.RowCounter '表名'
su - hbase
#指定表检查
hbase hbck id_card_sm3
#修复
hbase hbck -fixAssignments id_card_sm3
#检查hbase regionserver进程
#!/bin/bash
hbaseregionexists=$(ps aux|grep hbase.regionserver.HRegionServer | grep -v grep | wc -l)
hbaseregionpid=$(ps aux|grep hbase.regionserver.HRegionServer | grep -v grep | awk '{ print $2; }')
echo hbase regionserver进程存在,进程ID为###### ${hbaseregionpid},进程数####${hbaseregionexists}
if [ "${hbaseregionexists}" = 0 ]
then
echo 服务上没有hbase regionserver进程执行,准备重启
su - hdfs -c -l "/export/hbase/bin/hbase-daemon.sh restart regionserver"
fi
echo 脚本执行完成
mysql
MySQL连接:
mysql -h192.168.56.70 -uroot -Dstudent -p
95Sy[]M
修改MySQL密码策略(仅在当前窗口生效):
set global validate_password.policy=LOW;
set global validate_password.mixed_case_count=0;
set global validate_password.number_count=0;
set global validate_password.special_char_count=0;
set global validate_password.length=1;
set global validate_password.check_user_name='OFF';
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@'%' identified by 'password';
grant all privileges on zabbix.* to zabbix@'%';
zcat
zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。
zcat与运行gunzip -c命令完全相同。
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -h192.168.56.70 -uzabbix -p zabbix
jmap
jmap -heap pid
netstat -na | grep 2181 | wc -l
netstat -na |grep ^tcp| awk '{++S[$NF]} END {for(a in S) print a, S[a]}'
1.63 0.61 0.22 1/228 2487
1.63(1分钟平均负载) 0.61(5分钟平均负载) 0.22(15分钟平均负载) 1/228(分子是当前正在运行的进程数,分母是总的进程数) 2487(最近运行进程的ID)
#打印dump包
jmap -dump:format=b,file=user.dump pid
#3秒打印一次gc信息
jstat -gc pid 3000
#-r:内存 -u:CPU -d:IO
pidstat -r -p pid
top
top -H -p pid
--查看进程下的所有线程 ,看线程占用cpu和内存 的使用情况,找到较高的线程id(4277)
printf "%x\n" 4277
--用printf "%x\n" 4277 拿到4277的16进制数为10b5
jstack -l pid | grep <线程id的16进制数>
jstack -l pid| grep 10b5 -C5 --color --找到该进程下的线程信息
ps -mp pid -o THRAD,tid,time
ROOT命令行使用其它用户执行命令
su - hdfs -c -l "/export/hbase/bin/hbase-daemon.sh restart regionserver"
yum
配置阿里yum源
cd /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#以下两条命令在换yum源之后必做,不然可能会出问题!
yum clean all # 清理yum缓存
yum makecache # 缓存软件包信息(提高搜索/安装软件的速度)
yum下载安装包,但不安装
yum install mariadb-server --downloadonly --downloaddir=/tmp/offline_rpm
搭建私有yum仓库
新建一个repo文件
vi /etc/yum.repos.d/new.repo
写入如下内容并保存
[New]
name=New
baseurl=file:///tmp/offline_rpm
gpgcheck=0
enabled=1
查看Linux服务器信息(CPU,内存,磁盘)
#查看磁盘CPU负载
cat /proc/loadavg
#0.16 0.31 0.33 2/3131 20132
#前三个是1、5、15分钟内的平均进程数。第四个的分子是正在运行的进程数,分母是进程总数;最后一个最近运行的进程ID号
cat /proc/stat
#name user nice system idle iowait irrq softirq steal guest guest_nice
#cpu 60382 1 80032 198934063 2349 0 109 0 0 0
#cpu指标 含义 时间单位 备注
#user 用户态时间 jiffies 一般/高优先级,仅统计nice<=0
#nice nice用户态时间 jiffies 低优先级,仅统计nice>0
#system 内核态时间 jiffies
#idle 空闲时间 jiffies 不包含IO等待时间
#iowait I/O等待时间 jiffies 硬盘IO等待时间
#irq 硬中断时间 jiffies
#softirq 软中断时间 jiffies
#steal 被盗时间 jiffies 虚拟化环境中运行其他操作系统上花费的时间(since Linux 2.6.11)
#guest 来宾时间 jiffies 操作系统运行虚拟CPU花费的时间(since Linux 2.6.24)
#guest_nice nice来宾时间 jiffies 运行一个带nice值的guest花费的时间(since Linux 2.6.33)
#查看磁盘disk空间
cat /proc/mounts
#f_bsize: 文件系统块大小 f_frsize: 分栈大小 f_blocks: 文件系统数据块总数 f_bfree: 可用块数
#f_bavail:非超级用户可获取的块数 f_files: 文件结点总数 f_ffree: 可用文件结点数 f_favail: 非超级用户的可用文件结点数
#f_fsid: 文件系统标识 ID f_flag: 挂载标记 f_namemax: 最大文件长度
cat /proc/partitions
major minor #blocks name
253 0 524288000 vda
253 1 1024 vda1
253 2 15728640 vda2
253 3 8388608 vda3
253 4 500168687 vda4
major 主设备号。3 代表 hda
minor 次设备号。0 代表 第7 分区
#blocks 设备总块数 (1024 bytes/block)。120060864*1024 => 122942324736(bytes) ~122.9GB
Name 设备名称
cat /proc/diskstats
1 2 3 4 5 6 7 8 9 10 11 12 13 14
253 0 vda 121382 201 6173670 98593 49222835 14669372 683190480 59714557 0 9379453 52760806
253 1 vda1 5146 0 519408 1797 0 0 0 0 0 1209 1731
253 2 vda2 18507 184 1402602 20200 8564711 5339588 198886488 27820389 0 2004173 26859320
253 3 vda3 1748 0 454352 798 0 0 0 0 0 661 780
253 4 vda4 94256 17 3237812 74172 23742889 9329784 484303992 26858211 0 8495225 25855383
设备号 次设备号 设备名称 4-7列成功完成读的总次数 合并读次数 读扇区的次数 读操作花的时间 8-11列分别是写
12列为 I/O的当前进度,只有这个域应该是0,如果这个值为0,同时write_complete read_complete io_processing 一直不变可能就就是IO hang了
13列为 输入输入花的时间(ms),花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。
14列为 输入/输出操作花费的加权毫秒数.
利用sshpass批量实现基于key验证
#!/bin/bash
#192.168.56.{1..200}
#[ -f /root/.ssh/id_rsa ] ||
ssh-keygen -f /root/.ssh/id_rsa -P ''
yum install sshpass -y &> /dev/null
net=192.168.56
user=root
export SSHPASS=vagrant
for ip in {71..74}
do
sshpass -e ssh-copy-id $net.$ip
echo $net.$ip,已完成
done