linux学习笔记

目录

前言

就是照着书上整理出来的,但每条命令我都亲自敲过一次,验证过是否有效,新手看帮助文档往往会在意想不到的地方卡壳,其实说的就是我自己啦,所有笔记的内容都是示例,顺便说一句我这里用的是Centos 7

一、linux重要的几个快捷键

[root@localhost ~]# stty -a			#查看终端环境的快捷键
[root@localhost ~]# ca【tab】【tab】          #命令补齐
[root@localhost ~]# ls -al ~/.bash【tab】【tab】         #文件补齐
[root@localhost ~]# date --【tab】【tab】		#参数补齐

[root@localhost ~]# find /        #查看根目录下所有文件,输出会很长
【Ctrl】+【C】    #中断目前程序

【Ctrl】+【D】      #结束键盘输入,等同于输入exit

【Shift】+{【Page UP】【Page UP】 }        #当输入内容过长时,可以上下翻页查看

【Ctrl】+【Alt】+{【F1】~【F6】}        #切换虚拟终端,linux默认有6个虚拟终端对应tty1~tty6

【Alt】 +【.】           #使用上一条命令的最后一个参数(一般就是路径,特别好用)

二、查看CPU型号PCI设备系统时间日历

查看CPU型号及相关信息

cat /proc/cpuinfo 

查看PCI设备相关信息

lspci

查看系统时间

[root@localhost ~]# date
Fri Apr  2 18:12:39 CST 2021         #Fri表示星期五,Apr表示4月,2日,年份2021年

[root@localhost ~]# date +%Y/%m/%d    #按年月日格式输出显示
2021/04/02

[root@localhost ~]# date +%H:%M     #显示小时和分钟数
19:13


查看日历

[root@localhost ~]# cal     #查看日历
[root@localhost ~]# cal 2021      #查看指定年份日历
[root@localhost ~]# cal 3 2021     #查看2021年3月份日历

三、简单计算器

[root@localhost ~]# bc 
2*6
12
scale=3     #默认结果取整数,这里设置取小数点后3位
1/3
.333
quit

四、 日志存放路径

/var/log

五、安装linux时强制使用GPT分区表安装

  1. 在光标选中【install CentOS 7】时按【e】键修改内核参数,在最后增加

    inst.gpt
    

    六、笔记本电脑安装linux时禁用内核参数

  2. 在光标选中【install CentOS 7】时按【tab】键修改内核参数,在最后增加

nofb apm=off acpi=off pci=noacpi

七、安装Linux时使用parted命令行分区

  1. 在进入安装图形界面后按【Ctrl】+【Alt】+【F2】组合键进入纯命令Shell环境
[root@localhost ~]# lsblk     #查看所有磁盘及分区大小

#查看sdb这块磁盘的分区情况,也能查看分区表是MBR还是GPT
[root@localhost ~]# parted /dev/sdb print     

#统一使用GB单位显示磁盘分区情况
[root@localhost ~]# parted /dev/sdb unit gb print  

#设置sdb这块磁盘分区表为MBR
[root@localhost ~]# parted /dev/sdb mklabel msdos  

#设置sdb这块磁盘分区表为GPT
[root@localhost ~]# parted /dev/sdb mklabel gpt     

#创建一个主分区,开始位置是1M,结束位置是2G
[root@localhost ~]# parted /dev/sdb mkpart primary 1M 2G 

#创建一个主分区,开始位置是2G,结束位置是52G
[root@localhost ~]# parted /dev/sdb mkpart primary 2G 52G

#创建一个扩展分区,开始位置是52G,结束位置是剩下所有容量
[root@localhost ~]# parted /dev/sdb mkpart extended 52G 100%   

#创建一个逻辑分区,开始位置是52G,结束位置是剩下所有容量
[root@localhost ~]# parted /dev/sdb mkpart logical 52G 100%     

[root@localhost ~]# parted /dev/sdb rm 3       #删除对应编号为3的分区

[root@localhost ~]# partprobe           #强制内核更新分区表
  1. 再次按【Ctrl】+【Alt】+【F1】组合键返回原来的图形化安装界面

八、修复linux的MBR启动引导

  1. 插入系统光盘,进入【Troubleshooting】,选择【Rescue a CentOS system】,等待几秒后弹出界面选择【Continue】,如果找到Linux系统会弹出界面,告诉你,你原本的系统放置于/mnt/sysimage当中
chroot /mnt/sysimage     #切换系统根目录
grub2-install /dev/sdb     #安装grub2到sdb磁盘
exit       #退出
reboot     #重启

九、root密码本地记录的文件

cat /root/anaconda-ks.cfg 

十、查看系统支持语系并修改系统语系

[root@localhost ~]# locale	   #查看当前的语系
[root@localhost ~]# locale -a	   #查看系统支持的语系
[root@localhost ~]# LANG=zh_CN.utf8	  #修改语系为中文,LANG只与输出信息有关
[root@localhost ~]# export LC_ALL=zh_CN.utf8
[root@localhost ~]# LANG=en_US.utf8	   #修改语系为英文
[root@localhost ~]# export LC_ALL=en_US.utf8     #以上命令重启后失效

#编辑为LANG=zh_CN.UTF-8,这个是永久生效
[root@localhost ~]#nano /etc/locale.conf      

十一、 获取命令帮助

[root@localhost ~]# date --help     #获取date这个命令的帮助信息

#查看date这个命令的操作说明,按空格键下翻,【Page Up】向上翻页,按【q】键退出,/关键字【回车】可以查询关键字,按【n】向下查找
[root@localhost ~]# man date      

[root@localhost ~]# man -f man     #查看与man有关的多个说明文档

[root@localhost ~]# man 1 man      #查看指定编号的说明文档

[root@localhost ~]# man -k man       #找出系统说明文件中有man关键字的说明文档

[root@localhost ~]# info info           #info类似man的作用

十二、超简单文本编辑器nano

#超简单文本编辑器nano,【Ctrl】+6开始标记【Alt】+6复制,【ctrl】+K剪切,【Ctrl】+U粘贴,【Ctrl】+W搜索,回车确认关键字,【Alt】+W定位下一个匹配的关键字。
[root@localhost ~]# nano text.txt     

十三、观察系统的使用情况

[root@localhost ~]# who    #查看在线的用户
[root@localhost ~]# netstat -a      #查看网络的联机情况
[root@localhost ~]# ps -aux      #查看后台运行的程序

十四、系统关机与重启

[root@localhost ~]# sync    #关机前,建议先进行数据同步
[root@localhost ~]# shutdown -h now      #立即关机
[root@localhost ~]# shutdown -r now      #立即重启

[root@localhost ~]# shutdown -h +10    #10分钟后关机
[root@localhost ~]# shutdown -h 18:50     #今天的18点50分关机

[root@localhost ~]# shutdown -c         #取消关机

#30分钟后重启,并发送提示
[root@localhost ~]# shutdown -r +30 'the system will reboot'    

#仅发送提示,并不会真的关机
[root@localhost ~]# shutdown -k now 'the system will reboot'     

[root@localhost ~]# reboot          #重启

十五、与用户,密码,用户组相关的几个文件

#查看用户相关信息
[root@localhost ~]# cat /etc/passwd   

#用户密码记录在这个文件,以密文形式记录
[root@localhost ~]# cat /etc/shadow  

#查看用户组相关信息
[root@localhost ~]# cat /etc/group       

十六、su命令切换不用的用户

[chb@localhost ~]$ su       #普通用户切换到root用户
[root@localhost ~]# su chb     #root用户切换至chb这个用户

十七、ls命令查看当前目录下的文件

#查看当前目录下的所有文件,参数a表示查看所有,l表示以列表形式显示
[root@localhost ~]# ls -al       

#参数i表示显示inode号码
[root@localhost ~]# ls -li		 

#显示完整日期包括年月日时间
[root@localhost ~]# ls -l --full-time 

#参数d表示查看目录的属性
[root@localhost ~]# ls -ld /root/dir1      
drwxr-xr-x. 3 root root 4096 4月   6 23:38 /root/dir1

#参数l表示列表显示,h表示显示大小的单位,d表示查看目录
[root@localhost ~]# ls -lhd /etc /tmp/etc     

#参数s表示查看文件实际占用大小
[root@localhost ~]# ls -lhs

#参数S表示按类型分类,r表示倒序排列
[root@localhost ~]# ls -ldSr /etc/*     

#查看完整的时间,默认显示mtime时间,文件内容发生变化时会更新这个时间
[root@localhost ~]# ls -l --full-time /etc/man_db.conf     

#显示atime时间,文件被读取后会更新这个时间
[root@localhost ~]# ls -l --full-time --time=atime /etc/man_db.conf    

#显示ctime时间,文件权限发生变化后会更新这个时间
[root@localhost ~]# ls -l --full-time --time=ctime /etc/man_db.conf      

十八、创建用户,修改用户密码,删除用户

[root@localhost ~]# useradd testuser1     #创建用户testuser1
[root@localhost ~]# passwd testuser1       #修改testuser1的用户密码
[root@localhost ~]# userdel testuser1      #删除testuser1这个用户
[root@localhost ~]# rm -rf /home/testuser1      #删除home下的对应目录

