Linux严格区分大小写
一、基础命令
清屏快捷键 ctrl + L
日常操作命令
- history 10 命令   查看最近10个操作命令
linux下用 ctrl +r 快速搜索历史命令 - 查看登录时间 
w - 登录信息   
last - 查看系统开机时间  
uptime - 给命令起别名 
alias kubectlxxx='kubectl --namespace xxxx' watch命令
watch可以帮你监测一个命令的运行结果
-n或—interval watch缺省每2秒运行一下程序,可以用-n或-interval来指定间隔的时间。
-d或—differences 用-d或—differences 选项watch 会高亮显示变化的区域。 而-d=cumulative选项会把变动过的地方(不管最近的那次有没有变动)都高亮显示出来。
-t 或-no-title 会关闭watch命令在顶部的时间间隔,命令,当前时间的输出。
关于时间命令
date显示时间date -d today +"%Y-%m-%d %H:%M:%S"- 同步更新系统时间
 - 查看系统硬件时间 
hwclock - 格式化输出运行时间
cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second=$1 % 60;printf("系统已运行:%d天%d时%d分%d秒",run_days,run_hour,run_minute,run_second)}' 
文件及目录处理命令
目录
- 递归创建目录
mkdir -p <目录名>强制删除目录rm -rf <filename> - 显示当前目录
pwd - 拷贝目录
cp -r /opt/source /opt/a/source剪切/重命名mv / / sudo ln -s 源文件 目标文件为某一个文件或目录在另外一个位置建立一个同步的链接,类似Windows下的超级链接。mount它用于挂载Linux系统外的文件 将 /dev/hda1 挂在 /mnt 之下。#mount /dev/hda1 /mnt
文件命令
$ touch file #创建一个名为 file 的文件,touch是一个命令
压缩命令
- 压缩tar.gz解压
解压:$ tar zxvf FileName.tar.gz
压缩:$ tar zcvf FileName.tar.gz DirName
更多压缩格式zcat显示压缩包中文件的内容 
文件搜索命令
- 1.文件搜索命令locate搜索速度快
在数据库中搜索,不是实时更新,每天更新一次,强制更新数据库updatedb - 2.文件搜索命令find,强大,效率低
完全匹配:find /opt -name 'test*'
不区分大小写find /opt -iname -user root install.log
模糊查询需要通配符*匹配任意字符,?匹配一个字符,[]匹配任意一个中括号内的内容 - 3.命令搜索命令whereis(搜索系统命令位置)与which 
whereis cat - 4.字符串搜索命令grep,使用正则表达式匹配,包含匹配
搜索文件中包含字符串的行grep "size" install.log
取反grep -v "size" install.log
忽略大小写-i - 5.find与grep区别
 - 6.命令ls    能够使用通配符(查看网卡名)
ls /etc/sysconfig/network-scripts/ifcfg* | grep -v 'lo' | grep -v '.bak' 
文本处理(字符串处理)(查看日志)
head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
实例1:显示文件的前n行head -n 5 log2014.log
实例2:显示文件前2个字节head -c 20 log2014.logcat其中 cat 为正序显示,tac 为倒序显示。- tail
tail file(显示文件file的最后10行)tail +20 file(显示文件file的内容,从第20行至文件末尾)tail -c 10 file(显示文件file的最后10个字符)
☆tailf跟踪日志文件增长,作用跟tail –f相同。tailf将输出文件的最后10行,然后等待文件增长。 - awk是行处理器,通常用来格式化文本信息
sed(Stream EDitor)功能和awk一样,都是用来处理文本的,但是sed没有awk的功能强大,awk对列操作十分方便。
详解连接 grep命令用于查找文件里符合条件的字符串
grep [-abcEFGhHilLnqrsvVwxy][-d<进行动作>][-e<范本样式>][-f<范本文件>][—help][范本样式][文件或目录…]
grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行
grep -B 5 foo file 显示foo及前5行
grep -A 5 foo file 显示foo及后5行- cut命令详解
https://www.cnblogs.com/Spiro-K/p/6361646.html 
格式化处理json   jq
https://www.cnblogs.com/yjt1993/p/10028089.html
网络传输相关命令
- 查看ip命令:
ifconfig=ip addr - 防火墙开启端口
firewall-cmd --add-port=8010/tcp;
//firewall-cmd --zone=public --add-port=8010/tcp --permanent
需要重新载入firewall-cmd --reload - 查看
firewall-cmd --zone= public --query-port=80/tcp - 删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent - 解决ifconfig不能用问题:点击查看
 - 网速
