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 #赋值一个用户定义变量