十九、pwd命令查看当前所在路径

# pwd显示当前所在目录
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /var/mail

#显示当前目录路径
[root@localhost mail]# pwd        
/var/mail

#参数P表示显示真正的路径,而非链接路径
[root@localhost mail]# pwd -P    
/var/spool/mail

[root@localhost mail]# ls -ld /var/mail
lrwxrwxrwx. 1 root root 10 6月   9 2019 /var/mail -> spool/mail

二十、chgrp命令chown命令修改文件或目录所属的用户及用户组

chgrp命令修改文件或目录所属的用户组

#修改text.txt这个文件所属的用户组为testuer1
[root@localhost ~]# chgrp testuser1 text.txt     

#参数R表示递归,dir1目录下的所有文件及目录,修改为testuer1用户组
[root@localhost ~]# chgrp -R testuser1 /root/dir1      

chown命令修改文件或目录所属的用户

#修改text.txt文件所属的用户为chb
[root@localhost ~]# chown chb text.txt     

#参数R表示递归,dir1目录下的所有文件及目录,修改为chb用户
[root@localhost ~]# chown -R chb /root/dir1    

#修改dir2目录的所属用户为chb,所属组为testuser1
[root@localhost ~]# chown -R chb:testuser1 /tmp/dir2     

二十一、cp命令与mv命令

cp命令复制文件或目录

#复制text.txt到tmp目录下,缺省就是表示文件名不变
[root@localhost ~]# cp /root/text.txt /tmp/                  

#复制text.txt到tmp目录下,并改文件名为text1.txt
[root@localhost ~]# cp /root/text.txt /tmp/text1.txt      

#复制dir1目录下所有目录及文件到tmp目录下,缺省表示dir1目录名称不变
[root@localhost ~]# cp -r /root/dir1 /tmp/        

#复制dir1目录下所有目录及文件到tmp目录下,并将dir1目录名称改为dir4
[root@localhost ~]# cp -r /root/dir1 /tmp/dir4          

#参数r表示递归,复制目录时用,参数a表示复制时权限不变,备份时用
[root@localhost ~]# cp -r -a /etc /tmp/etc   

#参数s表示建立符号连接也就是快捷方式
[root@localhost tmp]# cp -s bashrc bashrc_slink    

#参数l表示建立硬连接,而非复制文件本身
[root@localhost tmp]# cp -l bashrc bashrc_hlink    

#参数d是复制符号连接文件用,如果不加参数,则是复制文件本身
[root@localhost tmp]# cp -d bashrc_slink bashrc_slink_2   

mv命令修改目录或文件名称

#重命名目录,将dir1改名dir2,本身这个命令是移动目录和文件用的
[root@localhost ~]# mv dir1 dir2       

#重命名文件
[root@localhost ~]# mv text.txt text1.txt       

二十二、chmod命令修改文件或目录的读写执行权限

#r表示4,w表示2,x表示1 ,第一个7表示该文件的用户,拥有读写执行权限,第二个7表示该文件所在的用户组,拥有读写执行权限,最后一个4表示其他人,只有读权限
[root@localhost ~]# chmod 774 text.txt   

#参数R表示递归,表示将dir1这个目录及其子目录和文件都修改权限为770,特别需要注意的地方目录需要r和x同时给,r表示读取目录里面的内容,x表示进入目录的权限
[root@localhost ~]# chmod -R 770 /root/dir1    

二十三、查看linux内核版本架构及发行版本

#查看linux内核版本
[root@localhost ~]# uname -r     
3.10.0-957.el7.x86_64

#查看操作系统的架构
[root@localhost ~]# uname -m    
x86_64

#查看redhat或者centos的发行版本号
[root@localhost ~]# cat /etc/redhat-release       
CentOS Linux release 7.6.1810 (Core) 

二十四、cd命令切换工作目录

[root@localhost ~]# cd  ~    #返回用户的家目录  
[root@localhost ~]# cd /usr/local/    
[root@localhost local]# cd ..       #返回上一级目录
[root@localhost usr]# cd -         #切换回上一个目录

二十五、mkdir与rm新建目录与删除目录

mkdir建立新目录

[root@localhost ~]# cd /tmp

#在当前目录下创建新目录test
[root@localhost tmp]# mkdir test    

#参数p表示递归创建目录
[root@localhost tmp]# mkdir -p test1/test2/test3    

#参数m表示在创建目录时指定权限,否则使用默认权限
[root@localhost tmp]# mkdir -m 711 test4      

[root@localhost tmp]# ls -ld test4
drwx--x--x. 2 root root 4096 4月  12 17:42 test4

rm删除文件或目录

#参数r表示递归,f表示不提示,表示删除test1目录(包括其内的所有内容)
[root@localhost tmp]# rm -rf test1   

二十六、修改环境变量

1.显示并临时修改环境变量

#显示环境变量,环境变量就是可以在任何目录下,执行环境变量目录里面的程序
[root@localhost ~]# echo $PATH          
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin

#添加root目录到环境变量中,注意重启后失效
[root@localhost ~]# PATH="${PATH}:/root"     
[root@localhost ~]# export PATH=$PATH:/root     #效果同上,重启后失效

#临时新建一个变量CHB,值为ChenHongBo
[root@localhost ~]# CHB=ChenHongBo
[root@localhost ~]# echo $CHB
ChenHongBo

#取消刚才声明的变量
[root@localhost ~]# unset CHB

#临时新建变量VAR1值有特殊符号的需用双引号
[root@localhost ~]# VAR1="/etc/yum.repos.d/"
[root@localhost ~]# echo $VAR1
/etc/yum.repos.d/
[root@localhost ~]# cd $VAR1

2.永久修改环境变量

#只修改root用户的环境变量
[root@localhost ~]# nano /root/.bash_profile  
#修改这行,在后面添加“:/root”表示将/root目录添加到环境变量中
PATH=$PATH:$HOME/bin:/root               

#编辑该文件,在最后添加如下内容
[root@localhost ~]# vim ~/.bash_profile

CHB2=ChenHongBo2
export CHB2

VAR1="/etc/yum.repos.d/"
export VAR1
#使其立即生效,否则要重启后生效
[root@localhost ~]# source /root/.bash_profile         

#修改所有用户的环境变量
[root@localhost ~]# nano /etc/profile 
#在最后添加这行,表示将/root目录添加到环境变量
PATH=$PATH:/root                  

#使其立即生效,否则需重启后生效
[root@localhost ~]# source /etc/profile           

二十七、执行指定目录下的程序

执行指定目录下的程序

以下操作有风险,如果你清楚知道自己在做什么,那就放心去尝试,对于理解我们平时用的命令是怎么一回事,会有帮助

#将ls这个程序移动到root目录下,这样就无法在其他目录下执行ls命令了
[root@localhost ~]# mv /bin/ls /root           

#可以通过绝对路径的方式执行ls这个程序
[root@localhost ~]# /root/ls -l                  

#也可以通过相对路径的方式执行ls这个程序
[root@localhost ~]# ./ls -l                        

二十八、basename与dirname获取路径的文件名与目录名称

[root@localhost ~]# basename /etc/sysconfig/network
network

[root@localhost ~]# dirname /etc/sysconfig/network
/etc/sysconfig

二十九、cat、nl、more、less查看文件内容

#参数n表示显示行号,查看issue的文件内容
[root@localhost ~]# cat -n /etc/issue     

#效果如下,就是显示6位的行号
[root@localhost ~]# nl -b a -n rz /etc/issue     
000001	\S
000002	Kernel \r on an \m
000003	

#效果如下,就是显示3位的行号
[root@localhost ~]# nl -b a -n rz -w 3 /etc/issue     
001	\S
002	Kernel \r on an \m
003	

#空格键表示翻一页,回车键表示翻一行,【b】键表示往回翻页,【q】表示离开。
[root@localhost ~]# more /etc/man_db.conf    

#空格键表示翻一页,【pagedown】表示向下翻页,【pageup】表示向上翻页,/字符串 表示查找该字符串,按n重复向下查找,【q】表示离开。
[root@localhost ~]# less /etc/man_db.conf        

三十、head、tail搭配管道查看文件的部分内容

#默认显示文件前十行
[root@localhost ~]# head /etc/man_db.conf     

#显示文件前5行
[root@localhost ~]# head -n 5 /etc/man_db.conf         

#默认显示文件后十行
[root@localhost ~]# tail /etc/man_db.conf       

#显示文件后5行
[root@localhost ~]# tail -n 5 /etc/man_db.conf       

#参数f表示持续检测文件内容,【ctrl】+C 中断,查看日志时使用
[root@localhost ~]# tail -f /var/log/messages      

#将前面运行的结果通过管道|交给后续的命令继续使用
[root@localhost ~]# head -n 20 /etc/man_db.conf | tail -n 11    

#显示11行到20行的内容
[root@localhost ~]# cat -n /etc/man_db.conf | head -n 20 |tail -n 10    

三十一、od查看非纯文本文件

