Linux目录结构
/bin【常用】:(/usr/bin、/usr/local/bin)
- 这个目录存放着最经常使用的命令
/sbin:(/usr/sbin、/usr/local/sbin)
- 这里存放的是系统管理员使用的系统管理程序
/home【常用】
- 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的
/root【常用】
- 该目录为系统管理员,也称作超级权限者的用户主目录
/lib
- 系统开机所需要最基本的动态连接共享库,其作用类似Windows里面的DLL文件。几乎所有的应用程序都需要用到这些共享库
/lost+found
- 这个目录一般是空的,当系统非法关机后,这里就会存放一些文件
/etc【常用】
- 所有系统管理所需要的配置文件和子目录,比如MySQL数据库的my.cnf
/usr【常用】
- 用户的很多应用程序和文件都放在这个目录下,类似windows下的program files目录
/proc【不能动】
- 这是一个虚拟目录,系统内存的映射,访问这个目录来获取系统信息
/srv【不能动】
- service的缩写,主要存放一些服务启动之后需要提取的数据
/sys【不能动】
- 安装了一个linux2.6内核中新出现的文件系统sysfs
/temp
- 这个目录用来存放一些临时文件
/dev
- 类似于windows的设备管理器,把所有的硬件用文件的形式存储
/media【常用】
- linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
/mnt【常用】
- 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了
/opt
- 这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下,默认空。
/usr/local【常用】
- 这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
/var【常用】
- 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
/selinux[security-enhanced linux]360
- SELinux是一种安全子系统,它能控制程序只能访问特定文件。
- 【一般模式】拷贝当前行 yy,拷贝当前行向下的5行 5yy,并粘贴 p
- 【一般模式】删除当前行 dd,删除当前行向下5行 5dd
- 在文件中查找某个单词,【命令行下】 /关键字,回车 查找,输入n就是查找下一个
- 设置文件的行号,取消文件的行号【命令行下 :set nu 和 :set nonu】
- 【一般模式下】,使用快捷键到文档末行[G]和最首行[gg]
- 在文件中输入某些内容,【一般模式下】,撤销动作[u]
- 将光标移动到具体的某一行,在【一般模式下】,输入20,在按
shift+g
- 替换当前行中的某个首次出现的字符串内容,
:s/source/target/
替换当前行出现的所有指定的字符串内容,:s/source/target/g
替换本文件中出现的所有指定的字符串内容,:%s/source/target/g
关机&重启命令
shutdown -h now
:立即关机
shutdown -h 1
:一分钟后关机
shutdown -r now
:现在重新启动计算机
halt
:关机
reboot
:重启
sync
:把内存中的数据同步到磁盘
用户登录和注销
普通用户—>root用户[su]
注销用户:logout,在图形运行级别无效,在运行级别 3下有效
root用户[logout]—>普通用户 [logout]—>退出系统(exit更有效)
用户管理
useradd 用户名
:添加用户 默认在/home/
useradd -d 指定目录 新的用户名
:创建用户,并指定用户的家目录
userdel 用户名
:删除用户,保留家目录
userdel -r 用户名
:删除用户以及家目录
passwd 用户名
:给用户设置密码
pwd
:显示当前用户所在的目录
id 用户名
:查询指定用户信息
su - 用户名
:切换到指定用户
高权限的用户切换到低权限用户,不需要输入密码,反之需要
需要返回原来用户是,使用exit/logout
whoami / who am i
查看当前用户/登录用户
groupadd 组名
:新增组
groupdel 组名
:删除组
useradd -g 用户组 用户名
:增加用户时直接加上组,没有指定组的用户会自己形成一个组
usermod -g 用户组 用户名
:修改用户的组
指定运行级别
0:关机
1:单用户【找回丢失密码】
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
# 查看运行级别
systemctl get-default
#设置运行级别
systemctl set-default TARGET.target
TARGET.target的取值:
multi-user.target:运行级别3
graphical.target:运行级别5
找回root密码
- 进入到linux的开机界面,然后按e键
- 按下e键然后进入另一个界面,找到以linux16开头的行数。在行的最后面输入:init=/bin/sh
- 接着输入完成之后,直接按快捷键Ctrl + X 进入单用户模式
- 接着在光标闪烁的位置输入:
mount -o remount,rw /
然后按回车键
- 在新的一行最后面输入:passwd,然后按回车键。输入密码,然后再次输入确认密码(密码长度最好是8位以上,但不是必须的)。密码修改成功之后,会显示passwd …的字样,说明密码修改成功
- 接着在光标闪烁的位置输入:
touch /.autorelabel
(注意touch 与后面的/之间有空格)。完成后按回车
- 接着在光标闪烁的位置继续输入:
exec /sbin/init
(注意exec 与后面的/之间有空格)。然后按回车键,等待系统自动修改密码(这个时间可能会有点长,请耐心等待)。完成后系统会自动重启,新的密码生效了
帮助指令
man [命令或配置文件]
:获取帮助信息
help 命令
:获取shell内置命令的帮助信息
文件目录类
cd /路径信息
: 切换到指定目录
注意:相对路径和绝对路径
cd ~
:返回家目录
cd ../
:返回上一级目录
cd /
:返回根目录
创建目录和文件指令
mkdir指令
用于创建目录
mkdir 目录名
:创建单层目录
mkdir -p 目录名
:创建多级目录
touch指令
用于创建文件
touch 文件名
:创建一个空文件
删除指令
rmdir指令
rmdir 目录名
:只能删除空目录
rm -rf 目录名
:删除目录
rm指令
rm [选项] 文件/目录名
:删除文件
选项:
-r
:递归删除整个文件夹-f
:强制删除不提示
cp指令
cp [选项] source dest
:拷贝文件到指定目录
选项:-r
递归复制整个文件夹
\cp [选项] source dest
:拷贝文件到指定目录(强制覆盖不提示)
mv指令
mv oldNameFile newNameFile
:在同一个目录中则是重命名
mv oldFileAdd newFileAdd
:不同文件夹则表示移动文件
cat指令
cat [选项] 文件名
:查看文件
选项:-n
:显示行号
配合more指令使用,例如:cat [选项] 文件名 | more
|
管道符号:表示前面指令的处理结果内容交给后面的指令处理
more指令
more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键(交互指令),操作见下表:
基本语法:more 文件名
操作 | 功能说明 |
---|---|
空白键(space) | 向下翻一页 |
Enter | 向下翻一行 |
q | 退出more |
Crtl+F | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
less指令
用来分屏查看文件内容,它的功能与more类似,但是比more指令更加强大,支持各种显示终端,less指令显示内容时,并不是一次将整个文件加载之后才显示,而是根据显示需求加载内容,对于显示大型文件具有较高的效率,具体操作见下表:
用法:less 文件名
:
操作 | 功能说明 |
---|---|
空白键(space) | 向下翻一页 |
[pagedown] | 向下翻动一页 |
[pageup] | 向上翻动一页 |
/字串 | 向下搜索[字串]的功能;n:向下查找;N:向上查找 |
?字串 | 向上搜索[字串]的功能;n:向上查找;N:向下查找 |
q | 退出more |
echo指令
语法:echo [选项] 输出内容
# 控制台输出hello
echo "hello"
# 输出环境变量 linux中的变量前都有一个`$`
echo $PATH
head指令
head用于显示文件的开头部分内容,默认情况下head指令显示文件前10行
语法:
head 文件名
:功能描述:查看文件前10行内容
head -n a 文件名
:功能描述:查看文件前a行内容
tail指令
用于输出文件尾部的内容,默认情况下tail指定显示文件尾部10行内容
语法:
tail 文件名
:功能描述:查看文件尾部10行内容
tail -n a 文件名
:功能描述:查看文件尾部a行内容
tail -f 文件名
:功能描述:实时追踪该文档的所有更新ctrl+c退出
>
指令和>>
指令
>
输出重定向和>>
追加
语法:
ls -l > 文件名
:列表的内容写入文件中(覆盖)
ls -al >> 文件名
:列表的内容追加到文件的末尾
cat 文件1 > 文件2
:将文件里的内容覆盖到文件2
echo "内容" >> 文件
:将内容追加到文件中
In指令
软连接也称符号链接,类似于windows中的快捷方式,主要存放了链接其他文件的路径
语法:
ln -s [原文件或目录] [软链接名]
:给原文件创建一个软链接
注意:当使用pwd命令查看目录时,看到的是软链接所在的目录删除:
rm -f(不提示) 软链接名
history指令
语法:
history
:查看已经执行过的历史指令
history a
:查看a条历史指令
!历史指令编号id
:执行指定编号的指令
日期时间类指令
date指令
语法:
date
:显示当前时间
date +%Y
:显示当前年份
date +%m
:显示当前月份
date +%d
:显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S"
:显示年月日时分秒
date -s 字符串时间
:设置日期。例如:date -s 2022-07-01 22:22:22"
cal指令
cal
[选项]:不加选项,显示本月日历
显示2022年日历:cal 2022
搜索查找类指令
find指令
find指令将从指定目录向下递归地遍历其各个子目录。将满足条件的文件或者目录显示在终端
语法:
find [搜索范围] [选项]
find /home -name hello.txt
find /opt -user tom
(+n 代表大于 -n代表小于 n代表等于)
find /home -size +n (大于n)
选项 | 功能 |
---|---|
-name<查询方式> | 按照指定的文件名查找模式查找文件 |
-user<用户名> | 查找属于指定用户名所有的文件 |
-size<文件大小> | 按照指定的文件大小查找文件 |
locate指令
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中的所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为保证查询结果的准确度,管理员必须定期更新locate时刻
语法:
locate 文件名
说明:由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
补:which指令,可以查看某个指令在哪个目录下,例如:cat指令在哪个目录(which cat)
grep指令和管道符号
|
grep过滤查找,管道符|
,表示将前一个命令的处理结果输出传递给后面的命令处理
语法:
grep [选项] 查找内容 源文件
选项:
-n
:显示匹配行及行号-i
:忽略字母大小写
压缩和解压类指令
gzip/gunzip指令
gzip用于压缩文件,gunzip用于解压文件。只能压缩文件
语法:
gzip 文件
:压缩文件,只能将文件压缩为*.gz文件
gunzip 文件.gz
:解压文件
zip/unzip指令
zip用于压缩文件,unzip用于解压,在项目打包发布中很有用
语法:
zip [选项] xxx.zip 要压缩的内容
:压缩文件和目录
unzip [选项] xxx.zip
:解压文件zip常用选项: -r:递归压缩,即压缩目录
unzip常用选项:-d<目录>:指定解压后文件存放目录
tar指令
tar指令是打包指令,打包后的文件是.tar.gz文件
语法:
tar [选项] xxx.tar.gz 打包的内容
:打包目录选项:
-c
:产生.tar的打包文件-v
:显示纤细信息-f
:指定压缩后的文件名-z
:打包同时解压-x
:解包.tar文件
组管理和权限管理
查看文件的所有者
一般谁创建了文件,谁就自然成为该文件的所有者
指令:ls -ahl
修改文件所有者
指令:chown 用户名 文件名
查看文件/目录所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在组
指令:ls -ahl
修改文件所在组
指令:chgrp 组名 文件名
权限
0-9位说明
- 第0位确定文件类型(d ,- ,l ,c ,b)
l
:是链接,相当于windows的快捷方式
d
:是目录
c
:是字符设备文件,如鼠标、键盘
b
:是块设备,比硬盘
-
:普通文件
- 第1-3位确定所有者拥有该文件的权限—User
- 第4-6位确定所属组拥有该文件的权限—Group
- 第7-9位确定其他用户拥有该文件的权限—Other
其他说明
1
:文件:硬链接数;目录:子目录数目
root
:用户
root
:组
1
:文件大小(字节);如果是文件夹,显示4096字节
19:59
:最后修改时间
hello
:文件名
权限说明:
r
:读权限
w
:写权限
x
:执行权限
可用数字表示:r=4,w=2,x=1,因此rwx=7
rwx作用到文件
r:可读
w:可写,但不可以删除
x:可以执行rwx作用到目录
r:可以读取,ls查看目录内容
w:可以修改,在目录内可以删除+创建+重命名目录,但是不能删除目录
x:可以进入该目录
修改权限-chmod
通过chmod指令,可以修改文件或目录的权限
[u]:所有者,[g]:所有组,[o]:其他人,[a]:所有人
第一种方式:+、-、=
变更权限
chomd u=rwx,g=rx,o=x 文件/目录名
chmod u+w 文件/目录名
chmod a-x 文件/目录名
第二种方式:通过数字变更权限
r=4,w=2,x=1
chmod 751 文件/目录名
定时任务调度
任务调度:是指系统在某个时间执行的特定命令、程序或脚本
分类:系统工作:有些重要的工作必须周而复始地执行,病毒扫描、
个别用户工作:个别用户可能希望执行某些程序,比如对数据库的备份
crond任务调度
crond任务调度
crontab进行定时任务的设置
语法:
crontab [选项]
选项:
-e
:编辑crontab定时任务-l
:查询crontab任务-r
:删除当前用户所有的crontab任务如:*/1 * * * * ls -l /etc/ >> /temp/text.text
意思是:每小时的没分钟执行一次‘
参数说明:不连续的时间中间用
,
分隔
参数 | 含义 | 范围 |
---|---|---|
第1个* | 一小时当中的第几分钟 | 0-59 |
第2个* | 一天中的第一小时 | 0-23 |
第3个* | 一月中的第几天 | 1-31 |
第4个* | 一年中的第几个月 | 1-12 |
第5个* | 一周中的星期几 | 0-7(0,7都代表周日) |
特殊符号说明
特殊符号 | 含义 |
---|---|
* | 代表任何时间 |
, | 代表不连续的时间。如”0 8,12,16 * * * 命令 “就代表每天的8点0分、12点0分执行一次 |
- | 代表连续的时间范围 |
*/n | 代表每个多久执行一次 |
补充:
crond相关指令
crondtab -r
:终止任务调度
crondtab -l
:列出当前有那些任务调度
service crond restart
:重启任务调度
at定时任务
基本介绍
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
- 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行
- at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用
ps -ef | grep atd
检测是否运行at命令格式:
at [选项] [时间]
选项:
-m
:当指定的任务被完成后,将给用户发送邮件,即使没有标准输出-I
:atq的别名-d
:atrm的别名-v
:显示任务将被执行的时间-c
:打印任务的内容到标准输出-q<队列>
:使用指定的队列-f<文件>
:从指定文件读入任务而不是从标准输入读入-t<时间参数>
:以时间参数形式提交要运行的任务-V
:显示版本信息at时间定义
- 接受在当天的hh:mm(小时:分钟),假如时间已过去,第二天执行
- 使用midnight(深夜)、noon(中午)、teatime(饮茶时间4pm)
- 采用12小时制,即在时间后加上AM\PM
- 指定命令执行的具体日期,指定格式位month day或mm/dd/yy或dd.mm.yy,日期必须在时间后
- 直接使用today、tomorrow来指定完成命令的时间
- 使用相对计时法。指定格式为:now + count time-utils,now是指当前时间,time-utils是时间单位,count是时间的数量。例如:now 5 minutes/hours/days/weeks/
Ctrl + D
:结束at命令的输入
atq命令 = at -l
:查看系统中没有执行的工作任务
at -d 任务id = atrm 任务id
:删除指定id的任务
磁盘分区、挂载
原理:
- 对于Linux来说,无论有几个分区,分给哪一个目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
- Linux采用一种叫”载入“的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得
示意图:
硬盘说明- Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本使SCSI硬盘
- 对于IDE硬盘,驱动器标识符为”hdx~“,其中”
hd
“表明分区所在设备的类型,这里是指IDE硬盘;”x
“为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘);"~
"代表分区,前四个分区用数字1-4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如:hda3表第一个IDE硬盘上第三个主分区或扩展分区- 对于SCSI硬盘标识符为”sdx~“,SCSI硬盘是用”sd“来表示分区所在设备的类型,其余和IDE硬盘的表示方法一样。
查看所有设备挂载情况
lsblk 或者 lsblk -f
NAME:分区情况;FSTYPE:类型;UUID:分区唯一标识;MOUNTPOINT:挂载点
增加磁盘步骤
- 虚拟机添加硬盘
在【虚拟机】菜单中,选择【设置】,然后选择【硬盘】…一路【下一步】,直至完成,最后重启系统
- 分区
分区命令:fdisk /dev/sdb
开始对/sdb分区
m:显示命令列表;p:显示磁盘分区 同fdisk -l
;n:新增分区;d:删除分区;w:写入并退出
说明:开始分区后输入n
,新增分区;然后选择p
,分区类型为主分区。两次回车,最后输入w
写入并退出,不保存输入q
。此时没有UUID。
- 格式化
格式化磁盘
命令:mkfs -t ext4/xfs等 /dev/sdb2
其中ext4是分区类型,此时有UUID。
- 挂载
将一个分区与一个目录联系起来
首先创建一个目录newdisk
命令:mount 设备名称 挂载目录
例如:mount /dev/sdb2 /newdisk
卸载:umount 设备名称 或 挂载目录
例如:umount /dev/sdb2 或者 umount /newdisk
注意:用命令行挂载重启后会失效
- 设置自动挂载
通过修改 /etc/fstab 实现自动挂载,添加完后 执行 mount -a 即可生效
在/etc/fstab添加一行
后面两个数字,第一个数字取值有0/1
:备份/不备份,第二个数字取值有2/1/0
:根目录/其他目录检查/不检查
磁盘使用情况
df -h
:查看系统整体磁盘使用情况
du -h /目录
:查询指定目录的磁盘使用情况,
-s
:指定目录占用大小汇总-h
:带计量单位-a
:含文件--max-depath=x
:子目录深度x-c
:列出明细的同时,增加汇总值
可配合使用,例:-ach等
统计个数指令:
wc -l
# 统计/home/user目录下文件的个数,包括子目录中的,R表示递归
ls -lR /home/user | grep "^-" | wc -l
# 树状显示结构tree目录,注:如果没有tree,则使用 yum install tree 安装
tree /home/
进程管理
ps命令
ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况,可以不加参数。
ps [选项]
-a
:显示当前终端的所有进程信息-u
:以用户的格式显示进程信息-x
:正在执行的命令或进程名-e
:显示所有进程-f
:全格式
补充:STAT的内容:S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低,R-正在运行,D-短期等等,Z-僵死进程,T-被跟踪或者停止
PPID:父进程
C:CPU用于计算执行优先级的因子,数值越大,表示进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
systemctl服务管理指令
systemctl 指令管理的服务在/usr/lib/systemd/system
中查看。
服务启动/停止/重启/重载/查看状态: systemctl [start | stop | restart | status] 服务名
服务的状态:
masked
此服务禁止自启动
static
该服务无法自启动,只能作为其他文件的依赖
enabled
已配置为自启动
disabled
未配置为自启动
# 查看所有服务的自启动状态 通常跟过滤符
systemctl list-unit-files
# 查看防火墙是否自启动
systemctl is-enabled firewalld.service # 知道完整服务名
# 设置防火墙的自启动(服务运行级别 3、5)
systemctl enable firewalld.service
# 设置服务禁用自启动 (服务运行级别 3、5)
systemctl disable firewalld.service
终止进程
语法:
kill [选项] 进程号
:通过进程号杀死进程
killall 进程名称
:通过进程名杀死进程,也支持通配符
选项:-9
:强迫进程立即停止
查看进程树pstree
语法:
pstree [选项]
,可以更加直观的来看进程信息
选项:
-p
:显示进程PID-u
:显示进程所属用户
firewall防火墙指令
防火墙的核心功能:打开或关闭对应端口。关闭端口,则外部的数据请求不能通过对应的端口,与服务器上的程序进行通信
在真正的生产环境,为保证安全,需要启动防火墙并配置打开和关闭的端口
基本语法:
# 打开端口/允许协议
firewall-cmd --permanent --add-port=端口号/协议
# 关闭端口/禁用协议
firewall-cmd --permanent --remove-port=端口号/协议
# 查询端口/协议是否开启
firewall-cmd --query-port=端口/协议
# 查询防火墙所有开放的端口/协议配置
firewall-cmd --list-ports
# 重载防火墙
firewall-cmd --reload
实例:
firewall-cmd --query-port=3306/tcp # 查询防火墙是否开启3306端口
firewall-cmd --list-ports # 查看防火墙开放的端口有哪些
firewall-cmd --permanent --add-port=3306/tcp # 开放防火墙对3306端口的访问权限
firewall-cmd --reload # 重载防火墙
firewall-cmd --list-ports #查询防火墙所有开放的端口/协议配置
动态监控程序
top与ps命令相似,都是用来显示正在执行的进程。区别:top在执行一段时间可以更新正在运行的进程。
top [选项]
选项:
-d 秒数
:指定top命令每隔几秒更新一次,默认是3秒-i
:使命令不显示任何闲置或者僵死进程-p
:通过指定监控进程ID来仅仅监控某个进程的状态
按q退出
交互操作说明:
操作 | 功能 |
---|---|
P | 以CPU使用率排序(默认) |
M | 以内存的使用率排序 |
N | 以PID排序 |
例如:
# 监控特定用户
输入top命令--->输入u--->输入用户名
# 终止指定进程
输入top命令--->输入k--->要结束的进程ID
监控网络状态
语法:
netstat [选项]
-an
:按一定顺序排序输出-p
:显示哪个进程在调用
rpm
rpm指令
rpm -qa [| grep xx]
:查询已安装的rpm列表
rpm -q 软件包名
:查询软件包是否安装
rpm -qi 软件包名
:查询软件包信息
rpm -ql 软件包名
:查询软件包中的文件
rpm -qf 文件全路径名
:查询文件所属的软件包
安装rpm
语法:rpm -ivh rpm包的全路径名称
i:安装;v:verbose提示;h:hash进度条
卸载rpm
语法:rpm -e rpm包的名称
若提示删除会产生错误,则加上--nodeps
强行删除
yum
yum是一个Shell前端软件包管理器。基于RPM包管理,能从指定的服务器自动下载RPM包并安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
基本指令
yum list | grep 软件列表
:查询yum服务器是否有需要安装的软件
yum install xxx
:下载安装