学习虚拟机时的笔记

两种虚拟机备份

第一种:虚拟机快照,第二种将虚拟机安装后的文件夹拷贝一份

虚拟化引擎下面第一个可以用于虚拟机中创建虚拟机

分区说明(200g硬盘/2g内存)

/boot 启动文件1g

/data 实验数据 50G

swap 虚拟内存 一般小于等于8G ,常等于两倍物理内存这里为4G;

/ 根分区 100G

功能键

tty -查询终端窗口

who -显示所有连接的 图形终端

ssh远程连接

Windows10 命令行中也可以ssh root@IP 作为远程访问

free -h 查看内存详细使用情况

runlevel 查看当前所处的模式 init后面的数字 即模式

init 0 关机

init 6 重启

reboot 重启计算机

exit 退出

logout 注销当前身份

lscpu 查看当前的缓存信息

init 3 关闭图形化界面(可以节省1G内存)3模式

init 5 打开图形化界面,5模式

gedit / 相当于windows记事本(用于图形化界面系统的文件打开)

cat / 查看文件内容

ssh root@ip 远程终端

echo $PS1 显示提示符 变量PSI中的内容

echo $SHELL 显示 SHELL类型

bc 计算器(可以进制之间的转换ibase=2,表示输入为2进制,默认输出10进制,obase=2,表示输出为2进制)

nano / 不依赖图形化界面对文本进行编辑

/etc/motd 文件 在远程登陆的时候登陆成功会显示motd中的内容

1608123058810

etc/motd 文件为 登录后的信息提示

etc/issue issue文件为登陆前的信息提示

shell 将命令行输入的英文转换为二进制文件,同时也是一种高级开发语言靠近底层

echo $SHELL 查询当前使用的shell类型

1608124262128

cat /etc/shells 查看系统中支持的shell类型

ps aux 列出 系统中所有的运行的程序,可以看到bash的运行相当于Windows的任务管理器

hostname NAME 设置主机名 临时修改在内存中,重启就复原

nano /etc/hostname 可以直接永久改;

还有一种可以直接用命令改主机名:

​ 有的没有这个命令:hostnamectl set-hostname NAME,同时改了内存和文件;

原理同样改的是/etc/hostname里面的名字

可以用cat /etc/hostname 查看主机名

whoami 显示用户名信息

who am i 显示详细用户信息 用户名 终端 登录时间 (登录地IP)

1608125065481

init 6 重启

提示符

默认代表管理员 $默认代表用户 命令echo $PS1 可以更改(内存中更改)

可以直接输入PS1=""修改

1608126863280

36是颜色位置

文件中修改提示符样式:

echo 'PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h\

