[Linux关键词]unmask,mv,dev/pts,stdin stdout stderr,echo

news2024/11/24 11:39:39

希望你开心,希望你健康,希望你幸福,希望你点赞!

最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要!


前言

在Linux系统中,文件和目录的权限管理至关重要,它确保了系统的安全性和稳定性。其中,umask命令作为设置文件和目录创建默认权限的工具,扮演着举足轻重的角色。本文将深入探讨umask的定义、功能、运算规则及其使用方法,帮助读者更好地理解和应用这一命令。同时,我们还将介绍Linux中另一个常用命令mv,以及标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)的基本概念和作用,为全面理解Linux系统命令和文件操作奠定基础。


umask

umask是Linux系统中用于设定文件和目录创建默认权限的命令,以下是关于umask的详细解释:

一、定义与功能

umask(user file creation mode mask)即用户文件创建权限掩码,是Linux系统或类Linux系统的一个命令。umask的值是一个三位八进制数,取值范围是000-077,用于禁用文件或目录的默认权限。当创建新文件或目录时,系统会根据文件类型(文件或目录)和umask值来确定其默认权限。

二、umask值的运算规则

umask值是一个八进制数,它使用一种位掩码方式来表示文件权限的掩码。每个数字代表一组权限,从高位到低位分别表示所有者、所在组和其他用户的权限。其中,0表示权限可用,1表示权限被屏蔽。

  • 第一位:表示文件所有者的权限。
  • 第二位:表示文件所属组的权限。
  • 第三位:表示其他用户的权限。

例如,umask值为002表示所有者和所在组的写权限被屏蔽,而读和执行权限被保留。

三、umask命令的使用

  1. 查看当前umask值:在shell中直接运行umask命令,可以查看当前shell的umask值。

  2. 设置umask值:使用umask [value]命令可以设置新的umask值,其中value是一个八进制数。例如,umask 022会将新建文件和目录的默认权限掩码设置为022。

  3. 永久更改umask值

    • 对新建用户生效:编辑/etc/profile文件,在文件末尾添加umask 022(或其他所需的umask值),然后保存并关闭文件。使用source /etc/profile命令使配置立即生效。
    • 对所有用户生效:编辑/etc/bashrc文件,同样在文件末尾添加umask 022(或其他所需的umask值),然后保存并关闭文件。使用source /etc/bashrc命令使配置立即生效。
    • 针对某个特定用户修改:切换到该用户的家目录,找到该用户的shell配置文件(如.bashrc.bash_profile),然后在其中添加一行umask 0022(或其他所需的umask值)来更改该用户的umask值。当该用户登录并启动新的shell时,系统会自动执行配置文件中的命令,从而应用新的umask值。

四、umask与文件/目录权限的关系

  • 新建文件的默认权限:通常为666(rw-rw-rw-),但会受到umask值的限制。例如,如果umask值为002,则新建文件的默认权限为664(rw-rw-r--)。
  • 新建目录的默认权限:通常为777(rwxrwxrwx),但同样会受到umask值的限制。例如,如果umask值为022,则新建目录的默认权限为755(rwxr-xr-x)。

五、注意事项

  1. umask命令只能禁用权限,不能启用特殊权限。如需修改权限,需使用chmod命令。
  2. umask值的更改只会影响以后创建的文件和目录,不会影响已经存在的文件和目录。
  3. umask值的设置是递归的,也就是说,如果在某个目录下设置了umask值,那么在该目录下创建的子目录和文件也会受到相同的限制。

mv

Linux中的mv命令是一个非常强大且常用的命令,它用于移动文件或目录,以及重命名文件或目录。以下是关于mv命令的详细解释:

一、命令格式

mv命令的一般格式为:mv [选项] 源文件或目录 目标文件或目录

二、命令功能

  • 移动文件或目录:将指定的文件或目录移动到目标位置。
  • 重命名文件或目录:如果目标位置是一个文件名而不是目录,则源文件或目录会被重命名为该文件名。

