(学习总结23)Linux 目录、通配符、重定向、管道、shell、权限与粘滞位

Linux 目录、通配符、重定向、管道、shell、权限与粘滞位

  • Linux 目录
  • 通配符
  • 重定向
  • 管道
  • shell 介绍
  • Linux 权限
    • Linux 权限的概念
      • 用户切换命令 su
    • Linux权限管理
      • 文件访问者的分类:
      • 常用文件类型与其标识符:
      • 文件基本权限和权限值的表示方法:
      • 更改文件或目录访问权限命令 chmod
      • 修改文件的所有者和所属组命令 chown
      • 修改文件或目录的所属组命令 chgrp
      • 创建文件和目录时的默认权限掩码命令 umask
      • 判断文件类型命令 file
      • 提高执行权限命令 sudo
    • 目录的权限与问题
  • 粘滞位

以下命令行环境为 Ubuntu 22.04.5

Linux 目录

在这里插入图片描述

Linux 系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件,其中普通文件一定是目录树的叶子节点,而目录可能是叶子(空目录), 也可能是路上节点。

在这里插入图片描述

路径存在的意义:树状组织方式,都是为了保证快速定位查找到指定的文件,而定位文件就需要具有唯一性的方案来进行定位文件。其中任何一个节点,都保证只有一个父节点。所以,从根目录开始,定位指定文件,路径具有唯一性

  1. 绝对路径:一般从 “/”(根目录) 开始,不依赖其他目录定位文件的方式

  2. 相对路径:相对于当前用户所处目录,定位文件的路径方式

绝对路径一般不会随着用户的路径变化而丧失唯一性,并且在特定服务的配置文件中也经常被使用。

相对路径因为它的便捷性,一般在命令行中使用较多。

Linux 中当前目录设置为 . ,上一级目录为 .. ,通过命令可以轻松操作相对路径:

cd ..		# 返回到上一级目录,若为根目录则不会返回
ls ../mydir	# 列出上一级目录的子目录中的文件
ls -a		# 查看隐藏的文件,包含两者

通配符

在 Linux 的 shell 环境中,通配符是用于匹配文件名或路径名的特殊字符,可以快速批量操作文件,常用的通配符有:

  1. * 匹配任意长度的字符。
ls *.c      # 列出当前目录所有以 .c 为结尾的文件
rm test_	# 删除当前目录所有以 test_ 开头的文件
  1. ? 匹配单个任意字符。
ls test_?.c		# 列出当前目录单个字符的,但是如 test_10.c 不匹配
  1. [] 匹配括号内的任意一个字符。支持范围:[a-z](小写字母)、[0-9](数字)、[A-Za-z](大小写字母)。
ls test[123].c		# 列出当前目录 test1.c、test2.c、test3.c 文件
ls test[0-7].c		# 列出当前目录从 test0.c 到 test7.c 文件
ls test[a-d].c		# 列出当前目录从 testa.c 到 testd.c 文件
ls test[A-Cb-c].c	# 当前目录大写从 testA.c 到 testC.c 文件,小写从 testb.c 到 testc.c 文件
  1. {} 生成多个组合,用于批量操作。
touch test{1,2,3,4}.c	# 创建 test1.c、test2.c、test3.c、test4.c 多个文件
touch test{1..100}.c 	# 中间用 .. 分开表示创建从 test1.c 直到 test100.c 一共100个文件
touch test{a..z}.c		# 表示创建从 testa.c 直到 testz.c
  1. ^! 反向匹配,排除括号内的字符(部分 shell 中 ^ 等价 !)。
ls test[!2].c		# 表示除了 test2.c ,列出当前的 test1.c 到 test9.c 
  1. ** 递归匹配目录。
ls **			# 不仅列出当前目录下的文件,还将子目录中所有文件列出

注意事项:

通配符是由 shell 进行扩展的,而不是由具体的命令进行处理。

转义字符:若文件名本身包含 *? 等特殊字符,需用引号或反斜杠转义:

ls "test?.c"	# 列出名为 test?.c 文件
ls test\*.c		# 列出名为 test*.c 文件

重定向

重定向用于控制命令的输入来源和输出目标,管理数据流向文件或其他命令,常见用法:

  1. 标准输出重定向 >>>,用于本将写入 标准输出(stdout) 的命令(打印到屏幕)写入其它文件