#以ASCII字符显示passwd这个执行文件的内容
[root@localhost ~]# od -t c /usr/bin/passwd     

#以十六进制显示passwd这个执行文件的内容
[root@localhost ~]# od -t x /usr/bin/passwd      

#以ASCII字符列出与十六进制的对照表
[root@localhost ~]# od -t cx /usr/bin/passwd      

#查看“password”这几个字对应的十六进制
[root@localhost ~]# echo password | od -t xCc     

三十二、touch修改文件时间

#注意这里的分号表示依次执行这几个命令,这样做的目的是为了对比的看出/etc/man_db.conf 文件的mtime,atime,ctime日期和时间
[root@localhost ~]# date;ls -l --full-time /etc/man_db.conf ; ls -l --full-time --time=atime /etc/man_db.conf ; ls -l --full-time --time=ctime /etc/man_db.conf 

2021年 04月 19日 星期一 18:22:01 CST
-rw-r--r--. 1 root root 5171 2018-10-31 04:26:28.000000000 +0800 /etc/man_db.conf
-rw-r--r--. 1 root root 5171 2021-04-19 17:00:40.238011249 +0800 /etc/man_db.conf
-rw-r--r--. 1 root root 5171 2019-06-09 10:56:39.411557510 +0800 /etc/man_db.conf

#更新mtime,atime,ctime到当前时间
[root@localhost ~]# touch /etc/man_db.conf       

#修改mtime和atime时间
[root@localhost ~]# touch -t 201806081530 /etc/man_db.conf     

#参数m表示仅修改mtime时间,参数t后面接时间2019年06月08日15时30分
[root@localhost ~]# touch -m -t 201906081530 /etc/man_db.conf      

#参数a表示仅修改atime时间
[root@localhost ~]# touch -a -t 201906081530 /etc/man_db.conf      

三十三、umask命令修改文件默认权限

#权限r,w,x分别是4,2,1
#这里输出结果是0022,从左边数第一位的0忽略,第二位的0表示用户权限rwx都有,第三位的2表示用户组w权限被去除了,只剩下rx权限,第四位的2表示其他人w权限去除,这里说的有点绕,0022可以直接看做是022,百位表示用户权限,十位表示用户组权限,个位表示其他人权限,这里的权限是指的默认创建文件的权限,例如你在普通用户模式下新建一个文件,在不指定权限的情况下,它默认的权限

[root@localhost ~]# umask      
0022

 #参数S直观显示默认的权限
[root@localhost ~]# umask -S           
u=rwx,g=rx,o=rx

#修改默认权限为0002,表示u=rwx,g=rwx,o=rx,临时生效,重启后失效
[root@localhost ~]# umask 0002      

#永久修改umask的值,在文件底部添加一行
[root@localhost ~]# nano /etc/bashrc 
umask 0002

三十四、chattr命令修改隐藏属性,lsattr查看隐藏属性

#对abc.txt添加i属性,i属性表示无法删除,修改,改名,设置链接
[root@localhost ~]# chattr +i abc.txt     

#此时无法删除该文件,如果你今后遇到删不了的文件可以查看其是否有隐藏的属性
[root@localhost ~]# rm -rf abc.txt        
rm: 无法删除"abc.txt": 不允许的操作

#查看abc.txt这个文件的隐藏属性,发现多了i
[root@localhost ~]# lsattr abc.txt        
----i--------e-- abc.txt

#去除i属性
[root@localhost ~]# chattr -i abc.txt      

#对目录添加i属性
[root@localhost ~]# chattr +i dir123      

#查看目录的隐藏属性
[root@localhost ~]# lsattr -d dir123      
----i--------e-- dir123

#a属性表示只能增加数据,无法删除或修改数据,用于logfile日志文件
[root@localhost ~]# chattr +a abc.txt     

#将aaaaa添加到abc.txt文件最后
[root@localhost ~]# echo aaaaa >> abc.txt      

三十五、文件特殊权限:SUID、SGID、SBIT

  • SUID只能对文件生效,对于目录无效,为什么需要SUID,举例说明,/etc/shadow的权限是全-,表示只有root才能强制修改,这个文件是记录所有账号的密码,普通用户就是借助/usr/bin/passwd这个程序的特殊权限SUID,来达到临时修改/etc/shadow文件,从而修改普通用户自己的密码

  • SGID可以对文件和目录都生效,用户会获得该文件或该目录的用户组权限,而非用自己的用户组权限,应用场景:如项目开发

  • SBIT目前只能对目录有效,对于文件已经没有效果了,用户在该目录下建立的文件或目录,只有自己和root才有权限删除

#s标志在用户权限的x位时为SUID
[root@localhost ~]# ls -ld /tmp ; ls -l /usr/bin/passwd
drwxrwxrwt. 21 root root 4096 4月  20 19:10 /tmp
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

#s标志在用户组权限的x位时为SGID
[root@localhost ~]# ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 40520 4月  11 2018 /usr/bin/locate

#默认是3位权限值,在最前面添加4表示SUID,2表示SGID,1表示SBIT,需要注意一点无论是s还是t都是取代x的权限,所有本身需要有x权限

#对test.txt这个文件添加SUID权限
[root@localhost ~]# chmod 4755 test.txt      

#对test.txt这个文件添加SGID权限
[root@localhost ~]# chmod 2755 test.txt      

#对dir2这个目录添加SBIT权限
[root@localhost ~]# chmod 1755 dir2          

三十六、file查看文件类型

  • 文件类型分为ASCII,二进制可执行,数据文件
#由此可以看出.bashrc是ASCII文件
[root@localhost ~]# file ~/.bashrc
/root/.bashrc: ASCII text

#由此可以看出是passwd执行文件,同时有丰富的相关信息,如:SUID权限,兼容x86-64平台,使用的是linux内核2.6.32的动态链接库等
[root@localhost ~]# file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1e5735bf7b317e60bcb907f1989951f6abd50e8d, stripped

#由此可以看出mlocate.db这个文件是数据文件
[root@localhost ~]# file /var/lib/mlocate/mlocate.db 
/var/lib/mlocate/mlocate.db: data

三十七、which与whereis查看其他命令的所在路径

which命令查找其他命令所在的路径

  • 注意which只能查找PATH环境变量中的可执行文件,如果是bash内置的命令,则无法找到
#查找ifconfig这个可执行文件的路径,不加参数a,则只查找第一个
[root@localhost ~]# which ifconfig       
/usr/sbin/ifconfig

#参数a表示查找所有
[root@localhost ~]# which -a ifconfig	
/usr/sbin/ifconfig
/sbin/ifconfig

#使用which查找which,挺有意思的,用自己找自己
[root@localhost ~]# which which	

#注意history是属于bash内置命令,所以无法找到
[root@localhost ~]# which history            
/usr/bin/which: no history in (/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:)

whereis查找其他命令的相关路径

[root@localhost ~]# whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz

[root@localhost ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man5/passwd.5.gz /usr/share/man/man1/passwd.1.gz

#列出whereis这个命令会去查找的目录
[root@localhost ~]# whereis -l          

三十八、locate与find查找文件

locate查找指定关键字的文件

  • locate命令是依据/var/lib/mlocate/mlocate.db 内的数据库记录,查找出文件
#参数i表示忽略大小写,查找包含“passwd”关键字的所有文件
[root@localhost ~]# locate -i passwd    

#参数c只列出数量
[root@localhost ~]# locate -c passw     

#表示只列出5行
[root@localhost ~]# locate -l 5 passwd    

#列出locate这个命令所使用的数据库的相关信息,如文件和文件夹数量等
[root@localhost ~]# locate -S      

#重新查找一遍整个硬盘并更新mlocate.db数据库
[root@localhost ~]# updatedb     

find命令查找文件

#0表示当前时间,从现在开始到24小时内有修改内容的文件查找出来
[root@localhost ~]# find / -mtime 0 	

#3天前的那一天的24小时内有修改内容的文件查找出来
[root@localhost ~]# find / -mtime 3 	

#当天24小时内访问过的文件查找出来
[root@localhost ~]# find / -atime 0         

#查找home目录下的,属于chb这个用户的文件查找出来
[root@localhost ~]# find /home -user chb     

#查找出不属于任何用户的文件
[root@localhost ~]# find / -nouser            

#查找出包含passw的所有文件,*表示任意长度字符
[root@localhost ~]# find / -name "*passw*"     

#查找出所有包含http关键字的文件
[root@localhost ~]# find / -name '*http*'         	

#查找出run目录下所有socket文件类型的文件
[root@localhost ~]# find /run -type s	   

#查找出run目录下所有FIFO文件类型的文件
[root@localhost ~]# find /run -type p	     

#查找出所有SUID,SGID,SBIT特殊权限的文件
[root@localhost ~]# find / -perm /7000     

#查找出所有文件大于1M的文件
[root@localhost ~]# find / -size +1M	    

#将查找出来的结果,以列表的形式显示出来
[root@localhost ~]# find /usr/bin -exec ls -l {} \;	    

#在/etc目录中,找出比/etc/passwd这个文件还要新的文件
[root@localhost ~]# find /etc -newer /etc/passwd    

三十九、权限与命令的关系

  • cd命令进入某个目录,需要有该目录的x权限

  • ls命令查看某个目录下文件,需要有该目录的r权限

  • cat,more,less查看某个文件,所在目录需要有x权限,文件本身需要有r权限

  • nano,vi编辑某个文件,所在目录需要有x权限,文件本身需要有r,w权限

  • mkdir,touch新建目录或文件,所在目录需要有w,x权限

  • 执行某个程序,所在目录需要x权限,文件本身需要x权限


四十、文件权限实用情景模拟

  • 新建用户user1,user2,将user1和user2添加到group1中,新建/srv/ahome目录,该目录只有user1和user2可以管理,其他人不行
#新建组group1
[root@localhost ~]# groupadd group1   

#新建用户user1,并将组group1添加到其下
[root@localhost ~]# useradd -G group1 user1     
[root@localhost ~]# useradd -G group1 user2

#查看用户user1的所属组情况
[root@localhost ~]# id user1         
uid=1002(user1) gid=1003(user1) 组=1003(user1),1002(group1)
[root@localhost ~]# id user2
uid=1003(user2) gid=1004(user2) 组=1004(user2),1002(group1)

[root@localhost ~]# umask 0002      #修改默认权限

[root@localhost ~]# mkdir /srv/ahome       #新建目录ahome

#将ahome目录的所属组修改为group1
[root@localhost ~]# chgrp group1 /srv/ahome      

#对ahome目录添加SGID权限
[root@localhost ~]# chmod 2770 /srv/ahome       
[root@localhost ~]# passwd user1             #修改user1用户的密码
[root@localhost ~]# passwd user2
[root@localhost ~]# su - user1              #切换到user1用户
[root@localhost ~]# su - user2

四十一、磁盘及分区的相关查看命令

磁盘文件名称规则

/dev/sda 第一块物理硬盘
/dev/sdb 第二块物理硬盘
/dev/sdc 第二块物理硬盘以此类推

/dev/sda1 第一块物理硬盘的第一个分区
/dev/sda2 第一块物理硬盘的第二个分区以此类推

虚拟机的磁盘通常是/dev/vda , /dev/vdb
若使用到软件磁盘阵列则是/dev/md0 , /dev/md1
使用LVM时则为/dev/VGNAME/LVNAME等格式

lsblk与blkid查看磁盘及分区

[root@localhost ~]# lsblk 	 #查看硬盘及分区大小

#列出所有磁盘和分区的完整名字,如/dev/sda1
[root@localhost ~]# lsblk -ip          

[root@localhost ~]# lsblk -f         #参数f表示列出UUID号

#查看分区的超级区块信息,只能对ext文件系统使用
[root@localhost ~]# dumpe2fs /dev/sda1

#查看ext文件系统的区块大小,一般为4K
[root@localhost ~]# dumpe2fs /dev/sda1 | grep "Block size"           

#查看各分区的UUID及文件系统格式如ext4或者xfs
[root@localhost ~]# blkid		

#查看linux支持的文件系统有哪些
[root@localhost ~]# ls -l /lib/modules/$(uname -r)/kernel/fs          

#系统目前已加载到内存中支持的文件系统
[root@localhost ~]# cat /proc/filesystems 	   

#sdb3分区格式化为xfs
[root@localhost ~]# mkfs.xfs -f /dev/sdb3       

#查看sdb3分区的xfs相关信息,前提是确定该分区是xfs格式
root@localhost ~]# xfs_info /dev/sdb3           

四十二、df与du查看文件系统的使用情况

#查看已挂载的分区的文件系统类型,分区大小,已使用容量的情况,分区对应的挂载点
[root@localhost ~]# df -hT         

#查看当前目录的挂载分区
[root@localhost home]# df -h .      

#查看根目录下每个目录所占用的容量
[root@localhost ~]# du -hs /*          

#查看home目录占用的容量,和ls查看的是使用的容量不同
[root@localhost home]# du -hs /home      
6.7M	/home

四十三、ln建立硬链接和软链接

  • 硬链接就是两个文件的inode号一样,inode号记录文件本身的数据,删除其中一个文件,并不影响,修改其中一个文件,另一个文件也会改变,因为实际上修改的是inode号对应的数据区域。另外需要注意硬链接只能对文件使用,不能对目录。硬链接不能跨文件系统,如一边是ext4,另一边是xfs,这样是不能建立硬链接的。

  • 软链接(符号链接)很好理解,和windows下的快捷方式一样

#建立硬链接
[root@localhost ~]# ln /etc/crontab /root/ 	

#可以看出两个文件的inode号码一致,同时第二个字段由原来的1变成2,那个字段称为链接数
[root@localhost ~]# ls -li /etc/crontab /root/crontab            
1049159 -rw-r--r--. 2 root root 451 Jun 10  2014 /etc/crontab
1049159 -rw-r--r--. 2 root root 451 Jun 10  2014 /root/crontab

#建立软链接
[root@localhost ~]# ln -s /etc/crontab /root/	      

#对比看下效果
[root@localhost ~]# ls -li /etc/crontab /root/crontab        
1049159 -rw-r--r--. 1 root root 451 Jun 10  2014 /etc/crontab
 524410 lrwxrwxrwx. 1 root root  12 Apr 22 18:35 /root/crontab -> /etc/crontab

#建立目录的软链接,如果删除/root/bin目录,只是删除一个快捷方式,真正的目录是不受影响
[root@localhost ~]# ln -s /bin /root/bin                      

四十四、parted查看分区表是MBR还是GPT并修改

#查看分区表是MBR还是GPT,MBR使用fdisk分区,GPT使用gdisk分区
[root@localhost ~]# parted /dev/sdb print 

#设置sdb这块磁盘分区表为MBR
[root@localhost ~]# parted /dev/sdb mklabel msdos   

#设置sdb这块磁盘分区表为GPT    
[root@localhost ~]# parted /dev/sdb mklabel gpt      

四十五、gdisk磁盘分区

#p打印分区,d删除分区,n新建分区,q不保存离开,w保存分区操作
[root@localhost ~]# gdisk /dev/sdb

Command (? for help): n	   #n表示新建分区
Partition number (1-128, default 1): 	  #直接回车
First sector (34-524287966, default = 2048) or {+-}size{KMGTP}: 	#直接回车
Last sector (2048-524287966, default = 524287966) or {+-}size{KMGTP}: +2G	   #输入分区大小
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 		#直接回车
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-524287966, default = 4196352) or {+-}size{KMGTP}: 
Last sector (4196352-524287966, default = 524287966) or {+-}size{KMGTP}: +80G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3): 
First sector (34-524287966, default = 171968512) or {+-}size{KMGTP}: 
Last sector (171968512-524287966, default = 524287966) or {+-}size{KMGTP}:  	  #直接回车表示剩下所有容量
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): p	  #打印分区信息
Disk /dev/sdb: 524288000 sectors, 250.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 4E0B5A57-BB33-4449-A51A-402204D74524
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 524287966
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         4196351   2.0 GiB     8300  Linux filesystem
   2         4196352       171968511   80.0 GiB    8300  Linux filesystem
   3       171968512       524287966   168.0 GiB   8300  Linux filesystem

Command (? for help): t         #t改变分区类型代码
Partition number (1-3): 1         #指定需要改变的分区编号
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700           #按l可以查看分区代码,0700表示微软分区
Changed type of partition to 'Microsoft basic data'

四十六、fdisk磁盘分区

#p打印分区(可以看出是MBR是GPT),d删除分区,n新建分区,q不保存离开,w保存分区操作
[root@localhost ~]# fdisk /dev/sdb

Command (m for help): n	  #n新建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p		  #p表示主分区,e表示扩展分区
Partition number (1-4, default 1):     	#直接回车
First sector (2048-524287999, default 2048):           #直接回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-524287999, default 524287999): +2G       #输入分区大小
Partition 1 of type Linux and of size 2 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 
First sector (4196352-524287999, default 4196352): 
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-524287999, default 524287999): +80G
Partition 2 of type Linux and of size 80 GiB is set

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 
First sector (171968512-524287999, default 171968512): 
Using default value 171968512
Last sector, +sectors or +size{K,M,G} (171968512-524287999, default 524287999):          #这里回车,表示剩下所有容量
Using default value 524287999
Partition 3 of type Linux and of size 168 GiB is set

Command (m for help): p               #打印分区信息

Disk /dev/sdb: 268.4 GB, 268435456000 bytes, 524288000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos		           #可以看出是MBR分区表
Disk identifier: 0x000b0de3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352   171968511    83886080   83  Linux
/dev/sdb3       171968512   524287999   176159744   83  Linux

四十七、mkfs分区格式化(创建文件系统)

#参数f表示强制,格式化sdb1分区为xfs
[root@localhost ~]# mkfs.xfs -f /dev/sdb1       

#格式化sdb1分区为ext4
[root@localhost ~]# mkfs.ext4 /dev/sdb1		

#格式化sdb1分区为fat
[root@localhost ~]# mkfs -t vfat /dev/sdb1         
[root@localhost ~]# mkfs.fat /dev/sdb1		  #效果同上

