抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Linux快速上手

计算机硬件—>硬件接口层(内核、核心层kernel)—>命令解释层(shell)—>外围应用层

基本操作

1
2
3
4
su root			#切换到root用户
su xuaner #切换到普通用户
passwd root #修改root用户密码
ifconfig #查看当前ip信息

文件系统

目录为虚拟目录,由挂载点决定文件写入磁盘位置

Vim

msedge_IdSeWaWq39

基本命令

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显示域名未知等信息,一般查看GATEWAYDNS设置是否正确
(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

1

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
$#(功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)

$*、$@

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