ls > test1.txt 				# 将 ls 输出覆盖写入 test1.txt 文件,当前目录没有 test1.txt 会自动创建一个
echo "write" > test1.txt 	# 再次用 > 写入 test1.txt 会先清空之前的内容ls >> test2.txt 			# 将 ls 输出追加到 test2.txt 中,当前目录没有 test2.txt 会自动创建一个
echo "write" >> test2.txt 	# 再次用 >> 写入会追加到 test2.txt 文件末尾,不会覆盖之前的内容
  1. 标准错误重定向 2>2>>,用于本将写入 标准错误(stderr) 的命令(也是打印到屏幕)写入其它文件
ls no_find_file 2> error1.log	# ls 没有找到 no_find_file 文件时,会将错误信息覆盖的写入 error1.log ,当前目录没有 error1.log 会自动创建一个
ls no_find_file 2>> error2.log	# 同上,但写入时是追加,而不是覆盖# 注意,标准输出与标准错误都是打印到屏幕,但是两者是不同的
# > 本该写入 标准输出 的命令,不会写入 标准错误,反之同理
echo "write" 2> error1.log 		# 不会写入 error1.log 文件,而是打印到屏幕,但其它操作都会执行,如:覆盖操作依然执行
ls no_find_file > error3.log	# 不会写入 error3.log 文件,而是打印到屏幕,但其他操作都会执行,如:当前目录没有 error3.log 会自动创建一个
  1. 混合重定向 &> 或 > [文件名] 2>&1&>>处理写入 stdout 或 stderr 的命令重定向到同一文件
ls no_find_file &> error1.log 		# 不管 no_find_file 文件是否存在,都会覆盖的写入 error1.log,当前目录没有 error1.log 会自动创建一个
ls no_find_file > error1.log 2>&1	# &> 的等价写法
echo "write" &>> error1.log			# 同上,但写入时是追加,不是覆盖
  1. 输入重定向 <将文件内容作为命令的标准输入
echo "test write" > test.txt	# 将 test write 写入 test.txt 文件
cat < test.txt					# 从文件 test.txt 中读取并打印 test write
  1. 输入重定向 << 多行输入(Here Document),将多行内容作为输入传递给命令,直到遇见自己规定的终止符
cat << quit			# 规定 quit 为终止符
> test1 write		# 第一行打印 test1 write
> test2 write		# 第二行打印 test2 write
> test3 write		# 第三行打印 test3 write
> quit				# 终止,随后开始打印grep -n "hh" << q	# 规定 q 为终止符,grep 会检查哪行出现 hh 关键字并带上行号打印出来
> haha				
> hehe
> lele
> hh
> 666
> 555
> q
  1. 输入重定向 <<< 单行输入(Here String),将字符串作为输入
cat <<< "test write"				# 在屏幕打印 test write
grep -n "test" <<< "test write"		# 查找 test 关键字并带上行号打印

管道

通过 | 符号将一个命令的标准输出(stdout) 传递给另一个命令的标准输入(stdin),实现数据流的逐级处理。

# ls 将当前目录信息传给 grep,而后筛选出带有 .txt 关键字的文件名带上行号并打印在屏幕上
ls -l | grep -n ".txt"	

shell 介绍

Linux 严格意义上是一个操作系统,称之为 " 内核(kernel) " ,但用户一般不能直接使用 kernel,而是通过 kernel 的 " 外壳 " 程序,也就是所谓的 shell,来与 kernel 沟通。

但为什么不能直接使用 kernel 呢? 从技术角度,shell 的最简单定义——命令行解释器(command Interpreter) 主要包含:

  1. 将使用者的命令翻译给 kernel 处理。
  2. 将 kernel 的处理结果翻译给使用者。

对比 windows GUI(Graphical User Interface 图形用户界面),用户操作 windows 时不是直接操作 windows 内核,而是通过图形接口点击来完成操作。shell 对于 Linux 有相同的作用,主要是对用户的命令(指令) 进行解析,解析指令给 Linux内核,反馈结果再通过内核运行出结果,通过 shell 解析给用户。

Linux 权限

Linux 权限的概念

Linux 下有两种用户,超级用户(root) 和 普通用户:

  1. 超级用户:可以在 Linux系统 下做任何事情,不受限制

  2. 普通用户:在 Linux 下做有限的事情

超级用户的命令提示符是 # ,普通用户的命令提示符是 $

用户切换命令 su

语法:su [选项] [用户名]
功能:切换用户
常用选项

  • - 或 -l :切换用户时,完全模拟目标用户登录时的环境,将会加载目标用户的环境变量和配置文件
  • -c [“命令”] : 切换用户后会执行双引号中的命令,再返回到当前用户
  • -s [目标 bash] :切换到用户并将 目标 bash 作为 shell
  • -m 或 -p : 保留当前环境变量,不加载目标用户环境变量