三、常用选项

  • -i:交互式移动,在覆盖文件之前提示用户确认。
  • -f:强制移动,不提示用户确认覆盖。
  • -n:不覆盖已存在的目标文件。
  • -u:仅当源文件比目标文件新,或者目标文件不存在时,才移动文件。
  • -v:详细模式,显示命令的执行过程。
  • -b:覆盖前为目标文件创建备份。
  • --help:显示帮助信息。
  • --version:显示版本信息。

四、命令实例

  1. 重命名文件
 

bash复制代码

mv file1.txt file2.txt

file1.txt重命名为file2.txt

  1. 移动文件到目录

bash复制代码

mv file2.txt dir1/

file2.txt移动到dir1目录中。

  1. 交互式移动文件

bash复制代码

mv -i file3.txt dir2/

如果dir2中已有同名文件,则提示用户确认是否覆盖。

  1. 强制移动文件

bash复制代码

mv -f file4.txt dir3/

即使dir3中已有同名文件,也不提示确认直接覆盖。

  1. 移动多个文件

bash复制代码

mv file5.txt file6.txt dir4/

file5.txtfile6.txt移动到dir4目录中。

  1. 使用通配符移动文件

bash复制代码

mv *.txt dir5/

将所有.txt文件移动到dir5目录中。

  1. 移动目录

bash复制代码

mv dir1 dir2/

如果dir2存在,则将dir1移动到dir2目录下,成为dir2的子目录;如果dir2不存在,则进行重命名操作,将dir1重命名为dir2

  1. 重命名目录

bash复制代码

mv dir2 dir3

dir2重命名为dir3

五、注意事项

  • 使用mv命令时,要确保具有对源文件或目录以及目标位置或目录的适当权限。
  • 如果目标位置已有同名文件,除非使用-i参数,否则原文件会被覆盖而不会有提示。
  • 对于重要文件,在执行mv命令前进行备份是一个好习惯。

stdin stdout stderr

stdin、stdout和stderr分别代表标准输入流、标准输出流和标准错误流,它们在程序执行过程中起着至关重要的作用。以下是关于这三个流的详细解释:

stdin(标准输入流)

  • 定义:stdin是程序从外界读入数据的机制,通常关联到键盘或其他输入设备。
  • 功能:允许用户通过键盘或输入重定向来提供输入数据给程序。
  • 文件描述符:在大多数系统中,stdin的文件描述符为0。
  • 示例:在C语言中,可以使用scanf函数从stdin读取数据;在Perl语言中,可以使用<STDIN>来从标准输入缓存中读取数据。

stdout(标准输出流)

  • 定义:stdout是程序将结果和普通输出发送到用户的通道,通常关联到屏幕或终端。
  • 功能:默认情况下,程序的输出会显示在终端上。stdout是有缓存的,输出到stdout中的字符在满足特定条件(如遇到换行符、流关闭、缓冲区溢出或用fflush函数刷新)时才会在终端中显示出来。
  • 文件描述符:在大多数系统中,stdout的文件描述符为1。
  • 示例:在C语言中,可以使用printffprintf(stdout, ...)将数据输出到stdout;在C++中,可以使用cout来输出数据。

stderr(标准错误流)

  • 定义:stderr是程序将错误消息和异常情况输出的通道,也通常关联到屏幕或终端。
  • 功能:与stdout类似,但用于输出错误信息而不是正常输出。stderr通常没有缓存,输出到stderr中的字符会立即在终端中显示出来。
  • 文件描述符:在大多数系统中,stderr的文件描述符为2。
  • 示例:在C语言中,可以使用fprintf(stderr, ...)将数据输出到stderr;在C++中,可以使用cerr来输出错误信息。

stdin、stdout和stderr的用途与重定向

  • 用途:这三个流允许程序与用户、其他程序和操作系统之间进行通信,而不需要显式地指定文件或设备。
  • 重定向:在Linux等操作系统中,可以通过重定向操作符(如>2>)将stdout和stderr的输出分别重定向到不同的文件。此外,还可以使用管道操作符(|)将一个命令的stdout作为另一个命令的stdin。

ls dev/pts

ls /dev/pts 命令用于列出 /dev/pts 目录下的内容。在Linux系统中,/dev/pts 是一个虚拟文件系统(通常称为PTS,即伪终端从设备),它提供了一个接口来访问伪终端(pseudo-terminals)。伪终端是一种软件接口,它模拟了物理终端的功能,使得远程登录会话(如通过SSH)或终端仿真器(如xterm、gnome-terminal等)可以像使用物理终端一样与系统进行交互。

