Linux 目录结构
Linux 中一切皆文件
Linux 目录结构
目录 |
含义 |
/bin |
用来存二进制可执行文件,并且比较特殊的是/bin存放的是所有一般用户都能使用的可执行文件,如:cat、chmod、mv、mkdir、cd等常用指令 |
/sbin |
存放一些只有root用户才有权限执行的可执行文件,如init,ip,mount等命令 |
/boot |
主要存放开机时用到的引导文件,如linux内核文件和开机菜单与开机所有需要的配置文件 |
/dev |
任何设备都以文件的形式存放再这个目录中。例如硬盘、键盘、鼠标、光驱等各种设备文件。只要通过访问该目录的某个文件就相当于访问了对应的设备 |
/etc |
配置文件、启动脚本等(etc)包含所有程序所需的配置文件以及系统的配置文件,如用户的账号密码文件,各个服务的起始文件等。也包含了用于启动/停止单个程序的启动和关闭shell脚本。一般来说,该目录下的文件属性是可以让用户查阅,但只有root管理员有权利修改 |
/home |
系统默认的用户的家目录,每当新建一个用户系统都会在这个目录下创建以该用户名为名称的目录作为该用户的家目录。 |
/lib |
存放着系统开机时所需的函数库以及/bin和/sbin目录下的命令会调用的函数库 |
/lib64 |
存放相对于/lib中支持64位格式的函数库 |
/media |
存放可移除的媒体设备、如光盘,DVD等 |
/mnt |
临时挂载的设备文件,临时安装目录,系统管理员可以挂载文件系统。系统管理员临时安装文件的系统安装点。 |
/opt |
可选的软件包,即第三方文件软件。我们可以将除了系统自带软件之外的其他软件安装到这个目录。 |
/proc |
特殊的动态目录,用以维护系统的信息和状态,包括当前运行中进程(processes)信息。包含系统进程的相关信息,是一个虚拟的文件系统,包含有关正在运行的进程的信息,系统资源以文本信息形式存在。 |
/root |
系统管理员root的主目录 |
/run |
最近一次开机后所产生的各项信息,如当前的用户和正在运行中的守护进程等。 |
/srv |
存放一些服务启动后所需的数据 |
/sys |
与/proc类似也是虚拟文件系统,存放系统核心与硬件相关信息管理设备文件。不占用硬件容量。 |
/tmp |
存放系统运行过程中使用的一些临时文件,可以被所有就用户访问,系统重启时会清空该目录。 |
/usr |
包含绝大部分所有用户(users)都能访问的应用程序和文件包含二进制文件,库文件。文档和二级程序的源代码。 |
/var |
经常变化的(variable)文件,诸如日志或数据库等代表变量文件。在这个目录下可以找到内容可能增长的文件 |
VI/VIM 编辑器
一般模式
以 vim
打开一个文件直接进入一般模式(默认模式),该模式中可以使用 [上下左右] 按键移动光标,可以使用 [删除字符] 或 [删除整行] 来处理文档内容,可以使用 [复制粘贴] 处理数据。
语法 |
功能描述 |
yy |
复制光标当前一行 |
nyy |
复制一段(从第几行到第几行) |
p |
箭头移动到目的行粘贴 |
u |
恢复前一个操作 |
dd |
删除光标当前行 |
ndd |
删除光标(含)后多少行 |
x |
向后删除一个字符,相当于[del] |
X |
向前删除一个字符,相当于[Backspace] |
gg |
移动到页头 |
G |
移动到页尾 |
插入模式
在一般模式中可以进行 删除、复制、粘贴 等的动作,但是却无法编辑文件内容的!要等到你按下 [i, I, o, O, a, A] 等任何一个字母之后才会进入编辑模式。
通常在 Linux 中,按下这些按键时,在画面的左下方会出现 INSERT
或 REPLACE
的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下 [Esc] 这个按键即可退出编辑模式。
进入编辑模式
按钮 |
功能 |
i |
当前光标前 |
a |
当前光标后 |
o |
当前光标行的下一行 |
I |
光标所在行最前 |
A |
光标所在行租后 |
O |
当前光标行的上一行 |
退出编辑模式
按 [ESC] 键退出编辑弄湿,之后所在的模式为一般模式
指令模式
在一般模式当中,输入 : / ?
3个中的任何一个按钮,就可以将光标移动到最底下的一行
命令 |
功能 |
:w |
保存 |
:q |
退出 |
:wq |
保存并退出 |
:q! |
不保存强制退出 |
/要查找的词 |
n查找下一个,N往上查找 |
:noh |
取消高亮显示 |
:set nu |
显示行号 |
:set nonu |
关闭显示行号 |
:s /old/new |
替换当前行匹配到第一个old为new |
:s /lod/new/g |
替换当前行匹配到所有old为new |
:%s/old/new |
替换文档中每一行匹配到的第一个old为new |
:%s/old/new/g |
替换文档中的所有的old为new 比较常用 |
练习
关机&&重启命令
命令 |
说明 |
shutdown -h now |
立刻关机 |
shutdown -h 1 |
1 min 后关机 |
shutdown -r now |
现在重新启动计算机 |
halt |
关机 |
reboot |
现在重新启动计算机 |
sync |
把内存的数据同步到磁盘 |
注意细节
- 不管重启系统还是关闭系统,首先运行
sync
命令,把内存中的数据写到磁盘中
- 目前的
shutdown/reboot/halt
等命令均已经在关机前进行了 sync
用户登录和注销
- 登录时尽量少用
root
账号(系统管理员,权限最大)登录,避免操作失误
- 普通用户登录,登录后使用
su - 用户名
命令切换成管理员省份
- 在提示符下输入
logout
即可注销登录(用户状态切到 root 下使用 logout
从 root 状态切回用户状态)
注意细节
- logout 注销指令在图形运行级别无效
- 在运行级别 3 下有效
用户管理
添加用户
- 当创建用户成功后,会自动的创建和用户同名的家目录
- 也可以通过
useradd -d
指定目录新的用户名,给新创建的用户指定家目录
指定/修改密码
删除用户
1.删除用户milan
,但是保留家目录;
2.删除用户以及用户主目录
查询用户信息指令
切换用户
如果当前用户的权限不够,通过 su -
指令,切换高权限用户
创建一个用户 jack
,指定密码,然后切换到 jack
1 2 3 4
| su - root useradd jack passwd jack su - jack
|
- 从高权限的用户切换到低权限的用户,不需要输入密码,反之需要
- 当需要返回到原来用户时,使用
exit/logout
指令
查看当前用户/登录用户
用户组
类似于角色,系统可以对有共性/权限的多个用户进行统一的管理
新增组
删除组
增加用户时直接加上组
修改用户的组
用户和组相关文件
文件 |
说明 |
每行含义 |
/etc/password |
用户(user)的配置文件,记录用户的各种信息 |
用户名:口令:用户识别号:组标识号:注释性描述:主目录:登录Shell |
/etc/shadow |
口令的配置文件 |
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志 |
/etc/group |
组(group)的配置文件,记录Linux包含的组的信息 |
组名:口令:组标识号:组内用户列表 |
运行级别
运行级别说明
运行级别 |
说明 |
0 |
系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 |
1 |
单用户工作状态,root权限,用于系统维护,禁止远程登录 |
2 |
多用户状态(没有NFS),不支持网络 |
3 |
安全的多用户状态(有NFS),登录后进入控制台命令行模式 |
4 |
系统未使用,保留 |
5 |
X11控制台,登陆后进入图形GUI模式 |
6 |
系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动 |
CentOS 7 的运行级别简化为:
在 /etc/inittab
文件中,进行了简化
运行级别 |
说明 |
multi-user.target |
等价于原运行级别3(多用户有网,无图形界面) |
graphical.target |
等价于原运行级别5(多用户有网,有图形界面) |
查看当前运行级别:
1 2 3
| systemctl get-default
vim /etc/inittab
|
修改当前运行级别:
1 2
| system set-default TARGET.target
|
找回密码
如何找回root密码
1.首先,启动系统,进入开机界面,在界面中按 e
进入编辑界面
2.进入编辑界面,使用键盘上的上下键把光标往下移动,找到以 Linux16
开头内容所在的行数,在行的最后面输入: init=/bin/sh
3.接着,输入完成后,直接按快捷键:Ctrl+X
进入 单用户模式
4.接着,在光标闪烁的位置中输入 mount -o remount,rw /
(注意:各单词间有空格),完成后按回车键(Enter)
5.在新的一行最后面输入:passwd
,完成后按键盘的回车键(Enter),输入密码,然后再次确认密码即可,密码修改成功后,会显示passwd…的样式,说明密码修改成功
6.接着,在鼠标闪烁的位置中(最后一行)输入:touch / autorelabel
*(注意:touch
与/
后面有一个空格),完成后按键盘的回车键(Enter)
7.继续在光标闪烁的位置中,输入exec /sbin/init
(注意:exec
与/
后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码,完成后,系统自动重启,新的密码即可生效。
帮助指令
man
在Linux下隐藏文件是以.
开头
信息 |
功能 |
NAME |
命令的名称和单行描述 |
SYNOPSIS |
怎样使用命令 |
DESCRIPTION |
命令功能的深入讨论 |
EXAMPLES |
怎样使用命令的例子 |
SEE ALSO |
相关主题(通常是手册页) |
help
基本语法
help 命令 获得 shell 内置命令的帮助信息
案例实操
查看 cd 命令的帮助信息 help cd
常用快捷键
常用快捷键 |
功能 |
ctrl + c |
停止进程 |
ctrl + l |
清屏,等同于clear;彻底清屏是: reset |
tab |
提示(更重要的是可以防止敲错) |
上下键 |
查找执行过的命令 |
文件目录指令
pwd
ls
指令 |
说明 |
ls [选项] [文件或目录] |
列出目录内容 |
选项 |
功能 |
-a |
全部的文件,连同隐藏文档(开头为.的文件) 一起 |
-l |
长数据串列出,包含文件的属性与权限等等数据(常用)等价于“ll” |
显示说明
每行列出的信息依次是:文件类型与权限 链接户 文件属性 文件大小用byte来标识 建立或最近修改的时间 名字
cd
参数 |
功能 |
cd 绝对路径 |
切换路径 |
cd 相对路径 |
切换路径 |
cd ~ 或 cd |
回到自己的家目录 |
cd - |
回到上一次所在目录 |
cd .. |
回到当前目录的上一级目录 |
cd -P |
跳转到实际物理路径,而非快捷方式路径 |
1 2 3 4 5 6 7 8
| cd /root
cd ../../root
cd ..
cd ~
|
mkdir
指令 |
说明 |
mkdir [选项] 要创建的目录 # 默认创建一级目录 |
创建目录 |
1 2 3 4 5 6
| mkdir a mkdir /home/dog
mkdir a a/b a/b/c mkdir -p a/b/c
|
rmdir
指令 |
说明 |
rmdir [选项] 要删除的空目录 |
指定删除空目录 |
rmdir
删除的是空目录,如果目录下有内容是无法删除的
- 如果需要删除非空目录,使用
rm -rf
要删除的目录
touch
cp
指令 |
说明 |
cp [选项] source dest |
拷贝文件到指定目录 |
细节
强制覆盖不提示的方法: \cp
1.将 /home/hello.txt
拷贝到 /home/bbb
目录下
1 2 3
| mkdir bbb cp hello.txt bbb/ cd bbb/
|
2.递归复制整个文件夹,如将 /home/bbb
整个目录,拷贝到 /opt
rm
指令 |
说明 |
rm [选项] 要删除的文件或目录 |
移除文件或目录 |
选项 |
功能 |
-r |
递归删除目录中所有内容 |
-f |
强制执行删除操作,而不提示,用于进行确认 |
-v |
显示指令的详细执行过程 |
1 2 3 4 5 6 7 8
| rm test.txt
rm -r /home/bbb
rm -f dir
rm -rf /home/bbb
|
mv
指令 |
说明 |
mv oldNameFile newNameFile |
重命名 |
mv /tmp/moveFile /targerFolder |
移动文件 |
1.将 /home/cat.txt 文件重命名为 pig.txt
2.将 /home/pig.txt 文件移动到 /root 目录下
3.移动整个目录,将 /opt/bbb 移动到 /home 下
1 2 3
| cd /home/ cd /opt/ mv bbb/ /home/
|
cat
指令 |
说明 |
cat [选项] 文件名 |
要查看的文件 |
cat
只能浏览文件,不能修改文件,为了浏览方便,一般带上管道命令 |more
1
| cat -n /etc/profile | more
|
more
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容,more指令中内置若干快捷键
操作 |
功能说 |
空白键(space) |
代表向下翻一页 |
Enter |
代表向下翻一行 |
q |
立刻离开 more |
ctrl + F |
向下滚动一屏 |
ctrl + B |
返回上一屏 |
= |
输出当前行的行号 |
:f |
输出文件名和当前行行号 |
less
less
指令在显示文件内容时,不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
指令 |
说明 |
less 文件名 |
分屏显示文件内容 (查看大文件) |
操作 |
功能说明 |
空白键 |
向下翻动一页 |
pagedown |
向下翻动一页 |
pageup |
向上翻动一页 |
/字符串 |
向下搜寻【字符串】的功能:n:向下查找 N:向上查找 |
?字符串 |
向上搜寻【字符串】的功能:n 向上查找 N 向下查找 |
q |
离开less这个程序 |
echo
指令 |
说明 |
echo [选项] [输出内容] |
echo 输出内容到控制台 |
控制字符 |
作业 |
\\ |
输出\本身 |
\n |
换行符 |
\t |
制表符,也就是Tab键 |
1 2 3 4
| eco $HOSTNAME
echo "hello world"
|
head
head 用于显示文件的开头部分内容,默认情况下 head 指令显示文件的前 10 行内容。
指令 |
说明 |
head 文件名 |
查看文件头10行内容 |
head -n 5 文件 |
查看文件头5行内容 |
tail
用于输出文件中尾部的内容,默认情况下 tail
指令显示文件的前10行内容
指令 |
说明 |
tail 文件 |
查看文件尾10行内容 |
tail -n 5 文件 |
查看文件尾5行内容,5可以是任意行数 |
tail -f 文件 |
实时追踪文档的所有更新;按Ctrl + S 可以暂停监听;按Ctrl + Q 可以继续监听 |
1.查看 /etc/profile
最后 5 行代码
2.实时监控 mydate.txt
,看到文件有变化时,是否看到,实时的追加的 hello world
1 2 3
| touch mydate.txt tail -f mydate.txt echo 'hello world' > /home/mydate.txt
|
> 输出重定向 和 >> 追加
1 2 3 4 5 6 7 8 9 10
| ls -l > a.txt
ls -al >> aa.txt
cat 文件 1 > 文件 2
echo “内容” >> 文件
|
1.将 /home
目录下的文件列表写入到 /home/info.txt
中,覆盖写入
1
| ls -l /home > /home/info.txt
|
2.将当前日历信息 追加 到 /home/mycal
文件中
1 2 3 4
| cal cal >> /home/mycal ls cat mycal
|
ln
软链接(link)也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了连接其他文件的路径。当使用 pwd
指令查看目录,看到的是软链接所在目录
指令 |
说明 |
ln -s [原文件或目录] [软链接名] |
给原文件创建一个软链接 |
1.在 /home
目录下创建一个软链接 myroot
,链接到 /root
目录
1
| ln -s /root /home/myroot
|
2.删除软链接 myroot
删除软连接: rm -rf 软连接名
,而不是 rm -rf 软连接名/
。如果使用 rm -rf 软连接/
删除,会把软连接对应的真实目录下内容删掉
history
1.显示所有的历史命令
2.显示最近使用过的10个命令
3.执行历史编号为5的指令
时间日期指令
指令 |
说明 |
date |
显示当前时间 |
date +%Y |
显示当前年份 |
date +%m |
显示当前月份 |
date +%d |
显示当前哪天 |
date "+%Y-%m-%d %H:%M:%S" |
显示年月日时分秒 |
date -s 字符串时间 |
设置日期 |
cal [选项] |
查看日历。不加选项,显示本月日历 |
1 2 3 4 5 6 7 8 9 10 11 12 13
| date [option] + [format]
date -s 日期时间
date + "日期时间格式"
date -s "2022-06-19 20:52:22"
cal -3
cal 2023
cal
|
搜索查找指令
find
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端
指令 |
说明 |
find [搜索范围] [选项] |
查找文件或目录 |
选项 |
功能 |
-name 查询方式 |
按照指定文件名查找模式查找文件 |
-user 用户名 |
查找属于指定用户名所有文件 |
-size 文件大小 |
按照指定文件大小查找文件,单位为 b-块 (512字节) c- 字节 w-字 2字节 k - 千字节 M -兆字节 G-吉字节 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| find -name nginx.conf
find /root -name nginx.conf
find -name ".cfg"
find -user lys
find -size +1M find -size -1M find -size 1M
|
locate
locate
指令利用事先建立的系统中所有文件名称及路径的 locate
数据库事先快速定位给定的文件。locate
指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate
时刻。
由于 locate
指令基于数据库进行查询,所以第一次运行前,必须 使用 updatedb
指令创建 locate
数据库
指令 |
说明 |
locate 搜索文件 |
快速定位文件路径 |
使用 locate
指令快速定位 hello.txt
文件所在目录
1 2 3 4 5 6
| yum install mlocate updatedb locate hello.txt
which ls whereis locate
|
grep
grep
过滤查找,管道符 |
,表示将前一个命令的处理结果输出传递给后面的命令处理
选项 |
功能 |
-n |
显示匹配行及行号 |
-i |
忽略字母大小写 |
在 hello.txt
文件中,查找 “yes” 所在行并显示行号
1 2
| cat /home/hello.txt | grep -n "yes" grep -n "yes" /home/hello.txt
|
压缩和解压指令
gzip/gunip
指令 |
说明 |
gzip 文件 |
压缩文件 |
gunzip 文件.gz |
解压文件 |
- 只能压缩文件不能压缩目录
- 不保留原来的文件
- 同时多个文件会产生多个压缩包
1.gzip
压缩,将 /home
下的 hello.txt
文件进行压缩
2.gunzip
压缩,将 /home
下的 hello.txt.gz
文件进行解压缩
1
| gunzip /home/hello.txt.gz
|
zip/unzip
zip
用于压缩文件,unzip
用于解压,zip
压缩命令在 window/linux 都通用,可以压缩目录且保留源文件
指令 |
说明 |
zip [选项] XXX.zip |
压缩文件和目录命令 |
unzip [选项] XXX.zip |
解压缩文件 |
选项 |
说明 |
zip -r |
递归压缩,即压缩目录 |
unzip -d <目录> |
指定解压后文件的存放目录 |
1.将 /home
下的所有文件进行压缩成 myhome.zip
1
| zip -r myhome.zip /home/
|
2.将 myhome.zip
解压到 /opt/tmp
目录下
1 2
| mkdir /opt/tmp unzip -d /opt/tmp myhome.zip
|
tar
tar
指令是打包指令,最后打包后的文件是 tar.gz
文件
指令 |
说明 |
tar [选项] XXX.tar.gz 打包的内容 |
打包目录,压缩后的文件格式 .tar.gz |
选项 |
功能 |
-c |
产生.tar打包文件 |
-v |
显示详细信息 |
-f |
执行压缩后的文件名 |
-z |
打包同时压缩 |
-x |
解压.tar文件 |
-C |
解压到指定目录 |
1.压缩多个文件,将 /home/pig.txt
和 /home/cat.txt
压缩成 pc.tar.gz
1 2 3
| touch pig.txt touch cat.txt tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
|
2.将 /home
的文件夹压缩成 myhome.tar.gz
1
| tar -zcvf myhome.tar.gz /home/
|
3.将 pc.tar.gz
解压到当前目录。切换 /opt/
4.将 myhome.tar.gz
解压到 /opt/tmp2
目录下
1 2
| mkdir /opt/tmp2 tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
|
组管理和权限管理
Linux 中每个用户必须属于一个组,不能独立于组外。在 Linux 中每个文件中有所有组、所在组、其他组的概念。
文件/目录所有者
一般为文件的创建者,谁创建了文件,自然称为该文件的所有者。当用户创建一个文件后,该文件所在的组就是用户所在的组
指令 |
说明 |
ls -ahl |
查看文件的所有者 |
chown 用户名 文件名 |
修改文件所有者 |
组的创建
指令 |
说明 |
groupadd 组名 |
创建组 |
chgrp 组名 文件 |
修改文件所在的组 |
useradd -g 组名 用户 |
创建用户加入组 |
使用 root 用户创建文件 orange.txt
,看看当前文件属于哪个组,然后将这个文件所在组,修改到 fruit
组
1 2 3 4
| groupadd fruit touch orange.txt
chgrp fruit orange.txt
|
改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用 root 的管理权限可以改变某个用户所在的组
指令 |
说明 |
usermod -g 新组名 用户名 |
改变用户所在组 |
usermod -d 目录名 用户名 |
改变该用户登录的初始目录(用户需要有进入新目录的权限) |
权限基本介绍
在 Linux 中我们可以使用 ll
或者 ls -l
来 显示一个文件的属性以及文件所属的用户和组
从左到有的 10 个字符标识
(1) 0 首位表示文件类型
标识符 |
说明 |
- |
代表文件 |
d |
代表目录 |
l |
代表链接 |
c |
代码字符设备文件,鼠标,键盘 |
b |
代表块设备,硬盘 |
(2) 第 1-3 位确定所有者(该文件的所有者)拥有该文件的权限。User
(3) 第 4-6 位确定所属组(所有者的同组用户)拥有该文件的权限。Group
(4) 第 7-9 位确定其他用户拥有该文件的权限 Other
作用到文件:
【r
】: 代表可读(read)可以读取,查看
【w
】:代表可写(write)可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
【x
】:代表可执行 (execute) 可以被系统执行
作用到目录:
【r
】: 代表可读(read)可以读取,ls 查看目录内容
【w
】:代表可写(write)可以修改,目录内创建+删除+重命名目录
【x
】:代表可执行(execute)可以进入该目录
文件基本属性介绍
修改权限 chmod
通过 chmod
指令,可以修改文件或者目录的权限
第一种方式 +、-、=
变更权限
1 2 3 4
| u:所有者 g:所有组 o:其他人 a:所有人 chmod u=rwx,g=rx,o=x 文件/目录名 chmod o+w 文件/目录名 chmod a-x 文件/目录名
|
1.给 abc
文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限
1
| chmod u=rwx,g=rx,o=rx abc
|
2.给 abc
文件的所有者去除执行的权限,增加组写的权限
3.给 abc
文件的所有用户添加读的权限
第二种方式 通过数字变更权限
1 2 3 4
| 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
,使用数字方式实现
修改文件所有者 chown
指令 |
说明 |
chown newowener 文件/目录 |
改变所有者 |
chown newowener:newgroup 文件/目录 |
改变所有者和所在组 |
选项 |
说明 |
-R |
如果是目录,则使其下所有子文件或者目录递归生效 |
1.请将 /home/abc.txt
文件的所有者修改成tom
2.请将 /home/test
目录下所有的文件和目录的所有者都修改成tom
修改文件/所在组 chgrp
指令 |
说明 |
chgrp newgroup 文件/目录 |
改变所在组 |
1.请将 /home/abc.txt
文件的所在组修改成shaolin
1 2
| groupadd shaolin chgrp shaolin /home/abc.txt
|
2.请将 /home/test
目录下的所有的文件和目录的所在组修改成shaolin
1
| chgrp -R shaolin /home/test
|
定时任务调度
crond 任务调度
任务调度:系统在某个时间执行的特定命令或程序
任务调度分类:1.系统工作 2.个别用户工作
指令 |
说明 |
crontab [选项] |
进行定时任务的设置 |
选项 |
说明 |
-e |
编辑crontab定时任务 |
-l |
查询crontab定时任务 |
-r |
删除当前用户所有的crontab任务 |
1 2 3
| conrtab -r conrtab -l service crond restart
|
设置任务调度文件:/etc/crontab
设置个人任务调度。执行 crontab -e
命令
接着输入任务到调度文件
1 2 3
| crontab -e
*/1 * * * * ls -l /etc/ > /tmp/to.txt
|
项目 |
含义 |
范围 |
第一个 * |
一小时当中的第几分钟 |
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 |
每周1的17点0分执行命令 |
0 5 1,15 * * |
每月1号 15号的凌晨5点0分执行命令 |
40 4 * * 1-5 |
每周一到周五 4点40分执行命令 |
*/10 4 * * * |
每天的凌晨4点,每隔10分钟执行一次命令 |
0 0 1,15 * 1 |
每月1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同事出现,因为他们定义的都是天。非常容易让管理员混乱 |
1 2 3 4 5 6 7 8 9 10 11
| */1 * * * * date >> /tmp/mydate
1. vim /home/my.sh 写入内容 date >> /home/mycal 和 cal >> /home/mycal 2. 给my.sh增加执行权限 chmod u+x/home/my.sh 3. crontab -e 增加*/1 * * * * /home/my.sh
1. crontab -e 2. 0 2 * * * mysqldump -u root -proot testdb >> /home/db.bak
|
at 定时任务
1.at
命令是一次性定时计划任务,at
的守护进程 atd
会以后台模式运行,检查作业队列来运行
2.默认情况下,atd
守护进程每 60
秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
3.at
命令是一次性定时计划任务,执行完一个任务后不再执行此任务
4.在使用 at
命令时,一定要保证 atd
进程的启动,可以使用相关指令来查看
1 2 3
| ps -ef
ps -ef | grep atd
|
选项 |
说明 |
-m |
当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I |
atq的别名 |
-d |
atrm的别名 |
-v |
显示任务将被执行的时间 |
-c |
打印任务的内容到标准输出 |
-V |
显示版本信息 |
-q <队列> |
使用指定的队列 |
-f <文件> |
从指定文件读入任务而不是从标准输入读入 |
-t <时间参数> |
以时间参数的形式提交运行的任务 |
磁盘分区和挂载
查看所有设备挂载情况
指令 |
说明 |
lsblk |
查看挂载情况 |
lsblk -f |
查看详细的设备挂载情况,显示文件系统信息 |
查看磁盘空间使用情况
指令 |
说明 |
df -h |
查询系统整体磁盘使用情况 |
du -h |
查询指定目录的磁盘占用情况 |
du -h
选项 |
功能 |
-h |
带计量单位 |
-a |
含文件 |
-c |
显示所有的文件和子目录大小后,显示总和 |
-s |
指定目录占用大小汇总 |
--max-depth=n |
指定统计子目录的深度为第n层 |
查询 /opt 目录的磁盘占用情况,深度为 1
1 2
| cd /opt/ du -h --max-depth=1 /opt
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ls -l /opt | grep "^-" | wc -l
ls -l /opt | grep "^d" | wc -l
ls -lR /opt | grep "^-" | wc -l
ls -lR /opt | grep "^d" | wc -l
tree 目录
|
mount/umount 挂载/卸载
指令 |
说明 |
mount [-t vfstype] [-o options] device dir |
挂载设备 |
umount 设备文件名或挂载点 |
卸载设备 |
参数 |
功能 |
-t vfstype |
指定文件系统的类型,通常不必指定。mount会自动选择类型。常用类型有:光盘或光盘镜像 DOS Windows9x fat32文件系统:vfat Windows NT ntfs 文件系统: ntfs Mount Windows 文件网络共享:smbfs UNIX(LINUX)文件共享:nfs |
-o options |
主要用来描述设备或档案的挂接方式。常用的参数有: loop 用来把一个文件当成硬盘分区挂接上系统 ro:采用只读方式挂接设备 rw:采用读写方式挂接设备 iocharset: 指定访问系统所用字符集 |
device |
要挂接的设备 |
dir |
设备在系统上的挂载点 |
fdisk 分区
指令 |
说明 |
fdisk -l |
查看磁盘分区详情 |
fdisk 硬盘设备名 |
显示所有硬盘的分区列表 |
网络配置和系统管理操作
指令 |
说明 |
ifconfig |
查看Linux的网络配置 |
ping 目的主机 |
测试当前服务器是否可以连接目的主机 |
Linux 网络环境配置
直接修改配置文件来指定 IP,并可以连接外网
修改为静态IP
1
| vim /etc/sysconfig/network-scripts/ifcfg-“ifconfig看到的前缀”
|
1 2 3 4 5 6 7
| BOOTPROTO="static"
IPADDR=192.162.202.100
GATEWAY=192.168.202.2
DNS1=192.168.202.2
|
重启网络服务
设置主机名
1 2 3 4 5
| hostname
vim /ect/hostname
|
设置 hosts 映射
如何通过主机名找到某个 Linux 系统
- 对于 Winodws:在
C:Windows\System32\drivers\etc\hosts
文件指定即可
- 对于 Linux:在
/etc/hosts
文件指定
进程管理
显示系统执行的进程
指令 |
说明 |
ps |
用来查看目前系统中,哪些正在执行,他们执行的状况,可以不加任何参数 |
选项 |
功能 |
-a |
显示当前终端的所有进程信息 |
-u |
以用户的格式显示进程信息 |
-x |
显示后台进程运行的参数 |
字段 |
说明 |
PID |
进程标识 |
TTY |
终端机号 |
TIME |
此进程所消CPU时间 |
CMD |
正在执行的命令或进程名 |
ps -aux
指令 |
说明 |
ps -aux | grep xxx |
显示系统执行的进程 |
参数 |
说明 |
USER |
用户名称 |
PID |
进程号 |
%CPU |
该进程占用CPU百分比 |
%MEM |
进程占用物理内存的百分比 |
VSZ |
进程占用虚拟内存的大小,单位KB |
RSS |
进程占用实际物理内存的大小,单位KB |
TTY |
终端名称 |
STAT |
进程状态 |
START |
进程的启动时间 |
TIME |
进程占用CPU的运算时间 |
COMMAND |
启动进程所用的命令和参数 |
ps -ef
指令 |
说明 |
ps -ef |
以全格式显示当前所有的进程,查看进程的父进程 |
参数 |
说明 |
UID |
用户ID |
PID |
进程ID |
PPID |
父进程ID |
C |
CPU用于计算执行优先级的因子。数字越大,表明进程是CPU密集型运算,执行优先级会降低;数字越小,表明进程是I/O密级型运算,执行优先级会提高 |
STIME |
进程启动的时间 |
TTY |
终端名称 |
TIME |
CPU时间 |
CMD : |
启动进程所用的命令和参数 |
小结:
如果是想查看进程 CPU 占用率和内存占用率,可以使用 aux
如果想查看进程的父进程 ID 可以使用 ef;
进程终止
指令 |
说明 |
kill [选项] 进程号 |
通过进程号杀死进程 |
killall 进程名称 |
通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用 |
kill -l 查看各个号码代表的意思
查看进程树
指令 |
说明 |
pstree [选项] |
直观查看进程信息 |
选项 |
功能 |
-p |
显示进程PID |
-u |
显示进程的所属用户 |
服务管理
服务本质是运行在后台的进程,通常监听某个端口,等待其他程序的请求,因此又称为守护进程
1
| service 服务名 [start | stop | restart | status]
|
1 2 3 4 5 6 7 8 9 10 11
| service network status
service network stop
service network start
service network restart
|
查看服务名
方式1 使用setup->系统服务
方式2 /etc/init.d
看到service指令管理的服务
systemctl
1 2 3 4
| systemctl [start | stop | restart | status] 服务名
ls - al /usr/lib/systemd/system
|
指令 |
说明 |
systemctl list-unit-files [| grep 服务名] |
查看服务开机启动状态 |
systemctl enable service_name |
开启指定服务的自动启动(永久生效) |
systemctl disable service_name |
关掉指定服务的自动启动(永久生效) |
systemctl is-enabled 服务名 |
查询某个服务是否是自启动 |
1 2 3 4 5 6 7 8 9 10 11
| systemctl status firewalld
systemctl stop firewalld
systemctl start firewalld
systemctl restart firewalld
|
打开或关闭指定端口
指令 |
说明 |
firewall-cmd --permanent --add-port=端口号/协议 |
打开端口 |
firewall-cmd --permanent --remove-port=端口号/协议 |
关闭端口 |
firewall-cmd --reload |
重新载入,才能生效 |
firewall-cmd --query-port=端口号/协议 |
查询端口是否开放 |
监控网络状态
指令 |
说明 |
netstat [选项] |
查看系统网络情况 |
1 2 3
| netstat -anp | grep 进程号 netstat -nlp | grep 端口号 netstat -atnp
|
选项 |
功能 |
-a |
显示所有正在监听(listen)和未监听的套接字(socket) |
-n |
拒绝显示别名,能显示数字的全部转化为数字 |
-l |
仅列出在监听的服务状态 |
-p |
表示显示哪个进程在调用 |
-t |
显示TCP传输协议的连线状况 |
动态监控进程
指令 |
说明 |
top [选项] |
实施监控系统进程状态 |
选项 |
功能 |
-d 秒数 |
指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行 |
-i |
使top不显示任何闲置或者僵死进程。 |
-p |
通过指定进程ID来仅仅监控某个进程的状态 |
交互操作 |
功能 |
P |
以CPU使用率排序,默认就是此项 |
M |
以内存的使用率排序 |
N |
以PID排序 |
q |
退出top |
u |
根据指定用户进行过滤 |
k |
直接杀死 |
软件包管理
RPM
rpm 用于下载包的打包及安装工具
指令 |
说明 |
rpm -qa |
查询所安装的所有rpm软件包 |
rpm -q 软件包名 |
查询软件是否安装 |
rpm -ql 软件包名 |
查询软件包中的文件 |
rpm -qf 文件全路径名 |
查询文件所属的软件包 |
rpm -e RPM包的名称 |
卸载rpm软件包 |
rpm -ivh RPM包全路径名称 |
安装RPM包 |
rpm -ivh RPM 包全路径名称 参数说明
选项 |
说明 |
-i |
install 安装 |
-v |
—verbose 显示详细信息 |
-h |
—hase,进度条 |
--nodeps |
安装前不检查依赖 |
yum
YUM 是 Shell 前端软件包管理。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
参数 |
功能 |
install |
安装rpm 软件包 |
update |
更新rpm软件包 |
check-update |
检查是否有可用的更新rpm软件包 |
remove |
删除指定的rpm软件包 |
list |
显示软件包信息 |
clean |
清楚yum过期的缓存 |
deplist |
显示yum软件包的所有依赖关系 |
yum 方式安装 firefox
1 2 3 4
| yum list | grep firefox
yum remove firefox yum -y install firefox
|
修改网络 YUM 源 (默认会自己搜索最近的)
1.安装 wget, wget 用来从指定的 URL 下载文件
1 2 3
| yum update yum install wget wget --version
|
2.在 /etc/yum.repos.d/ 目录下,备份默认的 repos 文件
1
| cp CentOS-Base.repo CentOS-Base.repo.backup
|
3.下载网易 163 或者是 aliyun 的 repos 文件,任选其一
1 2
| wget http://mirrors.aliyun.com/repo/Centos-7.repo wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
|
4.使用下载好的 repos 文件替换默认的 repos 文件 例如:用 CentOS7-Base-163.repo 替换 CentOS-Base.repo
1
| mv CentOS7-Base-163.repo CentOS-Base.repo
|
5.清理旧缓存数据,缓存新数据
1 2
| yum clean all yum makecache
|
yum makecache 就是把服务器的包信息下载到本地电脑缓存起来
6.测试
1 2
| yum list | grep firefox yum -y install firefox
|
安装配置 JDK 8
midir /opt/jdk
- 通过xft上传到/opt/jdk
cd /opt/jdk
- 解压
tar -zxvf jdk1.8.0_261-linux-x64.tar.gz
mkdir /usr/local/java
mv /opt/jdk/jdk 1.8.0_261 /usr/local/java
- 配置环境变量的配置文件
vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk_1.8.0_261
export PATH = $JAVA_HOME/bin:$PATH
source /etc/profile
[让文件生效]
- 测试是否安装成功
安装配置 Tomcat
- 上传安装文件,并解压到
/opt/tomcat
- 进入解压目录/bin,启动
tomcat ./startup.sh
- 开放端口8080
- 测试是否安装成功
安装 MySQL 5.7
新建文件夹/opt/mysql
运行 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
解压tar -xvf mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar
运行rpm -qa | grep mari
,查询mariadb相关安装包
运行rpm -e --nodeps mariadb-libs
运行以下命令
1 2 3 4
| rpm -ivh mysql-community-common-5.7.35-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.35-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.35-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.35-1.el7.x86_64.rpm
|
运行systemctl start mysqld.service
,启动mysql
设置root密码:mysql自动给root设置随机密码,运行grep "password" /var/log/mysqld.log
查看 5WWkpO)Itdpp
运行mysql -u root -p
,用root登录
设置root密码。运行set global validate_password_policy=0
;提示密码设置策略
set password for 'root'@'localhost'=password('xxx')
- 运行
flush privileges;
使密码设置生效
Shell
脚本格式要求
- 脚本以
#!/bin/bash
开头
- 脚本需要有可执行权限
变量
Shell变量分为系统变量和自定义变量
系统变量:$HOME
、$PWD
、$SHELL
等
自定义变量
1 2 3 4 5 6 7 8
| # 定义变量 变量=值 A=100 echo "A=$A" # 撤销变量 unset 变量 # 声明静态变量,不能unset readonly 变量
|
设置环境变量
指令 |
说明 |
export 变量名=变量值 |
将shell变量输出为环境变量 |
source 配置文件 |
让修改后的配置信息立即生效 |
echo $变量名 |
查询环境变量的值 |
1 2 3 4 5
| # 在/etc/profile中定义TOMCAT_HOME环境变量 export TOMCAT_HOME=/opt/tomcat/apache-tomcat-9.0.75 # 查看环境变量TOMCAT_HOME的值 echo $TOMCAT_HOME # 在另一个shell程序使用TOMCAT_HOME
|
位置参数变量
当执行一个shell脚本时,如果希望获取命令行的参数,就可以使用位置参数变量
参数 |
说明 |
$n |
n为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数用${10} |
$* |
代表命令行中所有的参数,$* 把所有的参数看成一个整体 |
$@ |
代表命令行中所有的参数,不过$@ 把每个参数区分对待 |
$# |
代表命令行中所以有参数的个数 |
预定义变量
变量 |
说明 |
$$$$ |
当前进程的进程号 |
$! |
后台运行的最后一个进程的进程号 |
$? |
最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,证明上一个命令执行不正确 |
运算符
$((运算式))
或$[运算式]
或 expr m + n
。expr
运算符间要有空格,如果希望将expr的结果赋值给某个变量使用``
expr m - n
expr \* / %
乘,除,模
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #!/bin/bash # 计算 (2+3) × 4 # 写法1 ANS1=$((2+3)*4) echo "ans1=$ANS1" # 写法2 ANS2=$[(2+3)*4] echo "ans2=$ANS2" # 写法3 TEMP=`expr 2 + 3` ANS3=`expr $TEMP \* 4`
# 求出 命令行的两个参数和 SUM=$[$1 + $2] echo "sum=$SUM"
|
条件判断
1 2
| # condition前后有空格,非空返回true,可使用$?验证(0为true,>1为false) [ condition ]
|
判断条件 |
说明 |
-eq |
等于 equal |
-ne |
不等于 not equal |
-lt |
小于 less than |
-le |
小于等于 less equal |
-gt |
大于 greate than |
-ge |
大于等于 greater equal |
注:如果是字符串之间的比较,用等号”=“判断相等;用”!=“判断不等。
权限判断 |
说明 |
-r |
有读的权限 |
-w |
有写的权限 |
-x |
有执行的权限 |
1 2 3
| # 判断文件是否有可执行权限 [ -x helloworld.sh ] echo $?
|
文件类型判断 |
说明 |
-e |
文件存在 |
-f |
文件存在并且是一个常规的文件 |
-d |
文件存在并且是一个目录 |
1 2 3 4 5 6
| # 23是否大于等于22 $ [ 23 -ge 22 ] # 判断文件是否有可执行权限 $ [ -x helloworld.sh ] # 文件是否存在 $ [ -e helloworld.sh]
|
流程控制
IF
或
1 2 3 4
| if [ 条件判断式 ] then 程序 fi
|
case
1 2 3 4 5 6 7 8 9
| case $变量名 in "值1") ;; "值2") ;; *) 如果变量的值都不是以上的值,则执行此程序 ;; esac
|
for
1 2 3 4
| for ((初始值; 循环控制条件; 变量变化 )) do 程序 done
|
while
1 2 3 4
| while [ 条件判断式 ] do 程序 done
|
read 读取控制台输入
指令 |
说明 |
read (选项) (参数) |
读取控制台输入 |
选项 |
说明 |
-p |
指定读取值时的提示符 |
-t |
指定读取值时等待的时间(秒)如果-t不加表示一直等待 |
1
| read -t 10 -p "请输入您的名称:" name
|
函数
系统函数
函数 |
说明 |
basename [string/pathname] [suffix] |
取路径里的文件名称 |
dirname 文件绝对路径 |
取文件路径的绝对路径名称 |
自定义函数
1 2 3 4 5 6 7 8 9
| [ function ] funname [()]
{
action;
[return int;]
}
|