其它操作:

  1. 不写用户名时自动切换到 root 账号

例如要从 root 用户切换到普通用户 user,则使用 su user。要从普通用户 user 切换到 root 用户则使用 su root(root可以省略),此时系统会提示输入 root 用户的口令。

Linux权限管理

文件访问者的分类:

  1. 文件和文件目录的所有者:u — User
  2. 文件和文件目录的所有者所在组的用户:g — Group
  3. 其他用户:o — Others

在这里插入图片描述

常用文件类型与其标识符:

  1. d:文件夹目录
  2. -:普通文件
  3. l:符号链接(软链接),指向另一个目录或文件(类似Windows的快捷方式)
  4. b:块设备文件(例如硬盘、USB等)
  5. p:管道文件
  6. c:字符设备文件(例如屏幕等串口设备)
  7. s:套接口文件

在这里插入图片描述

文件基本权限和权限值的表示方法:

权限值的表示方法:

  1. 字符表示方法

  2. 8 进制数值表示方法

基本权限:

  1. 读( r(字符表示) / 4(8进制表示) ):read 对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  2. 写( w / 2 ):write 对文件而言,具有修改文件内容的权限;对目录来说具有删除和移动目录内文件的权限
  3. 执行( x / 1 ):execute 对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  4. " - " 表示不具有该项权限

在这里插入图片描述

以下是一些文件访问权限的相关命令操作。

更改文件或目录访问权限命令 chmod

语法:chmod [选项] [权限模式] [文件或目录名]
功能:设置文件或目录的访问权限
常用选项

  • -R -> 递归修改目录及其子目录和文件的权限,只有文件的拥有者和 root 才可以改变文件的权限

权限模式:

  1. 数字模式:[用三位8进制数字表示,单个数对应一位角色的操作数值的和]

  2. 符号模式:[用户角色符号][权限操作符号][权限字符符号]

用户角色符号:

  • u:拥有者
  • g:拥有者同组用
  • o:其他用户
  • a:所有用户(当用户符号不写默认)

权限操作符号:

  • + :添加权限
  • - :移除权限
  • = :覆盖原有权限

权限字符符号:

  • r :读
  • w :写
  • x :执行

修改文件的所有者和所属组命令 chown

语法:chown [选项] [所有者]:[所属组] [文件或目录名]
功能:修改文件的所有者和所属组
常用选项

  • -R 递归的修改目录及其所有子目录与文件的所有者和所属组

其它操作:

  1. 所有者与所属组至少要写一个

修改文件或目录的所属组命令 chgrp

语法:chgrp [选项] [所属名] [文件或目录名]
功能:修改文件或目录的所属组
常用选项:

  • -R 递归修改文件或目录的所属组

创建文件和目录时的默认权限掩码命令 umask

语法:umask [权限值]
功能:设置默认文件权限掩码,决定新创建的文件或目录的默认权限

其它操作:

  1. 不写权限值可以查看当前用户的 umask 值

注意权限计算公式:

文件和目录最终权限 = 默认权限值 - umask

将现有默认的存取权限值减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022,普通用户默认为 0002。

判断文件类型命令 file

语法: file [选项] [文件或目录]
功能:不依赖文件扩展名,而是分析文件内容与结构判断文件类型。
常用选项:

  • -b 只输出文件类型描述信息,不显示文件名

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形

  • -z 尝试去解读压缩文件的内容

  • -L 当文件是符号链接时,显示符号链接指向的文件类型

提高执行权限命令 sudo

语法:sudo [选项] [命令]
功能:以超级用户或其他用户身份执行命令。
常用选项:

  • -l 列出当前用户可以使用 sudo 执行的命令

  • -u 以指定用户身份执行命令

  • -i 切换到超级用户身份的 shell,且加载其环境变量

  • -s 切换到超级用户身份的 shell,但不加载环境变量

  • -k 清除 sudo 认证时间戳,强制下次使用重新输入密码

  • -v 刷新 sudo 认证时间戳,延长不输入密码时间

  • -b 在后台执行命令

  • -H 设置 HOME 环境变量为 超级用户的主目录

目录的权限与问题

  1. 可读权限(read):如果目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容

  2. 可写权限(write): 如果目录没有可写权限,则无法在目录中创建文件, 也无法在目录中删除文件

  3. 可执行权限(execute):如果目录没有可执行权限,则无法 cd 到目录中

注意:

  • 目录的可执行权限是表示用户是否在目录下执行命令。
  • 如果目录没有 x(执行) 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录,即使目录仍然有 -r(读) 权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 而如果目录具有 x 权限,但没有 -r 权限,则用户可以执行命令,可以 cd 进入目录。但由于没有目录的读权限,即使可以执行命令,但仍然没有权限使用 ls 读取当前目录下的文档。