当你执行 ls /dev/pts 命令时,你可能会看到一系列以数字命名的文件(例如 012 等),这些文件代表当前系统上的活动伪终端会话。每个文件都对应一个打开的伪终端会话,可以通过它们来与对应的会话进行交互。

需要注意的是,/dev/pts 是 /dev/ptmx(伪终端主设备)的对应目录,ptmx 设备用于创建新的伪终端对。在较新的Linux系统中,/dev/pts 通常是一个挂载点,挂载了一个名为 pts 的特殊文件系统类型(通常是 devpts 文件系统),它提供了对伪终端设备的访问。


ls /dev/pts/0

通常直接对/dev/pts目录下的某个文件进行ls操作可能不会得到你期望的结果,因为这些文件(如012等)代表的是伪终端(pseudo-terminals)的会话,它们不是普通的目录或文件,而是特殊的设备文件。

当你尝试ls /dev/pts/0时,你可能会遇到以下几种情况:

  1. 权限问题:如果当前用户没有足够的权限访问该设备文件,ls命令可能会显示权限拒绝的错误信息。

  2. 非标准行为ls命令通常用于列出目录内容,而不是用于显示设备文件的详细信息。对于设备文件,使用ls -l可能会更有帮助,因为它会显示文件的权限、所有者、大小和类型等信息。但是,即使使用ls -l,你也不会看到伪终端会话的实际内容,只会看到设备文件的属性。

  3. 特殊文件类型:伪终端设备文件在ls -l的输出中会显示为特殊类型的文件(通常是c字符设备文件)。

  4. 会话不存在:如果伪终端会话已经关闭,那么对应的设备文件可能不再存在,或者其名称可能已经改变(因为新的会话可能会重用相同的数字标识符)。

  5. 正确的使用方式:通常,你不会直接对/dev/pts目录下的设备文件执行ls命令。相反,这些文件通常是由终端仿真器(如gnome-terminal、xterm等)或远程登录服务(如SSH)在创建伪终端会话时自动使用的。

如果你想要查看与伪终端会话相关的信息,你可能需要使用其他命令,如ps(显示当前运行的进程)结合grep(搜索特定字符串)来查找与特定伪终端会话相关联的进程。此外,whow命令也可以提供有关当前登录用户和他们所使用的终端会话的信息。


echo

echo 是一个常用的命令行工具,用于在终端(或命令行界面)上输出文本或变量的值。在Linux、Unix、macOS以及Windows的命令行环境(如CMD或PowerShell,尽管在Windows中可能需要稍作调整或使用不同的命令来达到相同的效果)中,echo 命令都非常普遍。

以下是 echo 命令的一些基本用法示例:

  1. 输出文本

     

    bash复制代码

    echo Hello, World!

    这将在终端上显示文本 Hello, World!

  2. 输出变量的值

     

    bash复制代码

    NAME="Alice"
    echo Hello, $NAME!

    这将输出 Hello, Alice!。注意,变量名前面有一个美元符号 $

  3. 输出换行符(在某些shell中可能需要使用特殊字符或选项):

     

    bash复制代码

    echo -e "Hello\nWorld"

    这里,-e 选项使 echo 解释反斜杠转义字符(如 \n 表示换行)。不是所有的 echo 实现都支持 -e 选项,但在大多数Linux和Unix系统的默认shell(如bash)中都是支持的。

  4. 禁止输出换行符
    在某些 echo 实现中,可以使用 -n 选项来禁止在输出的末尾添加换行符。

     

    bash复制代码

    echo -n "Hello, World!"

    这将输出 Hello, World! 但不会换行,使得后续命令的输出可以紧跟其后。

  5. 启用或禁用解释反斜杠转义
    除了 -e 选项外,有些 echo 实现还支持 -E(禁用解释反斜杠转义)选项,但这通常不是必需的,因为默认行为(在没有 -e 的情况下)就是不解释反斜杠转义。

  6. 在Windows CMD中使用
    在Windows的命令提示符(CMD)中,echo 命令的语法略有不同,特别是当你想要输出换行符时。例如,要输出换行符,你可能需要使用 ^ 字符或两个连续的 %% 字符加上 n(取决于具体的上下文和版本)。但是,在PowerShell中,你可以使用更类似于Linux和Unix的 echo 命令的 Write-Output 或简写 echo(注意:PowerShell中的echo实际上是Write-Output的别名,它默认会输出换行符,但你可以通过添加|Out-String -NoNewline来避免这一点)。