四十八、fsck文件系统校验(慎用且必须取消挂载)

#确认该分区是xfs,并取消挂载,修复sdb1这个分区
[root@localhost ~]# xfs_repair /dev/sdb1

#参数n表示只检查不修复
[root@localhost ~]# xfs_repair -n /dev/sdb1

#参数p表示自动修复,无需输入y回复
[root@localhost ~]# fsck.ext4 -p /dev/sdb2

#参数f表示强制检查,参数D表示对目录进行最佳化配置
[root@localhost ~]# fsck.ext4 -f -p -D /dev/sdb2

#查看sdb2分区的超级区块群组编号
[root@localhost ~]# dumpe2fs -h /dev/sdb2 | grep "Blocks per group"
dumpe2fs 1.42.9 (28-Dec-2013)
Blocks per group:         32768

#参数b修复超级区块,编号32768根据上一条命令查询得到
[root@localhost ~]# fsck.ext4 -b 32768 /dev/sdb2

四十九、mount命令挂载与取消挂载磁盘分区(文件系统)

  • 挂载点是目录,该目录是进入磁盘分区(文件系统)的入口
#查看已挂载的信息
[root@localhost ~]# mount -l

#查看分区挂载信息
[root@localhost ~]# lsblk

#查看已挂载分区的已使用容量
[root@localhost ~]# df -h

#将sdb2分区挂载到dir2目录
[root@localhost ~]# mount /dev/sdb2 /mnt/dir2

#取消sdb2分区的挂载
[root@localhost ~]# umount /dev/sdb2

使用UUID的方式挂载分区

#使用UUID的方式挂载分区
[root@localhost ~]# mount UUID="a00a307c-0c0c-42cf-b8fd-90b50276164a" /mnt/dir2

#查看该分区的UUID
[root@localhost ~]# blkid /dev/sdb2

#重新挂载根目录(单人维护模式时使用)
[root@localhost ~]# mount -o remount,rw,auto /

将某个目录挂载到另外一个目录

#参数bind,可以将某个目录挂载到另外一个目录
[root@localhost ~]# mount --bind /mnt/dir2 /media/dir3

#取消目录挂载(取消上一条命令)
[root@localhost ~]# umount /media/dir3

#查看两个目录的inode,说明两者链接到同一个inode,进入/media/dir3就是进入/mnt/dir2
[root@localhost ~]# ls -lid /mnt/dir2 /media/dir3
4587522 drwxr-xr-x. 2 root root 4096 Apr 29 00:49 /media/dir3
4587522 drwxr-xr-x. 2 root root 4096 Apr 29 00:49 /mnt/dir2

挂载ISO镜像文件到某个目录

[root@localhost ~]# ls -lh /tmp/linux.iso 
-rw-r--r--. 1 root root 55M Mar 25  2019 /tmp/linux.iso

[root@localhost ~]# mkdir /mnt/dir4

#挂载ISO镜像文件到dir4目录
[root@localhost ~]# mount -o loop /tmp/linux.iso /mnt/dir4

[root@localhost ~]# ls -l /mnt/dir4
total 55899
-r-xr-xr-x. 1 root root     1975 Sep  4  2018 manifest.txt
-r-xr-xr-x. 1 root root     4413 Sep  4  2018 run_upgrader.sh
-r--r--r--. 1 root root 55491492 Sep  4  2018 VMwareTools-10.3.2-9925305.tar.gz
-r-xr-xr-x. 1 root root   847468 Sep  4  2018 vmware-tools-upgrader-32
-r-xr-xr-x. 1 root root   893640 Sep  4  2018 vmware-tools-upgrader-64

#卸载该目录
[root@localhost ~]# umount /mnt/dir4

与挂载相关的文件

#系统指定挂载文件系统优先级
[root@localhost ~]# cat /etc/filesystems 

#系统已加载的文件系统类型
[root@localhost ~]# cat /proc/filesystems 

查看ext4文件系统的驱动程序
[root@localhost ~]# ls -l /lib/modules/$(uname -r)/kernel/fs/ext4/
total 212
-rw-r--r--. 1 root root 216744 Nov  9  2018 ext4.ko.xz

五十、mknod命令创建自定义设备文件

  • linux下所有设备都是以文件的形式来表示,该文件有major主要设备代码和minor次要设备代码
#8是major,2是minor
[root@localhost ~]# ls -l /dev/sda2
brw-rw----. 1 root disk 8, 2 Apr 30 18:12 /dev/sda2

#这个是鼠标的设备文件,13是major,33是minor
[root@localhost ~]# ls -l /dev/input/mouse1
crw-rw----. 1 root input 13, 33 Apr 30 18:12 /dev/input/mouse1

#创建设备文件,参数b表示外接存储设备文件,如磁盘等,8是major,3是minor,这两个数字不是随便设置的,是有意义的
[root@localhost ~]# mknod /tmp/sda3 b 8 3

[root@localhost ~]# ls -l /tmp/sda3
brw-r--r--. 1 root root 8, 3 Apr 30 19:19 /tmp/sda3

#参数c表示外接输入设备文件,如鼠标,键盘等
[root@localhost ~]# mknod /tmp/mouse1 c 13 33

[root@localhost ~]# ls -l /tmp/mouse1
crw-r--r--. 1 root root 13, 33 Apr 30 19:25 /tmp/mouse1

#创建一个FIFO文件
[root@localhost ~]# mknod /tmp/pipe p

[root@localhost ~]# ls -l /tmp/pipe
prw-r--r--. 1 root root 0 Apr 30 19:27 /tmp/pipe

五十一、xfs_admin与tune2fs查看并修改分区的UUID和Label name

xfs_admin查看并修改xfs分区的UUID和Label name

#查看xfs分区的标头名称
[root@localhost ~]# xfs_admin -l /dev/sdb2
label = ""

#查看xfs分区的UUID
[root@localhost ~]# xfs_admin -u /dev/sdb2
UUID = e298a25f-77c4-470c-b4c1-26aa5aaff6cb

#设置xfs分区的标头为chb02_xfs
[root@localhost ~]# xfs_admin -L chb02_xfs /dev/sdb2

#随机生成一个UUID
[root@localhost ~]# uuidgen
23e13a3e-f013-4bb7-8b78-62af512ebb52

#修改xfs分区的UUID
[root@localhost ~]# xfs_admin -U 23e13a3e-f013-4bb7-8b78-62af512ebb52 /dev/sdb2

tune2fs命令修改ext4分区的UUID和Label name

#查看ext4分区的标头名称
[root@localhost ~]# dumpe2fs -h /dev/sdb3 | grep name

#效果同上
[root@localhost ~]# tune2fs -l /dev/sdb3 | grep name

#设置ext4分区的标头名称为chb3_ext4
[root@localhost ~]# tune2fs -L chb3_ext4 /dev/sdb3

#修改ext4分区的UUID
[root@localhost ~]# tune2fs -U 3e7ec857-3bb7-421c-9f95-f053bd4f3c36 /dev/sdb3

五十二、编辑/etc/fstab文件实现自动挂载分区

#编辑该文件实现自动挂载分区
[root@localhost ~]# nano /etc/fstab 
UUID="3e7ec857-3bb7-421c-9f95-f053bd4f3c36"    /mnt/dir2        ext4    defaults    0   0

#使上一条的编辑效果,立即生效
[root@localhost ~]# mount -a

#如果你编辑/etc/fstab错误导致无法启动系统,在单人维护模式下/的状态的只读的,无法修改/etc/fstab时使用
[root@localhost ~]# mount -n -o remount,rw /
  • 【UUID】 【挂载点】 【文件系统格式】 【文件系统参数】【dump】 【fsck】

  • 【文件系统参数】:

    参数 内容意义
    async/sync 异步/同步 设置磁盘运行方式,默认async(性能较佳)
    auto/noauto 自动/非自动 当执行mount -a时,是否主动测试挂载,默认为auto
    rw/ro 可擦写/只读 设置分区以可读写或只读状态挂载
    exec/noexec 可执行/不可执行 限制分区内的文件是否能被执行,单纯存储数据时可以设置noexec会比较安全
    user/nouser 允许/不允许用户挂载 一般用户不能使用mount,这样比较安全
    suid/nosuid 具有/不具有suid权限 是否允许SUID的存在
    defaults 同时具有async,auto,rw,exec,nouser,suid等参数,基本上默认情况下使用defaults即可
  • 【dump】:备份的命令,不过现在有太多备份方案,这里直接输入0即可

  • 【fsck】:是否使用fsck检验扇区,现在的xfs会自己进行检验,这里直接输入0即可


五十三、创建一个大文件,进行格式化并挂载