sar -n DEV 1 100// 1代表一秒统计并显示一次 100代表统计一百次
sar命令详解地址 
systemctl start firewalld # 启动systemctl status firewalld # 或者 firewall-cmd --state 查看状态systemctl disable firewalld # 停止systemctl stop firewalld # 禁用# 关闭服务的方法# 你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,命令如下:systemctl stop firewalldsystemctl disable firewalldyum install iptables-servicessystemctl start iptablessystemctl enable iptables#重新载入firewall-cmd --reload
curl url 发请求
curl -o index.html url 把请求结果放到网页里面去curl -i url 显示相应头信息curl -v url 显示请求过程curl -X GET/DELETE url发送数据时,不仅可以使用 POST 方式,也可以使用 GET 方式,例如:curl -d “somedata” -X GET http://www.example.com/api
curl -H "Content-Type:application/json" -H "Data_Type:msg" -X POST --data '{"dmac": "00:0C:29:EA:39:70", "alert_type": "alarm", "risk": 2, "trojan_name": "Trojan.qq3344", "smac": "00:0C:29:EA:39:66", "sub_alert_type": "trojan", "sport": 11, "id": "153189767146", "desc": "NoSecure 1.2 \u6728\u9a6c\u53d8\u79cd4\u8fde\u63a5\u64cd\u4f5c", "sip": "62.4.07.18", "dip": "139.82.31.91", "rule_id": 123451, "trojan_type": 4, "time": "2018-07-18 15:07:51", "dport": 61621, "detector_id": "170301020011", "os": "Windows", "trojan_id": 50030}' http://127.0.0.1:5000/service
- 查看端口被占用
netstat命令已经废弃了一段时间。因此,你需要使用ss命令
Socket Statistics的缩写,查看更多
其中ss命令选项如下:
-t : 只显示Linux上的TCP套接字
-u : 在Linux上只显示UDP套接字
-l : 监听套接字。例如,TCP端口22由SSHD服务器打开。
-p : 列出打开套接字的进程名
-n : 不要解析服务名称,即不要使用DNS 
netstat -na|wc -l
远程传输
scp 用于在Linux下进行远程拷贝文件的命令 复制目录:
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
从远程服务器复制到本地服务器:
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
实例1:从远处复制文件到本地目录
命令:scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
RPM软件包的管理工具
- 卸载rpm软件包 
rpm -e - 列出所有安装包
rpm -qa - 安装软件:
rpm -ivh rpm包名 
yum的使用
为了提高RPM 软件包安装性而开发的一种软件包管理器
yum install xxx 安装xxx软件yum info xxx 查看xxx软件的信息yum remove xxx 删除软件包yum list 列出软件包yum clean 清除缓冲和就的包yum provides xxx 以xxx为关键字搜索包(提供的信息为关键字)yum search xxx 搜索软件包(以名字为关键字)
统计个数
wcLinux wc命令用于计算字数。
-c或–bytes或–chars 只显示Bytes数。
-l或–lines 只显示列数。
-w或–words 只显示字数。
进程相关
psProcess Status 将某个进程显示出来ps aux 和ps -ef 两者的输出结果差别不大,但展示风格不同top 动态的显示进程信息kill用于杀死进程
top命令输出到文件
#top -b -n 2 -d 3
    -b: batch 模式,可以重定向到文件中
    -n:一共取2次top数据
    -d:每次top数据间隔为3秒
top -Hp pid  可以显示所有的线程
VIRT 表示 Virtual Memory 虚拟内存
RES 表示 Resident Memory 驻留内存
SHR 表示 shared memory 共享内存
RES 表示 进程占用的 物理内存数,实际使用数,而非申请的内存数
查看进程及端口号 nstat -tunlp
系统及硬件相关
磁盘管理
磁盘空间 df -lh
Used:已经使用的空间
Avail:可以使用的空间
Mounted on:挂载的目录
- 查看内核信息 
uname -a - 修改主机名 centOS7不好修改需要另外查询
 - 查看cpu信息
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
查看物理CPU个数
cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep “cpu cores”| uniq
查看逻辑CPU的个数
cat /proc/cpuinfo| grep “processor”| wc -l
查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c - 查看内存
free或者cat /proc/meminfo
free详解 
邮件|计算器
邮件配置 /etc/main.rc
发送邮件 echo "内容" | mail -s "标题" zhaojy@***.com.cn
二、文件目录结构
- Unix/Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。
 - Linux 里面一切皆文件
 
一级目录规范:
/根目录
/bin和/sbin和/usr/bin和/usr/sbin保存命令的目录(普通用户读取的命令)sbin是超级用户的命令
/etc配置文件保存目录(/etc/profile)/etc/rc.d 启动的配置文件和脚本
/home普通用户家目录
/root超级用户家目录
/tmp临时目录
/var系统相关文档目录
/usr:系统软件资源目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。
/usr/local:用户级的程序目录,可以理解为C:/Program Files/。用户自己编译的软件默认会安装到这个目录下。
/opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。
源码放哪里?
/usr/src:系统级的源码目录。
/usr/local/src:用户级的源码目录。
/proc直接写入内存
/boot启动目录
/dev设备文件保存目录
/lib系统库保存目录
/mnt系统挂载目录
/media挂载目录
三、用户及权限问题
3.1 用户相关
3.1.1 who命令
who -m  打开当前伪终端的用户的用户名
第二列的 pts/0 中 pts 表示伪终端,0表示第一个伪终端
[root@master01 ~]# who -mroot pts/5 2019-11-18 14:22 (103.219.186.220)
 =300x280)
3.1.2 root用户
root账户拥有整个系统至高无上的权利
切换到root用户su - root 或 su -
符号”-“告诉系统在切换到root用户的时候初始化root的环境变量
 =900x150)
