系统信息
uname -r 查看系统内核版本(常用)
cat /etc/redhat-release 查看系统版本(适用redhat系列,常用)
free -h 显示当前系统中内存的使用量信息
top 显示类似win系统的任务管理器信息
dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)
hdparm -i /dev/hda 罗列一个磁盘的架构特性
hdparm -tT /dev/sda 在磁盘上执行测试性读取操作
cat /proc/cpuinfo 显示CPU info的信息
cat /proc/interrupts 显示中断
cat /proc/meminfo 校验内存使用
cat /proc/swaps 显示哪些swap被使用
cat /proc/version 显示内核和编译器版本
cat /proc/net/dev 显示网络适配器及统计
cat /proc/mounts 显示已加载的文件系统
lspci -tv 罗列 PCI 设备
date +"%Y-%m-%d %H:%M:%S" 以年-月-日 时:分:秒的格式查看时间日期
date +%s 将时间转换为秒显示(以格林尼治时间为起点算起)
date -s "20200712 9:30:00" 设置时间日期为2020-07-12的9:30:00(临时生效)
clock -w 将时间更改保存到BIOS(使上面的时间更改永久生效)
系统服务管理 (CentOS7用systemctl兼容代替了service)
语法格式:systemctl [动作] [服务],下面以httpd服务举例
systemctl start httpd 启动httpd服务
systemctl stop httpd 停止httpd服务
systemctl restart httpd 重启httpd服务
systemctl status httpd 查看httpd服务的状态
systemctl enable httpd 使httpd开机自启
systemctl disable httpd 禁止httpd开机自启
systemctl list-units 列举所有已启动服务(unit单元)
关机重启
shutdown -h now 立刻关机(1)
poweroff 立刻关机(2)
shutdown -h hours:minutes 按预定时间关机(3)
shutdown -r now 立刻重启(1)
reboot 立刻重启(2)
shutdown -r hours:minutes 按预定时间重启(3)
shutdown -c 取消预定义关机重启设置
exit 退出当前账户
文件和目录
cd /tmp 切换到/tmp目录
cd .. 切换到上一级目录
cd ../.. 切换到上两级目录
cd - 切换到上次所在目录
cd ~ 切换到个人家目录
pwd 查看当前绝对路径
ls 简单的查看目录下的文件
ls -l 查看目录下文件的详细信息(包含文件权限)
ll -t 按时间顺序排列查看文件
ls -a 查看目录下所有文件(包含隐藏文件)
ls *[0-9]* 显示包含数字的文件名和目录名
tree 查看目录树结构
mkdir dir1 创建目录dir1
mkdir -p /tmp/dir1/dir2 递归创建目录
rm -f file1 强制删除file1文件
rm -rf dir1 强制删除dir1目录以及其下所有文件
mv file1 /tmp/file2 移动/重命名一个文件
cp file1 /tmp 复制文件
cp -r dir1 dir2 复制目录(要加-r选项)
scp file1 192.168.10.10:/tmp 跨主机复制(拷贝)
ln -s file1 lnk1 创建一个指向文件或目录的软链接
ln file1 lnk1 创建一个指向文件或目录的硬链接
查看文件内容
cat file1 从第一个字节开始正向查看文件的内容(常用)
more file1 查看一个长文件的内容,不允许倒退查看
less file1 类似于 'more' 命令,但是可以前后进退自如(常用)
head -n5 file1 查看一个文件的开头5行
tail -n5 file1 查看一个文件的最后5行
tail -f /var/log/messages 实时刷新查看被添加到一个文件中的内容(常用)
文件查找
find+查找范围+查找方式
find /etc -name demo 在/etc范围下以文件名的方式查找文件demo
find / -user user1 在根目录下查找属于用户 'user1' 的文件和目录
find /home/user1 -name *.bin 在目录 '/ home/user1' 下查找带有'.bin' 结尾的文件
find ./ -size +10M 在当前目录下查找大于10M的文件
find ./ -size -10M 在当前目录下查找小于10M的文件
find ./ -size +10M -size -20M 在当前目录下查找大于10M小于20M的文件
find ./ -size +10k -size -20k 在当前目录下查找大于10k小于20k的文件
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件(-type d表示查找目录)
find /var/log -type f -mtime +30 -print0 | xargs -0 rm -rf 删除30天以上未被改动的文件(xargs结合管道可以将前一个命令的标准输出作为参数传递给下一个命令,加print0和0参数是防止查找对有空格的文件名不生效)
find / -name *.rpm -exec chmod 755 {} ; 搜索以 '.rpm' 结尾的文件并定义其权限 (-exec也可以将前一个命令的标准输出作为参数传递给下一个命令,大括号即代表这个参数)
find / -xdev -name *.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备
locate *.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令
whereis halt 显示一个二进制文件、源码或man的位置
which halt 显示一个二进制文件或可执行文件的完整路径
硬盘分区及格式化
fdisk -l 查看所有磁盘及其分区信息
fdisk /dev/sdb 给/dev/sdb盘创建分区, 回车后还需输入参数 n(添加新区分)、p(选择添加主分区)、分区号, 然后起始扇区直接回车, 结束扇区输入+2G(给2G的大小), 最后w保存退出.
mkfs.xfs sdb1 格式化分区sdb1为XFS格式的文件系统(输入mkfs后可按Tab补全键查看有哪些文件系统类型)
mkswap /dev/sdb2 格式化分区sdb2为swap分区
注意: 创建硬盘分区及格式化之后还需要挂载才能使用.
查看磁盘空间
df -h 查看磁盘空间使用情况(-h参数是以容易阅读的方式显示)
du -sh file1 查看file1占用的空间大小(file1可以是文件或目录)
du -sh dir1/* 查看目录dir1下的所有文件占用空间大小
临时挂载一个文件系统
mount /dev/sda2 /mnt/sda2 挂载一个叫做sda2的分区文件系统, 确定挂载点目录/mnt/sda2已经存在(没有就先创建) .
umount /dev/sda2 卸载一个叫做sda2的分区文件系统.
mount /dev/cdrom /mnt/cdrom 将cdrom(光驱)挂载到/mnt/cdrom挂载点目录下(没有就先创建)
swapon /dev/sdb2 将准备好的swap分区挂载到系统中.
mount -a 重新挂载/etc/fstab下的所有未挂载的文件系统.
永久挂载一个文件系统
先vim /etc/fstab → 然后在文件最后一行添加上"设备文件、挂载点目录、格式类型、权限选项、是否备份、是否自检", 以空格隔开.
/dev/sdb1 /backup XFS defaults 0 0 将sdb1以XFS格式及默认权限挂载到/backup下, 0代表不备份不自检(1代表备份自检)
/dev/sdb2 swap swap defaults 0 0 将交换分区sdb2以swap格式及默认权限挂载到系统下
进程管理
ps -aux 查看所有的进程(常用)
ps -aux | grep weblogic 查看指定进程weblogic(可简写为pgrep weblogic)
kill -9 PID 强制杀死某一单个进程(因为是杀死单个进程,所以后面接的是PID)
pidof httpd 查看httpd服务的pid
killall -9 httpd 强制杀死httpd的所有进程(有时候一个软件服务是多进程的, 一个一个去结束太麻烦)
用户和群组
useradd userName 创建一个新用户
passwd userName 给该用户设置登录密码(若是已经有密码了则是更改密码)
userdel -rf userName 删除一个用户(-rf参数是用于强制删除该用户所有文件)
groupadd groupName 创建一个新用户组
groupdel groupName 删除一个用户组
groupmod -n newName oldName 重命名一个用户组
usermod -g Group1 alan 将用户alan变更到Group1基础用户组(每个用户可以属于一个基础用户组, 多个扩展用户组)
usermod -G Group2 alan 将用户alan变更到Group2扩展用户组
文件目录权限
注: 属主(u), 属组(g), 其他人(o), →所有人(a) , 读,写,执行权限分别为rwx(八进制数分别为421)
ll file1 查看file1的权限
chmod u=rwx, g=rw, o=r days 给属主赋予读写执行权限, 给属组赋予读写权限, 给其他人赋予读权限
chmod ugo=rwx days 等同于 chmod a=rwx days 等同于 chmod 777 days 给所有人赋予days文件的读写执行权限
chmod 755 days 给属主赋予读写执行权限, 给属组和其他人赋予读和执行权限 ( 常用 )
chmod +x days 给所有人赋予days文件的执行权限
更改文件所有权
chown alick days 将文件"days"的属主更改为alick
chgrp workgroup days 将文件"days"的属组更改为workgroup
chown alick:workgroup days 将文件"days"的属主更改为alick, 将文件"days"的属组更改为workgroup.
文件的隐藏权限
格式: chattr 选项 file
chattr -i file1 无法对文件进行修改;若file1是目录,则仅能修改其中的子文件内容而不能新建或删除文件
chattr -a file1 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
lsattr file1 查看文件的隐藏权限
打包和压缩文件
tar -zcvf pac.tgz dir1 dir2 file1 file2 创建一个gzip格式的压缩包
tar -zxvf pac.tgz 解压一个gzip格式的压缩包到当前目录下
tar -zxvf pac.tgz -C /pacDir 解压到指定目录/pacDir下(pacDir目录没有就需先创建)
zip pac.zip file1 file2 创建一个zip格式的压缩包
unzip pac.zip 解压一个zip格式的压缩包
gzip file1 压缩一个叫file1的文件
gunzip file1.gz 解压一个叫file1.gz的文件
yum软件包管理器
yum install demo 安装demo软件包(可加-y参数避免执行询问)
yum remove demo 删除指定软件包demo
yum list 列出当前yum源的所有可安装软件的清单(可搭配管道符精准查看当前yum源是否有某一个软件的安装包)
yum info demo 显示指定软件包demo的信息
yum check-update 列出所有可更新的软件清单
yum update 更新所有软件
yum update demo 更新指定软件demo
yum search <keyword> 查找软件包
yum clean all 清除所有缓存
yum makecache 生成yum缓存
rpm -ivh packge.rpm 直接安装软件包
rpm -qa | grep demo 查看demo是否已经被安装(以rpm -ivh方式安装)
yum list installed | grep demo 查看demo是否已经被安装(以yum方式安装)
网络
ip addr 查看ip地址等网络信息(可简写成ip a)
ip addr show eth0 查看网卡eth0的信息
ip addr add 192.168.10.10/24 dev eth0 设置ip地址
ip addr del 192.168.10.10/24 dev eth0 删除ip地址
ip route show 查看路由表
ip route add default via 192.168.10.1 更改默认路由
ip link set eth0 up 激活网络接口
ip link set eth0 down 停止网络接口
注:ifconfig已经被ip命令取代了
输入输出重定向
输入:
command < file 将文件的内容作为命令的标准输入
command << -EOF 内容 EOF 从标准输入中读入,直到遇见分界符才停止
command < fileA > fileB 将文件A作为命令的标准输入并将标准输出重定向到文件B
输出:(注意如果重定向目标文件不存在则会自动创建该文件)
command > file 将标准输出重定向到一个文件中(清空原有文件的数据)
command 2> file 将错误输出重定向到一个文件中(清空原有文件的数据)
command >> file 将标准输出重定向到一个文件中(追加到原有内容的后面)
command 2>> file 将错误输出重定向到一个文件中(追加到原有内容的后面)
command &> file 将标准输出与错误输出共同写入到文件中(清空原有文件的数据)
command &>> file 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
注:输入输出重定向的文件描述符分别为→ 标准输入重定向(0)、标准输出重定向(1)、错误输出重定向(2)
正则表达式
.:匹配任意单个字符
[]:匹配中括号内的任意一个字符
-:在[ ]中括号内表示字符的范围
^:位于[ ]中括号内的开头,匹配除括号内的字符之外的任意一个字符
?:匹配其前面的字符0次或1次
+:匹配其前面的字符至少1次
*: 匹配其前面的字符任意多次
{N}:匹配其前面的字符N次
{N,}:匹配其前面的字符至少N次
{,M}:匹配其前面的字符最多M次
{N,M}:匹配其前面的字符N到M次
^:匹配行首的位置
$:匹配行尾的位置
<:匹配单词开头的位置(比如<ro匹配root或robot)
>:匹配单词结尾的位置(比如ot>匹配root或robot)
<word>:精准匹配单词word
随笔记
☆ [root@localhost ~]# : 代表 root 用户 at 于主机 localhost 上,当前工作目录是 ~ ,#代表是root用户,$代表是普通用户.
☆ Linux命令的短选项和长选项: 短选项是由单 - 引出, 多个短选项可以合并到一起(例如tar -zcvf), 长选项一般是由双 -- 引出(例如--help).
☆ 在shell脚本中,变量名称最好用大写字母,这是一种约定俗成的规范.
⭐代码程序是从前往后顺序执行的,前面的执行完了后面的才会执行.
☆ history 查看历史使用过的命令(!行数, 可以直接使用该行数对应的历史命令)
☆ 切换用户:注意su - alick和su alick是不一样的,如果要想连环境也一起切换过去就得用su - alick
☆ read -p "please input your grade: " GRADE 读取用户输入信息, -p参数用于向用户显示提示信息, GRADE为定义的用于接收用户输入信息的变量(也可以用echo的方式打印提示信息,然后read 变量名,但是如果echo不加-n选项的话会换行)
☆ / 代表根目录(根目录也叫共享目录, 所有用户均可见), ~代表某个用户自己的家目录(用户家目录下的文件才属于私有文件), 注意home目录只是/根目录下的
一个记录所有用户列表信息的普通目录而已.
☆ 执行文件:
1. 解释器执行: 例如bash script.sh, python script.py
2. 路径执行(包括绝对路径执行和相对路径执行): /root/desktop/scripts/sayhello.sh(绝对路径执行) ./sayhello.sh(相对路径执行)
☆ 给普通用户Alick添加sudo权限: 用root用户登录, vim /etc/sudoers修改sudoers配置文件, 在root ALL=(ALL) ALL下面一行添加Alick ALL=(ALL) ALL即可
☆ command &>/dev/null 将输出重定向到黑洞文件/dev/null中, 可以不让结果(包括标准输出和错误输出结果)在屏幕上输出显示出来
☆ echo "内容A" | command 管道符特殊用法, 将管道符左边的内容A作为右边命令enter回车之后要输入的内容, 内容A可以是普通字符串也可以是命令
☆ 硬件设备文件: sda代表硬盘a, sdb3代表硬盘b的分区3
☆ >test.txt 清空文件test.txt(将空白重定向到test.txt文件, 可将其完全清空)
☆ file test 查看test的文件类型
☆ wc -l file1 查看file1文件有多少行.
☆ dd if=源文件 of=目标文件 dd命令为拷贝文件, 将 if 后的源文件内容拷贝到 of 后的目标文件中.
dd if=/dev/zero of=/testDir/test count=1 bs=100M 创建一个100M的test文件(/dev/zero可以无穷无尽的提供空数据), dd命令可用来测速(测试硬盘性能).
dd if=/dev/sda1 of=/dev/sdb2 将sda1中的数据拷贝到sdb2
☆ mdadm [模式] <RAID设备名称> [选项] [成员设备名称] mdadm命令是用来在linux下组RAID的(若没有需要先安装).
☆ 逻辑卷管理器(LVM)相关命令:
物理卷管理: pvscan pvcreate pvdisplay pvremove
卷组管理: vgscan vgcreate vgdisplay vgremove vgextend vgreduce
逻辑卷管理: lvscan lvcreate lvdisplay lvremove lvextend lvreduce
☆ shell脚本的空格问题: 写赋值语句时不能有空格(例如SUM=0, SUM=SUM+$i), 但是写条件语句时需要有空格(例如[ $I -eq 100 ]).
☆ 绑定两块网卡的作用: 第一,可以提高网络传输速度(提升带宽); 第二,可以增加冗余(防止一块网卡出现故障影响网络服务)
☆ scp /root/test.txt 192.168.10.20:/tmp 将本地主机上的test.txt文件拷贝(传输)到远程主机(192.168.10.20)的/tmp目录下
scp -r 192.168.10.20:/tmp/demoDir /root 将远程主机(192.168.10.20)上的/tmp/demoDir目录下载(拷贝)到本地主机(拷贝目录要加 -r 选项)
注:cp命令可以覆盖掉原来的重名文件或目录,可以用来做文件恢复。
☆ vmware workstation和vmware ESXI的区别:
1. vmware workstation是软件,需要安装在操作系统上,再在软件上创建出虚拟机,然后在虚拟机上安装各种OS,属于个人实验测试用.
2. vmware ESXI本身就是OS,可以直接装在物理裸机上,再在上面创建出虚拟机,然后在虚拟机上安装各种OS,属于企业应用在生产环境上.
☆ wget和yum的区别:wget是一种下载工具,可以下载网络上的资源(包括软件包资源和普通文件音乐视频等资源),而yum是一种程序或服务安装工具,它包含下载、安装、删除安装包的一整套过程.
wget -O /testDir/new.txt http://xxx # -O选项可以指定资源下载存放的位置,并重命名资源名字
☆ 数据库的备份及恢复
备份:mysqldump -u root -p testDB >/bakDir/testDB.bak 将数据库testDB中的内容备份到文件testDB.bak中(用到了输出重定向)
恢复:mysql -u root -p testDB </bakDir/testDB.bak 将备份文件testDB.bak中的数据库内容恢复到新建数据库testDB中(用到了输入重定向)
☆ 条件判断
equal:eq(等于) not equal:ne(不等于)
great than:gt(大于) less than:lt(小于)
great equal:ge(大于等于) less equal:le(小于等于)
☆ seq:用来创建一个数字序列
seq 1 10:创建输出序列1~10
seq 1 2 10:以2为步进创建输出序列1,3,5,7,9
☆ 正则表达式:包括字符类、数量限定符、位置限定符
其中,^和$是限定整行的开头和结尾的,
而,<和>是限定一行内容里的单词的开头和结尾的,比如<un和un>和<un>
☆ 正则表达式放的位置:不同的命令用法不同,所以相应的正则表达式放的位置也不一样,比如awk和sed命令中正则表达式是放在双斜杠之间的,在egrep命令中正则表达式是直接写的,而在vim编辑器里正则表达式又是放在单斜杠后面的,但不管正则表达式放在哪里,用法都是一样的,字符类、数量限定符、位置限定符的综合使用.
☆ 命令后台运行:
nohup command & #让command命令在后台运行,关闭终端也不会终止该命令运行
Ctrl C是结束正在运行的命令,Ctrl Z是暂停正在运行的命令并挂起到后台.
jobs -l #查看所有在后台运行的命令及其进程id
fg #将上一个暂停的命令进程调至前台继续运行,fg %n调指定代号为n的后台进程到前台执行.
kill -9 PID #终止进程
☆ 命令排序:&&代表前面为真或者成功才会执行,||代表前面为假或者失败才会执行.
ping -c1 -w1 www.baidu.com && echo "is up" || echo "is down"
cmd1 && cmd2 && cmd3... 多个&&逻辑组合使用,前面成功则往后继续.
cmd1 || cmd2 || cmd3... 多个||逻辑组合使用,前面失败则往后继续.
☆ 子shell:将命令放在小括号里执行表示是在子shell里面执行,比如(cd /etc; ls)这条命令执行完后并不会把当前目录切换到/etc下.
☆ 脚本调试
bash -n test.sh #检测脚本是否有语法错误
bash -vx test.sh #可以显示出脚本的调试过程
☆ 强引用和弱引用:单引号是强引用,双引号是弱引用;比如变量引用以及有特殊含义的字符在单引号下都会失去其特殊含义。
☆ 位置变量(注意: $n在函数里面时是指的函数的位置变量,在函数外面时是指的脚本的位置变量)
$0:代表脚本的名称
$1:代表传入脚本的第一个参数
$2:代表传入脚本的第二个参数
$*:代表传入脚本的所有参数
$#:代表传入脚本的所有参数的个数
$?:代表上一条命令执行后的返回值,执行成功或为真,它的值就为0,否则它的值就是非0.
☆ 数字运算
方法一: 一般用let来做数字运算,比如let num=1+2,比如let i++
方法二: 用中括号,比如 $[1+2]
方法三: 用双小括号,比如 $((1+2))
☆ shell数组
数组定义格式: user_list=(Alan Bob Jack Amy Alick )
获取数组中第一个元素的值:${user_list[0]}
获取数组中所有元素的值:${user_list[*]}
获取数组的长度(元素个数):${#user_list[*]}
☆ 多行注释: :<<!被注释内容 !
☆ exit与brake的区别:brake只是跳出当前循环体,而exit是直接退出整个程序.
☆ 查看端口
netstat -nlp #列出所有端口的信息
netstat -nlp | grep 80 #查看80端口的信息
netstat -nlp | grep httpd #查看httpd服务的端口信息
☆ for和while循环谁更适合逐行处理文件:for循环处理文件的时候是按照空格来获取元素的,而while循环可以逐行来获取文件内容.
while循环逐行获取文件内容的格式为,while read LINE;do 函数体 ;done <ip.txt ,把ip.txt文件的每一行内容读取并存放在变量LINE里面(注意read不仅可以读取用户从键盘输入的内容,还可以用来读取文件的每一行,然后把读取到的内容存放在变量里面).
☆ shell脚本远程批量修改配置
远程登录到某一个主机: ssh 目标主机ip
创建秘钥(公钥): ssh-keygen
主机秘钥(公钥)推送: ssh-copy-id 目标主机ip
解决用户命令交互的问题:可以请expect这个兄弟来shell家里帮一下忙
☆ return: shell中的return也是用来返回函数的返回值的,可用echo $?来查看函数的返回值,但是在shell中return只能返回255以下的值.
☆ 环境变量配置文件
/etc/profile:系统级环境变量配置文件,对所有用户有效.
~/.bashrc:用户级环境变量配置文件,只对当前用户自己有效.
☆ 计算脚本运行时间(把时间转换成秒再计算)
startTime=`date +%s`
程序主体
endTime=`date +%s`
echo "use_time: $[$endTime-$startTine]"
☆ vim编辑器在"一般模式"下:
直接输入 /test 可以正向匹配搜索到包含 test 的行(?test可以反向匹配搜索)
/^test可以匹配搜索到以 test 开头的行
/test$可以匹配搜索到以 test 结尾的行
注:n可以向后查找下一个,N可以向前查找下一个.
: set nu 显示行号
: 100 快速定位到第100行
gg:跳转到文件开头
shift+g:跳转到文件末尾
☆ 设置登录超时断开时间(单位: 秒)
临时生效:执行命令 export TMOUT=600 (TMOUT=0命令可以防止超时退出)
永久生效:vim /etc/profile,如果之前没设置过这个环境变量,那么就在最后加上export TMOUT=600
☆ less的管道用法:在查看命令帮助文档或者查看进程信息等长内容的时候,可以用管道配合less来查看,还可以前后倒退.
例如: ps -aux | less ls --help | less
☆ 查看目录树结构
tree #查看当前目录的树形结构
tree testDir #查看testDir目录的树形结构
☆ 计划任务: /etc/crontab配置文件,* * * * * command,前面5个字段分别代表分、时、天、月、星期,第6个字段代表要计划执行的命令,也可以是脚本文件,每一行配置代表一个计划任务。
☆ mkpasswd生成随机密码:mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
⭐ 测试端口通不通
方法一:wget 192.168.10.10:8080 #打印Connecting to... connected表示已连接
方法二:ssh -v -p 8080 root@192.168.10.10 #打印Connection established表示已连接