第二章 Linux 实操
1、Linux 实用指令
指定运行级别
运行级别说明:
- 0:关机
- 1:单用户【找回丢失密码】
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务(实际生产环境用这个)
- 4:系统未使用保留给用户
- 5:图形界面
- 6:系统重启
常用运行级别是3和5,也可以指定默认运行级别
应用实例:
命令:init[0 1 2 3 4 5 6]
通过 init 来切换不同的运行级别,比如从5切换到3,然后关机
查看当前的运行级别
systemctl get-default
multi-user.target,等价于运行级别3
graphical.target,等价于运行级别5
切换到5的运行级别
systemctl set-default graphical.target
找回root密码
经典面试题:如何找回root密码?
- 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。如图
- 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以“Linux16”开头内容所在的行数”,在行的最后面输入:init=/bin/sh。如图
- 接着,输入完成后,直接按快捷键:Ctrl+x 进入单用户模式。
- 接着,在光标闪烁的位置中输入:
mount -o remount,rw /
(注意:各个单词间有空格,逗号间没有空格),完成后按键盘的回车键(Enter)。如图
- 在新的一行最后面输入:
passwd
, 完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可(提示: 密码长度最好8位以上,但不是必须的),密码修改成功后,会显示passwd…的样式,说明密码修改成功
- 接着,在鼠标闪烁的位置中(最后一行中)输入:
touch /.autorelabel
(注意:touch与 /间有一个空格),完成后按键盘的回车键(Enter) - 继续在光标闪烁的位置中,输入:
exec /sbin/init
(注意:exec与 /间有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(提示:这个过程时间可能有点长,耐心等待),完成后,系统会自动重启, 新的密码生效了
帮助命令
man获得帮助信息
基本语法:man [命令或配置文件](功能描述:获得帮助信息)
案例:查看 ls 命令的帮助信息(man ls
)
ls -a
:列出所有文件,包括以 “.” 开头的隐含文件
说明:在Linux下,隐藏文件是以“.”开头的,选项可以组合使用,例如:ls -al
ls -l
:单列输出
help 指令
基本语法:help 命令 (功能描述:获得shell内置命令的帮助信息)
文件目录类
pwd指令
基本语法:pwd (功能描述:显示当前工作目录的绝对路径)
ls指令
基本语法:ls [选项] [目录或是文件]
常用选项:
-a
: 显示当前目录所有的文件和目录,包括隐藏的
-l
: 以列表的方式显示信息
cd指令
基本语法:cd [参数] (功能描述:切换到指定的目录)
理解:绝对路径和相对路径(相对路径是针对当前位置的路径)
cd ~
或者 cd
回到自己的家目录,比如你是root,那么 cd ~ 就是到 /root 目录
cd ..
回到当前目录的上一级目录
mkdir 指令
基本语法:mkdir [选项] 要创建的目录
理解:mkdir指令用于创建目录(默认只能创建一级目录)
常用选项:
-p
:创建多级目录
rmdir 指令(用于删除空目录)
基本语法:rmdir [选项] 要删除的空目录
使用细节:
- rmdir 删除的是空目录,如果想要删除的目录下有内容则无法删除
- 如果需要删除非空目录,需要使用
rm -rf
要删除的目录
touch指令(用于创建空文件)
基本语法:touch 文件名称
实例:在 /home 目录下创建一个空文件 hello.txt
cp指令(copy拷贝文件到指定目录)
基本语法:cp [选项] source dest
常用选项:
-r
:递归复制整个文件夹
应用实例:
- 将 /home/hello.txt 拷贝到 /home/bbb 目录下
- 递归复制整个文件夹,将 /home/bbb 整个目录下的文件全部拷贝到 /home/opt
使用细节:强制覆盖不提示的方法:\cp
\cp -r /home/bbb/ /optt/
rm指令(remove,移除文件或目录)
基本语法:rm [选项] 要删除的文件或目录
常用选项:
-
-r
:递归删除整个文件夹 -
-f
:强制删除不提示
使用细节:强制删除不提示的方法,带上 -f
参数即可
mv指令(move,移动文件与目录或重命名)
基本语法:
-
mv oldNameFile newNameFile
(功能描述:如果两个文件在同一个目录,相当于重命名) -
mv /temp/movefile /targetFolder
(功能描述:移动文件,剪切)
使用细节:移动并重命名
应用实例:移动整个目录,比如将 /opt/bbb 移动到 /home 下
cat指令(查看文件内容)
基本语法:cat [选项] 要查看的文件
常用选项: -n 显示行号
使用细节:cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上管道命令 | more
cat -n /etc/profile | more
more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键(交互的指令)
基本语法:more 要查看的文件
操作说明:如下图
less 指令
echo 指令
echo 输出内容到控制台
基本语法:echo [选项] [输出内容]
实例:
- 使用 echo 指令输出环境变量,比如输出
HOSTNAME
- 使用 echo 指令输出 hello,world!
head 指令
head 用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
基本语法:
- head 文件(功能描述:默认查看文件前10行内容)
- head -n 5 文件(功能描述:查看文件前5行内容,5可以是任意行数)
应用实例:
- 查看 /etc/profile 的前面5行代码
tail 指令
tail 用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。
基本语法:
- tail 文件(功能描述:查看文件尾10行内容)
- tail -n 5 文件(功能描述:查看文件尾5行内容,5可以是任意行数)
- tail -f 文件(功能描述:实时追踪该文档的所有更新)
应用实例:
- 查看 /etc/profile 最后5行的代码
- 实时监控 mydate.txt,看看文件有变化时,是否能看到,实时的追加日期
退出可以按下Ctrl键 + C键
指令 和 >>指令
输出重定向
追加
基本语法:
1. ls -l > 文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
2. ls -al >> 文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
3. cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)
4. echo "内容" >> 文件 (追加)
应用实例:
- 将 /home 目录下的文件列表写入到 /home/info.txt 中,覆盖写入
ls -l /home > /home/info.txt [如果info.txt没有,则会创建]
- 将当前日历信息
追加
到 /home/mycal 文件中
显示当前日历信息:cal
ln指令
软连接也称为符号连接,类似于windows里的快捷方式,主要存放了连接其他文件的路径
基本语法:ln -s [原文件或目录] [软连接名](功能描述:给原文件创建一个软连接)
应用实例:
- 在/home 目录下创建一个软连接 myroot,连接到 /root 目录
- 删除软连接 myroot
细节说明:当我们使用pwd指令查看目录时,仍然看到的是软连接所在的目录。
history指令
查看已经执行过的历史命令,也可以执行历史指令
history 查看所有的历史指令
history 10 查看最近使用过的10个指令
!5 执行历史编号为5的指令
时间日期类
date指令-显示当前日期
基本语法:
date 显示当前时间
date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" 显示年月日时分秒
应用实例:
- 显示当前时间信息
- 显示当前时间年月日
- 显示当前时间年月日时分秒
date指令-设置日期
基本语法:
date -s 字符串时间
应用实例:
设置系统当前时间,比如设置成 2022-11-11 11:22:22
cal指令
查看日历指令
基本语法:
cal [选项] (功能描述:不加选项,显示本月日历)
cal 2022 显示2022整年的日历
搜索查找类
find 指令
find指令将从指定目录向下递归遍历各个子目录,将满足条件的文件或者目录显示在终端上。
基本语法:
find [搜索范围] [选项]
选项说明(可填选项):
说明:当查询路径下无该文件,就不会有任何显示
应用实例:
- 按文件名:根据名称查找 /home 目录下的 hello.txt 文件
- 按拥有者:查找 /opt 目录下,用户名称为 nobody 的文件
- 查找整个Linux系统下大于200M的文件(+n大于、-n小于、n等于,单位有 k,M,G)
locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保障查询结果的准确度,管理员必须定期更新locate时刻
基本语法:
locate 搜索文件
特别说明:由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
应用实例:请使用 locate 指令快速定位 hello.txt 文件所在的目录
which指令
可以查看某个指令在哪个目录下
比如:查看 ls 指令在哪个目录下
grep指令和管道符号 |
grep过滤查找,管道符 “|”,表示将前一个命令的处理结果输出传递给后面的命令处理。
基本语法:
grep [选项] 查找内容 源文件
常用选项:
应用实例:
请在 hello.txt 文件中,查找“yes”所在行,并且显示行号
两种写法:
1. cat /home/hello.txt | grep -n "yes"
2. grep -n "yes" /home/hello.txt
压缩和解压类
gzip / gunzip 指令
gzip 用于压缩文件,gunzip 用于解压
基本语法:
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压文件命令)
应用实例:
- gzip 压缩,将 /home 目录下的 hello.txt 文件进行压缩
- gunzip 解压,将 /home 目录下的 hello.txt.gz 文件进行解压
zip / unzip 指令
zip用于压缩文件,unzip用于解压的,这个在项目打包发布中很有用
基本语法:
zip [选项] xxx.zip 将要压缩的内容(功能描述:一般是文件和文件夹)
uzip [选项] xxx.zip (功能描述:解压文件)
- zip 常用选项:
-r:递归压缩,即压缩整个目录
- unzip 常用选项:
-d<目录>:指定解压后文件的存放目录
- 应用实例:
- 将整个 /home 目录(包括home目录本身)下的所有文件/文件夹进行压缩成 myhome.zip
- 将 myhome.zip 解压到 /opt/tmp 目录下
tar指令
tar指令是打包指令,最后打包后的文件是 .tar.gz
的文件。
基本语法:
tar [选项] xxx.tar.gz 打包的内容 (功能描述:打包目录或文件,压缩后的格式.tar.gz)
选项说明:
应用实例:
- 压缩多个文件,将 /home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz
- 将 /home 的文件夹压缩成 myhome.tar.gz
- 将 pc.tar.gz 解压到当前目录
- 将 myhome.tar.gz 解压到 /opt/tmp2 目录下
2、组管理和权限管理
Linux 组的基本介绍
- 在 Linux 中的每个用户都必须属于一个组,不能独立于组外。
- 在 Linux 中的每个文件都有
所有者
、所在组
、其他组
的概念。
- 所有者
- 所在组
- 其他组
- 改变用户所在的组
文件/目录的所有者
一般文件的创建者,谁创建了该文件,就自然成为该文件的所有者。
查看文件的所有者
指令: ls -ahl
应用实例:下面应该是所在组,这里写错了
注意:蓝色代表目录,白色代表普通文件
修改文件所有者
指令:chown 用户名 文件名
应用实例:
使用 root 创建一个文件 apple.txt,然后将其所有者修改成 tom
组的创建
基本指令:
groupadd 组名
应用实例:
- 创建一个组,monster
- 创建一个用户 fox,并放入到 monster 组中
文件/目录的所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。
查看文件/目录的所在组
基本指令:
ls -ahl
应用实例:
- 使用 fox 创建一个文件,看看该文件属于哪个组?
修改文件所在的组
基本指令:
chgrp 组名 文件名
应用实例:
- 使用 root 用户创建文件 orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到 fruit 组。
其他组
除文件的所有者和所在组的用户外,系统的其他用户都是该文件的其它组。
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用 root 的管理权限可以改变某个用户所在的组。
改变用户所在的组
usermod -g 新组名 用户名
usermod -d 目录名 用户名 (功能描述:改变该用户登录的初始目录,特别说明:用户需要有进入新目录的权限)
应用实例:
将 zwj 这个用户从原来所在组,修改到 wudang 组。
权限的基本介绍
ls -l
显示的内容如下:
-rw-r--r--(第一列) 1 root root 0 Oct 22 11:08 pig.txt
第一列的 0-9 位说明:
- 第 0 位确定文件类型(d、-、l、c、b)
- l 是链接,相当于Windows的快捷方式
- d是目录,相当于Windows的文件夹
- c是
字符设备
文件,比如鼠标、键盘 - b是块设备,比如硬盘
- -是普通文件
- 第 1-3 位确定所有者(该文件的所有者)拥有该文件的权限 —User
- 第 4-6 位确定所属组(同用户组的)拥有该文件的权限 —Group
- 第 7-9 位确定其他用户拥有该文件的权限 —Other
rwx 权限详解(难点)
rwx 作用到文件
- 【r】代表可读(read):可以读取、查看
- 【w】代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
- 【x】代表可执行(execute):可以被执行
rwx 作用到目录
- 【r】代表可读(read):可以读取,ls查看目录内容
- 【w】代表可写(write):可以修改,对目录内创建文件、删除文件、重命名文件
- 【x】代表可执行(execute):可以进入该目录
文件及目录权限实际案例
ls -l
显示的内容如下:
10个字符 所有者 所在组
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
10个字符确定不同用户能对文件干什么
- 第一个字符代表文件类型:(d、-、l、c、b)
- 其余字符每三个一组(rwx)读(r)写(w)执行(x)
- 第一组
rwx
:文件拥有者的权限是读、写和执行 - 第二组
rw-
:与文件拥有者同一组的用户的权限是读、写但不能执行 - 第三组
r--
:不与文件拥有者同组的其他用户的权限是只能读,不能写和执行
可用数字表示为:r=4、w=2、x=1,因此
rwx = 4+2+1 = 7
其他说明
1 如果是文件:表示硬件连接数,如果是目录:表示子目录数+文件数
root 文件所有者
root 文件所在组
1213 文件大小(字节),如果是文件夹则显示4096字节
Feb 2 09:39 最后修改日期
abc 文件名
修改权限 - chmod
基本说明:通过 chmod
指令,可以修改文件或目录的权限。
第一种方式:+ 、- 、= 变更权限
u:所有者
g:所在组
o:其他用户
a:所有人(u、g、o的总和)
-
chmod u=rwx,g=rx,o=x
文件/目录名 -
chmod o+w
文件/目录名 -
chmod a-x
文件/目录名
应用实例:
- 给abc文件的所有者赋予读写和执行的权限,给所在组赋予读和执行的权限,给其他组赋予读和执行的权限
chmod u=rwx,g=rx,o=rx abc
- 给abc文件的所有者除去执行的权限,赋予所在组写的权限
chmod u-x,g+w abc
- 给abc文件的所有用户赋予读的权限
chmod a+r abc
第二种方式:通过数字变更权限
r=4、w=2、x=1,rwx=4+2+1
chmod u=rwx,g=rx,o=x 文件/目录名
相当于 chmod 751 文件/目录名
应用实例:
将 /home/abc.txt
文件的权限修改成 rwxr-xr-x
,使用数字的方式实现
修改文件的所有者 - chown
基本介绍
chown newowener 文件/目录 改变所有者
chown newonwner:newgroup 文件/目录 改变所有者和所在组
-R 如果是目录,则使其下所有子文件或目录递归生效(recursion)
应用实例:
- 请将 /home/abc.txt 文件的所有者修改成 tom
- 请将 /home/kkk 目录下所有的文件和目录的所有者都修改成 tom
修改文件/目录的所在组 - chgrp
基本介绍:
chgrp newgroup 文件/目录 (功能描述:改变所在组)
应用实例:
- 请将 /home/abc.txt 文件的所在组修改成 shaolin(少林)
- 请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 shaolin(少林)