于是出现了问题,如果用户具有当前目录的写权限, 用户就可以删除当前目录中的文件或目录,而不论这个用户是否有这个被删除文件或目录的执行权限。

为了解决这个不科学的问题,Linux 引入了粘滞位的概念。

粘滞位

粘滞位(Sticky Bit) 是一种特殊的权限标记,主要用于目录的权限控制

普通目录的权限问题:在普通目录中,如果用户对目录有写权限,则可以删除目录中的任何文件,即使这些文件不属于该用户

粘滞位解决方法:当前目录设置了粘滞位后,只有 文件的所有者、目录的所有者、超级用户 才能删除或重命名当前目录中的文件。

其应用场景:共享目录(如 /tmp)或 协作环境中,防止用户删除他人的文件,提高安全性和协作效率

使用方法:
语法1:chmod +t [目录]
语法2:chmod [数字模式] [目录]
语法3:chmod -t [目录]

数字模式:在三位的数字的权限值再添加最高位数字 1

chmod +t mydir		# 将 mydir 目录设置粘滞位
chmod 1760 mydir	# 最高位 1 代表数字模式设置粘滞位,其它三位为常规权限设置
chmod -t mydir		# 移除 mydir 的粘滞位

查看粘滞位:
使用 ls -l 命令查看上一级目录权限时,如果粘滞位已设置,其他用户权限位的最后一位会显示为 tT

ls -l		# 查看粘滞位
# drwxrwxr-t 2 user1 user1 4096 Feb 15 15:17 mydir

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18866.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器

作为一位个人开发者兼产品经理&#xff0c;我的工作日常紧密围绕着云资源的运维和管理。在这个过程中&#xff0c;操作系统扮演了至关重要的角色&#xff0c;而操作系统控制台则成为了我们进行系统管理的得力助手。本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功…

Android10 音频参数导出合并

A10 设备录音时底噪过大&#xff0c;让音频同事校准了下&#xff0c;然后把校准好的参数需要导出来&#xff0c;集成到项目中&#xff0c;然后出包&#xff0c;导出方式在此记录 设备安装debug系统版本调试好后&#xff0c; adb root adb remount adb shell 进入设备目录 导…

dnslog+sqlmap外带数据

目录 爆库 爆表 爆列 爆数据 sqlmapDNSlog 外带参数 –dns-domain参数注入 –dns-domain参数为dnslog平台的域名&#xff08;我们也可以使用本地&#xff09; 爆库 python sqlmap.py -u "http://127.0.0.1/sqli/less-8/index.php/?id1" -techniqueB -dns-dom…

sql注入中information_schema被过滤的问题

目录 一、information_schema库的作用 二、获得表名 2.1 sys.schema_auto_increment_columns 2.2 schema_table_statistics 三、获得列名 join … using … order by盲注 子查询 在进行sql注入时&#xff0c;我们经常会使用information_schema来进行爆数据库名、表名、…

Flutter 常见布局模型

Flutter的常见的布局模型有容器&#xff08;Container&#xff09;、弹性盒子布局&#xff08;Flex、Row、Column、Expanded&#xff09;、流式布局&#xff08;Wrap、Flow&#xff09;、层叠布局&#xff08;Stack、Position&#xff09;、滚动布局&#xff08;ListView、Grid…

深度学习框架探秘|TensorFlow:AI 世界的万能钥匙

在人工智能&#xff08;AI&#xff09;蓬勃发展的时代&#xff0c;各种强大的工具和框架如雨后春笋般涌现&#xff0c;而 TensorFlow 无疑是其中最耀眼的明星之一。它不仅被广泛应用于学术界的前沿研究&#xff0c;更是工业界实现 AI 落地的关键技术。今天&#xff0c;就让我们…

TypeScript 与后端开发Node.js

文章目录 一、搭建 TypeScript Node.js 项目 &#xff08;一&#xff09;初始化项目并安装相关依赖 1、创建项目目录并初始化2、安装必要的依赖包 &#xff08;二&#xff09;配置 TypeScript 编译选项&#xff08;如模块解析方式适合后端&#xff09; 二、编写服务器代码 &a…

DDD该怎么去落地实现(3)通用的仓库和工厂

通用的仓库和工厂 我有一个梦&#xff0c;就是希望DDD能够成为今后软件研发的主流&#xff0c;越来越多研发团队都转型DDD&#xff0c;采用DDD的设计思想和方法&#xff0c;设计开发软件系统。这个梦想在不久的将来是有可能达成的&#xff0c;因为DDD是软件复杂性的解决之道&a…