sudo 命令。不过使用这个命令有两个大前提,一是你要知道当前登录用户的密码,二是当前用户必须在 sudo 用户组。
su 
3.1.3 用户命令
添加用户 sudo adduser lilei
给用户设置密码 sudo passwd shiyanlou
3.1.4 用户组
在 Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源,就跟家的形式差不多
如何知道自己属于哪些用户组 groups root 或 cat /etc/group | sort
这里我用 shiyanlou 用户执行 sudo 命令将 lilei 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限:
su shiyanlou # 此处需要输入 shiyanlou 用户密码groups lileisudo usermod -G sudo lileigroups lilei
删除用户sudo deluser lilei --remove-home
3.2 文件权限


权限命令☆☆☆☆
曾经因为权限命令掉坑爬不出,所以画个重点
1.chmod命令用来变更文件或目录的权限
chmod [ugoa…][[+-=][rwxX]…]  filenameu User,即文件或目录的拥有者;g Group,即文件或目录的所属群组;o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;a All,即全部的用户,包含拥有者,所属群组以及其他用户;
+表示增加权限、-表示取消权限、=表示唯一设定权限。
r 读取权限,数字代号为“4”;w 写入权限,数字代号为“2”;x   执行或切换权限,数字代号为“1”;X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。-  不具任何权限,数字代号为“0”;s 特殊功能说明:变更文件或目录的权限。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
举例
1.将档案 file1.txt 设为所有人皆可读取 :chmod a+r file1.txt   =  chmod ugo+r file1.txt
2.chmod a=rwx file  = chmod 777 file
其中7,7,7各为一个数字,分别表示User、Group、及Other的权限。
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
2.chown命令
用户:[组]chown runoob:runoobgroup file1.txtchown -R runoob:runoobgroup *
四、shell 及脚本
常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash
定义变量
注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
将两个字符串并排放在一起就能实现拼接
shell读取csv
while read linedoOLD_IFS="$IFS"IFS=","arr=($line)IFS="$OLD_IFS"echo "${arr[0]},${arr[1]},${arr[2]}"done < test.csv
命令行解释器/功能强大的编程语言(解释执行)
用户通过shell操作linux内核
第一个shell test.sh
#!/bin/bashwhile getopts l:h:f: optiondocase "$option" inl)echo "l 参数的值为: $OPTARG";list=$OPTARG;echo "-------------------------------------------------------------------------------------";;f)echo "f 参数的值为: $OPTARG";file=$OPTARG;echo "-------------------------------------------------------------------------------------";;h)echo "h 参数的值为: $OPTARG";host=$OPTARG;echo "-------------------------------------------------------------------------------------";;\?)echo "Help Document: args [-l str] [-i str] [-o str]"echo "-l is the list what you want send data"echo "-f is file"exit 1;;esacdone
1.chmod +x ./test.sh  #使脚本具有执行权限
./test.sh#执行脚本
2.sh test.sh
shell循环控制
a=10b=20if [ $a == $b ]thenecho "a 等于 b"elif [ $a -gt $b ]thenecho "a 大于 b"elif [ $a -lt $b ]thenecho "a 小于 b"elseecho "没有符合的条件"fi
for循环
for loop in 1 2 3 4 5doecho "The value is: $loop"done
while
#!/bin/bashint=1while(( $int<=5 ))doecho $intlet "int++"done
实例
1.同步多个服务器时间
# 从2到6循环填入,再更新时间for i in `seq 2 6`dossh 192.168.1.10$i ntpdate 192.168.1.99done
时间同步命令ntpdate https://www.cnblogs.com/zhi-leaf/p/6281549.html
2.获取ip地址
netscript=`ls /etc/sysconfig/network-scripts/ifcfg* | grep -v 'lo' | grep -v '.bak'`netname=${netscript#*/etc/sysconfig/network-scripts/ifcfg-}ip=`nmcli dev show ${netname} | grep IP4.ADDRESS | awk '{print $2}' | awk -F '/' '{print $1}' | grep '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*'`echo $ip
3.将脚本授予全局环境变量

4.环境变量文件
/etc/profile
五、管道,重定向
>>>|
六、
七、centos7开机自启
开机自启:
1、赋予脚本可执行权限(/opt/script/StartTomcat.sh是你的脚本路径)
# chmod +x /opt/script/StartTomcat.sh
2、打开/etc/rc.d/rc.local文件,在末尾增加如下内容
echo “/opt/script/StartTomcat.sh” >> /etc/rc.d/rc.local
3、在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限
chmod +x /etc/rc.d/rc.local
八、修改centos7 ip地址
https://blog.csdn.net/weixin_41278231/article/details/80521619
九、linux下定时任务crontab
cd /var/spool/cron/
查看定时任务crontab -l
编辑定时任务vi root
举例:定时执行脚本 - root文件内容
1 1 * * * /bin/sh /usr/local/bin/scripts/esClearIndex.sh &1 0 * * * /bin/sh /usr/local/bin/vacuum_full_testdb.sh
十、环境变量
当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。
declare tmptmp=shiyanlouecho $tmp
