Linux笔记

系统信息 

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表示已连接

原文地址:https://www.cnblogs.com/chenbin93/p/9080640.html