请注意,不同的操作系统和shell环境可能会有不同的 echo 实现和选项,因此在使用之前最好查阅相关文档或手册页(如使用 man echo 在Linux中查看 echo 命令的手册页)。


总结

通过本文的阐述,我们详细了解了umask命令在Linux系统中的重要性,掌握了其定义、功能、运算规则及使用方法。同时,我们也学习了mv命令的基本用法和常用选项,以及标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)的基本概念和作用。这些知识和技巧对于提高Linux系统的操作效率和安全性具有重要意义。无论是对于初学者还是有一定经验的Linux用户,本文都提供了有价值的参考和指导。希望读者能够学以致用,将所学知识应用到实际操作中,更好地管理和维护Linux系统。


希望你开心,希望你健康,希望你幸福,希望你点赞!

最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!!

喵喵喵,你对我真的很重要!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能与伦理:我们应该如何平衡科技与人性?

内容概要 在这个瞬息万变的时代&#xff0c;人工智能的迅猛发展让我们面对前所未有的伦理困境。科技进步带来了便利&#xff0c;但同时也亟需我们反思如何对待人性。尤其是在实现算法透明性时&#xff0c;我们要确保每一个决策背后都能被理解与追溯&#xff0c;这不仅是对技术…

聚水潭数据集成到MySQL的技术实操与解决方案

聚水潭数据集成到MySQL的技术案例分享 在现代企业的数据管理过程中&#xff0c;如何高效、可靠地实现不同系统之间的数据对接是一个关键问题。本案例将聚焦于“聚水谭-仓库查询单-->BI邦盈-仓库表”的数据集成方案&#xff0c;详细探讨如何通过轻易云数据集成平台&#xff…

Mybatis-03.入门-配置SQL提示

一.配置SQL提示 目前的Springboot框架在mybatis程序中编写sql语句并没有给到任何的提示信息&#xff0c;这对于开发者而言是很不友好的。因此我们需要配置SQL提示。 配置SQL提示 这样再去写SQL语句就会有提示了。 但是会发现指定表名时并没有给出提示。这是因为&#xff1a…

计算机视觉中的点算子:从零开始构建

Hey小伙伴们&#xff01;今天我们要聊的是一个非常基础但极其重要的计算机视觉技术——点算子&#xff08;Point Operators&#xff09;。点算子主要用于对图像的每个像素进行独立的处理&#xff0c;比如亮度调整、对比度增强、灰度化等。通过这些简单的操作&#xff0c;我们可…

计算机网络:网络层 —— IPv4 协议的表示方法及其编址方法

文章目录 IPv4IPv4的表示方法IPv4的编址方法分类编址A类地址B类地址C类地址可指派的地址数量一般不使用的特殊IPv4地址 划分子网编址子网掩码默认子网掩码 无分类编址方法地址掩码斜线记法无分类域间路由选择 CIDR IPv4 IPv4&#xff08;Internet Protocol version 4&#xff…

excel自定义导出实现(使用反射)

前言 项目中接到需求&#xff0c;需要对导出的字段进行自定义导出 &#xff0c;用户可在前端选择自定义导出的字段&#xff08;如图&#xff09;&#xff0c;实现过程做以下记录&#xff0c;仅供参考&#xff1b; 思路 跟前端约定好所有要导出的字段名称(headName)跟对应的…

练习LabVIEW第十七题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第十七题&#xff1a; 编写一个程序,用labview的信号生成函数产生一个三角波并显示在chart上,在编写例外一个程序读出数据…

【论文阅读】PGAN

