Linux学习
Linux学习
ZHY该笔记为学习时的记录,也许会超~级长
一 Linux和Unix关系
二 云服务器安装图形化桌面
基于性能及通用性等因素的考虑,默认不安装图形化桌面组件。若您需要为Linux实例安装图形化界面,可参考本文进行操作。
2.1 操作前准备
请在安装之前,为服务器实例创建快照,做好数据备份,请参见创建一个云盘快照。
安装图形化桌面会降低服务器的性能,若安装不当,则会导致操作系统无法正常启动。
2.2 CentOS 7
此处以安装MATE桌面环境为例
依次执行以下命令,安装MATE桌面环境。
yum groups install "X Window System" |
安装时间要挺久的,估计是看服务器端的网速
执行以下命令,设置默认使用图形化桌面环境启动实例。
systemctl set-default graphical.target |
执行以下命令重启服务器
reboot |
三 网络连接的三种模式
桥接模式
虚拟系统可以和外部系统通讯,但是容易造成ip冲突,同一网段只有最多255个地址.
NAT模式
网络地址转换模式,虚拟系统可以和外部通讯,不造成ip冲突
主机模式
独立系统
四 Linux目录结构
4.1 基本介绍
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录”/“,然后在此目录下再创建其他的目录。
树状目录
在Linux世界里,一切皆文件
4.2 具体目录结构
/bin
[常用] (/usr/bin
、/usr/local/bin
)是Binary的缩写,这个目录存放着最经常使用的命令;/sbin
(/usr/sbin
、/usr/local/sbin
)s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。/home
[常用]存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名/root
[常用]该目录为系统管理员,也称作超级权限者的用户主目录/lib
系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件/etc
[常用]所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库 my.conf
/usr
[常用]这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windowsT的program files目录
/boot
[常用]存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/proc
[不能动]这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
/srv service
[不能动]缩写,该目录存放一些服务启动之后需要提取的数据
/sys
[不能动]这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs
/tmp
这个目录是用来存放一些临时文件的
/dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储
/media
[常用] linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下/mnt
[常用]系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上然后进入该目录就可以查看里的内容了。 d:/myshare/opt
这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。默认为空/usr/local
[常用]这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
/var
[常用]这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
/selinux
[security-enhanced linux]SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置
五 Linux 系统内置 vi文本编辑器
Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
5.1 常用三种模式
正常模式
以vim打开一个文档自动进入默认模式,可以进行[上下左右]移动光标,可以[删除字符]或[删除整行],可以使用复制粘贴处理数据。
插入模式
按下i,I,o,O,a,A,r,R等任何字母进入编辑模式,一般来说按i即可。
命令行模式
这个模式中,可以提供相关指令,完成读取、存盘、替换、离开vim、限时行号等动作。
5.2 拷贝和粘贴
正常模式下输入yy
复制,输入p
粘贴,复制5行:5yy
删除当前行dd
,删除当前行向下的5行5dd
撤销u
反撤销ctrl+R
5.3 查找
在文件中查找某个单词:
命令行下/关键字
,回车查找,输入n
就是查找下一个
取消查找
直接输入:nohl
取消高亮
忘了怎么取消(偷个懒,真不是记不住单词),直接输入一个查找不存的就行了
设置行号
开启::set nu
关闭:set nonu
定位
gg
首行
G
最后一行
定位到第十行10 shift g
六 开机、重启
-h
->halt
:停止
-r
->reboot
:重启
默认是输入-h
shutdown -h now #立即进行关机 |
七 用户相关
7.1 默认目录
创建新用户
useradd [用户名]
默认用户家目录在**/home**
例:创建用户aaa
useradd -m aaa
,
-m
:自动建立用户的登录目录[默认]
创建用户且加入已有组
useradd -g [用户组名] [用户名]
例:创建用户user1,指定组g1
useradd -g g1 user1
7.2 自定义目录
创建新用户
useradd -d [指定目录] [用户名]
,给新创建的用户指定家目录
例:创建用户newus,指定目录/home/newuser
useradd -d /home/newuser newus
创建用户且加入已有用户组
如果创建用户未指定组,那么自己默认一个组
useradd -g [用户组名] -d [指定目录] [用户名]
例:创建user3,指定组g1,指定目录/home/3user
useradd -g g1 -d /home/3user user3
7.3 修改密码
passwd [用户名]
如果未写用户名
则修改当前用户的密码
7.4 登录
登录时尽量少用root账号,避免操作失误,系统管理员账号权限太大。
切换用户
普通用户登录后再用su - 用户名
命令来切换身份。
权限高
切换到权限低
的用户不需要密码.
注销用户
快捷键ctrl+d
logout
:注销用户[只在运行级别3的情况下有效]
7.5 删除用户
首先切换到root系统管理员
一般情况下建议保留目录
删除用户,但保留家目录
userdel [用户名]
例:删除用户aaa保留家目录
删除了用户aaa,目录还在
删除用户,但不保留家目录
userdel -r [用户名]
例:删除用户newus和家目录
删除了用户newus,包括他的自定义用户名newuser
7.6 查询用户
查询指定用户
id [用户名]
,或者id [uid]
例:查询id:root
id root
id 1001
查询当前用户
whoami
who am i
7.7 用户组
介绍
类似于角色,系统可以对有共性/权限的多个用户
进行统一的管理
新增组
如果创建用户未指定组,那么自己默认一个组
groupadd [组名]
新增用户加入该组
``useradd -g [用户组名] [用户名]`
例:新增user1,加入组g1
useradd -g g1 user1
`
修改用户的组
usermod -g [用户组] [用户名]
例:将user3切换到组g2
首先查看user3所在组:g1
切换组指令:usermod -g g2 user3
查看user3 已切换g2
组
7.8 用户和组相关文件
/etc/passwd
文件
用户(user)的配置文件,记录用户的各种信息
每行含义:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow
文件
口令的配置文件
每行的含义:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group
文件
组的配置文件,记录Linux包含的组的信息
每行含义:
组名:口令:组织标号:组内用户列表
八 指定运行级别
8.1 运行级别说明
0 : 关机
1 : 单用户[找回丢失密码]
2 : 多用户状态没有网络服务
3 : 多用户状态有网络服务
4 : 系统未使用保留给用户
5 : 图形界面
6: 系统重启
常用运行级别是3和5,也可以指定默认运行级别
8.2 切换运行级别
init [0123456] 应用案例
8.3 默认运行级别
CentOS7后运行级别说明
在centos7以前,/etc/inittab文件中进行了简化
multi-user.target
: analogous to runlevel 3 #表示级别3
graphical.target
: analogous to runlevel 5 #表示级别5
如下图所示,默认是级别5,图形界面
设置默认运行级别
例:将级别5改为3,多用户状态有网络服务:
systemctl set-default multi-user.target
重启之后服务器界面登录变成命令行
九 帮助指令
man 获得帮助信息
基本语法 : man [命令或配置文件]
功能描述 : 获得帮助信息
案例:man ls
help指令
基本语法 :help
功能描述 : 获得shell内置命令的帮助信息
十 文件目录类指令
pwd指令
语法:pwd
功能描述: 显示当前工作目录的绝对路径
应用实例: 案例:显示当前工作目录的绝对路径
ls指令
语法:ls [选项] [目录或是文件]
常用选项:
- -a:显示当前目录所有的文件和目录,包括隐藏的
- -l:以列表的方式显示信息|ls -l可简写成ll
例:ls -la
,列表展示,且包括隐藏文件,顺序不影响ls -al
也行
ls拓展
ls -l
可以简写成ll
ls -lh
可以人性化显示单位
cd指令
语法:cd [参数]
功能描述 : 切换到指定目录
cd ~
或者cd
:回到自己的家目录
cd ..
:回到当前目录的上一级目录
例:
使用绝对路径切换到root目录
cd /root
使用相对路径到/root 目录
一直使用
cd ../..
往上一级退,直到/root表示回到当前目录的上一级目录
cd ..
回到家目录
cd
或者cd ~
mkdir指令
mkdir指令用于创建目录
语法: mkdir [选项] [目录]
常用选项
-p
: 创建多级目录
例:
案例1:创建一个目录 /home/dog
mkdir /home/dog
案例2:创建多级目录 /home/animal/tiger
mkdir -p /home/animal/tiger
rmdir指令
rmdir指令删除空目录,如果目录下有内容时无法删除的
**[谨慎]**如果需要删除非空目录,需要使用 rm -rf
要删除的目录.
语法:rmdir [选项] [目录]
例:
1、删除一个目录 /home/dog
rmdir dog
2、删除animal[谨慎]
rm -rf animal/
touch指令
touch指令创建空文件
语法:touch [文件名称]
例:
创建一个空文件 hello.txt
touch hello.txt
cp指令
cp 指令拷贝文件到指定目录
语法:cp [选项] source dest
常用选项
-r
:递归复制整个文件夹
例:
1、将home/hello.txt复制到home/cp文件夹下
cp hello.txt /cp
2、将cpp文件夹整个复制到/opt/cp2
cp -r /home/cpp /opt/cp2
复制过来是包括了文件夹
强制不提示覆盖的方法[反斜杠]
\cp -r /home/cpp /opt/cp2
rm指令
说明:rm指令移除文件或目录
强制删除不提示的方法: 带上 -f
参数即可
语法:
rm [选项] [文件/目录]
要删除的文件或目录
常用选项:
-r
:递归删除整个文件夹
-f
:强制删除不提示
例:
1、删除cpp文件夹以及其下三个文件
rm -rf cpp
2、删除a.txt
rm a.txt
mv指令
mv 移动文件与目录或重命名
语法
mv oldNameFile newNameFile
功能描述:重命名
mv /temp/movefile /targetFolder
功能描述:移动文件
例:
1、将home下的a.txt文件移到/opt
mv a.txt /opt/
2、将a.txt改名为b.txt
mv a.txt b.txt
3、将opt/b.txt移动到/home且重命名为aa.txt
mv opt/b.txt /home/aa.txt
4、移动目录/opt/abc
mv /opt/abc /home/
cat指令
cat 查看文件内容,和vim不同的是cat只能查看文件不可以修改
语法
cat [选项] [要查看的文件]
常用选项
-n
:显示行号
例:
查看/etc/profile文件,且显示行号
cat -n /etc/profile
一般带上管道命令|more
cat -n /etc/profile |more
more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明
语法
more [要查看的文件]
操作说明:
操作 | 功能说明 |
---|---|
空格键(Space) | 下翻一页 |
回车键(Enter) | 下翻一行 |
q | 立刻离开more,不再显示该文件内容 |
Ctrl+F | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行号 |
:f | 输出文件名和当前行号 |
例:
采用more查看文件/etc/profile
more /etc/profile
less指令
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
语法
less [要查看的文件]
操作说明
操作 | 功能说明 |
---|---|
空白键 | 向下翻一页 |
[pagedown] | 向下翻一页 |
[pageup] | 向上翻一页 |
/字串 | 向下搜寻[字串]的功能;n:向下查找;N:向上查找; |
?字串 | 向上搜寻[字串]的功能;n:向上查找;N:向下查找; |
q | 离开less这个程序; |
应用实例
例: 采用less查看一个大文件文件/opt/杂文.txt
less guimi.txt
echo指令
echo输出内容到控制台
语法
echo [选项] [输出内容]
例:
案例1: 使用echo 指令输出环境变量
echo $PATH
,echo $HOSTNAME
案例2: 使用echo 指令输出 hello,world!
echo "hello,world!"
echo输入内容到文件
语法
echo [内容] >> [文件]
例:
将内容”..啊啊啊啊..”附加到mydata.txt中| >
覆盖 >>
附加
echo "...啊啊啊啊.." >> mydata.txt
head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
语法:
head [文件]
(查看文件头10行内容)
head -n 5 文件
(查看文件头5行内容,5可以是任意行数)
例:
查看/etc/profile前五行代码
head -n 5 /etc/profile
tail指令
tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容
语法
1.tail 文件
(查看文件尾10行内容)
2.tail -n 5文件
(查看文件尾5行内容5可以是任意行数)
3.tail -f 文件
(实时追踪该文档的所有更新)
例
案例1: 查看/etc/profile 最后5行的代码
tail -n 5 /etc/profile
案例2: 实时监控 mydate.txt,看看到文件有变化时,是否看到,实时的追加hello
tail -f mydata.txt
>
指令和>>
指令
>
:输出重定向
>>
:追加
语法:
ls -l >文件
功能描述:列表的内容写入文件a.txt中(覆盖写)
ls -al >>文件
功能描述:列表的内容追加到文件aa.txt的末尾
cat 文件1 > 文件2
功能描述:将文件1的内容覆盖到文件2
echo "内容">> 文件
例:
案例1: 将/home目录下的文件列表写入到/home/info.txt中
ls -l /home > /home/info.txt
(如果info.txt不存在,则会创建)
案例2: 将当前日历信息追加
到/home/mycal文件中
cal >> /home/mycal
ln指令
软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径.
当我们使用pwd指令
查看目录时,仍然看到的是软链接
所在目录
语法:
ln -s [源文件目录] [目标目录]
功能描述:给原文件创建一个软链接
例:
案例1: 在/home 目录下创建一个软连接 myroot,连接到 /root 目录
ln -s /root/ /home/myroot/
案例2: 删除软连接 myroot
rm myroot
history指令
查看已经执行过历史命令,也可以执行历史指令
语法:
history
功能描述: 查看已经执行过历史命令
例:
案例1: 显示所有的历史命令
history
案例2: 显示最近使用过的10个指令
history 10
案例3 : 执行
历史编号为5的指令
!5
十一 时间日期类指令
date指令
显示当前日期
语法
date
功能描述:显示当前时间
date +%Y
功能描述:显示当前年份
date +%m
功能描述:显示当前月份
date +%d
功能描述: 显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S”
功能描述:显示年月日时分秒
例
案例1: 显示当前时间信息
date
案例2: 显示当前时间年月日
date "+%Y.%m.%d"
案例3: 显示当前时间年月日时分秒
date "+%Y-%m-%d %H:%M:%S"
设置日期
语法
date -s 字符串时间
例:
案例1: 设置系统当前时间 ,比如设置成 2021-11-11 11:22:22
date -s "2021-11-11 11:22:22"
,必须用-
连接
还原日期:hwclock -s
cal指令
查看日历指令
语法
cal [选项]
功能描述:不加选项,显示本月日历
例:
案例1:显示当前日历案例
cal
案例2:显示2020年日历
cal 2020
十二 搜索查找类指令
find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
语法
find [搜索范围] [选项]
选项 | 功能 |
---|---|
-name<查询方式> | 按照指定的文件名查找模式查找文件 |
-user<用户名> | 查找属于指定用户名所有文件 |
-size<文件大小(K,M,G)> | 按照指定的文件大小查找文件 |
例:
案例1: 按文件名 : 根据名称查找/home 目录下的info.txt文件
find /home -name info.txt
案例2 : 按拥有者 : 查找/opt目录下,用户名称为 root的文件
find /opt -user root
案例3 : 查找整个linux系统下大于200M的文件( +n 大于 -n小于 n等于)
find / -size +200M
locate指令
locate指令可以快速定位文件路径。
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。
Locate指令无需遍历整个文件系统,查询速度较快。
为了保证查询结果的准确度,管理员必须定期更新locate时刻
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令
创建locate数据库
语法
locate 搜索文件
例:
请使用locate 指令快速定位 mydata.txt 文件所在目录
updatedb
locate mydata.txt
如果删除或者添加了文件记得及时updatedb
which指令
查看某个指令在哪个目录下
语法
which [指令]
例:
查看ls指令在哪个目录
which ls
grep指令和管道符号|
grep过滤查找,管道符,”|”,表示将前一个命令的处理结果输出传递给后面的命令处理
语法
grep [选项] 查找内容 源文件
常用选项
选项 | 功能 |
---|---|
-n | 显示匹配行及行号。 |
-i | 忽略字母大小写 |
例:
请在 /home/info.txt 文件中,查找“hello”所在行,并且显示行号
写法1:cat home/info.txt |grep -n "hello"
写法2: grep -n "hello" home/info.txt
十三 压缩和解压类指令
gzip/gunzip 指令
gzip 用于压缩文件,gunzip 用于解压的
语法
gzip 文件
功能描述:压缩文件,只能将文件压缩为.gz文件
gunzip 文件.gz
功能描述:解压缩文件命令
例:
案例1: gzip压缩,将 /home下的 info.txt文件进行压缩
gzip /home/info.txt
案例2: gunzip压缩,将 /home下的 info.txt.gz 文件进行解压缩
gunzip /home/info.txt
zip/unzip 指令
zip
用于压缩文件,unzip
用于解压的,这个在项目打包发布中很有用的
语法
zip [选项] XXX.zip [将要压缩的内容]
功能描述:压缩文件和目录的命
unzip[选项] XXX.zip
功能描述:解压缩文件
zip常用选项
-r
:递归压缩,即压缩目录
unzip的常用选项
-d <目录>
:指定解压后文件的存放目录
例
案例1: 将 /home下的所有文件,包含文件夹本身进行压缩成 myhome.zip
zip -r myhome.zip /home/
案例2: 将 myhome.zip 解压到 /opt/tmp 目录下
unzip -d /opt/tmp /home/myhome.zip
tar指令
tar指令是打包指令,最后打包后的文件是.tar.gz
的文件
语法
tar [选项] xxx.tar.gz 打包的内容
功能描述:打包目录,压缩后的文件格式.tar.gz
打包操作
tar [选项] [源文件或目录]
选项 | 功能 |
---|---|
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-u | 在tar包中添加新的文件(无法直接在压缩包中添加文件) |
解包操作
tar [选项] [压缩包]
选项 | 功能 |
---|---|
-x | 解包操作 |
-f | 解包到指定文件,f后面要紧跟完整的文件名 |
-C<目录> | 指定目录为解包位置 |
-t | 查看包里的文件 |
压缩和解压
Linux下的压缩需要先将文件打包再进行压缩,而解压缩则是先将压缩文件解压缩成一个包
选项 | 含义 |
---|---|
-z | 压缩为”.tar.gz”格式,或对.gz压缩包进行解压缩 |
-j | 压缩为”.tar.bz2”格式,或对.bz2压缩包进行解压缩 |
例:
案例1: 压缩多个文件,将/home/info.txt 和 /home/mydata.txt 压缩成 pc.tar.gz
tar -zcvf pc.tar.gz /home/info.txt /home/mydata.txt
案例2: 将/home 的文件夹 压缩成 myhome.tar.gz
tar -zcvf myhome.tar.gz /home
案例3: 将 pc.tar.gz 解压到当前目录,切换到 /opt/
tar -zxvf pc.tar.gz
案例4: 将myhome.tar.gz 解压到 /opt/tmp2目录下
tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
十四 组管理和权限管理
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念
所有者
所在组
其它组
改变用户所在的组
14.1 文件/目录 所有者
一般为文件的创建者,谁创建了该文件,就自然的成为该文件的所有者
查看文件的所有者
指令:ls -ahl
= ll -h
a: 所有文件和目录,包括隐藏;
h: 以人类可读方式显示文件大小;
l: 以列表形式显示文件和目录的详细信息;
例:
修改文件所有者
指令:chown [用户名] [文件名]
例:使用root创建一个文件aroot.txt,然后将其所有者修改成user3
chown user3 aroot.txt
14.2 组的创建
如果创建用户未指定组,那么自己默认一个组
groupadd [组名]
例:
创建一个组,monster,
创建一个用户 user4,并放入到 monster组中
groupadd monster
useradd -g monster user4
14.3 文件/目录 所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组
查看文件/目录所在组
指令:ls -ahl
例:
使用user4创建文件,看看该文件属于哪个组?
-rw-r–r– 1 user4 monster
0 3月 19 18:03 ok.txt
修改文件所在组
指令:
chgrp [组名] [文件名]
例:
使用root用户创建文件orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到fruit组
[root@hecs-66912 ~]# touch orange.txt |
可以看到组名从root
转为fruit
14.4 其他组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组
指令:
usermod -g [新组名] [用户名]
usermod -d [目录名] [用户名] [改变该用户登陆的初始目录]
**注:**用户需要有进入到新目录的权限
例:
将 user4 这个用户从原来所在组,修改到 g1 组
usermod -g g1 user4
十五 权限的基本介绍
15.1 第一列0-9位说明
第0位确定文件类型(d,-,l,c,b)
- -是文件
- l是链接,相当于windows的快捷方式;
- d是目录,相当于windows的文件夹;
- c是字符设备文件:鼠标,键盘;
- b是块设备,比如硬盘;
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
- 比如上图user3,该用户对该文件拥有的权限是
rwx
:读,写,可被执行
- 比如上图user3,该用户对该文件拥有的权限是
第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group
- 同样以user3举例,该用户的组权限是
---
,说明组员对该文件没有rwx权限
- 同样以user3举例,该用户的组权限是
第7-9位确定其他用户拥有该文件的权限 —Other
---
其他组用户对该文件,没有权限
rwx权限详解
- rwx作用到文件
[r]代表可读(read): 可以读取,查看
[w]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。
[x]代表可执行(execute):可以被执行
- rwx作用到目录
[r]代表可读(read): 可以读取,ls查看目录内容
[w]代表可写(write): 可以修改,对目录内创建+删除+重命名目录
[x]代表可执行(execute):可以进入该目录
15.2 文件及目录权限实际案例
ls -l 中显示的内容如下:
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
第一列10个字符确定不同用户能对文件干什么?
0:
-
1-3:
rwx
代表用户root 对于文件abc可读,可修改,可执行4-6:
rw-
代表root组 对于目录abc可读,可修改删除重命名,不可进入目录7-9:
r--
其他用户对该目录只有读取权限
可以用数字表示:r=4,w=2,x=1因此 rwx=4+2+1=7;
第二列的
1
什么意思?如果不是1,则代表子目录数量(包括隐藏文件)
如果是1,则表示这是个当前目录的文件
第一个
root
,代表用户第二个
root
,代表所在组1213
代表1213字节,占用空间Feb 2 09:39
时间日期abc
文件/目录名
15.3 修改权限-chmod
通过chmod指令,可以修改文件或者目录的权限
方式一
字母法:chmod [u/g/o/a] [+/-/=] [rwx] [文件]
例如:chmod u + r
(给u增加可读权限)
[u/g/o/a] | 含义 |
---|---|
u | user 表示该文件的所有者 |
g | group 表示与该文件的所有者属于同一组(group)者,即用户组 |
o | other 表示其他以外的人 |
a | all 表示这三者皆是 |
[+-=] | 含义 |
---|---|
+ | 增加权限 |
- | 撤销权限 |
= | 设定权限 |
chmod u=rwx,g=rx,o=x [文件/目录名]
chmod o+w [文件/目录名]
chmod a-x [文件/目录名]
例:
给adc文件的所有者读 写 执行的权限,给所在组 读 执行 权限,给其它组 读 执行 权限
chmod u=rwx,g=rx,o=rx adc
给adc文件的所有者除去执行的权限,增加组写的权限
chmod u-x,g+w adc
给adc文件的所有用户添加读的权限
chmod a+r adc
效果:
-rw-r--r-- 1 root root 0 3月 21 01:46 adc |
方式二
数字法:chmod [rwx] [文件]
(rwx用数字代替)
例如:chmod 754 文件
r | 读取权限,数字代号为 “4” |
---|---|
w | 写入权限,数字代号为 “2” |
x | 执行权限,数字代号为 “1” |
- | 不具任何权限,数字代号为 “0” |
通常我们以 Vim 编辑 Shell 文件批处理文件后,文件权限通常是 rw-rw-r--
(644),那么,如果要将该文件变成可执行文件,并且不让其他人修改此文件,则只需将此文件的权限该为 rwxr-xr-x
(755)即可。
r=4 w=2 x=1
rwx=4+2+1=7
chmod u=rwx,g=rx,o=x
文件目录名
相当于chmod 751
文件目录名
例:
将/home/abc.txt 文件的权限修改成rwxr-xr-x,使用给数字的方式实现
-rw-r--r-- 1 root root 0 3月 21 02:21 abc.txt |
15.4 修改文件所有者
chown
chown [newowner] [文件/目录]
改变所有者
chown [newowner:newgroup] [文件/目录]
改变所有者和所在组
chown -R [newowner] [文件/目录]
如果是目录则使其下所有子文件或目录递归生效
例:
请将/home/abc.txt 文件的所有者修改成 user4
[root@hecs-66912 home]# chown user4 abc.txt |
请将 /home/kkk 目录下所有的文件和目录的所有者都修改成user4
[root@hecs-66912 kkk]# ll |
15.5 修改文件/目录所在组
chgrp改变所在组
chgrp [newgroup] [文件/目录]
例:
请将 /home/abc .txt 文件的所在组修改成 g2
[root@hecs-66912 home]# ll |
请将 /home/kkk 目录下所有的文件和目录的所在组都修改成 g1
[root@hecs-66912 home]# chgrp g1 /home/kkk/ |
目录下文件更改失败了,因为没加-R
,
[root@hecs-66912 home]# chgrp -R g1 /home/kkk |
15.6 权限管理应用实例
警察和土匪游戏
警察 | 土匪 | |
---|---|---|
组名 | police | bandit |
姓名 | jc1 | tf1 |
姓名 | jc2 | tf2 |
创建组
[root@hecs-66912 home]# groupadd police
[root@hecs-66912 home]# groupadd bandit创建用户
[root@hecs-66912 home]# useradd -g police jc1
[root@hecs-66912 home]# useradd -g police jc2
[root@hecs-66912 home]# useradd -g bandit tf1
[root@hecs-66912 home]# useradd -g bandit tf2jc1创建一个文件,自己可以读写,本组人可以读,其它组没任何权限
切换到jc1,并创建文件
[root@hecs-66912 ~]# su jc1
[jc1@hecs-66912 root]$ cd
[jc1@hecs-66912 ~]$ touch jc1Create
[jc1@hecs-66912 ~]$ ll
总用量 0
-rw-r--r-- 1 jc1 police 0 3月 21 10:54 jc1Create设置权限
[jc1@hecs-66912 ~]$ chmod 640 jc1Create
[jc1@hecs-66912 ~]$ ll
总用量 0
-rw-r----- 1 jc1 police 0 3月 21 10:54 jc1Createjc1修改该文件,让其它组人可以读,本组人可以读写
[jc1@hecs-66912 ~]$ chmod 664 jc1Create
[jc1@hecs-66912 ~]$ ll
总用量 0
-rw-rw-r-- 1 jc1 police 0 3月 21 10:54 jc1Createtf1投靠 警察,看看是否可以读写
首先切换到root,修改tf1所在组
[jc1@hecs-66912 home]$ su root
密码:
[root@hecs-66912 home]# usermod -g police tf1
[root@hecs-66912 home]# ll
drwx------ 3 tf1 police 4096 3月 21 14:35 tf1其次切换到tf1,尝试看是否能读写,
无权限进入jc1文件夹,切换到jc1或者root修改jc1目录权限
[tf1@hecs-66912 home]$ su jc1
密码:
[jc1@hecs-66912 home]$ ll
drwx------ 3 jc1 police 4096 3月 21 14:38 jc1
[jc1@hecs-66912 home]$ chmod g=rwx jc1
[jc1@hecs-66912 home]$ ll
drwxrwx--- 3 jc1 police 4096 3月 21 14:38 jc1再次切换到tf1进入jc1读写操作
[jc1@hecs-66912 home]$ su tf1
密码:
[tf1@hecs-66912 home]$ cd jc1
[tf1@hecs-66912 jc1]$ ll
-rw-rw-r-- 1 jc1 police 0 3月 21 10:54 jc1Create
[tf1@hecs-66912 jc1]$ cat jc1Create
haha
[tf1@hecs-66912 jc1]$ echo "tf1daoci" >> jc1Create
[tf1@hecs-66912 jc1]$ cat jc1Create
haha
tf1daoci写入数据成功
tf2是否能读写?
否
西游四人组
建立两个组( 神仙(sx),妖怪(yg))
[root@hecs-66912 /]#groupadd sx |
建立四个用户(唐僧,悟空,八戒,沙僧),把悟空,八戒放入妖怪,唐僧 沙僧在神仙
[root@hecs-66912 /]# useradd -g yg wukong |
设置密码passwd [用户]
用悟空建立一个文件(monkey.java 该文件要输出iam monkey)
[root@hecs-66912 /]# su wukong |
给八戒一个可以r w 该文件的权限
首先切换用户为root,回到home目录,给予同组对wukong文件夹的rwx权限
[root@hecs-66912 home]# chmod g+rwx wukong |
进入wukong
文件夹 将wukong.java的rw
权限给同组
[root@hecs-66912 wukong]# ll |
八戒修改monkey.java 加入一句话(i am pig)
[bajie@hecs-66912 home]$ cd wukong/ |
唐僧 沙僧 对该文件没有权限
yes
把 沙僧 放入妖怪组
首先切换回root登陆,其次更改沙僧组
[root@hecs-66912 home]# usermod -g yg shasen |
让沙僧 修改 该文件 monkey, 加入一句话(“我是沙僧,我是妖怪!”);
[shasen@hecs-66912 wukong]$ echo "i am shasen,i am in yg" >> monkey.java |
对于目录设置的rwx权限,只针对目录相关操作,比如ls、创建\删除文件、进入目录等操作
十六 crond定时任务调度
crontab
进行 定时任务的设置
概述
任务调度: 是指系统在某个时间执行的特定的命令或程序
任务调度分类 : 1.系统工作 : 有些重要的工作必须周而复始地执行。如病毒扫描等
个别用户工作 : 个别用户可能希望执行某些程序,比如对mysql数据库的备份。
语法:crontab [选项]
常用选项
-e | 编辑crontab定时任务 |
---|---|
-l | 查询crontab任务 |
-r | 删除当前用户所有的crontab任务 |
快速入门
设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab -e
命令
接着输入任务到调度文件
如:*/1**** ls - /etc/ > /tmp/to.txt
意思说每小时的每分钟执行ls -l /etc/ > /tmp/to.txt
命令
参数细节说明
5个占位符的说明
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
特殊符号说明
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思 |
, | 代表不连续的时间。比如“0 8,12,16 * * * [命令]”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
- | 代表连续的时间范围。比如“0 5 * * 1-6[命令]”,代表在周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次。比如“*/10 * * *[命令]”,代表每隔10分钟就执行一遍命令 |
特定时间执行任务案例
时间 | 含义 |
---|---|
45 22 * * * [命令] |
在22点45分执行命令 |
0 17 * * 1 [命令] |
每周一,17点0分执行命令 |
0 5 1,15 * * [命令] |
每月1号和15号凌晨5点0分执行命令 |
40 4 * * 1-5 [命令] |
每周1到周5的凌晨4点40分执行命令 |
*/10 4 * * * [命令] |
每天凌晨4点这一小时内,每隔10分钟执行一次命令 |
0 0 1,15 * 1 [命令] |
每周1,每月的1号和15号的0点0分执行命令; |
注意 | 星期几和几号最好不要同时出现,因为他们定义都是天,很容易让管理员混乱 |
实例操作
crontab -r
:终止任务调度
crontab -l
: 列出当前有那些任务调度
service crond restart [重启任务调度]
案例1 : 每隔1分钟,就将当前的日期信息,追加到 /tmp/mydate 文件中
*/1 * * * * date >> /tmp/mtdate |
案例2 : 每隔1分钟,将当前日期和日历都追加到 /home/mycal 文件中
使用shell脚本,首先在home创建脚本,并且赋予文件执行权限
[root@hecs-66912 home]# vim my.sh |
执行一下脚本试试,新增了mycal文件!
[root@hecs-66912 home]# ./my.sh |
接下来实现题目的需求:
*/1 * * * * /home/my.sh |
案例3: 每天凌晨2:00 将mysql数据库 testdb ,备份到文件中。提示: 指令为mysqldump -u root -p密码 数据库 >> /home/db.bak
简单版,后面会学更详细的
0 2 * * * mysqldump -u root -p[密码] testdb > /home/db.bak
十七 at定时任务
ps -ef
检测当前在运行的进程
ps -ef | grep atd
检测在运行的atd进程
基本介绍
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
- at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
at命令格式
at [选项] [时间]
Ctrl+D
按两次,结束at命令的输入
at命令选项
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I | atq的别名 |
-d | atrm的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q<队列> | 使用指定的队列 |
-f<文件> | 从指定文件读入任务而不是从标准输入读入 |
-t<时间参数> | 以时间参数的形式提交要运行的任务 |
at时间的定义
at指定时间的方法:
- 接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如 :04:00
- 使用midnight (深夜),noon (中午),teatime ( 饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
- 采用12小时计时制,即在时间后面加上AM (上午)或PM(下午)来说明是上午还是下午。 例如:12pm
- 指定命令执行的具体日期,指定格式为month day(月日)或mm/dd/yy ( 月/日/年)或dd.mm.yy(日月.年),指定的日期必须跟在指定时间的后面。 例如 : 04:00 2021-03-1
- 使用相对计时法。指定格式为: now + count time-units ,now就是当前时间,time-units是时间单位5.这里能够是minutes(分钟)、hours (小时)、days(天)、weeks (星期)。count是时间的数量几天,几小时。例如 : now + 5 minutes
- 直接使用today( 今天)、tomorrow( 明天)来指定完成命令的时间。
at定时任务案例
案例1: 2天后的下午5点执行 /bin/ls /home, 按两次ctrl+d退出代码
方便验证,我改成了当天一小时后
[root@hecs-66912 /]# at -m 2pm + 1 hours |
案例2 : atq命令来查看系统中没有执行的工作任务
[root@hecs-66912 /]# atq |
案例3: 明天17点钟,输出时间到指定文件内 比如 /root/date100.log
[root@hecs-66912 /]# at 5pm tomorrow |
案例4 : 2分钟后,输出时间到指定文件内 比如 /root/date200.log
[root@hecs-66912 ~]# at -m now + 2 minutes |
邮件内容:
From root@hecs-66912.localdomain Wed Mar 22 14:20:00 2023 |
案例5: 删除已经设置的任务,atrm 编号
[root@hecs-66912 ~]# atq |
十八 linux磁盘分区、挂载
原理介绍
Linux无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来这时要载入的一个分区将使它的存储空间在一个目录下获得。
硬盘挂载到文件目录
硬盘说明
Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
对于IDE硬盘,驱动器标识符为“hdx~”,
“hd
”表明分区所在设备的类型,这里是指IDE硬盘了。
“x
”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),
“~
“代表分区前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。
例,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
- 对于SCSI硬盘则标识为“sdx~”,SCSI硬盘是用“sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
输入指令lsblk
可查看磁盘,我使用的华为云服务器,磁盘是vda.
[root@hecs-66912 ~]# lsblk |
vdx~和sdx~
的差别
对于物理机和虚拟机有各自磁盘的概念,比如物理机上是真实的磁盘信息,什么叫真实?就是没有进行虚拟化的。
虚拟机上也是要虚拟化磁盘的,对于用户来说就像一台物理机一样。但是既然是虚拟机,那么磁盘可能是虚拟化后的,一般会有固定的名字,
比如经过kvm虚拟化技术虚拟出来的磁盘,名称是vda,vdb等,表示虚拟磁盘。但是也有例外的,见过百度云那边经过kvm虚拟化出来的虚拟机,但是分区名称却叫sdb,而sdb一般是物理机上真实的磁盘分区名称。
一般概念上:vda,vdb叫虚拟磁盘,或者直接说磁盘也行,在linux上的设备文件为/dev/vda
,/dev/vdb。