Linux快速上手 计算机硬件—>硬件接口层(内核、核心层kernel)—>命令解释层(shell)—>外围应用层
基本操作 1 2 3 4 su root #切换到root用户 su xuaner #切换到普通用户 passwd root #修改root用户密码 ifconfig #查看当前ip信息
文件系统 目录为虚拟目录,由挂载点决定文件写入磁盘位置
Vim
基本命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 vim test.txt #打开文件 一般模式,只能进行删除、复制、粘贴 yy #复制光标当前的一行 yny #复制一段,从光标当前行到后n行,nyy也一样 y$ y^ #复制当前光标行前所有字符 yw #复制当前单词 p #粘贴 np dd #删除 dnd #删除多行,ndd dw #删除单词 d$ d^ #删除当前光标行前所有字符 x #剪切 X #回退,相当于backspace ,shift+x 等同于X r #替换 R #连续替换 $ ^ #快速移动到行首 b #快速移动到上一个词首 w #快速移动到下一个词首 e #快速移动到词尾 gg #文档首 ngg #跳转到n行 G #文档尾 :q #退出文件 命令模式,使用:或者/ ESC退出到一般模式 :w #保存 将缓存区写入到磁盘 :wq #保存退出 :q! #强制退出 :set nu #显示行号 :set nonu #不显示行号 /username #查询username :s/username/usernames #查找光标第一个username替换成usernames :s/username/usernames/g #查找光标所在行所有username替换成usernames :%s/username/usernames #查找光标所有行第一个username替换成usernames :%s/username/usernames/g #查找光标所有行所有username替换成usernames n #向下查找 N #向上查找 i #插入 编辑模式, ESC退出到一般模式 u #撤回 撤回到上次保存之前
网络配置 1 2 3 4 5 6 7 8 9 vim /etc/sysconfig/network-scripts/ifcfg-ens33 # ip地址 IPADDR=192.168.202.100 # 网关 GATEWAY=192.168.202.2 # 域名解析器 DNS1=192.168.202.2 # 显示 onboot=yes
1 2 # 网络重启 service network restart
可能遇到的配置问题
(1)物理机能ping
通虚拟机,但是虚拟机ping
不通物理机,一般都是因为物理机的防火墙问题,把防火墙关闭就行 (2)虚拟机能ping
通物理机,但是虚拟机ping
不通外网,一般都是因为DNS
的设置有问题 (3)虚拟机ping www.baidu.com
显示域名未知等信息,一般查看GATEWAY
和DNS
设置是否正确 (4)如果以上全部设置完还是不行,需要关闭NetworkManager
服务
systemctl stop NetworkManager
关闭
systemctl disable NetworkManager
禁用 (5)如果检查发现systemctl status network
有问题需要检查ifcfg-ens33
网卡启动异常,或者没有网络显示 1 2 3 4 5 6 ifup ens33 chkconfig NetworkManager off chkconfig network on sudo chkconfig network on service NetworkManager stop service network start
1 2 3 4 5 6 7 8 9 10 hostname #主机名 vim /etc/hostname #修改完后需要重启 hostnamectl set-hostname linux100 #修改主机名为linux100 vim /etc/hosts #修改hosts文件,映射192.168.72.100为linux100 192.168.72.100 linux100 # 通过ssh远程连接 ssh root@linux100 # 退出 exit
系统管理
计算机中,一个正在执行的程序或命令,被叫做,“进程”(process
)。
启动之后一只存在、常驻内存的进程,一般被称作“服务”(service
)。
守护进程
1 2 3 ls /usr/bin/ #查看命令 ls /usr/bin/ | grep service #筛选service相关的命令 ls /usr/bin/systemd/system
service服务管理
service 服务名 start | stop | restart |status ——-centos6
systemctl start | stop | restart |status 服务名 ——-centos7
/usr/lib/systemd/system
CentOS7
的运行级别简化为:multi--user.target
等价于原运行级别3
(多用户有网,无图形界面)~graphical.target
等价于原运行级别5
(多用户有网,有图形界面)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 查看当前运行级别: systemctl get-default init 3 #切换至命令界面 ctrl+alt+f2 init 5 #切换至GUI界面 ctrl+alt+f1 chkconfig --list #列出服务 chkconfig network on #打开network服务 chkconfig --level 3 network off #关闭network级别3 systemctl status NetworkManager #查看服务 systemctl disable NetworkManager #关闭net服务 systemctl list-unit-files #查看所有服务 systemctl status firewalld #查看防火墙状态
(1)sync
(功能描述:将数据由内存同步到硬盘中) (2)halt
(功能描述:停机,关闭系统,但不断电) (3)poweroff
(功能描述:关机,断电) (3)reboot
(功能描述:就是重启,等同于shutdown-r-now
) (4)shutdown
[选项]时间
-H 相当于 –halt 停机
-r -r=reboot 重启
now 立刻关机
时间 等待多久后关机,单位分钟
常用命令 1 2 3 4 5 6 7 ls -l /bin/ | grep sh #把bin目录下带sh的按照一行一个输出 man [命令或配置文件] #获得帮助 type cd #判断cd是否是内嵌命令 man -f cd #查看内置命令help help [命令] #只能看内置命令 [命令] --help #命令提供了内置帮助
文件目录类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 pwd #打印工作目录 pwd -P #显示软链接的实际路径 cd - #回到上次的目录 ls -a #显示所有文件,包括隐藏文件 ls -l #显示文件详细信息 ls -lh #人性化显示详细信息 ll #显示详细信息-带有权限 mkdir a #创建一个名为a的文件夹 mkdir -p a/b/c/d #父目录不存在自动创建 rmdir -p a/ #里面包含子目录,也一并删除 touch 1.txt #创建一个空文件 cp 1.txt /home/xuaner/ #复制1.txt到新的路径下 cp 1.txt /home/xuaner/2 #复制1.txt到新的文件下,会覆盖内容,需要验证是否覆盖 \cp 1.txt /home/xuaner/2 #复制1.txt到新的文件下,会覆盖内容,无需验证-----使用的是原生命令 alias #别名 cp -r /a /home/xuaner/ #递归复制文件目录a下面所有文件到目录xuaner下 rm 1.txt #删除文件 rm -f 1.txt #强制删除 rm -r a/ #递归删除 rm -rf a/ #强制递归删除 mv 1.txt /home/xuaner/ #移动文件 mv 1.txt /home/xuaner/2.txt #移动文件并改名 cat 1.txt #查看文件内容 cat n 1.txt #显示行号 more 1.txt #文件分屏查看 less 1.txt #功能和more类似 echo "hello" #输出内容到控制台 echo -e "hello \n world" #支持转义字符 echo $ #查看环境变量,按tab head 1.txt #查看文件头十行 head -n 20 1.txt #查看20行 tail 1.txt #查看尾十行 tail -n 20 1.txt #查看尾20行 tail -f 1.txt #实时追踪该文档的所有更新 ln -s [原文件或目录名] [软链接名] #软链接 history #历史命令 history -c #清空历史命令
输入输出重定向
基本语法 (1)ls -1 > 文件
(功能描述:列表的内容写入文件a.tⅸt中(覆盖写)) (2)ls -al >> 文件
(功能描述:列表的内容追加到文件aa.tⅸt的末尾)~ (3)cat 文件1 > 文件2
(功能描述:将文件1的内容覆盖到文件2) (4)echo “内容” >> 文件
时间日期类 1 2 3 4 5 6 7 8 9 10 11 12 13 date #显示日期 date +%Y #显示年 date+%m #显示月 date +%d #显示天 date +%Y-%m-%d%H:%M:%S date -d"1 day ago" #显示前一天 date -s "2022-09-19 12:12:00" #设置时间 ntpdate ntp1.aliyun.com #时间同步 # 修改时间为北京时间 rm -rf /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cal #日历
用户管理
useradd 用户名
(功能描述:添加新用户)useradd -g 组名 用户名
(功能描述:添加新用户到某个组)
1 2 3 4 5 6 7 8 passwd xuaner #给xuaner设置密码 id xuaner #查看xuaner是否存在 cat /etc/passwd #查看有哪些用户 who am i #查看当前用户,最原始登录用户 whoami #查看当前用户 sudo ls #临时提升权限 vim /etc/sudoers #添加用户权限 userdel -r david #删除david用户
用户组管理 1 2 3 4 usermod -g meifa tony #把tony用户加到meifa组 usermod -g qym xuaner #xuaner用户加到qym groupmod -n haircut meifa #修改meifa组名为haircut groupdel tony #删除tony组
文件权限 搜索查找 1 2 3 4 5 6 7 8 9 10 11 find -name info #查找文件名为info的文件 find test/ -name info #查找test目录下的info文件 find -name "*.cfg" #通配符查找 find -size +2k #查找文件大于2k的 updatedb #更新数据库 locate tmp #快速查找包含tmp的所有文件 which ls #查找ls命令在哪 whereis locate #查找locate命令在哪 grep -n boot 1.txt #查找boot在1.txt中出现的行号 ls | grep .cfg #查找后缀为cfg的文件 wc info #统计info出现的行 次数 字节大小
压缩解压命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 gzip 1.txt #压缩1.txt 为.gz后缀 只能压缩文件不能压缩目录,不保留原文件,每个压缩文件单独存放 gunzip 1.gz #解压缩 zip 1.zip 1.txt 2.txt #压缩,可以压缩文件和目录,递归压缩,保留原文件,压缩文件可存为一个 unzip 1.zip #解压 zip -r xuaner.zip /home/xuaner #压缩xuaner目录下所有文件 unzip -d /tmp xuaner.zip #解压文件到tmp目录下 tar [选项] 1.tar.gz #归档打包 -c #打包.tar -v #显示详细信息 -f #指定压缩后包名 -z #打包同时压缩 -X #解包.tar文件 -C #解压到指定目录 tar -zcvf 1.tar.gz 1.txt 2.txt info #打包多个文件,压缩为1.tar.gz tar -zxvf 1.tar.gz -C /tmp #解压包到tmp文件目录
磁盘操作 yum install tree
du [目录/文件]
(功能描述:显示目录下每个子目录的磁盘使用情况)
1 2 3 4 5 6 7 8 9 10 11 12 13 du [选项] [目录/文件] -h #按照GB、MB等显示 -a #不仅查看子目录大小,还包括文件 -c #显示所有文件和子目录大小,显示总和 -s #只显示总和 --max-depth=n #指定子目录深层n du --max-depth=1 -ah #只显示当前目录下面一级 df -h #查看磁盘占用信息 lsblk -h #查看详细设备的挂载情况,显示文件系统信息 ls /dev/ | grep sr0 #管道查看sr0 ll /dev/ | grep sr0 #管道查看sr0详细情况
挂载操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 mount [-t vfstype] [-o options] device dir #挂载设备 -t vfstype #指定文件系统的类型,通常不必指定。mout会自动选择正确的类型 #常用类型有: #光盘或光盘镜像:iso9660 #D0Sfat16文件系统:msdos #Windows9xfat32文件系统:vfat #Windows NT ntfs文件系统:ntfs #Mount Windows文件网络共享:smbfs #UNIX(LINUX)文件网络共享:nfs -o options #主要用来描述设备或档案的挂接方式。常用的参数有: #loop:用来把一个文件当成硬盘分区挂接上系统 #ro:采用只读方式挂接设备 device #要挂接的设备 dir #设备在系统上的挂接点(mount point) mount /dev/cdrom /mnt/cdrom #把光盘驱动挂载到/mnt/cdrom下 umount [设备文件名或者挂载点] #卸载设备 umount /dev/cdrom #卸载挂载点 # 设置开机自动挂载 vim /etc/fstab /dev/cdrom /mnt/cdrom iso9660 defaults 0 0
分区操作 1 2 3 4 5 fdisk -l #查看磁盘分区详情 fdisk [硬盘设备名] #对新增硬盘进行分区操作 fdisk /dev/sdb #对sdb硬盘进行操作 mkfs -t xfs /dev/sdb1 #对sdb1进行格式化 mount /dev/sdb1 /home/cd1 #把sdb1 挂载在/home/cd1目录下
进程管理 查看系统进程 1 2 3 4 5 6 7 8 9 ps [选项] | grep XXX a #列出带有终端的所有用户的进程 x #列出当前用户的所有进程,包括没有终端的进程 u #面向用户友好的显示风格 -e #列出所有进程 -u #列出某个用户关联的所有进程 -f #显示完整格式的进程列表 ps aux | grep XXX #查看系统所有进程 ps -ef | grep XXX #查看子父进程之间的关系
终止进程 1 2 3 4 kill [选项] pid #通过进程号杀死进程 killall 进程名称 #通过进程名杀死进程 -9 #表示强迫进程立即停止 kill -l #信号值
进程树 1 2 3 pstree [选项] -p #显示PID -u #显示进程的所属用户
实时监控进程 1 2 3 4 top [选项] -d 秒数 #指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令 -i #使top不显示任何闲置或者僵死进程。 -p #通过指定监控进程ID来仅仅监控某个进程的状态。
网络端口 1 2 3 4 5 6 netstat -anp | grep 进程号 #查看该进程网络信息 netstat -nlp | grep 端口号 #查看网络端口号进程占用情况 -a #显示所有正在监听(listen)和未监听的套接字(socket) -n #拒绝显示别名,能显示数字的全部转化成数字 -l #仅列出在监听的服务状态 -p #表示显示哪个进程在调用进程
系统定时任务 1 2 3 4 crontab [选项] -e #编辑crontab定时任务 -l #查询crontab任务 -r #删除当前用户所有的crontab任务
第一个* 一小时当中的第几分钟 0-59 第二个* 一天当中的第几小时 0-23 第三个* 一个月当中的第几天 1-31 第四个* 一年当中的第几月 1-12 第五个* 一周当中的星期几 0-7(0和7都代表星期日)
软件包管理 RPM 1 2 3 4 5 6 7 8 9 10 11 12 rpm -qa #查询所安装的所有pm软件包 rpm -qa | grep firefox #过滤 rpm -qi firefox #查询某一个的详细信息 rpm -e firefox #卸载软件包 rpm -e --nodeps firefox #卸载软件时,不检查依赖。这样的话,那些使用该软件包的软件在此之后可能就不能正常工作了。 # 安装 rpm [选项] 包全名 -i #install,安装 -v #--verbose,显示详细信息 -h #--hash,进度条 --nodeps #安装前不检查依赖
YUM YUM(全称为Yellow,dog Updater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装
1 2 3 4 5 6 7 8 9 10 11 yum [选项][参数] # 选项 -y #对所有的都执行yes # 参数 install #安装rpm软件包 update #更新rpm软件包 check-update #检查是否有可用的更新rpm软件包 remove #删除指定的rpm软件包 list #显示软件包信息 clean #清理yum过期的缓存 deplist #显示yum软件包的所有依赖关系
修改网络源 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 修改/etc/yum.repos.d/CentOS-Base.repo yum install wget # 备份原源 cp CentOS-Base.repo CentOS-Base.repo.backup # 下载镜像 wget http://mirrors.aliyun.com/repo/Centos-7.repo #阿里云 wget http://mirrors.163.com/.help/Centos7-Base-163.repo #网易 # 修改下载好的repos文件 mv Centos7-Base-163.repo CentOS-Base.repo # 清理旧缓存,缓存新数据 yum clean all yum makecache # 测试源 yum list | grep firefox yum -y install firefox
Shell Shell是一个命令行解释器,它接收应用程序用户命令,然后调用操作系统内核。
1 2 # 查看shell解释器 cat /etc/shells
脚本 脚本以#!bin/bash
开头(指定解析器)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # 脚本常见执行方式 # 第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限) sh ./helloworld.sh sh /home/xuaner/shells/helloworld.sh # bash+脚本的相对路径 bash ./helloworld.sh bash /home/xuaner/shells/helloworld.sh # 第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x) # (1)首先要赋予helloworld.sh脚本的+x权限 chmod +x helloworld.sh # (2)执行脚本 ./helloworld.sh # 注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限。 # 第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。 # 【了解】第三种:在脚本的路径前加上“.”或者source . helloworld.sh source /root/helloworld.sh # 原因: # 前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。 # 第三种,也就是使用在脚本路径前加“.”或者source 的方式,可以使脚本内容在当前shell里执行, # 而无需打开子shell,这也是为什么我们每次要修改完/etc/profile文件以后,需要source 一下的原因。 # 开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。
变量 常用系统变量 $HOME、$PWD、$SHELL、$USER
等
自定义变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 查看系统变量 echo $HOME # 显示当前shell中所有的变量 set # 查看所有的全局变量 env printenv # 查看某个 printenv HOME # 子shell更改不会影响父shell my_var=hello #赋值 echo $my_var my_var="hello,world" export my_var #提升为全局变量 unset my_var #撤销变量 # 只读变量 readonly b=10
特殊变量 $n
1 $ n(功能描述:n为数字,$0 代表该脚本名称,$1 -$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10} )
$#
$*、$@
1 2 3 4 $ * (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体) $ @ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$?
1 $ ?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行:如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
运算符 1 2 3 4 5 6 7 8 9 10 $ ((1 +2 )) $ [1+2] expr 1 + 2 expr 5 \* 2 echo $((5*2)) echo $[5*2] # 命令替换 a=$(expr 5 \* 2) echo $a
条件判断 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # (1)基本语法 test conditione [condition] #(注意condition前后要有空格) # 注意:条件非空即为rue,[xuaner]返回true ,[]返回false 。 # (2)常用判断条件 # (1)两个整数之间比较 eq #等于(equal) -ne #不等于(not equal) -lt #小于(less than) -le #小于等于(less equal) -gt #大于(greater than) -ge #大于等于(greater equal) # 注:如果是字符串之间的比较,用等号“=”判断相等:用“!=”判断不等。 # (2)按照文件权限进行判断 -r #有读的权限(read) -w #有写的权限(write) -x #有执行的权限(execute) # (3)按照文件类型进行判断 -e #文件存在(existence) -f #文件存在并且是一个常规的文件(file) -d #文件存在并且是一个目录(directory)
1 2 3 4 5 a=hello test $a = hello echo $? [ $a = hello] echo $?
1 2 3 4 5 # 多条件判断(&&表示前一条命令执行成功时,才执行后一条命令,Ⅱ表示上一条命令执行失败后,才执行下一条命令) [ xuaner ] && echo ok || echo notok a=15 [ $a -lt 20 ] && echo "$a < 20" || echo "$a > 20"
流程控制 if判断 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 if [条件判断];then 程序 fi if [条件判断] then 程序 fi if [条件判断] then 程序 elif [条件判断] then 程序 fi
case 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; 省略其他分支 *) 如果变量的值都不是以上的值,则执行此程序 ;; esac # case 行尾必须为单词“in ”,每一个模式匹配必须以右括号“)”结束。# 双分号“;”表示命令序列结束,相当于java中的break 。 # 最后的“*)”表示默认模式,相当于java中的default。
for循环 1 2 3 4 5 6 7 8 9 for ((初始值;循环控制条件;变量变化)) do 程序 done for 变量 in 值1 值2 值3 do 程序 done
while循环 1 2 3 4 while [条件判断] do 程序 done
1 2 let a++ #shell高级内置实现 a=$[$a+1] #原生
read读取控制台输入 1 2 3 4 5 6 7 8 9 read [选项] [参数] # 选项 -p #指定读取值时的提示符 -t #指定读取值时等待的时闻(秒)加果-t不加表示一直等待 # 参数 变量:指定读取值的变量名 read -t 10 -p "请输入" name echo $name
函数 系统函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 basename [string/pathname] [suffix] # (功能描述:basename 命令会删掉所有的前缀包括最后一个()字符,然后将字符串显示出来。 basename #可以理解为取路径里的文件名称 # 选项: # suffix为后缀,如果suffix被指定了,basename 会将pathname或string中的suffix去掉。 filename="$1"_log_$(data +%s) echo $filename dirname [文件绝对路径] # (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)) # dirname 可以理解为取文件路径的绝对路径名称
自定义函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [function] funname[()] { Action; [return int;] } # 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。 # 函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值n(0-255) function add(){ s=$[$1+$2] echo "和:"$s } read -p "第一个" a read -p "第二个" b add $a $b # 完美版 function add(){ s=$[$1+$2] echo $s } read -p "第一个" a read -p "第二个" b sum=$(add $a $b) echo $sum
正则表达式 1 2 3 4 5 ^a #以a开头 a$ . #匹配一个任意的字符 * #表示0次或者多次 [a-z] #字符区间,匹配一个字符
文本处理工具 cut 1 2 3 4 cut [选项] filename -f #列号,提取第几列 -d #分隔符,按照指定分隔符分割列,默认是制表符“\t” -c #按字符进行切割 后加加n表示取第几列比如-c l
awk 1 2 3 awk [选项] 正则表达式 -F #指定输入文件分隔符 -v #赋值一个用户定义变量