一、Linux 文件与目录结构
1、Linux文件
- Linux系统中一切皆文件
2、Linux目录结构
目录 | 解释 |
---|---|
/(根目录) | 这是Linux文件系统的最顶层目录,所有其他目录都从这里开始。它包含了系统的所有文件和目录。 |
/bin | Binary的缩写,这个目录存放着最经常使用的命令 |
/sbin | s是Super User的意思,这里存放的是系统管理员使用的系统管理程序 |
/home | 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的 |
/root | 该目录为系统管理员,也称作超级权限者的用户主目录 |
/lib | 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 |
/lost+found | 这个目录一般情况下是空的,当系统非法关机时,这里就存放了一些文件 |
/etc | 所有的系统管理所需要的配置文件和子目录 |
/usr | 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的Program Files目录 |
/boot | 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的文件别放在这里 |
/proc | 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息 |
/srv | service缩写,该目录存放一些服务启动之后需要提取的数据 |
/sys | 这是Linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs |
/tmp | 这个目录是用来存放一些临时文件的 |
/dev | 类似于Windows的设备管理器,把所有的硬件用文件的形式存储 |
/media | Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下 |
/mnt | 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以看到里的内容了 |
/opt | 这个给主机额外安装软件所摆放的目录。比如你安装一个MySQL数据库则就可以放到这个目录下。默认是空的。 |
/var | 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件 |
/selinux | selinux是一种安全子系统,它能控制程序只能访问特定文件 |
二、系统管理操作
1、关闭防火墙
1.ystemctl
- 基本语法
systemctl start | stop | restart | status service_name
- 经验技巧:
/usr/lib/systemd/system
目录下每个文件都对应一个服务。
cd /usr/lib/systemd/system
ls -al
- 实操案例
- 查看网络服务的状态
sudo systemctl status NetworkManager
按q
可以退回到终端
- 停止网络服务
sudo systemctl stop NetworkManager
- 启动网络服务
sudo systemctl start NetworkManager
- 重启网络服务
sudo systemctl restart NetworkManager
2.systemctl设置后台服务的自启配置
- 查看服务开机启动状态
sudo systemctl list-unit-files
- 关闭指定服务的自动启动
sudo systemctl disable service_name
sudo systemctl disable NetworkManager # 关闭网络服务自启
- 开启指定服务的自动启动
sudo systemctl enable service_name
sudo systemctl enable NetworkManager # 开启网络服务自启
3.关闭防火墙
- 临时关闭防火墙
sudo systemctl status ufw # 查看防火墙状态
sudo systemctl stop utf # 临时关闭防火墙
- 开机启动时关闭防火墙
sudo systemctl enable ufw # 设置开机时启动防火墙
sudo systemctl disable ufw # 设置开机时关闭防火墙
sudo systemctl is-enabled ufw # 查看服务是否开启自启
2、关机重启命令
-
sync:将数据由内存同步到硬盘中。
- 现代Linux系统设计足够智能,能够在执行关机或重启命令时自动处理必要的清理和同步操作。因此,对于绝大多数情况,直接使用关机或重启命令即可,而无需手动执行sync。
-
关机和重启
命令 解释 备注 halt 关闭系统,当前版本Ubuntu不会断电。 Ubuntu22.04 poweroff 关闭系统并断电,等同于 shutdown -h now reboot 重启,等同于 shutdown -r now shutdown [选项] 时间 -h = halt 关机,不完全等同于halt命令
-r = reboot 重启
now 等待多久后关机(时间单位是分钟)
3、修改主机名
sudo hostnamectl --static set-hostname ubuntu # 将主机名改为ubuntu
# 终端命令提示符中@之后冒号之前的部分为当前的主机名。如:qingxuly-virtual-machine
- 修改主机名后,重启生效
4、修改Windows的hosts文件
- 修改 windows 的主机映射文件(hosts 文件)
- 使用 uTools 工具更改hosts文件
- 复制
C:\Windows\System32\drivers\etc
中的hosts文件到桌面,添加映射后,再剪切到原目录覆盖
192.168.5.101 ubuntu
5、APT软件包管理器
APT(Advanced Packaging Tools)是 Debian 及其派生 Linux 的软件包管理器,可以自 动下载,配置,安装二进制或者源代码格式的软件包,因此简化了 Unix 系统上管理软件的 过程
- 输入
apt
介绍用法
qingxuly@ubuntu:~/桌面$ apt
apt 2.4.12 (amd64)
用法: apt [选项] 命令
命令行软件包管理器 apt 提供软件包搜索,管理和信息查询等功能。
它提供的功能与其他 APT 工具相同(像 apt-get 和 apt-cache),
但是默认情况下被设置得更适合交互。
常用命令:
list - 根据名称列出软件包
search - 搜索软件包描述
show - 显示软件包细节
install - 安装软件包
reinstall - 重新安装软件包
remove - 移除软件包
autoremove - 卸载所有自动安装且不再使用的软件包
update - 更新可用软件包列表
upgrade - 通过 安装/升级 软件来更新系统
full-upgrade - 通过 卸载/安装/升级 来更新系统
edit-sources - 编辑软件源信息文件
satisfy - 使系统满足依赖关系字符串
- 案例实操:找不到命令“ifconfig”
三、常用基本命令
1、帮助命令
1.Manual Packages
- 查看手册页说明文档的方式
man man
- 我们常用的文档位于第 1、2、3、7 页
- 执行
man man
命令,进入手册页浏览模式,左上角会显示 MAN(1),这就是手册页引用格式或 man 引用格式,括号前面是命令(或系统调用等)的名称,括号内是命令所在 的手册页编号。 当存在多个同名但功能不同的命令或调用时,可以通过页编号区分。如:用户命令 write位于第一页,用 write(1)表示,系统调用 write 位于第 2 页,用 write(2)表示。
- 描述
- 手册页(Manual Packages),简称“man pages”,是 Unix 和类 Unix 系统(包括 Linux 和 macOS)上提供程序、函数、命令及文件格式文档的一种方式。手册页是用户和管理员获取命令用法、程序功能、配置文件规范和某些 API 函数描述的重要资源。
2.man 获得帮助信息
- 基本语法
man [页编号] [命令或配置文件] (功能描述:获得帮助信息)
- 显示说明
信息 | 功能 |
---|---|
NAME | 命令的名称和单行描述 |
SYNOPSIS | 怎样使用命令 |
DESCRIPTION | 命令功能的深入讨论 |
EXAMPLES | 怎样使用命令的例子 |
SEE ALSO | 相关主题(通常是手册页) |
- 案例实操
man ls # 查看ls命令的帮助信息
man write # 查看用户命令write的帮助信息
触发系统调用write:
- 创建
write_example.c
文件,粘贴如下代码。 - 运行
gcc write_example.c -o write_example
命令来编译程序。这将生成一个名为write_example
的可执行文件。 - 运行
./write_example
命令来运行程序。这将触发系统调用write并将消息写入"output.txt"文件。
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main() {
const char *message = "Hello, World!";
int file_descriptor = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (file_descriptor == -1) {
perror("Error opening file");
return 1;
}
ssize_t bytes_written = write(file_descriptor, message, 14);
if (bytes_written == -1) {
perror("Error writing to file");
close(file_descriptor);
return 1;
}
printf("Wrote %ld bytes to file", (long)bytes_written);
close(file_descriptor);
return 0;
}
man 2 write # 查看系统调用write的帮助信息
3.help获取shell内建命令的帮助命令
- help内建命令:shell 内建命令是 shell 的一部分,他们没有单独的可执行文件或手册页,这类命令的文 档通过 help 命令访问。
- 基本语法:help 命令
- 案例实操
help cd # 查看cd命令的帮助信息
4.常用快捷键
常用快捷键 | 功能 |
---|---|
Ctrl + C | 停止进程 |
Ctrl + L | 清屏;彻底清屏是:reset |
Ctrl + Q | 退出 |
Tab | 提示(检查是否敲错) |
上下键 | 查找执行过的命令 |
Ctrl + U | 清除当前敲的命令 |
2、文件目录类
1.pwd 显示当前工作目录的绝对路径
pwd:print working directory 打印工作目录
- 基本语法:pwd
- 案例实操
qingxuly@ubuntu:~/桌面$ pwd
/home/qingxuly/桌面
qingxuly@ubuntu:~/桌面$
2.ls 列出目录的内容
ls:list 列出目录内容
- 基本语法:ls [选项] [目录或是文件]
- 选项说明
选项 | 功能 |
---|---|
-a | 全部的文件,连同隐藏档(开头为.的文件)一起列出来(常用) |
-l | 长数据串列出,包含文件的属性与权限等等数据(常用) |
- 显示说明
- 案例实操
ls -al
ll # 等价于 ls -alF
# -F选项会在文件名后面添加一个符号来指示文件的类型。例如,目录后面会添加一个/,可执行文件后面会添加一个*,符号链接后面会添加一个@等。这样可以让用户更直观地识别文件的类型。
3.cd 切换目录
cd:change directory 切换目录
- 基本语法:cd [参数]
- 参数说明
参数 | 功能 |
---|---|
cd 绝对路径 | 切换路径 |
cd 相对路径 | 切换路径 |
cd ~ 或 cd | 回到自己的家目录 |
cd - | 回到上一次所在目录 |
cd … | 回到当前目录的上一级目录 |
cd -P | 跳转到实际物理路径,而非快捷方式路径 |
- 案例实操
4.mkdir 创建一个新的目录
mkdir:make directory 建立目录
- 基本语法:mkdir [选项] 要创建的目录
- 选项说明
选项 | 功能 |
---|---|
-p | 创建多层目录 |
- 案例实操
mkdir a # 创建一个目录
mkdir a/b # 创建一个目录
mkdir -p e/f/g # 创建一个多级目录
5.touch 创建空文件
- 基本语法:touch 文件名称
- 案例实操
touch test.txt
touch a/test.txt
6.cp 复制文件或目录
-
基本语法:cp [选项] source dest (复制source文件到dest)
-
选项参数说明
选项/参数 | 功能 |
---|---|
-r | 递归复制整个文件夹 |
source | 源文件 |
dest | 目标文件 |
- 经验技巧:强制覆盖不提醒的方法:
\cp a.txt /a/a.txt
;执行\cp
即可。- vim ~/.bashrc 中
alias cp=’cp -i’ 前加上”#”注释掉这行
,因为复制文件时,会提示是否覆盖。
- 案例实操
cp test.txt e
cp -r a e/f
7.rm 删除文件或目录
- 基本语法:rm [选项] deleteFile (递归删除目录中所有内容)
- 选项说明
选项 | 功能 |
---|---|
-r | 递归删除目录中所有内容 |
-f | 强制执行删除操作,而不提示用于进行确认 |
-v | 显示指令的详细执行过程 |
- 案例实操
rm test.txt
rm -r a
8.mv 移动文件与目录或重命名
- 基本语法
- mv oldNameFile newNameFile (重命名)
- mv /temp/movefile /targetFolder (移动文件)
- 案例实操
mv a.txt b.txt
mv e/test.txt ./
9.cat 查看文件内容
- 基本语法:cat [选项] 要查看的文件 (查看文件内容,从第一行开始显示)
- 选项说明
选项 | 功能描述 |
---|---|
-n | 显示所有行的行号,包括空行 |
- 经验技巧:一般查看比较小的文件,一屏幕能显示全的。
- 案例实操
cat -n a.txt
10.more 文件内容分屏查看器
more 是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明
- 基本语法:more 要查看的文件
- 操作说明
操作 | 功能说明 |
---|---|
空格(space) | 代表向下翻一页 |
Enter | 代表向下翻一行 |
Q | 代表立刻离开more,不再显示该文件内容 |
Ctrl + F | 向下滚动一屏 |
Ctrl + B | 返回上一屏 |
= | 输出当前的行号 |
:f | 输出文件名和当前行的行号 |
- 案例实操
cp ../.bashrc ./ # 复制 .bashrc 文件到当前目录
more .bashrc # 使用 more 查看文件
11.less 分屏显示文件内容
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于大型文件具有较高的效率。
-
基本语法:less 要查看的文件
-
操作说明
操作 | 功能说明 |
---|---|
空格 | 向下翻动一页 |
[pagedown] | 向下翻动一行 |
[pageup] | 向上翻动一行 |
/字串 | 向下搜寻【字串】的功能;n:向下查找,N:向上查找 |
?字串 | 向上搜寻【字串】的功能;n:向上查找,N:向下查找 |
q | 离开 less 这个程序 |
- 经验技巧:用 SecureCRT 时[pagedown] 和 [pageup] 可能会出现无法识别的问题。
- 案例实操:
less .bashrc
12.tail 输出文件尾部内容
tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。
- 基本语法:
- tail 文件 (查看文件尾部 10 行内容)
- tail -n 5 文件 (查看文件尾部 5 行内容,5 可以是任意行数)
- tail -f 文件 (实时追踪该文档的所有更新)
- 选项说明
选项 | 功能 |
---|---|
-n <行数> | 输出文件尾部 n 行内容 |
-f | 显示文件最新追加的内容,监视文件变化 |
- 案例实操
tail -n 1 .bashrc # 查看文件尾 1 行内容
tail -f a.txt # 实时追踪该文件的更新;如:echo追加内容可以监控
13.echo 输出内容到控制台
- 基本语法: echo [选项] [输出内容]
- 选项说明
选项 | 功能 | 备注 |
---|---|---|
-e | 支持反斜线控制的字符转换 | 如:\\ 输出\本身 \n 输出换行符 \t 输出制表符,即Tab键 |
- 案例实操
echo "hello\nworld" # 转义符号不生效
echo -e "hello\nworld" # 转义符号生效
14.>输出重定向和>>追加
- 基本语法
- ls -l > 文件 (列表的内容写入文件中(覆盖写))
- ls -al >> 文件 (列表的内容追加到文件的末尾)
- cat 文件1 > 文件2 (将文件1的内容覆盖到文件2)
- echo “内容” >> 文件 (将输出的内容追加到文件末尾)
- 案例实操
ls -l > x.txt # 列表的内容写入 x.txt
ls -al >> x.txt # 列表的内容追加写入 x.txt
echo hello >> x.txt # hello追加写入 x.txt
15.ln 软链接
软链接也称作符号链接,类似于Windows 里的快捷方式,有自己的数据块,主要存放了链接其它文件的路径
- 基本语法:ln -s [原文件或目录] [软链接名] (给原文件创建一个软链接)
- 经验技巧
- 删除软链接:rm 软链接名,而不是 rm -rf 软链接名/
- 查询:通过ll就可以查看,列表属性第1位是 l,尾部会有位置指向
- 案例实操
ln -s ~/aa/bb AB
ll
rm AB
16.history 查看已经执行过历史命令
- 基本语法:history
- 案例实操
history
3、Vi/Vim编辑器
VI 是Unix操作系统和类Unix 操作系统中最通用的文本编辑器
VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容
sudo apt install vim # 安装VIM
1.一般模式
以 vim 打开一个文件就可以进入一般模式了(也是默认的模式)。在这个模式中,你可以使用【上下左右】按键来移动光标,你可以使用【删除字符】或【删除整行】来处理文件内容,也可以使用【复制、粘贴】来处理你的文件数据。
- 常用语法
语法 | 功能描述 |
---|---|
yy | 复制光标当前一行 |
y数字y | 复制一段(从光标当前到后n行) |
p | 箭头移动到目的行粘贴 |
u | 撤销上一步 |
dd | 删除光标当前行 |
d数字d | 删除光标(含)后多少行 |
x | 剪切一个字母(当前光标),相对于 del |
X | 剪切一个字母(当前光标的前一个),相对于 Backspace |
yw | 复制一个词 |
dw | 删除一个词 |
shift + 6 (^) | 移动到行头 |
shift + 4 ($) | 移动到行尾 |
1 + shift + g | 移动到页尾 |
shift + g | 移动到页尾 |
数字 N + shift + g | 移动到目标行 |
- VI/VIM 键盘图
2.编辑模式
在一般模式中可以进行删除、复制、粘贴等动作,但是却无法编辑文件内容的。要等到你按下【i,I,o,O,a,A】等任何一个字母之后才会进入编辑模式。
注意:通常在Linux中,按下这些按键时,在画面的左下方会出现【INSERT或REPLACE】的字样,此时才可以进行编辑。而如果要回到一般模式时,则必须要按需【ESC】按键可退出编辑模式
- 进入编辑模式
- 常用语法
按键 | 功能 |
---|---|
i | 当前光标前 |
a | 当前光标后 |
o | 当前光标的下一行 |
I | 光标所在行最前 |
A | 光标所在行最后 |
O | 当前光标行的上一行 |
- 退出编辑模式:按【ESC】键
3.指令模式
在一般模式中,输入【: / ?】 3个中的任何一个按钮,就可以将光标移动到最底下那一行。
在这个模式当中,可以提供你【搜寻资料】的动作,而读取、存盘、大量取代字符、离开vi、显示行号等动作是在此模式中达到的
- 基本语法
命令 | 功能 |
---|---|
:w | 保存 |
:q | 退出 |
:! | 强制执行 |
/要查找的词 | n:查找下一个,N:往上查找 |
:noh | 取消高亮显示 |
:set nu | 显示行号 |
:set nonu | 关闭行号 |
:%s/old/new/g | 替换内容 /g global 替换匹配到的所有内容 |
- 案例实操
:wq # 保存退出;对于有写权限的文件,修改后,保存并退出
:q # 直接退出;没有修改文件内容,直接退出
:q! # 强制退出;修改了文件内容,但是不想保存,此时需要强制退出
:wq! # 强制保存退出
4.模式间切换
4、时间日期类
- 基本语法:data [option] … [+format]
- 选项参数说明
选项/参数 | 功能 |
---|---|
-d<时间字符串> | 显示指定的“时间字符串”表示的时间,而非当前时间 |
-s<日期时间> | 设置系统日期时间 |
<+日期时间格式> | 指定显示时使用的日期时间格式 |
1.date 显示当前时间
- 基本语法
- date (显示当前时间)
- 案例实操
date "+%y" # 显示两位数年份
date "+%Y" # 显示四位数年份
date "+%Y-%m-%d %H:%M:%S" # 显示年月日时分秒
date "+%F %T" # 显示年月日时分秒
2.date 显示非当前时间
- 基本语法:date -d “+1day”
- 案例实操
date -d "+1day" # 显示第二天日期
date -d "+1day" "+%F" # 显示第二天年月日
3.date 设置系统时间
- 基本语法:date -s 字符串日期
- 案例实操
# 设置中先关闭自动设置时间
sudo date -s "2024-05-07 08:00:00" # 更改系统时间
date # 查看当前时间
# 记得操作完,设置中打开自动设置时间,恢复正常时间
5、用户管理命令
1.adduser 添加新用户
- 基本语法:adduser 用户名
- 案例实操
sudo adduser xm # 添加用户xm
2.passwd设置或更改用户密码
- 基本语法:passwd 用户名
- 案例实操
sudo passwd xm
3.id 查看用户是否存在
- 基本语法:id 用户名
- 案例实操
qingxuly@ubuntu:~/桌面$ id xm
uid=1002(xm) gid=1002(xm) 组=1002(xm)
4.cat /etc/passwd 查看创建了哪些用户
- 基本语法:cat /etc/passwd
- 案例实操
5.su 切换用户
su:swith user 切换用户
- 基本语法:
- su 用户名称 (切换用户,只能获得用户的执行权限,不能获得环境变量)
- su - 用户名称 (切换用户,并获得用户的环境变量和执行权限)
6.userdel 删除用户
- 基本语法:
- userdel 用户名 (删除用户但保存用户主目录)
- userdel -r 用户名 (用户和用户主目录,都删除)
- 选项说明
选项 | 功能 |
---|---|
-r | 删除用户的同时,删除与用户相关的所有文件 |
- 案例实操
userdel xm
userdel -r xx
7.usermod 修改用户
- 基本语法:
- usermod -l newname oldname
- usermod -d /home/newhome username
- 选项说明
选项 | 功能 |
---|---|
-l | 改变用户名 |
-d | 修改家目录 |
6、用户组管理命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同。
如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理设计用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group 文件的更新。
1.groupadd 新增组
- 基本语法:groupadd 组名
- 案例实操
sudo groupadd zuzuzu
cat /etc/group # 查看组
2.groupdel 删除组
- 基本语法:groupdel 组名
- 案例实操
sudo groupdel zuzuzu
3.groupmod 修改组
- 基本语法:groupmod -n 新组名 老组名
- 选项说明
选项 | 功能描述 |
---|---|
-n <新组名> | 指定工作组的新组名 |
- 案例实操
groupmod -n xuxuxu zuzuzu
tail /etc/group -n 3
4.usermod 修改用户主组
在Linux 和 Unix 系统中,每个用户都有一个主组和可能的多个附加组。
用户的主组在用户创建时被指定,默认与用户名称相同,当用户创建一个新文件或目录时,默认情况下,这些文件或目录会被分配给用户的主组。
- 基本语法:usermod -g 组名 用户名
- 选项说明
选项 | 功能描述 |
---|---|
-g | 指定用户的新主组 |
- 案例实操
sudo usermod -g mengde wendi # 温迪改到蒙德组
su wendi # 切到温迪用户
touch jiuguan.txt # 温迪用户创建酒馆.txt
ll # 酒馆.txt 也属于蒙德组
5.查看附加组和用户的映射关系
/etc/group 文件存储了用户和附加组的映射关系,每一行对应一个用户组,第三个冒号后面是以该组作为附加组的用户列表,列表为空表示没有用户将其作为附加组
cat /etc/group
wendi:x:1008:
mengde:x:1009:
6.将用户添加到附加组
- 基本语法:usermod -aG 组名 用户名
- 选项说明
选项 | 功能描述 |
---|---|
-aG | 指定用户需要加入的附加组 |
- 案例实操
sudo usermod -aG mengde keli # 可莉添加到蒙德组作为附加组成员
7.将用户从组中移除
- 基本语法:deluser 用户名 组名
- 案例实操
sudo deluser keli mengde
8.sudo 设置普通用户具有 root 权限
sudo 是将对应的命令给到 root 用户去执行
sudo usermod -aG sudo keli # 可莉添加到sudo组
su keli # 切换到可莉用户
sudo ls # 可莉使用sudo获得root权限,每次执行需要输入用户密码
cat /etc/sudoers # 查看sudo的附加组中有可莉
sudo vim /etc/sudoers # 第50行 添加NOPASSWD: 接着 wq! 保存文件
# Allow members of group sudo to execute any command
# %sudo ALL=(ALL:ALL) ALL 第50行 改为下列行
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
su keli # 切换到可莉用户
sudo ls # 可莉使用sudo获得root权限,执行sudo 就不需要输入密码
7、文件权限命令
1.文件属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用 ll 或者 ls -l 命令来显示一个文件的属性以及文件所属的用户和组。
- 文件属性:从左到右的10个数字表示
文件类型 | 属主权限 | 属组权限 | 其他用户权限 |
---|---|---|---|
0 | 1 2 3 | 4 5 6 | 7 8 9 |
d | r w x | r - x | r - x |
目录文件 | 读 写 执行 | 读 写 执行 | 读 写 执行 |
-
如果没有权限,就好出现 - 而已。从左到右用0-9这些数字来表示:
-
0 首位表示类型。在Linux中第一个字符代表这个文件是目录、文件或链接文件等。
-
代表文件,d
代表目录,l
代表链接文档
-
第1-3位确定属主(该文件的所有者)拥有该文件的权限——user
-
第4-6位确定属组(所有者的同组用户)拥有该文件的权限——group
-
第7-9位确定其他用户拥有该文件的权限——other
-
- rwx 作用文件和目录的不同解释
- 作用到文件
- r:read,可以读取,查看
- w:write,可以修改,但是不代表可以删除文件,删除一个文件的前提条件是对该文件所在的目录由写权限,才能删除该文件
- x:execute,可以被系统执行
- 作用到目录
- r:read,可以读取,ls 查看目录内容
- w:write,可以修改,目录内创建+删除+重命名目录
- x:execute,可以进入该目录
- 案例实操
ll
链接数通常指的是硬链接数。
硬链接数是指一个文件或目录在文件系统中的入口数量。对于文件来说,每个硬链接都是对同一个文件的不同命名,它们都指向相同的数据块。对于目录来说,硬链接数可以理解为可以通过多少个不同的路径进入该目录。在Linux系统中,可以使用
ls -l
命令来查看文件或目录的硬链接数。
2.chmod 改变权限
- 基本语法
文件类型 | 属主权限 | 属组权限 | 其他用户 |
---|---|---|---|
0 | 1 2 3 | 4 5 6 | 7 8 9 |
d | r w x | r - x | r - x |
目录文件 | 读 写 执行 | 读 写 执行 | 读 写 执行 |
- chmod [{ugoa} {±=}{rwx}] 文件或目录
- chmod [mode=421]
- 经验技巧
- u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
- r =4 w=2 x=1 rwx=4+2+1=7
- 案例实操
touch hutao # 创建胡桃文件
chmod u+x hutao # 为胡桃所有者添加执行权限
chmod g-w hutao # 为胡桃所有组移除写权限
chmod a+x hutao # 等于 chmod +x hutao;为所有者、所有组、其他人都加上执行权限
chmod 764 hutao # 为胡桃所有者添加读写执行、所有组添加读写、其他人添加读权限
3.chown 改变所有者
- 基本语法:chown [选项] [最终用户] [文件或目录] (改变文件或目录的所有者)
- 选项说明
选项 | 功能 |
---|---|
-R | 递归操作 |
- 案例实操
sudo chown qingxuly software/ # 改变software文件所有者为qingxuly
sudo chown -R qingxuly:qingxuly ./ # 改变当前目录下所有文件文件夹的所有者、所属组权限为qingxuly
4.chgrp 改变所属组
- 基本语法:chgrp [最终用户组] [文件或目录] (改变文件或目录的所属组)
- 案例实操:
sudo chgrp keli liyue # 璃月文件夹的所属组改为可莉
5.练习
- 在opt目录下创建蒙德目录,用于管理蒙德。所有者为蒙德的琴,所属组为蒙德,琴有全部的权限,蒙德人有读和执行的权限,其他人只有读的权限。
# 1.创建琴账号 赋予sudo权限
sudo adduser qin
sudo usermod -aG sudo qin
# 2.创建蒙德组
sudo groupadd mengde
# 3.创建凯亚账号 添加到蒙德组中
sudo adduser kaiya
sudo usermod -aG mengde kaiya
# 4.在opt目录下创建蒙德工作目录 修改对应的所有者和所属组 琴:蒙德
cd /opt
sudo mkdir mengde
sudo chown qin:mengde mengde/
# 5.目录的权限比较特殊 读和执行的权限必须都有才能进入目录看有哪些文件 即754访问不了文件 蒙德目录权限等级 755
sudo chmod 755 mengde/
# 6.修改工作文件所有者和所属组 琴:蒙德 只有root权限才能去修改文件的所有者和所属组 即使是文件的所有者也不能修改
cd mengde/
vim fengshen.txt # echo "babatuosi"
chmod 754 fengshen.txt
sudo chown qin:mengde fengshen.txt
# 测试凯亚是否成功执行 fengshen.txt
su kaiya
cd /opt/mengde
./fengshen.txt
- 使用root用户在opt目录下创建mysql文件夹,用于安装mysql,赋予其他用户读的权限。
# 如果其它用户需要有读的权限,需要同时给目录赋予r、x的权限,对应5
cd /opt
sudo adduser mysql
sudo mkdir mysql
sudo chown mysql:mysql mysql/
- 使用root用户在opt目录下创建redis文件夹,用于安装使用redis,赋予其他用户读和执行的权限。
cd /opt
sudo adduser redis
sudo mkdir redis
sudo chown redis:redis redis/
su redis # 切换为redis用户
cd /opt/redis
vim a.txt
exit # 回到本人用户
cd /opt/redis
ll # 检查本人对a.txt的权限
8、搜索查找类
1.find 查找文件或目录
find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件显示在终端
- 基本语法:find [搜索范围] [选项]
- 选项说明
选项 | 功能 |
---|---|
-name <查询方式> | 安装指定的文件名查找文件 |
-user <查询方式> | 查找属于指定用户名所有文件 |
-size <文件大小> | 安装指定的文件大小查找文件,单位为: b:块(512字节) c:字节 w:字(2字节) k:千字节 M:兆字节 G:吉字节 |
- 案例实操
find ./ -name a.txt # 查找当前目录中文件名为a.txt的文件
find ./ -name *.txt # 查找当前目录中以.txt结尾的文件
find ./ -user qin # 查找当前目录中琴用户所有文件
find ./ -size +1c # 查找当前目录中大于1字节的文件
2.grep 过滤查找及“|”管道符
管道符,“|”,表示将前一个命令的处理结果输出给后面的命令处理
-
基本语法: grep [选项] 查找内容 源文件
-
选项说明
选项 | 功能 |
---|---|
-n | 显示匹配行及行号 |
-v | 显示不包含匹配文本的所有行(相反模式) |
- 案例实操
ll | grep -n mysql # 显示包含mysql所有行,并显示行号
ll | grep -nv mysql # 显示不包含mysql所有行,并显示行号
9、压缩和解压缩类
1.gzip/gunzip 压缩
- 基本语法
- gzip 文件 (压缩文件,只能将文件压缩为 *.gz 文件)
- gunzip 文件.gz (解压缩文件命令)
- 经验技巧
- 只能压缩文件不能压缩目录
- 不保留原来文件
- 案例实操
gzip profile # 压缩文件
gunzip profile.gz # 解压缩文件
2.tar 打包
- 基本语法: tar [选项] 文件.tar.gz 将要打包进去的内容 (打包目录,压缩后的文件格式.tar.gz)
- 选项说明
选项 | 功能 |
---|---|
-c | 产生.tar打包文件 |
-v | 显示详细信息 |
-f | 指定压缩后的文件名 |
-z | 打包同时压缩 |
-x | 解包.tar 文件 |
- 案例实操
tar -zcvf 1.tar.gz A profile hutao # 将A profile hutao打包进 1.tar.gz
tar -zxvf 1.tar.gz -C ./tar # 将1.tar.gz 解压到 tar目录
3.练习
- 下载最新的flume框架安装包tar.gz完成解压缩,放置到/opt/module目录下,查找超过1M的jar包有哪些。
# 1.下载对应的安装包https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.11.0/
# 2.解压 tar.gz的包到 /opt/module
sudo mkdir /opt/module
sudo tar -zxvf apache-flume-1.11.0-bin.tar.gz -C /opt/module
# 3.查找超过1M的jar包有哪些
cd /opt/module/apache-flume-1.11.0-bin/
find ./ -name *.jar -size +1M
find ./ -size +1M | grep jar
10、磁盘类
1.df 查看磁盘空间使用情况
df :disk free 空余硬盘
- 基本语法: df [选项] (列出文件系统的整体磁盘使用量,检查文件系统的磁盘占用情况)
- 选项说明
选项 | 功能 |
---|---|
-h | 以 人们较易阅读的GB、MB、KB 等格式自行显示 |
- 案例实操
df # 查看磁盘使用情况
df -h
2.du 文件和目录的磁盘使用空间
- 基本语法: du 目录/文件 (统计文件或递归显示目录及子目录的磁盘使用空间)
- 选项说明
选项 | 功能 |
---|---|
-a | 显示当前目录下所有的文件目录及子目录大小 |
-s | 仅显示指定目录或文件的总大小,而不列出其子项占用的容量 |
- 案例实操
du conf # 查看conf目录及子目录的空间使用情况
du -ah conf # 查看conf目录及子目录所有文件的空间使用情况
du -sh ./ # 查看当前目录使用空间的总大小
du -h ./ # 以人们易读的方式查看当前目录的空间使用情况
11、进程线程类
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源
1.ps 查看当前系统进程状态
ps:process status 进程状态
- 基本语法:
- ps -aux | grep xxx (查看系统中所有进程)
- ps -ef | grep xxx (可以查看子父进程之间的关系)
- 选项说明
选项 | 功能 |
---|---|
-a | 选择所有进程 |
-u | 显示所有用户的所有进程 |
-x | 显示没有终端的进程 |
- 功能说明
ps -aux | 信息说明 |
---|---|
USER | 该进程是由哪个用户产生的 |
PID | 进程的ID号 |
%CPU | 该进程占用CPU资源的百分百,占用越高,进程越耗费资源 |
%MEM | 该进程占用物理内存的百分比,占用越高,进程越耗费资源 |
VSZ | 该进程占用虚拟内存的大小,单位 KB |
RSS | 该进程占用实际物理内存的大小,单位 KB |
TTY | 该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端;tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 打包虚拟终端 |
STAT | 进程状态。常见的状态由:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台 |
START | 该进程的启动时间 |
TIME | 该进程占用 CPU 的运算时间,注意不是系统时间 |
COMMAND | 产生此进程的命令名 |
ps -ef | 信息说明 |
---|---|
UID | 用户ID |
PID | 进程ID |
PPID | 父进程ID |
C | CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O 密集型运算,执行优先级会提高 |
STIME | 进程启动的时间 |
TTY | 完整的终端名称 |
TIME | CPU时间 |
CMD | 启动进程所用的命令和参数 |
- 经验技巧
- 如果想查看进程的CPU占用率和内存占用率,可以使用 aux
- 如果想查看进程的父进程ID可以使用 ef
- 案例实操
ps
ps -aux # 查看进程的 CPU占用率和内存使用率
ps -aux | grep 13427
ps -ef | grep 13427
ps -ef # 查看进程的父进程ID
2.kill 终止进程
- 基本语法:
- kill [选项] 进程号 (通过进程号杀死进程)
- killall 进程名称 (通过进程名称杀死进程)
- 选项说明
选项 | 功能 |
---|---|
-9 | 表示强迫进程立即停止 |
- 案例实操
kill 13910 # 终止tail的进程
kill -9 13966 # 杀死tail的进程
3.查看服务器总体内存
- 基本语法:free -m (查看服务器总体内存)
- 案例实操
free # 默认单位KB
free -m # 使用MB显示总体内存
4.top查看系统更健康状态
- 基本命令:top [选项]
- 选项说明
选项 | 功能 |
---|---|
-d 秒数 | 指定 top 命令每隔几秒更新 |
-i | 使top不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
- 操作说明
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以PID排序 |
q | 退出top |
- 查询结果字段解释
(1)第一行:信息为任务队列信息
top - 21:42:29 up 20:06, 4 users, load average: 0.19, 0.20, 0.24
内容 | 说明 |
---|---|
21:42:29 | 系统当前时间 |
up 20:06 | 系统的运行时间,本机已经运行 20小时6分钟 |
4 users | 当前登录了 4 个用户 |
load average: 0.19, 0.20, 0.24 | 系统在之前 1分钟、5分钟、15分钟的平均负载。 一般认为小于1时,负载较小;如果大于1时,系统已经超出负荷。 |
(2)第二行:行为进程信息
任务: 336 total, 1 running, 335 sleeping, 0 stopped, 0 zombie
336 total | 系统中的进程总数 |
---|---|
1 running | 正在运行的进程数 |
335 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程。如果不是0,需要手工检查僵尸进程 |
(3)第三行:行为CPU信息
%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu(s): 0.1 us | 用户模式占用的CPU百分比 |
---|---|
0.2 sy | 系统模式占用的CPU百分比 |
0.0 ni | 改变过优先级的用户进程占用的CPU百分比 |
99.8 id | 空闲CPU的CPU百分比 |
0.0 wa | 等待输入/输出的进程的占用CPU百分比 |
0.0 hi | 硬中断请求服务占用的CPU百分比 |
0.0 si | 软中断请求服务占用的CPU百分比 |
0.0 st | st(steal time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分百 |
(4)第四行:物理内存信息
MiB Mem : 3870.7 total, 539.5 free, 1287.4 used, 2043.8 buff/cache
MiB Mem : 3870.7 total | 物理内存的总量,单位MiB=2^20字节 |
---|---|
539.5 free | 空闲内存 |
1287.4 used | 已使用内存 |
2043.8 buff/cache | 缓冲/缓冲内存 |
(5)第五行:交换分区(swap)信息
MiB Swap: 3898.0 total, 3898.0 free, 0.0 used. 2277.4 avail Mem
MiB Swap: 3898.0 total | 交换分区(虚拟内存) 的总大小 |
---|---|
3898.0 free | 空闲交换空间 |
0.0 used | 已使用交换空间 |
2277.4 avail Mem | 可用内存 |
- 案例实操
top
5.netstat 显示网络统计信息和端口占用情况
- 基本语法
- netstat -anp | grep 进程号 (查看该进程网络信息)
- netstat -nlp | grep 端口号 (查看网络端口号占用情况)
- 选项说明
选项 | 功能 |
---|---|
-n | 拒绝显示别名,能显示数字的全部转化为数字 |
-l | 仅列出有在listen(监听)的服务状态 |
-p | 表示显示哪个进程在调用 |
- 案例实操
netstat # ssh行 是Windows远程连接的网络信息
12、crontab 系统定时任务
1.crontab 服务管理
- 重新启动 crond 服务
sudo systemctl status cron
sudo systemctl restart cron
2.crontab 定时任务设置
- 基本语法:crontab [选项]
- 选项说明
选项 | 功能 |
---|---|
-e | 编辑 crontab 定时任务 |
-l | 查询 crontab 任务 |
-r | 删除当前用户所有的 crontab 任务 |
- 选择编辑器
crontab -e # ctrl + x 退出选择编辑器页面
EDITOR=vim crontab -e # 通过EDITOR环境变量在执行 crontab 时选择编辑器
- 参数说明
- 执行上述命令会进入 crontab 编辑界面,并打开 vim 编辑定时任务
(1)* * * * * 执行的任务
项目 | 含义 | 范围 |
---|---|---|
第一个“*” | 一个小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几个小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表周日) |
(2)特殊符号
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次 |
, | 代表不连续的时间。比如“0 8,12,16 * * *”:代表在每天的8点整、12点整、16点整都执行一次命令 |
- | 代表连续的时间范围。比如“0 5 * * 1-6”:代表在周一到周日的凌晨5点整执行命令 |
*/n | 代表每隔多久执行一次。比如"*/10 * * * *":代表每隔10分钟就执行一次命令 |
(3)特点时间执行命令
时间 | 含义 |
---|---|
45 22 * * * | 每天 22:45 执行命令 |
0 17 * * 1 | 每周一 17:00 执行命令 |
0 5 1,15 * * | 每月1号、15号 5:00 执行命令 |
40 4 * * 1-5 | 每周一到周五 4:40 执行命令 |
0 0 1,15 * 1 | 每月1号、15号和每周一 都执行命令。 注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱 |
- 案例实操
# 监控hutao.txt
cd /home/qingxuly/桌面
touch hutao.txt
# 新窗口执行
EDITOR=vim crontab -e
*/1 * * * * /bin/echo "ao" >> /home/atguigu/桌面/hutao.txt # :wq保存退出
tail -f hutao.txt # 每隔1分钟可以看到打印一行 “ao"
# 取消定时任务的两种方式
crontab -e # 删除定时任务,Ctrl + X 退出,输入Y保存
EDITOR=vim crontab -e # 删除定时任务,输入:wq保存
本文到此结束,如有疑问或建议,请随时留言讨论。