[\e[1;31m] \W[\e[1;32m]][\e[0m]\$"' > /etc/profile.d/env.sh

修改文件,永久改变颜色

# 管理员

$ 普通用户

显示提示符格式

[root@centos8 ~]#echo $PS1

[\e[1;35m][\u@\h \W]$[\e[0m]

修改提示符格式范例

PS1="[\e[1;5;41;33m][\u@\h \W]\$[\e[0m]"

PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h[\e[1;31m] \W[\e[1;32m]]\

[\e[0m]\$"

提示符格式说明:

\e 控制符\033

\u 当前用户

\h 主机名简称

\H 主机名

\w 当前工作目录

\W 当前工作目录基名

\t 24小时时间格式

\T 12小时时间格式

! 命令历史数

# 开机后命令历史数

范例:持久保存提示符格式相关变量 PS1

[root@centos8 ~]# echo 'PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h\

[\e[1;31m] \W[\e[1;32m]][\e[0m]\$"' > /etc/profile.d/env.sh

[root@centos8 ~]#cat /etc/profile.d/env.sh

PS1="[\e[1;32m][\t [\e[1;33m]\u[\e[35m]@\h[\e[1;31m] \W[\e[1;32m]]\

[\e[0m]\$"

[root@centos8 ~]# exit

logout

linux命令的执行

type 判断是SHELL内部命令还是外部命令,外部命令会显示路径,内部命令不显示路径,

用法type +命令 ,还有一种type -a 命令 ,即找出所有同名命令并显示外部或内部命令

优先内部命令查找;

内部命令优先,若有同名外部命令则外部命令不生效

enable -n +内部命令, 表示禁用内部命令;可用于同名命令时要用到外部命令的情况,

help中可以看到禁用后的命令的前面有一个* 表示已禁用(临时禁用,可重启恢复);

enable +内部命令 表示启用该内部命令;

shell命令都加载到缓存中了

echo $PATH 展示出来type的搜索路径

第一次找到之后便会存放在内存中,第二次搜索是 会直接返回这个搜索结果这个过程叫做hashed(哈希)

hash 命令可以看到目前已经hashed的命令

1608132468873

前面数字表示已经执行的次数,后面为hashed保存的路径

hash 提高了 搜索效率

enable 查看所有的内部命令;即echo $SHELL包含的所有命令

安装命令 yum install +命令名字 例如 yum install nano

CentOS 8中 新增 dnf install nano 安装nano命令

nano 编辑好文件 但没生效可用 . 或者source 生效

. 等同 source 让配置文件生效,用法. +文件路径/文件名

或者source +文件路径/文件名

which +外部路径 搜索外部命令的磁盘位置

whereis +命令 搜索命令的路径 和帮助文档的路径

info 查帮助

man文件存放帮助文档

man 命令查看帮助文档

whatis 命令 1608535598464

1 和1p 是man中的章节编号

然后用man命令 man 5 issue 就可以查看issue的帮助文档

mv 文件 文件路径 将文件移动到 路径下

hash -r 清理缓存,文件变动时用;避免搜索错误

hash -d name 清理一条命令路径

命令别名alias

alias 别名=" 完整命令 ",临时的

别名最好不和已经存在的重复 可用type 检测是否存在;

若别名存在,别名优先级高于内部命令

\别名 意为取消此次别名生效还可以 '别名', "别名" 作用相同;

优先级 别名>内部命令>外部命令;

持久保存 要更改配置文件,/home/用户名/.bashrc 文件

添加一条alias 别名=" 完整命令 "

删除别名:unalias +别名

lsblk 显示当前的硬盘包括分区列表

alias 显示所有别名

unalas -a 临时清除所有别名

命令格式

选项:用于启用或关闭命令的某个或某些功能

短选项:UNIX 风格选项,-c 例如:-l, -h

长选项:GNU风格选项,--word 例如:--all, --human

BSD风格选项: 一个字母,例如:a,使用相对较少

一种新的命令格式命令嵌套,命令之后接命令的子命令tab键可以将子命令提示出来

参数:命令的作用对象,比如:文件名,用户名等

注意:

多个选项以及多参数和命令之间使用空白字符分隔

取消和结束命令执行:Ctrl+c,Ctrl+d

多个命令可以用 ";" 符号分开

一个命令可以用\分成多行

常见命令

1.7.1 查看硬件信息

1.7.1.1 查看****cpu

lscpu命令可以查看cpu信息

cat /proc/cpuinfo也可看查看到

范例:

[root@centos8 ~]#id -u wang

1000

ls --all

free -h 查看内存同样 也可以文件中查看内存情况命令为:cat /proc/meminfo

说明:

/proc proc中的文件都是在内存中的,不占用磁盘空间

free --human

lsblk 查看磁盘分区情况,也可以用cat /proc/partitions查看

uname -r 可以查看版本内核(os)

cat /etc/os-release 也可以查看内核信息

NAS服务器 家庭常用存储服务器

时间和日期

Linux的两种时钟

系统时钟:由Linux内核通过CPU的工作频率进行的

硬件时钟:主板

相关命令

date 显示和设置系统时间

date 062018302020.30 修改时间为2020年6月20日18点30分30秒(保存在内存时间,断电/重启会丢失)

修改时间格式: date 月日时分年.秒

date -d ‘+1 day’ 输出明天的日期

date ‘’+%F %T\1608532991341

硬件主板时间: clock 该命令会显示主板时间和时间戳

[root@ubuntu1804 ~]#clock,hwclock: 显示硬件时钟

-s, --hctosys 以硬件时钟为准,校正系统时钟

-w, --systohc 以系统时钟为准,校正硬件时钟1608178655891

ll /etc/localtime 显示当前时区

timectl list-timezones 列出所有时区

可以更改时区: timectl set-timezone /Asia/Shanghai

将时区改为亚洲上海

cal 是日历

cal 2020 查看2020年的一年日历

也可以看某一年一个月的日历 cal 月 年

关机重启

关机:

halt

poweroff

重启:

reboot

-f: 强制,不调用shutdown

-p: 切断电源

关机或重启:shutdown

-r: reboot

-h: halt

-c:cancel

TIME:无指定,默认相当于+1(CentOS7)

now: 立刻,相当于+0

+#: 相对时间表示法,几分钟之后;例如 +3

hh:mm: 绝对时间表示,指明具体时间

shutdown 01:20 表示凌晨1点20分关机

用户登录信息查看命令

whoami: 显示当前登录有效用户

who: 系统当前所有的登录会话

w: 系统当前所有的登录会话及所做的操作

会话管理工具

screen工具:

后台持续工作能力

可以实现会话管理,新建会话,共享会话等

安装 yum -y install screen

dnf -y install screen centos8(dnf 作用同yum)

screen命令常见用法:

创建新screen会话:screen -S [session]

加入screen会话: screen -x [session]

退出并关闭screen会话:exit

screen 中执行命令 后可以不受窗口影响关闭之后依然在运行(持续后台工作特点)

screen 虚拟一个终端执行命令,即使关闭窗口依然可以后台运行,知道运行结束

协作功能:

多人协作:用户AB(AB同账号且连接同一主机IP)

A:screen -S nameA 创建协作窗口

B:screen ls 查看screen 窗口列表找到nameA

B:screen -x nameA 表示加入nameA的屏幕实现B同步了A的屏幕,并且可以操作

Ctrl+a,d 剥离当前screen会话

剥离之后可以在进去 screen -r nameA

exit 退出并关闭协作窗口

rpm -qi -screen 查看screen工具的详细信息

工具tmux类似screen

tmux**

Tmux 是一个终端复用器(terminal multiplexer),类似 screen,但是更易用,也更强大

Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离,功能如下

它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。

它可以让新窗口"接入"已经存在的会话。

它允许每个会话有多个连接窗口,因此可以多人实时共享会话。

它还支持窗口任意的垂直和水平拆分

安装

启动与退出

mux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起。默认的前缀键是 Ctrl+b ,即先按下

Ctrl+b ,快捷键才会生效。帮助命令的快捷键是 Ctrl+b ? 然后,按下 q 键,就可以退出帮助

yum install tmux

[root@centos8 ~]#tmux

[root@centos8 ~]#exit

logout新建会话

第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1,以此类推。这些窗口对应的会话,就是 0

号会话、1 号会话。使用编号区分会话,不太直观,更好的方法是为会话起名。下面命令新建一个指定

名称的会话。

tmux new -s

tmux ls或Ctrl+b,s 可以查看当前所有的 Tmux 会话

tmux ls

tmux list-session

分离会话

在 Tmux 窗口中,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。

tmux detach

接入会话

tmux attach 命令用于重新接入某个已存在的会话。

tmux attach -t

范例:

tmux attach -t 0

杀死会话

tmux kill-session命令用于杀死某个会话。

tmux kill-session -t

切换会话

tmux switch命令用于切换会话

tmux switch -t

可以将窗口分成多个窗格(pane),每个窗格运行不同的命令

上下分窗格

tmux split-window

ctrl+b,"

左右分窗格

tmux split-window -h

ctrl+b,%

窗格快捷键

Ctrl+b %:划分左右两个窗格Ctrl+b ":划分上下两个窗格

Ctrl+b :光标切换到其他窗格。是指向要切换到的窗格的方向键,比如切换

到下方窗格,就按方向键↓

Ctrl+b ;:光标切换到上一个窗格

Ctrl+b o:光标切换到下一个窗格。

Ctrl+b {:当前窗格左移

Ctrl+b }:当前窗格右移

Ctrl+b Ctrl+o:当前窗格上移

Ctrl+b Alt+o:当前窗格下移

Ctrl+b x:关闭当前窗格

Ctrl+b !:将当前窗格拆分为一个独立窗口

Ctrl+b z:当前窗格全屏显示,再使用一次会变回原来大小

Ctrl+b Ctrl+:按箭头方向调整窗格大小

Ctrl+b q:显示窗格编号

窗口管理

除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口

新建窗口

tmux new-window命令用来创建新窗口

tmux new-window

新建一个指定名称的窗口

tmux new-window -n

切换窗口

tmux select-window命令用来切换窗口

切换到指定编号的窗口

tmux select-window -t

切换到指定名称的窗口

tmux select-window -t

窗口快捷键

Ctrl+b c:创建一个新窗口,状态栏会显示多个窗口的信息。

Ctrl+b p:切换到上一个窗口(按照状态栏上的顺序)。

Ctrl+b n:切换到下一个窗口。

Ctrl+b :切换到指定编号的窗口,其中的是状态栏上的窗口编号

Ctrl+b w:从列表中选择窗口

Ctrl+b ,:窗口重命名

列出所有快捷键,及其对应的 Tmux 命令

tmux list-keys

列出所有 Tmux 命令及其参数

输出信息echo

echo 字符串 可以将字符串输出可以不用双引号1608213206100

echo " 双引号内弱引用" 就是说双引号内,有变量则输出变量的内容例 echo "$PATH" 会列出变量PATH中的内容 弱引用可以输出变量,不能直接输出命令, 加入反向单引号则可以输出反向单引号内的命令

1608272226258

echo ' ' 以字符串形式输出例如 echo 'hello $PATH' 只会输出hello $PATH ,单引号具有强引用可以无视变量,命令1608272153054

如果echo "这里面含有命令" 若想命令可以执行则可以在命令的前后加上反单引号 ``:

输出 echo 后双引号内的命令 1608272004852

反向单引号内的视为命令

反向单引号 中无法嵌套命令 可以用$(命令$())实现

结论:

反向单引号内的变量和命令都能识别,

单引号内的变量命令都不识别,

双引号则可以识别变量,不能识别命令

$(命令) 等同于`命令 (反单引号)

echo $path 输出变量path的内容$ 后跟变量名

echo -e 启动\字符的解释功能

echo -n 字符串 不换行输出 1608213385953

echo -e "\a" 让计算机发出声音1608213508624

echo $PATH=echo "$PATH" 效果等同

echo '$PATH' 则会输出 ' 输出这里的内容 ',双引号可有可无,单引号代表以字符串输出单引号中的内容

字符集 与编码

数字字母 对应二进制的关系

最早的字符集是ASCII码

编码和字符集类似严格说又有不同:

字符集表示字符和二进制的对应关系

编码表示如何将字符转化为二进制进行储存或相反,编码决定了空间使用的大小

中国的字符集GBK

Unicode 万国码包含多个国家的字符集

主流utf-8 空间设计合理

echo $LANG 查询编码1608214395426

LANG= en_US.UTF-8 可以设置

例:LANG=zh_cn.utf-8 提示信息改为中文的错误提示

UTF-8兼容ASCII

保存字母则用ASCII保存,

hexdump -C test.txt 查看文件中的储存形式,并以16进制显示1608215379276

1608216384484

mkdir 创建文件夹

touch 创建文件

rm -r 递归删除文件夹以及文件夹内的文件

ll 文件 可以查看文件内的所占字节数 权限,操作时间,

echo hello >test.txt1608217193700

一种写入方式

1608217604974

echo -e "\ASCII" 输入ASCII 输出对应编码

man ascii 查看编码信息

1608217894172

sleep 计算机休眠

uptime

clear 清屏 或者ctrl +L

help 帮助

括号扩展:

{}

可以实现打印重复字符串的简化形式

echo {1..10} 打印 1 2 3 4 5 6 7 8 9 10

{}前后可以加东西或文件后缀

{1..10..2} 打印出 1 3 5 7 9

{a..z} 打印顺序为ASCII码顺序

tab键 自动补全

自动补全命令,子命令,路径,文件名

nmcli 后面跟嵌套子命令,一种新的命令格式嵌套子命令 可以用tab键自动补全

rpm -qa bash* 查询bash*的所有套件以询问的方式

rpm命令

  rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

语法
rpm(选项)(参数)
选项
-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合``"-l"``参数使用;
-d:只列出文本文件,本参数需配合``"-l"``参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--``hash``:套件安装时列出标记;
-i:显示套件的相关信息;-i<套件档>或--``install``<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合``"-l"``参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-``v``:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错

1608300692108

安装上图这个软件才能使用嵌套子命令并用tab键补全子命令

tab补全子命令需要安装软件包bash-completion

把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名

如果惟一:则直接补全

否则:再次Tab给出列表

双击tab键

command 2Tab 所有子命令或文件补全

string2Tab 以string开头命令

/2Tab 显示所有根目录下一级目录,包括隐藏目录

./2Tab 当前目录下子目录,包括隐藏目录

*2Tab 当前目录下子目录,不包括隐藏目录

~2Tab 所有用户列表

$2Tab 所有变量

@2Tab /etc/hosts记录 (centos7 不支持)

=2Tab 相当于ls –A (centos7不支持)

a 2tab 将所有a开头的命令显示出来

命令行历史

执行命令后,系统会将执行过的命令保存在内存中,可以用来循环执行命令

当用户正常退出时,命令的历史记录将保存在~/.bash_history中

重新登陆时,文件中的命令记录会被加载到内存中

登进shell后执行的命令只会记录在内存缓存中,在正常退出时追加进~/.bash_history中

命令:

history 显示文件中保存过的历史命令(包含目前内存中缓存的命令)

-c: 清空命令历史

-d offffset: 删除历史中指定的第offffset个命令

n: 显示最近的n条历史

-a: 追加本次会话新执行的命令历史列表至历史文件

-r: 读历史文件附加到历史列表

-w: 保存历史列表到指定的历史文件

-n: 读历史文件中未读过的行到历史列表

-p: 展开历史参数成多行,但不存在历史列表中

[root@centos8 ~]#nmcli connection 2TAB

add delete edit help load monitor show

clone down export import modify reload up

history [-c] [-d offset] [n]

history -anrw [filename]

history -ps arg [arg...]-s: 展开历史参数成一行,附加在历史列表后

命令历史相关环境变量

HISTSIZE:命令历史记录的条数

HISTFILE:指定历史文件,默认为~/.bash_history

HISTFILESIZE:命令历史文件记录历史的条数

HISTTIMEFORMAT="%F %T whoami" 显示时间和用户

HISTIGNORE="str1:str2*:…" 忽略str1命令,str2开头的历史

HISTCONTROL:控制命令历史的记录方式

ignor

edups 是默认值,可忽略重复的命令,连续且相同为“重复”

ignorespace 忽略所有以空白开头的命令

ignoreboth 相当于ignoredups, ignorespace的组合

erasedups 删除重复命令

持久保存变量

以上变量可以 export 变量名="值" 形式存放在 /etc/profifile 或 ~/.bash_profifile

范例: 1608355996509

bash的快捷键

Ctrl + l 清屏,相当于clear命令

Ctrl + o 执行当前命令,并重新显示本命令

Ctrl + s 阻止屏幕输出,锁定

Ctrl + q 允许屏幕输出,解锁

Ctrl + c 终止命令

Ctrl + z 挂起命令

Ctrl + a 光标移到命令行首,相当于Home

Ctrl + e 光标移到命令行尾,相当于End

Ctrl + f 光标向右移动一个字符

Ctrl + b 光标向左移动一个字符

Alt + f 光标向右移动一个单词尾

Alt + b 光标向左移动一个单词首

Ctrl + xx 光标在命令行首和光标之间移动

Ctrl + u 从光标处删除至命令行首

Ctrl + k 从光标处删除至命令行尾

Alt + r 删除当前整行

Ctrl + w 从光标处向左删除至单词首

Alt + d 从光标处向右删除至单词尾

Ctrl + d 删除光标处的一个字符

Ctrl + h 删除光标前的一个字符

Ctrl + y 将删除的字符粘贴至光标后

Alt + c 从光标处开始向右更改为首字母大写的单词

Alt + u 从光标处开始,将右边一个单词更改为大写

Alt + l 从光标处开始,将右边一个单词更改为小写

Ctrl + t 交换光标处和之前的字符位置注意:Alt组合快捷键经常和其它软件冲突

范例:xshell中启动 alt 键

2 获得帮助

获取帮助的能力决定了技术的能力!

多层次的帮助

命令 --help 查看相关帮助

命令 -h 查看相关帮助

whatis 使用数据库来显示命令的简短描述,并显示该命令在文档中的章节. 如果新安装不久

则还没有生成帮助信息,可用mandb生成man相关文档数据库

man提供命令帮助的文件,手册页存放在/usr/share/man

举例:1608775294993

用章节查询对应文档(注意:章节中带p的一般代表开发人员使用较多)

1608775358599

可以用mandb生成帮助信息(man相关的数据库)(centos7之后的版本)centos6之前的版本用makewhatis

whatis cal 等同于man -f cal 作用相同

type 可以检查是不是内部命令

内部命令查看帮助用help +命令

1608358245872

查看所有的shell(内部命令) 用 man bash

查看自己的shell用echo $SHELL

man是文档信息

外部命令查看帮助信息用 命令 +--help

command --help

man and info

/usr/share/doc/

Red Hat documentation 、Ubuntu documentation

​ | 意为多选一

whereis +命令 找出命令在哪个文件夹下,还有香瓜帮助文档的存放地址例子:

1608775609117

上面的地址可以看到文档的存放目录:/usr/share/

man文档的章节目录:

1:用户命令

2:系统调用

3:C库调用

4:设备文件及特殊文件

5:配置文件格式

6:游戏

7:杂项

8:管理类的命令

9:Linux 内核API

which 查看指定的外部命令文件的存放路径

1609155521292

文件管理操作

文件的目录结构:单根目录结构

bin 存放二进制程序

boot 放启动文件 (内核)

lib 库

media mnt 作为挂载点

misc 杂项 使用时才挂载1609156499953

misc挂载前应先确认

还要确认 已安装autofs

可以使用yum -y install autofs 安装

用 systemctl start autofs 启动

用systemctl status autofs查看状态是否已启用,但是机器重启之后使用时需要重新启动

启动后可以执行systemctl start autofs和systemctl enable autofs;或者执行一个命令

即systemctl enable --now autofs

不访问时不会挂载光盘;访问时才会挂载(此为misc文件的神奇之处);

opt 第三方软件安装位置

proc 内存数据

run 正在运行的文件

sbin 管理员命令

var 存放变化的数据

dev 设备文件

.......

文件系统 目录结构:

标准linux文件结构 (如ext4),文件大小写敏感

以 . 开头的文件为隐藏文件

每个文件都有两类相关数据, 属性 可以用 ll 查看,另一个是内部的内容 用cat查看

linux 下的文件类型

  • -普通文件
  • d 目录文件 directory
  • b 块设备 block 以块的方式进行读和写 有缓存
  • c 字符设备character 以单个字符的方式进行读写,顺序写没缓存
  • l 链接文件 link
  • p 管道文件pipe 有单工 半双工 全双工
  • s 套接字文件 socket 双向
  • 1609159571264

pwd 显示当前目录

cd 切换文件位置

文件(包括目录)

所在目录:dirname包含所有的上级目录

文件名:basename同样也是命令 可以提取路径 和文件名

cd - 移动到前一个工作目录

cd .. 回到上级目录

cd ~ 回到工作目录

文件操作命令

1609209719914

1609209745257

1609209819875

ls

1609209842833

stat

1609209880736

1609227508946

file

可以查看文件的类型,判断是二进制文件还是其他类型的文件,有图片文件音频文件视频文件等.

file -f 可以批量判断

1609210315100

1609211348047

windows的文本和linux中的文本不同需要dos2unix转换

dos2unix

二进制和windows格式的转换工具

1609211837241

file查看的结果显示出ELF则为二进制文件

1609228256219

linux 后缀更改,输入更改后的命令依旧可以执行

mv可以更改文件名,后缀

mv 文件名 新文件名

字符集编码

unicode 一个字符占3个字节;(UTF-8)

iconv -l 列出所有编码

iconv -f 原来的编码 -t 转换后的编码 转换前的文件名 另存的文件名

文件通配符模式 wildcardpattern

1609288727008

16092887669521609288788111

1609288944369

匹配通配符字母的时候 按照先小写后大写顺序显示

1609289485064

​ 显示所有小写字母:

1609289670121

1609330507227

1609331451568

1609331468161

1609331650126

1609331667266

1609331963629

1609331980487

1609332017568

1609332028626

1609332077568

1609332093870

1609332147809

1609332158813

1609332296069

解读:ls -d /etc/*/ 筛选etc下的所有的目录

-d限制了当前的目录下 即只显示当前的目录中符合通配符的项,后面的 /etc// 表示显示出etc下的所有的有子文件的目录名/表示目录下,因为如果是文件则没有文件/,所以 很巧妙的筛选出了所有的目录**

touch

创建空文件和刷新时间功能

touch 文件名 ,若文件存在则刷新文件的三个时间,但不修改内容; 若不存在则创建,

1609334306211

cp

复制文件或目录

cp 文件 文件 文件 ... 文件夹 可以把多个文件复制到一个文件夹内

cp 文件 新文件名 复制文件

1609334896704

1609335156602

1609335180730

1609335213444

1609335231993

! 把上次执行的命令当做这次的参数执行*

1609336032892

cp复制的时候 文件的属性信息会发生变化(时间信息会不同),可以用cp -p 复制,复制的结果 几乎一样(-a为保留全部属性信息)

注意:复制特殊文件的时候,要用cp -a,例如dev/zero文件为特殊文件,如果用普通的复制的话,会丢失大量文件信息.会把0不停的写进磁盘直到满为止,而不是复制.一定要注意直接使用cp -a,cp -p都不行,而且复制的时候要注意使用的是谁的用户,若文件的用户是root,而你的用户是a,则复制过来以后用户的属性信息会变为a例子:

1609510821654

cp -p 等同 --preserv=mode,ownership,timestamp(保留的属性)

cp -r 复制文件夹里面所有的内容 ,一般组合使用 cp -rp

cp -v 显示复制过程

cp -d 只复制链接地址

cp -r 递归复制目录及内部所有内容

cp -a 归档 相当于cp -dR --preserv=all (preserv=all保留所有属性);常用于备份,备份的时候要注意用户,会影响到备份后数据的用户属性

--preserv[=ALL_LIST]

​ mode: 权限

​ owernship:属主属组

1609339926010

组合使用

cp -av 复制全部且显示复制过程(若文件有多个已存在则每项都会提示是否覆盖较为麻烦)

cp -i 复制的文件若存在则提示是否覆盖,root用户下使用的cp 为cp -i的别名;普通用户中cp则不会提示会直接覆盖;

可以用\ 来屏蔽别名 \cp -av 文件 文件 不会出现覆盖提示,直接覆盖

普通用户复制文件不可以直接覆盖root用户的文件,

可以用cp -f 强制删除已存在文件再做复制操作,在自己的家目录中可以用cp -f覆盖root用户的文件(即正常情况下用户是无法删除root用户权限的文件的,cp -f 前提是root用户权限的文件已经拷贝到了用户目录下才可以使用);

cp -u 覆盖旧文件 可以防止覆盖新文件;只覆盖比自己旧的文件,或目标文件不存在的文件;

cp -b 若目标存在,则先进行备份,形式为filename.~ 只保留最新的和最近的一次复制

--backup=number 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ #是备份的数字每次复制都会备份上次的数据 cp --backup 文件 文件

1609342975392

mv

移动和重命名文件

  • 移动之后可以重新给文件命名

1609418874009

rename (批量更改文件名)

1609419373381

rm

删除文件

1609419477104

rm 较为危险 几个方案作为参考:

  • 可以在自己的用户目录下将文件.bashrc 里面添加一个别名 alias rm ="mv -t /tmp/ "意思是把想删除的文件放进根目录下的临时文件tmp中

  • 也可以自己手动将要删除的文件放进一个自己的文件夹(类似回收站)

  • 或者将/usr/bin/rm 文件更改名字

删除特殊文件:

  • 比如 文件是以-开头的文件

  • 1609507517245

  • 需要用创建的方式删除才有效,或者加 -- 即 rm -- -f 就能删除名为-f的文件了

  • 1609507580687

  • 再比如 文件名为~ 的文件,同上也可以 rm -- ~

  • 1609508006383

1609508725452

1609511801126

1609514010663

安全删除shred -zvun 3 文件 安全删除策略 不过仍然有可能被恢复(原理是反复覆盖)

目录操作

tree

显示目录树

tree -d

1609515177676

mkdir

创建文件夹

mkdir 创建文件夹(前提父目录存在)

mkdir -v 创建过程提示

mkdir -p 可以创建所有需要的文件(如果父目录不存在,则创建)

1609515202018

rmdir 删空文件夹

文件元数据和节点表结构

inode 表结构

1609574613235

1609574655680

节点编号可以stat 文件 查看的 inode属性

1609574817195

inode表示每个文件的专属编号,除了stat 还有ls -i 也可以查看

1609574915919

1609575052712

4k默认块文件储存空间

直接块指针 数据的直接位置,只有12个 12*4k =48k 数据

大于48k的 可以用间接指 每个针指针块有4k,也就是可以存放4k *1024个指针数据即4M;

大于4M的数据则可以利用三重间接块指针原理相同 大小大概为4k*1024*1024=4G

大于4G的数据可以四重间接块指针最多可存储数据4T

1609576145771

文件名不在节点表里面的,是在他的目录的内容中,

文件名存放在它所在目录的内容中的

目录的数据块里面存放了目录里面每个文件的名称和节点编号的对应关系

节点表存放属性数据

1609635210678

1609635462631

1609635475484

同文件系统和分区复制和移动,节点编号不变仅目录中的文件名和路径更改,原数据未动,所以速度较快;

不同文件系统或分区复制与移动都会改变节点编号,且数据会复制过去,相比同分区较慢,

需要注意:不同分区或文件系统的移动内部相当于cp到新分区文件下,然后rm原来的元数据(注意元数据指的是数据的一些目录,名称,属性信息,真实数据仍在,且仍对应原本节点编号,直到下次该分区创建新的文件时将节点编号占用,数据位置被覆盖),删除数据之后即删除元数据信息之后,数据存在的位置会默认打上一个free空闲标签,可以在下次创建文件的时候使用,将之前数据覆盖

df

1611059475656

查询节点编号信息

df -i

IUsed 已存在的文件个数 IFree 是还可以创建的个数

节点编号剩余个数,若使用完则无法创建

1609636176387

df -h

磁盘存储空间信息

df -h 文件 可以查看存储使用情况

1609636244092

1609637251479

第一个问题,:

有两种可能,第一个就是节点编号使用完,即df -i 看inode使用情况,

第二种就是空间使用完,可以用df -h查看;

第二个问题:

文件中如果出现删除之后仍然有大量空间占用,和删除之前没有变化,且df -h查看的时候空间占用仍然很高有可能是以下情况:(即删除操作后空间不会立即释放问题)

  • 当你删除时,该文件正在被访问被占用,可以使用 lsof |grep delete可以查看哪些文件已经删了但还在内存中,还没有彻底释放空间
  • 解决办法:
    • 将已经打开的窗口关闭即可完成释放(有些服务不能随时关闭,亡羊补牢)

    • 正确删除方法:

      • cat /dev/null > /boot/big (使用重定向释放大文件),执行之后会释放文件内容,应用仍能运行,仅空间释放,然后手动删除文件名即可,通用的快速释放大文件空间.该类文件属于文件不影响正常生产运行,且数据较大时使用,比如无用的日志文件

        • cat /dev/nul > /boot/big 释放之后 文件big的相关数据除了数据清空了,其他的元数据,还有节点编号都没发生变化,
      • 也可以直接用 > /boot/big 直接清空big下的文件(缺点不通用不是所有的shell都适用)

dd创建大文件

例dd if=/dev/zero of=/boot/bigfile bs=1M count=700 创建700个1M的文件在/boot/bigfile中

硬链接

创建硬链接 ln 即英文link缩写

1609658824132

硬链接:(一个文件多个名字)

  • 节点编号相同,属性相同,名字不同内容相同
  • 相互之间没有依赖关系
  • 创建硬链接不能跨分区
  • 不能给文件夹创建硬链接(为了避免死循环会出现文件夹嵌套相互嵌套)

1609659808100

1609659843211

生产中,如果出现数据库进行删除操作,在删除之后系统会将元数据清理过的对应节点编号的数据块写入空闲(free)标签,当数据量过大的时候就容易出现服务器占用较大,有崩溃风险,这时候可以创建一个硬链接,然后再删除数据,因为有硬链接存在所以系统不会执行大量的写入操作(因为有硬链接表示文件还会用,不会作为空闲数据块),可以在空闲的时候做删除操作

1609766014870

上图中红框中为链接数

符号(软)连接

1609767452969

1609767574260

特点:

  • 软连接创建出来是一个新的文件(即节点编号不同)

  • 软连接创建之后文件的链接数不变

  • 软连接创建之后的文件大小为创建时候存放在目录文件中路径文件大小

  • 软连接创建时候相对路径不是当前目录的路径为特殊情况,源文件路径是相对于软链接文件的路径,而软链接文件路径则相对当前目录

    • 格式说明:ln -s 文件 软连接文件

      • 值得说明的是文件的路径是相对于软连接文件而言的,而软连接的路径是当前所处的位置,所以软连接就相当于快捷方式.(创建的路径就是他们找寻的路径). 写绝对路径就没有什么区别
      • 1609770768752
      • 1609770785564
  • 删除软连接不会影响源文件,删除源文件则软链接无效

  • 软链接支持文件夹,且软链接可以跨分区

  • 重要的应用

    • 软链接可以实现类似软件升级的操作,或者生产中升级后的新版本有问题,还可以利用软链接紧急降级到原版本使用从而不影响生产

    • 1609771962399

    • 生产用我们一般会创建一个软链接而不会直接作用到软件本身因为要去掉版本号,以方便更新等操作

    • 在系统要升级到MySQL10.2.11的时候只需要将mysql软链接删除掉 然后重新创建一个mysql10.2.11的软链接就可以了

    • 1609772118723

    • 上图这个过程即完成了更新的操作,版本升级 叫更新 升级 降级 叫回滚

    • 需要注意的是 在删除软连接的时候后面如果加了/ 就相当于在源文件后面加斜杠,即删除了源文件中的所有子文件,需要慎重谨慎删除 tab键补全的时候会默认自动加上一定要小心

    1609773126508

    文件夹是无法创建硬链接的,但是可以看到他的链接数是2 ,是因为文件中都有一个.目录表示当前目录,用的是相同的节点编号,所以文件夹的链接数最低就是2

    • 1609773301340
    • 当然了链接数也可能是3, 理由很简单因为每个新建的文件夹中都有两个文件 . 和.. ,要想链接数变为3,即在文件夹中创建一个文件,原来的文件夹链接数就变为3了;
    • 1609773631345

标准I/O重定向和管道

三种I/O设备

标准输入(stdin) -0 默认接受来自终端口的输入

标准输出(stdout) -1 默认输出到终端窗口

标准错误(stderr) -2 默认输出到终端窗口

1609858202660

1609858217246

1609858235397

1609858263601

定位程序位置的方法:

tail -f 文件名 打开一个文件不关闭保持持续运行

然后另外一个终端窗口打开/proc 文件查看正在运行的程序 ,然后找到相应程序的进程编号(PID);

使用 px aux 可以查看正在运行的程序,找到对应的进程编号,然后到/proc下的文件中找到相应进程

1609859024905

进程编号为113285 然后去proc文件中找到文件进去里面之后使用ll查看所有详细信息,有一个名为exe的软链接,就可以看到他的真实程序位置

1609859727454

进程编号文件中的fd文件为文件描述符:可以看到文件的标准输入输出,还有程序的指向文件

1609859864165

1609860027308

echo $$ 可以查看当前shell的进程编号

1609860173982

可以查看当前shell的文件描述

重定向技术redirct

1609860538531

1609860562115

1609860596180

1609860624436

例子:

hostname 1> /dev/pts/1 意为将hostname 输出重定向为 /dev/pts/1 的终端

1609860823162

1609860874247

输出到了pts 1的终端窗口

hostname ls 等都有标准输出重定向

也可以重定向输出到文件中

1609861183573

二次执行之后会被覆盖;一定要注意 > 文件名 若文件名存在则覆盖,不存在则创建

echo 默认有一个换行占一个字节 echo -n取消换行

1609914003393

因为echo中自带了一个换行所以echo > 文件 之后文件中会有一个换行

1609861717906

1609861729333

1609861744365

1609862342966

标准输入重定向 (使用 < ):

1610333999966

1610334030614

seq 生成一个每次增长一的数 默认增长1

1610334788558

1610334802284

参数:

​ 说明:

1610334845630

用法:

  • seq 加 想要生成的最后一位数 1610334898901

  • seq 起始值 终止值 生成从起始值到终止值的数,

  • seq 起始值 每次变动的步数(默认为1) 终止值1610335037896

  • 参数有seq -s 添加数字之间的间隔符,默认换行

  • seq -w 生成的数字长度等长 ,不够的用0补齐

  • seq -f 按照指定的格式输出生成的数字,在没有使用-f选项指定格式时,默认格式为%g,可以理解为使用-f 指定模式为"%g",跟不指定格式没有任何区别。

管道符

将第一个的标准输出重定向到第二个命令的重定向输入

符号"|"

要求:管道符 | 后面的命令必须是支持标准输入的命令

​ | 前面命令必须有标准输出

1610335790398

cat 支持标准输入和标准输出1610336194526

1610676251851

1610338909486

单行重定向,回车一次重定向一次, cat > 文件 回车之后重定向到文件中,如果没有回车则内容没有被保存;

多行重定向 cat >cat2.log <<结束的标识;

单行重定向较多行重定向I/O较多;

1610336661456

结束标识只能单独占一行且不能有多余空字符

缺点 如果遇到突发事件 数据易丢失,因为只有结束符出现后才会重定向输出

PS2 是影响多行重定向的提示符可更改

1610337149857

mail 命令可以发邮件

发送邮件需要服务 postfix 安装服务 yum -y install postfix

启动服务 systemctl start postfix

mail -s 标题 用户名 用ctrl +d可以退出邮件编辑

查看邮件 mail

批量发邮件 可以使用重定向

mail -s 标题 用户 < 文件

1610338059860

1610338088213

tee命令

由于管道使用时不可以一边重定向到文件,一边输出给下一个命令;

使用tee命令可以实现一个输出 一个存储

  • 1610803101941
  • 不过这个存储为输出重定向,每次会将之前的内容覆盖掉,如果不想覆盖则可以使用追加命令 -a
  • 1610803268758

1610803914341

会将最后一个tee命令前的命令输出到屏幕上,tee命令之后加文件 保存在文件中,不加 -a 表示会将原来文件覆盖掉,加 -a 之后表示追加进文件中

1610338710454

1610338739772

1610338771602

tr命令 转换和删除字符

1610338456456

1610338554308

1610338576281

规则可更改-t 处理逻辑变化

tr -t 将第一个字符集 对应转换为第二字符集对应的字符 1610539388560

  • 1610539436922
  • 完全一一对应的转换
  • tr -d 字符集 删除包字符集内包含的字符
  • 1610539518457
  • tr -s 需要去重的字符集 去重字符集中连续出现的字符
  • 1610539640306
  • tr -c 字符集 获取字符集的补集(即获取除了参数字符集中的其他字符)
  • 删除 字符集意外的字符 tr -dc 字符

1610540269978

1610338958642

tr

  • -d删除
  • -c取补集 即除了 参数之外的
  • -dc删除 除参数之外
  • -s 去重=

1610339590246

管道符默认只接收标准输出,如果要将标准错误接收可以使用:

​ |& 来接收标准输出和标准错误,或者在管道符|之前使用2>&1 2>&1 | 即表示将标准错误重定向到标准输出中;

& 后面跟文件描述符 1代表标准输出 2代表 标准错误 ;

< 代表标准输入

rev 将字符串倒过来输出

1610454918275

mail 邮件

  • 需在家目录中创建一个.mailrc文件 存放配置信息:
    • 1610676479932
  • 安装一个软件postfix
    • yum -y install postfix
    • 服务 yum -y install mailx
  • 开启服务
    • systemctl start postfix
    • 查看服务启动状态 systemctl status postfix
  • 完成之后就可以发送邮件了

mail 用法

  • mail -s 标题 用户 < 文件
  • mail -s 标题 用户 <<终止符 这种手动输入内容
  • mail -s 标题 -c 用户 用户 ... <<终止符 或者 <文件 可以发送给多个用户
  • 1610676911781

1610540870563

  • 11610540900043
  • 1610541243928

rev 将字符串反向输出

1610802334302

用户、组和权限

linux安全模型

  • ​ 3A

  • 1610806763036

  • 审计 审核 监督

用户

1610806796789

1610806922233

1610807873001

切换用户su

1611143490692

1611143503120

设置密码

1611143529994

1611143541657

1611143559660

1611143589279

1611143722912

1611143742047

1611143754524

1611143876940

用户和组的配置文件

1610807937105

1610807969053

1610807991926

1610808005631

1610808018921

1610808038579

!锁定

vipw vigr 编辑修改配置文件的,内部调用vim,编辑文件时自带语法检查功能,提示错误

pwck grpck 检查语法的 pwck 检查/etc/passwd 的 grpck 检查/etc/group

/etc/gshadow 存放口令的(密码) 组的口令一般不设置 或为空 !!表示 锁定 不能自主登陆

/etc/passwd 下的文件格式 为:

1611056517088

存放了用户的详细信息:

  • 用户名:口令:uid:gid:描述信息:所属目录:shell类型
  • 口令目前一般都显示为x 真实的口令(密码)已存放在/etc/shadow中

密码 生成 可以用随机口令:

  • 例如 1611056772906
  • 意思为将urandom随机生成的字符取出包含数字和字母的前10位
  • 还可以生成的随机里面包含空格下划线斜线等:
  • 1611056881702

用户和组管理命令

  • 用户管理命令
    • useradd 添加用户
    • usermod 更改用户信息
    • userdel 用户删除
  • 组账号维护命令
    • groupadd 添加组
    • groupmod 更改组信息
    • groupdel 删除组

1611057348828

创建新用户时默认会创建一个同名的组作为他的主组,并且家目录会创建一个用户的文件夹

常用的创建系统服务账号

1611057533267

-r 创建系统用户,id在1-499 之间,创建之后的系统用户家目录不会生成,因为系统用户一般给应用程序使用的;

同样在/var/spool/mail/ 邮件用户目录中也不会存在0

  • 1611057761016

  • 1611057739109

  • /var/spool/mail/也不会创建系统用户的邮件用户

  • 如果用默认创建用户时会出现多人创建重复用户的情况可以使用 -u uid 来指定创建的用户id

  • 同样默认创建用户时会默认的创建一个同名的组名作为主组, 可以使用 -g gid/gname 可以用来创建到指定已有的分组里面,

  • -G 是用来添加附属组;可以添加多个用逗号','隔开;附属组必须已存在

  • -s 指定shell类型 默认bash bash一般用于登陆使用,如果要创建系统用户(即给应用软件使用的用户),则需要指定shell类型 -s /sbin/nologin

  • -d 指定家目录位置

  • -c 是添加目录的注释信息即 描述信息

  • 创建新用户时默认的uid gid 描述信息 家目录 shell类型都在文件 /etc/default/useradd1611060196017

  • HOME指 默认的家目录;SHELL指的默认shell类型;CREATE_MAIL_SPOOL指是否创建邮箱用户;EXPIRE是有效期 创建的用户的使用期限,如果值为10则表示账户创建之后只能用10天,到期之后就不能使用了;INACTIVE指口令的有效期过了之后的宽限期,如果宽限期到了仍然没有更改口令,则锁定账号无法登陆,-1表示不锁定,超时也不管;SKEL表示创建用户的模板文件夹(隐藏文件)即创建用户之后会将后面的skel中文件复制到用户目录之下,表示新用户的基础配置信息

  • 上面信息可以在 shadow中查看1611061231419 字符之间以:隔开,倒数第二个表示INACTIVE;倒数第一个表示EXPIRE

  • 1611061383054

  • getent:察看系统的数据库中的相关记录

    1611059802148

1611058572344

1611058444068

1611062259236

1611062197994

  • login.defs 文件 控制账号口令
    • 创建的新账号时遵从该文件中的默认设置的口令规则
    • 1611062684631

1611063420363

锁定

usermod -L 用户 锁定用户 无法登陆,也可以getent shadow 用户 查看口令的前面有一个! 意为锁定

usermod -U 用户 解除锁定

删除用户

userdel

-r 删除用户的邮箱还有家目录(慎重)

-f 强制

id 查询用户相关id

1611063994977

改口令

chpasswd

  • echo 用户名:新密码 | chpasswd
  • 也可以用一个文件写入,只要格式符合用户名:密码即可
    • 即cat 文件| chpasswd

chsh 用户 可以更改用户的shell

查看密码策略 chage -l 用户名

  • 1611141968690
  • 1611141999890
  • 1611142096563

用户相关的其他命令

chfn 指定个人信息

chsh 指定shell,相当于userod -s

finger可看用户个人信息

1611142195976

1611142220189

1611142285191

gpasswd 可以更改组的密码,也可以修改附加组的成员关系

  • 1611142796462
  • 1611142871332

1611142923269

  • 1611142953449
  • 1611142966412
  • 1611142985079
  • 1611142998155

文件权限管理

1611145714678

1611145727068

1611145748270

1611145766515

1611145785416

1611145797175

文件权限:

1611145858073

1611145872644

1611145884690

1611145895231

修改文件权限

1611145921518

1611145955376

1611145967057

1611145984980

每个文件每类访问者都定义了三种常用权限

r 读取权限

w 写入编辑权限

x 可执行的

对文件的权限有:

  • r 可以被查看的 可以使用cat 等可以获取其内容
  • w 可以修改内容
  • x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件

对目录的权限:

  • r 可以使用ls 查看目录中的文件列表
  • w 可以在此目录文件中创建文件,也可删除此目录中的文件
  • x 可以使用ls -l 查看此目录中文件的元数据(须配合r权限),可以cd进入此目录,属于目录的基本权限,没有则不可访问
  • X 只给目录x权限,不给无执行权限的文件x权限

数学法的权限

  • 1611152899854

查看组中的用户使用groupmems

查看组成员

1611153143177

设置文件所有者:chown

chown

可以更改所有者和所属组

用法: chown 用户 文件 改所有者, 更改所属组的时候可以用 ':' 也可以用 '.'

​ chown :组名(必须已存在) 文件 改文件的所属组

​ chown 用户:组名 文件 更改文件的所有者和所属组

  • 1611153547327
  • 1611153572048
  • 1611153585780
  • 1611153597252

设置文件的属组信息chgrp

  • 1611153646243

chown --reference==文件1 文件2

将文件2的权限修改为跟文件1一样

chown -R 递归更改 慎用危险

chown -R 用户:组名

将文件夹下的所有文件用户和组都改为 同一个用户:组名

权限的修改

所有者 所属组 其他 三种即 u g o (user group other)

更改权限 命令chmod

chmod u g o 文件

u 所有者+ 是增加权限-是减少权限 文件权限有 r w x

g o 同上

权限匹配顺序依次为 所有者 所属组 其他 匹配成功则执行对应权限,不会往后匹配

文件权限 r(读) w(写) x(执行)

文件夹权限有 r w x X

特别说明X

  • 1611155152440
  • 1611155165198
  • 1611155186596
  • 1611155200227

权限嵌套问题:

删除含有w权限的文件夹时,如果文件夹内的文件对于该用户没有操作权限或者所有者不是该用户,是无法删除此文件夹的 (总结就是说如果要删除一个文件夹,则要有文件夹的w权限和文件夹内的所有文件的删除权限才能直接删除文件夹)

posted @ 2022-03-22 17:19  不聪明的小子  阅读(167)  评论(0编辑  收藏  举报