1. WHY 问题 图像超分辨率一直是一个热门研究课题&#xff0c;具有重要的应用价值。基于生成对抗网络GAN的单幅图像超分辨率方法显示重建图像与人类视觉特征更一致。因此&#xff0c;基于 GAN 的网络优化已成为图像超分辨率的主流。然而&#xff0c;一些最新研究表明&#xf…

江协科技STM32学习- P28 USART串口数据包

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

C# Retry库

比如网络访问或硬件参数设置需要重试&#xff0c;可引用gunet上的Polly库。 同步方式&#xff08;每次重试有不同的时间间隔&#xff09; var polly Policy.Handle<Exception>().WaitAndRetry(new[] { new TimeSpan(0, 0, 1), new TimeSpan(0, 0, 2), new TimeSpan(0, …

Java避坑案例 - 线程池使用中的风险识别与应对

文章目录 线程池的基本概念创建线程池的注意事项实例1&#xff1a; newFixedThreadPool 使用无界队列&#xff0c;可能因任务积压导致 OOM实例2&#xff1a; newCachedThreadPool 会创建大量线程&#xff0c;可能因线程数量过多导致无法创建新线程。 线程池参数设置的最佳实践线…

基于SSM+微信小程序的社区垃圾回收管理系统(垃圾1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于ssm微信小程序的社区垃圾回收管理系统&#xff0c;有管理员&#xff0c;回收员&#xff0c;用户三个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;回收员管理&am…

确保组织决策权清晰的有效策略

在组织中&#xff0c;明确的决策权、有效的沟通机制、权责明确的结构是确定和维护清晰决策权的关键要素。明确的决策权确保了每个成员知道自己的职责和权限&#xff0c;有效的沟通机制促进了信息的流通和理解&#xff0c;权责明确的结构则为组织的运作提供了清晰的框架。明确的…

SpringBoot3+SpringSecurity6基于若依系统整合自定义登录流程

SpringBoot3SpringSecurity6基于若依系统整合自定义登录流程 问题背景 在做项目时遇到了要对接统一认证的需求&#xff0c;但是由于框架的不兼容性&#xff08;我们项目是springboot3&#xff0c;jdk17&#xff0c;springsecurity6.1.5&#xff09;等因素&#xff0c;不得不使…

WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)

文章目录 1、案例效果2、弹窗空间使用1.引入用户控件2、按钮命令实现 3、总结4、源代码获取 1、案例效果 2、弹窗空间使用 1.引入用户控件 打开 Wpf_Examples 项目&#xff0c;在引用中添加用户控件库&#xff0c;在 MainWindow.xaml 界面引用控件库&#xff0c;代码如下&…

【论文精读】ID-like Prompt Learning for Few-Shot Out-of-Distribution Detection

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;论文精读_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 注&#xff1a;下文…

PIDNet(语义分割)排坑

PIDNet训练自己的数据集 1. 前言2. 准备工作3. 配置环境4. 排坑过程4.1.1 configs增加了VOC文件夹 并在里面写了yaml参数文件4.1.2 加载VOC格式数据集的类4.1.3 train.py调试 1. 前言 paper小修时reviewer说baseline太老&#xff0c;所以对CVPR2023的PIDNet进行复现&#xff0…

Google Recaptcha V2 简单使用

最新的版本是v3&#xff0c;但是一直习惯用v2&#xff0c;就记录一下v2 的简单用法&#xff0c;以免将来忘记了 首先在这里注册你域名&#xff0c;如果是本机可以直接直接填 localhost 或127.0.0.1 https://www.google.com/recaptcha/about/ 这是列子 网站密钥&#xff1a;是…

autMan奥特曼机器人-内置Redis

autMan内置了redis服务&#xff0c;有的脚本运行需要redis支持 几个注意事项&#xff1a; 启用redis服务后要重启autMan生效&#xff0c;关闭一样的道理。启用redis服务后会增加约200M的内存占用多个autMan的redis服务可以组成集群redis服务

五、快速入门K8s之Pod容器的生命周期

一、容器的初始化init ⭐️ init c &#xff1a; init contariner 初始化容器&#xff0c;只是用来初始化&#xff0c;初始化完成就会死亡可以大于的等于一也可以没有&#xff0c;每个init只有在前一个init c执行完成后才可以执行下一个、init容器总是运行到成功完成为止&#…