国家队出手!DeepSeek上线国家超算互联网平台!

目前,国家超算互联网平台已推出 DeepSeek – R1 模型的 1.5B、7B、8B、14B 版本,后续还会在近期更新 32B、70B 等版本。 DeepSeek太火爆了!在这个春节档,直接成了全民热议的话题。 DeepSeek也毫无悬念地干到了全球增速最快的AI应用。这几天,国内的云计算厂家都在支持Dee…

内容中台驱动企业数字化内容管理高效协同架构

内容概要 在数字化转型加速的背景下&#xff0c;企业对内容管理的需求从单一存储向全链路协同演进。内容中台作为核心支撑架构&#xff0c;通过统一的内容资源池与智能化管理工具&#xff0c;重塑了内容生产、存储、分发及迭代的流程。其核心价值在于打破部门壁垒&#xff0c;…

算法1-1 玩具谜题

题目描述 小南有一套可爱的玩具小人&#xff0c;它们各有不同的职业。 有一天&#xff0c;这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈&#xff0c;它们有的面朝圈内&#xff0c;有的面朝圈外。如下图&#xff1a; 这时 singer 告诉小南一个谜题&…

vs2022支持.netframework4.0

下载nuget包 .netframework4.0 解压nuget 复制到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 参考 https://www.cnblogs.com/bdqczhl/p/18670152 https://blog.csdn.net/xiaomeng1998_/article/details/135979884

数据治理常用的开源项目有哪些?

数据治理是企业在大数据时代中确保数据质量、安全性和可用性的关键环节。开源项目在数据治理中扮演着重要角色&#xff0c;提供了灵活、经济高效且功能强大的解决方案。以下是一些常用的开源数据治理项目&#xff1a; Apache Atlas&#xff1a; 功能&#xff1a;元数据管理、数…

登录弹窗效果

1&#xff0c;要求 点击登录按钮&#xff0c;弹出登录窗口 提示1&#xff1a;登录窗口 display:none 隐藏状态&#xff1b; 提示2&#xff1a;登录按钮点击后&#xff0c;触发事件&#xff0c;修改 display:block 显示状态 提示3&#xff1a;登录窗口中点击关闭按钮&#xff0…

docker nginx 配置文件详解

在平常的开发工作中&#xff0c;我们经常需要访问静态资源&#xff08;图片、HTML页面等&#xff09;、访问文件目录、部署项目时进行负载均衡等。那么我们就会使用到Nginx&#xff0c;nginx.conf 的配置至关重要。那么今天主要结合访问静态资源、负载均衡等总结下 nginx.conf …

Python+appium实现自动化测试

目录 一、工具与环境准备 二、开始测试 1、插上手机&#xff0c;打开usb调试&#xff0c;选中文件传输&#xff0c;我这里用华为手机为例 2、启动Appium Server GUI​编辑 3、启动 Inspector Session 4、录制脚本 使用Python和Appium进行自动化测试是一种常见的移动应用…

DeepSeek正重构具身大模型和人形机器人赛道!

中国人工智能公司DeepSeek&#xff08;深度求索&#xff09;以“低成本、高效率、强开放”的研发范式横空出世&#xff0c;火遍并震撼全球科技圈&#xff1b;DeepSeek展现出来的核心竞争力&#xff0c;除了低成本及推理能力&#xff0c;更重要的是开源模型能力追赶上了最新的闭…

Facebook精准获客:外贸企业如何通过社群营销将产品推广到海外

作为全球用户量超40亿的社交平台&#xff0c;Facebook已成为外贸企业拓展海外市场的重要渠道。本文将系统解析基于Facebook平台的高效获客策略&#xff0c;重点针对手机壳等消费电子品类&#xff0c;提供可复制的精准客户开发方案&#xff0c;并且可以利用AI社媒引流王工具进行…

尚硅谷课程【笔记】——大数据之Hadoop【一】

课程视频链接&#xff1a;尚硅谷Hadoop3.x教程 一、大数据概论 1&#xff09;大数据概念 大数据&#xff08;Big Data&#xff09;&#xff1a;指无法再一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发…

JMeter工具介绍、元件和组件的介绍

Jmeter功能概要 JDK常用文件目录介绍 Bin目录&#xff1a;存放可执行文件和配置文件 Docs目录&#xff1a;是Jmeter的API文档&#xff0c;用于开发扩展组件 printable_docs目录&#xff1a;用户帮助手册 lib目录&#xff1a;存放JMeter依赖的jar包和用户扩展所依赖的Jar包…