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.log
cat
其中 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 firewalld
systemctl disable firewalld
yum install iptables-services
systemctl start iptables
systemctl 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 搜索软件包(以名字为关键字)
统计个数
wc
Linux wc命令用于计算字数。
-c或–bytes或–chars 只显示Bytes数。
-l或–lines 只显示列数。
-w或–words 只显示字数。
进程相关
ps
Process 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 -m
root 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 lilei
sudo usermod -G sudo lilei
groups 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.txt
chown -R runoob:runoobgroup *
四、shell 及脚本
常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash
定义变量
注意,赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
将两个字符串并排放在一起就能实现拼接
shell读取csv
while read line
do
OLD_IFS="$IFS"
IFS=","
arr=($line)
IFS="$OLD_IFS"
echo "${arr[0]},${arr[1]},${arr[2]}"
done < test.csv
命令行解释器/功能强大的编程语言(解释执行)
用户通过shell操作linux内核
第一个shell test.sh
#!/bin/bash
while getopts l:h:f: option
do
case "$option" in
l)
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;;
esac
done
1.chmod +x ./test.sh
#使脚本具有执行权限
./test.sh#执行脚本
2.sh test.sh
shell循环控制
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
for循环
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
while
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
实例
1.同步多个服务器时间
# 从2到6循环填入,再更新时间
for i in `seq 2 6`
do
ssh 192.168.1.10$i ntpdate 192.168.1.99
done
时间同步命令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 tmp
tmp=shiyanlou
echo $tmp