#在srv目录下创建loopdev文件大小为512M,dd命令好像叠砖块一样,一块1M,一共521块
[root@localhost ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 1.25737 s, 427 MB/s

[root@localhost ~]# ls -lh /srv/loopdev 
-rw-r--r--. 1 root root 512M May  1 01:14 /srv/loopdev

#将该文件当作分区一样进行格式化为xfs
[root@localhost ~]# mkfs.xfs -f /srv/loopdev

#查看该文件的UUID,以便下面挂载使用
[root@localhost ~]# blkid /srv/loopdev
/srv/loopdev: UUID="b30c615e-0caf-475b-a44f-cce1a200721a" TYPE="xfs" 

[root@localhost ~]# mkdir /mnt/dir5

#将该文件当作分区一样挂载到某个目录下
[root@localhost ~]# mount -o loop UUID="b30c615e-0caf-475b-a44f-cce1a200721a" /mnt/dir5

[root@localhost ~]# df -h /mnt/dir5
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0      509M   26M  483M   6% /mnt/dir5

#编辑该文件,实现开机自动挂载,注意这里需使用文件路径,而不使用UUID
#注意亲测发现设置后无法正常开机!!!
[root@localhost ~]# nano /etc/fstab
/dev/loopdev    /mnt/dir5	xfs     defaults,loop   0 0

五十四、创建swap内存交换分区

  • 创建分区并指定类型为swap交换分区
[root@localhost ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): n	     #n表示新建分区
Partition number (1-128, default 1): 
First sector (34-419430366, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-419430366, default = 419430366) or {+-}size{KMGTP}: +8G	   #大小8G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200	    #8200表示是swap交换分区
Changed type of partition to 'Linux swap'

Command (? for help): p         #查看分区
Disk /dev/sdb: 419430400 sectors, 200.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): E3084C11-D239-4FAA-BAF1-1908E09A9E46
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 419430366
Partitions will be aligned on 2048-sector boundaries
Total free space is 402653117 sectors (192.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        16779263   8.0 GiB     8200  Linux swap
#将分区格式化为swap分区
[root@localhost ~]# mkswap /dev/sdb1

[root@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="6d1074b6-2ebf-4212-9383-533dab8921c0" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="1c7c49fe-dd83-4360-b52e-1842d442c553" 

#设置自动挂载swap分区
[root@localhost ~]# nano /etc/fstab
UUID="6d1074b6-2ebf-4212-9383-533dab8921c0"    swap	 swap   defaults  0  0

五十五、free与swapon查看物理内存大小及sawp交换内存大小

#查看物理内存和swap交换内存大小及使用情况
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           972M        594M         60M         27M        317M        156M
Swap:          8.5G        3.8M        8.5G

#查看交换分区大小及对应的分区
[root@localhost ~]# swapon
NAME      TYPE      SIZE USED PRIO
/dev/sda5 partition 511M 3.8M   -2
/dev/sdb1 partition   8G   0B   -3

#卸载swap交换分区
[root@localhost ~]# swapoff /dev/sdb1

五十六、gzip、bzip2、xz压缩与解压

  • 下面列出常见压缩文件后缀
文件后缀 说明
*.Z compress程序压缩的文件
*.zip zip程序压缩的文件
*.gz gzip程序压缩的文件
*.bz2 bzip2程序压缩的文件
*.xz xz程序压缩的文件
*.tar tar程序打包的文件,并没有压缩过
*.tar.gz tar程序打包的文件,并且经过gzip的压缩
*.tar.bz2 tar程序打包的文件,并且经过bzip2的压缩
*.tar.xz tar程序打包的文件,并且经过xz的压缩
  • gzip是使用最广泛的,且压缩的*.gz格式可以在windows下使用7zip或winRAR软件解压缩
    bzip2的压缩比相比较gzip更高,同时压缩花费的时间也更多
    xz的压缩比相比较bzip2还要高,同时压缩花费的时间最多
    以上的命令,只针对某一个文件进行压缩解压,如果是多个文件或者某个目录,则需要先使用tar打包成一个文件再压缩
[root@localhost ~]# cp /etc/services /tmp/

#使用gzip压缩services这个文件,参数v表示显示压缩比(压缩后源文件会消失,和windows不同)
[root@localhost tmp]# gzip -v services	

#使用gzip解压services.gz这个文件
[root@localhost tmp]# gzip -d services.gz 

#使用bzip2压缩services这个文件,参数v表示显示压缩比(压缩后源文件会消失,和windows不同)
[root@localhost tmp]# bzip2 -v services 

#使用bzip2解压services这个文件
[root@localhost tmp]# bzip2 -d services.bz2 

#使用xz压缩services这个文件,参数v表示显示压缩比(压缩后源文件会消失,和windows不同)
[root@localhost tmp]# xz -v services

#使用xz解压services这个文件
[root@localhost tmp]# xz -d services.xz 

五十七、tar打包目录并压缩及解压缩

[root@localhost tmp]# cp -r /etc /tmp/

#参数z表示使用gzip,参数c表示建立打包文件,参数v显示过程,参数f后面必须跟自定义的文件名,etc是要打包的目录名称
[root@localhost tmp]# tar -zcv -f etc.tar.gz etc

#参数p表示保留原本的权限和属性
[root@localhost tmp]# tar -zpcv -f etc.tar.gz etc

#参数j表示使用bzip2
[root@localhost tmp]# tar -jcv -f etc.tar.bz2 etc

#参数J表示使用xz
[root@localhost tmp]# tar -Jcv -f etc.tar.xz etc

#参数t表示查看该打包文件的内容
[root@localhost tmp]# tar -ztv -f etc.tar.gz 

#参数x表示解压文件,根据后缀*.gz得出需用参数z来解压缩,这表示解压到当前路径
[root@localhost tmp]# tar -zxv -f etc.tar.gz 

#后面的-C参数后面跟需要解压到的路径
[root@localhost tmp]# tar -zxv -f etc.tar.gz -C /tmp/

#根据后缀*.bz2得出需要参数j来解压缩
[root@localhost tmp]# tar -jxv -f etc.tar.bz2 

#根据后缀*.xz得出需要参数J来解压缩
[root@localhost tmp]# tar -Jxv -f etc.tar.xz 
#time表示显示程序运行花的时间,看real就好,将/etc目录打包压缩到/root目录下,并自定义打包压缩后的文件名为etc.tar.gz
[root@localhost ~]# time tar -zpcv -f /root/etc.tar.gz /etc

[root@localhost ~]# time tar -jpcv -f /root/etc.tar.bz2 /etc

[root@localhost ~]# time tar -Jpcv -f /root/etc.tar.xz /etc

#查看该打包压缩文件的内容
[root@localhost ~]# tar -ztv -f /root/etc.tar.gz 

#解压缩该文件到当前目录
[root@localhost ~]# tar -zxv -f /root/etc.tar.gz 

#解压该文件到/tmp目录下
[root@localhost ~]# tar -zxv -f /root/etc.tar.gz -C /tmp/

#查看该压缩文件内容,并根据关键字查找
[root@localhost ~]# tar -ztv -f /root/etc.tar.gz | grep 'shadow'
---------- root/root       772 2019-06-09 11:00 etc/gshadow-
---------- root/root      1247 2019-06-09 11:00 etc/shadow-
---------- root/root       775 2019-06-09 11:00 etc/gshadow
---------- root/root      1239 2021-05-07 00:03 etc/shadow

#只解压etc.tar.gz中的etc/shadow这一个文件,到当前路径
[root@localhost ~]# tar -zxv -f /root/etc.tar.gz etc/shadow

#将/etc和/root这两个目录打包压缩成/root/system.tar.gz由于打包后的文件,也在/root目录内,所以要使用--exclude排除本身,另外还有排除/root/etc*开头的几个打包文件(之前建立的打包文件)
[root@localhost ~]# tar -zcv -f /root/system.tar.gz --exclude=/root/etc* --exclude=/root/system.tar.gz /etc /root 

#将/etc和/root这两个目录打包压缩到/tmp目录下,并自定义压缩后的文件名为system.tar.gz ,使用--exclude排除/root/etc*开头的几个文件
[root@localhost ~]# tar -zcv -f /tmp/system.tar.gz --exclude=/root/etc* /etc /root 

五十八、mkisofs建立镜像文件

#参数r表示支持linux的文件数据,参数V后接卷标,参数o接自定义镜像名称,参数m表示排除某个文件或目录(可以使用*通配符),参数-graft-point表示在镜像文件内创建对应的目录,这个参数非常重要,否则创建的镜像文件,没有目录,文件全部堆在一起。
[root@localhost ~]# mkisofs -r -V 'linux_file' -o /backups/system.img -m /root/etc -graft-point /root=/root /home=/home /etc=/etc

[root@localhost ~]# mount -o loop /backups/system.img /mnt

[root@localhost ~]# umount /mnt

#或者提前复制好目录,然后再建立镜像文件
[root@localhost ~]# cp -r -a /etc /srv/cdrom/

[root@localhost ~]# cp -r -a /root /srv/cdrom/

[root@localhost ~]# cp -r -a /home /srv/cdrom/

#参数v表示显示创建镜像的过程
[root@localhost mnt]# mkisofs -r -v -o /tmp/system.img  /srv/cdrom

五十九、dd复制磁盘或分区

#将/etc/passwd备份到/tmp/passwd.back当中
[root@localhost ~]# dd if=/etc/passwd of=/tmp/passwd.back

#将sdb磁盘备份成镜像文件
[root@localhost ~]# dd if=/dev/sdb of=/tmp/system_bak.iso

#将镜像文件还原到另一个磁盘
[root@localhost ~]# dd if=/tmp/system_bak.iso of=/dev/sdc

#将sdb整个磁盘复制到sdc磁盘(是复制扇区,与文件系统无关)
[root@localhost ~]# dd if=/dev/sdb of=/dev/sdc

#将sdb1分区复制到sdc1分区(需要提前创建sdc1分区,并且大小必须大于或等于sdb1分区)
[root@localhost ~]# dd if=/dev/sdb1 of=/dev/sdc1

六十、cpio备份文件

  • cpio可以备份任何文件,包括设备文件,但必须配合find来使用
#注意这里一定要切换到根目录,原因是下面的find命令必须使用相对路径
[root@localhost ~]# cd /

#将boot这个目录备份到指定位置
[root@localhost /]# find boot | cpio -ocvB > /tmp/boot.cpio      

#将boot.cpio还原到/root目录下
[root@localhost ~]# cpio -idvc < /tmp/boot.cpio 

#查看boot.cpio里面的内容
[root@localhost ~]# cpio -ivct < /tmp/boot.cpio 
  • 将该文件解压(本身这个文件就是由cpio建立的)
[root@localhost ~]# file /boot/initramfs-3.10.0-957.el7.x86_64.img 
/boot/initramfs-3.10.0-957.el7.x86_64.img: ASCII cpio archive (SVR4 with no CRC)

[root@localhost ~]# mkdir /tmp/initramfs

[root@localhost ~]# cd /tmp/initramfs

[root@localhost initramfs]# cpio -idvc < /boot/initramfs-3.10.0-957.el7.x86_64.img 

六十一、VI及VIM编辑器的使用

vi及vim的三种模式介绍

VI分为三种模式,一般命令模式,编辑模式,命令行模式。

一般命令模式:
以vi打开一个文件,就是直接进入一般命令模式,可以上下左右移动光标,可以删除字符或删除整行,还可以复制粘贴。

编辑模式:
一般命令模式可以删除,复制,粘贴,但无法编辑文件。按【i】进入编辑模式,此时左下角会出现【INSERT】的字样,按【ESC】键退出编辑模式,返回到一般命令模式。

命令行模式:
在一般命令模式中,输入【:】进入命令行模式,可以查找字符,保存,批量替换,显示行号,退出等操作。

#默认vi已经被vim替换,因此得输入绝对路径来执行
[root@localhost ~]# /bin/vi 12.txt

一般命令模式

移动光标和翻页:
上下左右可以移动光标,【5】+【下】的组合可以向下移动5行,【6】+【右】的组合可以向右移动6个字符,
【Home】光标移动到行首,【End】光标移动到行尾,【H】光标移动到屏幕的第一行的第一个字符,【G】光标移动到文件最后一行
【Ctrl】+【f】向下翻一页,或者按【Page Down】也可以向下翻一页,【Ctrl】+【b】向上翻一页,或者按【Page Up】也可以向上翻一页,

查询和替换:
/word 查询关键字“word”,按【n】继续向下查找,
:1,$s/word1/word2/g ,从第一行到最后一行查询wrod1并替换为word2
:3,10s/word1/word2/g, 从第3行到第10行查询word1并替换为word2
:1,$s/word1/word2/gc ,从第一行到最后一行查询wrod1并替换为word2,替换前需要用户确认

删除(剪切),复制,粘贴:
【x】删除当前光标的字符,【X】删除光标前一个字符
【dd】删除(剪切)当前行,【3dd】向下删除3行
【yy】复制当前行,【4yy】向下复制4行
【p】在光标的下一行粘贴
【u】撤销上一个操作
【.】重复上一个操作,例如重复粘贴等

命令行模式

【:w】保存写入磁盘,【:w!】后面的感叹号表示强制,
【:q】退出,【:q!】强制退出,
【:wq】保存并退出,【:wq!】强制保存并退出,
【:set nu】显示行号,【:set nonu】不显示行号

VIM的缓存与恢复

[root@localhost ~]# cd /tmp
[root@localhost tmp]# vim 123.txt 
此时故意写一些内容不保存,在一般命令模式按【ctrl+z】,此时的vim被丢到后台
[root@localhost tmp]# ls -al
total 388
drwxrwxrwt.  8 root root   4096 Jun  9 18:28 .
dr-xr-xr-x. 18 root root   4096 Jun  9  2019 ..
-rw-r--r--.  1 root root     12 Jun  9 18:02 123.txt
-rw-r--r--.  1 root root  12288 Jun  9 18:28 .123.txt.swp     <--这个文件就是缓存文件
#强行结束这个进程来模拟VIM出现宕机的情况
[root@localhost tmp]# kill -9 %1
[1]-  Killed                  vim 123.txt
#再次打开就会出现提示,o表示只读打开,e表示正常编辑,r表示恢复之前尚未保存的内容,q表示离开
[root@localhost tmp]# vim 123.txt 
...........此处省略N行.....................
Swap file ".123.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
#即使刚才你选择了r恢复,下次打开还是会有提示,因此需删除这个缓存文件
[root@localhost tmp]# rm -rf .123.txt.swp 

VIM的可视区块(Visual Block)

#类似这样的数据,如果想只复制host1,host2等,则需要用到可视区块
[root@localhost tmp]# vim 123.txt 
192.168.1.1     host1.class.net
192.168.1.2     host2.class.net
192.168.1.3     host3.class.net
192.168.1.4     host4.class.net
192.168.1.5     host5.class.net
192.168.1.6     host6.class.net

在一般命令模式下,【v】表示开始选择,使用上下左右确定选择的字符,【Ctrl+v】可视区块,可以矩形的方式选择数据,【y】将选中的字符复制,【d】将选中的字符删除,【p】粘贴

VIM跨文件复制与粘贴

#同时打开多个文件
[root@localhost ~]# vim 12.txt 34.txt 
[root@localhost ~]# vim /root/12.txt /tmp/34.txt 

【:files】 //查看同时打开了几个文件(鸡肋)
【:n】 //打开下一个文件,可以在12.txt使用【2yy】复制2行,在34.txt中使用【p】粘贴,实现了跨文件的复制与粘贴

vim的多窗口功能

当有一个文件特别大的时候,如果需要将前面的内容,和后面的内容对照的话,如果使用ctrl+f和ctrl+b那样的话相当麻烦

【:sp】可以重新打开该文件,实现上下分屏显示,按ctrl+w+上或ctrl+w+下可以将光标上下切换,
这样可以实现上下对比,也可以实现将后面的内容复制到前面等操作。

vim的关键词补全功能

#必须是.html和.php的扩展名
[root@localhost ~]# vim 12.html 

在插入模式下,按下ctrl+x然后再按ctrl+o就可以进行语法补全
ctrl+x然后再按ctrl+n以文件的内容文字来补全
ctrl+x然后再按ctrl+f以目录内的文件名作为关键字补全

vim的环境设置

#通过该配置文件修改vim的环境设置(不推荐)
[root@localhost ~]# cat /etc/vimrc 

#一般通过新建这个文件来修改vim的环境设置
[root@localhost ~]# vim ~/.vimrc
"这个文件的双引号表示注释
set hlsearch    "高亮度反白
set backspace=2         "可随时用退格键删除
set autoindent          "自动缩进
set ruler       "可显示最后一行的状态
set showmode    "左下角那一行的最前面显示行号
set nu          "可以在每一行的最前面显示行号
set bg=dark     "显示不同的底色色调
syntax on       "进行语法检验,颜色显示

六十二、注意windows与linux的换行符

dos和Linux的换行符是不一样的,所以在windows下编辑的纯文本,传到linux中使用,特别是shell脚本,则会出现错误。
需要使用dos2unix将其转换为linux下的换行符,才能正常使用。

1.安装dos2unix命令并验证是否安装成功

#查看yum仓库中所有能安装的软件,关键字过滤是dos2
[root@localhost ~]# yum list | grep dos2

#安装dos2unix软件
[root@localhost ~]# yum install -y dos2unix

#验证是否安装dos2unix软件
[root@localhost ~]# rpm -qa | grep dos2

2.将文件从linux和dos之间相互转换

[root@localhost ~]# cp -a /etc/man_db.conf /tmp

[root@localhost ~]# cd /tmp

#将该文件从linux格式转为dos格式,参数k表示保留原有的mtime时间格式
[root@localhost tmp]# unix2dos -k man_db.conf 

#将该文件从dos格式转为linux格式
[root@localhost tmp]# dos2unix -k man_db.conf 

六十三、dos2unix编码转换

假设在windows下用记事本写了一段文字,然后传到linux上,先使用dos2unix将dos换行符转换为linux的,
然后使用iconv进行编码转换。

#12.txt是在windows下创建的记事本,将其换行符转为linux的
[root@localhost tmp]# dos2unix -k 12.txt 

#查看12.txt这个文件的编码
[root@localhost tmp]# file 12.txt 

#将12.txt这个文件,由原来的gb2312编码,转换为utf8编码
[root@localhost tmp]# iconv -f gb2312 -t utf8 12.txt

#参数-o表示,生成新的文件,原有文件不变
[root@localhost tmp]# iconv -f gb2312 -t utf8 12.txt -o 22.txt

六十四、type及shell简介

shell是壳,用于操作系统内核,或者软件用,shell有图形界面的壳,和命令行的壳。
命令行的壳有sh,C shell, K shell,TCSH,bash,其中bash是linux系统默认的shell。
sh已经被bash取代,C shell已经被TCSH取代。

#以Centos 7.x为例,查看系统支持的shell
[root@localhost ~]# cat /etc/shells 

#查看cd命令是bash的内置命令还是外部命令
[root@localhost ~]# type -t cd

#查看cd命令所在路径
[root@localhost ~]# type -a cd

六十五、要输入的命令太长怎么办

  • 新手往往会在人意想不到的地方卡住,谁都是从新手过来的
#命令太长可以使用\将回车转义,后面的>是转义后自动生成的
[root@localhost ~]# cp /var/spool/mail/root /etc/crontab \

> /etc/fstab /tmp

使用小贴士

当你输了一串长的错误命令,需要删除,可以使用
ctrl+a将光标移动到最前面,然后ctrl+k删除整行
或者ctrl+e将光标移动到最后面,然后ctrl+u删除整行


六十六、env与PS1查看环境变量及临时修改终端提示内容

#查看所有环境变量
[root@localhost ~]# env

#查看bash的版本
[root@localhost ~]# set | grep "BASH_VERSION="

#查看安装的机器的类型
[root@localhost ~]# set | grep "MACHTYPE="
MACHTYPE=x86_64-redhat-linux-gnu

#临时修改提示字符
[root@localhost ~]# PS1='[\u@\h \w \A #\#]\$'
[root@localhost ~ 18:49 #3]#
\u当前用户,\h取小数点之前的主机名,
\w显示工作目录,\A显示24小时制时间,
\#显示编号表示第几个执行的命令
\$如果是root提示符为#,否则为$

六十七、read读取键盘输入的变量

#声明一个变量atest,变量值为接下来键盘输入的内容
[root@localhost ~]# read atest
this is a test

[root@localhost ~]# echo $atest
this is a test

#声明一个变量named,要求在30秒之类完成,参数p后面接的是提示内容
[root@localhost ~]# read -p "Please keyin your name:" -t 30 named
Please keyin your name:chenhongbo

[root@localhost ~]# echo $named
chenhongbo

七十八、declare设置变量的类型

1.声明变量为整数型

#没有指定变量类型则按照文本形式处理
[root@localhost ~]# sum=100+300+50
[root@localhost ~]# echo $sum
100+300+50

#参数i表示指定变量为整数类型
[root@localhost ~]# declare -i sum=100+300+50
[root@localhost ~]# echo $sum
450

2.声明变量为环境变量并查看变量类型

#将变量"sum"指定为环境变量
[root@localhost ~]# declare -x sum

#查看环境变量
[root@localhost ~]# export | grep sum

#查看变量sum的类型
[root@localhost ~]# declare -p sum
declare -ix sum="450"

#将sum取消环境变量,成为自定义变量,+就是取消
[root@localhost ~]# declare +x sum

3.声明变量为只读

#将sum设置为只读
[root@localhost ~]# declare -r sum

#修改失败,提示只读变量
[root@localhost ~]# sum=test1
-bash: sum: readonly variable

4.声明变量为数组

[root@localhost ~]# var[1]="small min"
[root@localhost ~]# var[2]="big min"
[root@localhost ~]# var[3]="nice min"

[root@localhost ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
small min, big min, nice min

六十九、ulimit设置用户使用系统资源的限制

#查看用户使用系统资源的限制
[root@localhost ~]# ulimit -a

#限制用户仅能创建10M一下的文件
[root@localhost ~]# ulimit -f 10240

[root@localhost ~]# ulimit -a | grep 'file size'
core file size          (blocks, -c) 0
file size               (blocks, -f) 10240

#创建一个20M的文件,提示超出文件大小限制
[root@localhost ~]# dd if=/dev/zero of=123.txt bs=1M count=20
File size limit exceeded (core dumped)

[root@localhost ~]# ls -lh 123.txt
-rw-r--r-- 1 root root 10M Jul  1 18:21 123.txt

七十、设置命令的别名

#设置命令别名,输入lm就相当于输入了ls -al | more
[root@localhost ~]# alias lm='ls -al | more'

#取消刚才设置的别名lm
[root@localhost ~]# unalias lm

七十一、history查看历史命令

#查看所有历史命令
[root@localhost ~]# history

#查看最近5条历史命令
[root@localhost ~]# history 5

#执行上一条命令
[root@localhost ~]# !!

#执行编号为272的命令
[root@localhost ~]# !272

#历史命令保存在该路径下
[root@localhost ~]# cat ~/.bash_history 

#清除所有历史命令
[root@localhost ~]# history -c

#将当前记录写入到.bash_history 
[root@localhost ~]# history -w         

七十二、/etc/motd修改bash的登录欢迎信息

#修改该文件,即可让用户在ssh登录时看到该消息
[root@localhost ~]# vim /etc/motd
Your system will be maintained on July 1, 2021, 
please do not log in during this period

按Ctrl+Alt+F3进入tty3就能看到登录界面


七十三、修改bash的环境配置文件

bash分为login和non-login shell,tty1~tty6方式登录的bash称为login shell,其他方式的bash称为non-login shell
不同的bash读取的配置文件不一样

/etc/profile这个是系统整体设置,最好不要修改
login shell读取的是以下三个文件
~/.bash_profile 或/.bash_login或/.profile属于用户个人设置
这三个文件的优先级是.bash_profile最高,.profile最低

[root@localhost ~]# vim ~/.bash_profile 
alias lm='ls -al | more'

#读入环境配置文件的命令
[root@localhost ~]# source ~/.bash_profile 

non-login shell读取的则是 ~/.bashrc文件
CentOS 7.X还会主动调用/etc/bashrc这个文件,
同时/etc/bashrc这个文件还会调用/etc/profile.d/.sh这些文件*

还有几个比较重要的文件
/etc/man_db.conf 使用man的时候,man page的路径
~/.bash_history 历史命令记录在该文件
~/.bash_logout 注销bash后,系统再帮我完成什么操作后才离开


七十四、数据流重定向

#将ls -l /的输入结果写入到rootfile.txt文件中
[root@localhost ~]# ls -l / > ~/rootfile.txt

#将 find /home -name .bashrc这个命令的正确输出写入list_right.txt文件,(2表示错误信息)错误信息写入list_error.txt
[chb@localhost ~]$ find /home -name .bashrc > list_right.txt 2> list_error.txt

#将错误信息丢入垃圾桶黑洞/dev/null
[chb@localhost ~]$ find /home -name .bashrc 2> /dev/null

#将正确输出和错误输入,都写入list.txt文件中
[chb@localhost ~]$ find /home -name .bashrc >list.txt 2>&1

#将键盘输入的内容保存到catfile.txt文件中
[chb@localhost ~]$ cat > catfile.txt
test1
test22
<-- 这里按ctrl+d来退出

#将~/.bashrc文件替代键盘输入的内容,写入catfile.txt文件中
[chb@localhost ~]$ cat > catfile.txt < ~/.bashrc

#输入关键字"eof"结束,而不需要按ctrl+d退出
[chb@localhost ~]$ cat > catfile.txt << "eof"

this is a test
this is a test2
eof

七十五、命令执行的判断根据

#关机前,先做两次磁盘同步
[root@localhost ~]# sync;sync;shutdown -h now

cmd1 && cmd2  如果cmd1执行成功后才执行cmd2
cmd1 || cmd2  如果cmd1执行成功后cmd2不执行,cmd1执行结果为错误则开始执行cmd2

#如果/tmp/abc这个目录存在,则在该目录下创建1.txt文件
[root@localhost ~]# ls /tmp/abc && touch /tmp/abc/1.txt

[root@localhost ~]# rm -rf /tmp/abc

#如果/tmp/abc目录不存在,则创建该目录,如果/tmp/abc目录存在,则后面的命令不执行
[root@localhost ~]# ls /tmp/abc || mkdir /tmp/abc

#想要建立/tmp/abc/1.txt这个文件,但不知道/tmp/abc是否存在
root@chbpc02:~# ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/1.txt

七十六、变量"?"的作用

变量"?"表示上一条命令所返回的值,如果执行成功则返回值为0,否则就是返回错误代码(非0)

#正常是返回0
[root@localhost ~]# echo $?
0

#故意执行一条错误的命令
[root@localhost ~]# 12name=VB
bash: 12name=VB: command not found...

#返回错误代码127
[root@localhost ~]# echo $?
127

七十七、管道命令

管道后面接的一定是命令,例如less,more,head,tail等

#ls查看输出的内容输入太多,使用less来读取
[root@localhost ~]# ls -al /etc | less

总结

未完待续

posted @ 2026-02-02 17:06  神秘剑客  阅读(2)  评论(0)    收藏  举报