一起来学Linux命令(十)

2023年 8月 29日 45.3k 0

前言

目前正在出一个Linux命令系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

作为服务端开发,linux命令还是要掌握一下的,可以做做基础性的运维。好了, 废话不多说直接开整吧~

本节是该系列的最后一节,这节给大家介绍一些权限相关的命令,这些命令谨慎操作~

chmod

Linux系统中使用chmod命令时,可以修改文件或目录的权限。权限控制谁可以读取、写入和执行特定文件或目录。chmod命令允许更改这些权限,以便适应不同的安全需求

语法:

chmod [options] mode filename

  • options: 可选参数,用于指定一些特定选项,例如递归修改权限、静默模式等。
  • mode: 权限模式,可以是文字模式或数字模式。文字模式更容易理解,数字模式更为紧凑。
  • filename: 要修改权限的文件或目录名称。

权限模式

mode部分,可以使用以下字符来表示不同的权限:

  • u: 所有者(user)权限- g: 组权限- o: 其他用户权限- a: 所有用户权限(等同于ugo

每个权限部分可以使用以下字符来表示权限:

  • r: 读取权限- w: 写入权限- x: 执行权限

使用示例

  • 使用文字模式设置权限:

    • 设置所有者读、写、执行权限:chmod u=rwx filename
    • 设置组用户只读权限:chmod g=r filename
    • 设置其他用户执行权限:chmod o=x filename
    • 设置所有用户读权限:chmod a=r filename
  • 使用数字模式设置权限:

    • 设置所有者可读写执行,组和其他用户可读:chmod 744 filename
    • 所有者可读写执行,组可读执行,其他用户无权限:chmod 750 filename
  • 递归修改目录及其内容的权限:

    如果要递归地修改目录及其内容的权限,可以使用-R选项。

    • 递归地给目录及其内容赋予所有者读写执行权限:chmod -R u=rwx directory
  • 静默模式:

    使用-v选项可显示修改的文件。

    • 设置所有者可读写执行权限,并显示修改的文件:chmod -v u=rwx filename
  • chown

    chown(change owner)命令用于更改文件或目录的所有者。在Linux系统中,每个文件和目录都有一个所有者,指定了谁有权访问和管理它。通过使用chown命令,可以将文件或目录的所有权转移给其他用户或组。

    语法:

    chown [options] new_owner: new_group filename
    
    • options: 可选参数,用于指定一些特定选项,如递归更改、保留设置等。
    • new_owner: 新的所有者的用户名或用户ID。
    • new_group: 新的组的组名或组ID。
    • filename: 要更改所有者和/或组的文件或目录名称。

    使用示例

  • 更改所有者:
  •    - 将文件的所有者更改为新用户:chown newuser filename
       - 将目录的所有者更改为新用户:chown newuser directory

  • 更改组:
  •    - 将文件的组更改为新组:chown :newgroup filename
       - 将目录的组更改为新组:chown :newgroup directory

  • 同时更改所有者和组:
  •    - 将文件的所有者和组同时更改:chown newuser:newgroup filename
       - 将目录的所有者和组同时更改:chown newuser:newgroup directory

  • 递归更改目录及其内容的所有者和组:
  •    如果要递归地更改目录及其内容的所有者和组,可以使用-R选项。

       - 递归地将目录及其内容的所有者和组都更改为新用户和新组:chown -R newuser:newgroup directory

  • 保留文件的组,只更改所有者:
  •    使用-c选项来仅在所有者或组发生变化时显示修改的文件。

       - 仅更改文件的所有者,保留组:chown -c newuser filename

    这些示例展示了如何使用chown命令来更改文件和目录的所有者和组。在实际使用时,请确保具有足够的权限来更改所有者和组。更改所有者和组可能会影响文件的访问和权限设置,因此务必小心操作。

    chgrp

    语法:

    chgrp [options] new_group filename
    
    • options: 可选参数,用于指定一些特定选项,如递归更改等。
    • new_group: 新的组的组名或组ID。
    • filename: 要更改所属组的文件或目录名称。

    使用示例

  • 更改组:
  •    - 将文件的组更改为新组:chgrp newgroup filename
       - 将目录的组更改为新组:chgrp newgroup directory

  • 递归更改目录及其内容的组:
  •    如果要递归地更改目录及其内容的组,可以使用-R选项。

       - 递归地将目录及其内容的组都更改为新组:chgrp -R newgroup directory

  • 保留所有者,只更改组:
  •    使用-c选项来仅在组发生变化时显示修改的文件。

       - 仅更改文件的组,保留所有者:chgrp -c newgroup filename

    umask

    umask 是一个重要的系统命令,用于设置新文件和目录默认权限的掩码。在Linux和类Unix操作系统中,每个文件和目录都有一组权限位,用于控制谁可以访问文件或目录以及在何种方式下可以访问。umask 通过掩码的方式影响这些权限,用于限制默认的权限。

    语法:

    umask [options] [mode]
    
    • options: 可选参数,用于指定一些特定选项,例如显示当前 umask 值。
    • mode: 可选参数,用于设置新的 umask 值。mode 通常由三位数字表示,如 022。这三位数字分别表示文件权限的 rwx 位,其中每一位的值分别为 r(读取权限),w(写入权限),x(执行权限)。

    作用

    umask 的作用是屏蔽掉新创建文件和目录的默认权限位。更具体地说,umask 的值会从新文件或目录的默认权限中减去,以确定它们的最终权限。这是通过按位取反 umask 值然后与默认权限进行按位与操作来实现的。例如,如果 umask 设置为 022,则新文件的默认权限会被修改为 rw-r--r--(所有者可读写,其他用户只可读)。

    示例

  • 查看当前 umask 值:
  • 要查看当前系统的 umask 值,只需运行 umask 命令,它将返回当前的 umask 值:

    umask
    
  • 设置新的 umask 值:
  • 要设置新的 umask 值,只需将所需的权限位值传递给 umask 命令。例如,要将 umask 设置为 027

    umask 027
    
  • 永久修改 umask 值:
  • 若要永久修改 umask 值,可以在用户的 shell 配置文件中添加 umask 命令。例如,将 umask 设置为 027 并永久保存:

    ~/.bashrc~/.bash_profile 文件中添加以下行:

    umask 027   
    

    这将确保在每次用户登录时都会应用指定的 umask 值。

    注意事项

    • umask 的值通常以八进制表示,因此请确保使用正确的格式来设置它。
    • umask 设置的值影响新文件和目录的默认权限,但不会影响已经存在的文件和目录的权限。
    • 默认的 umask 值通常设置为 022002,这样新文件会具有相对安全的默认权限,但可以根据需求进行调整。
    • 注意,在设置 umask 值时,要确保不要过于放宽文件和目录的默认权限,以保护系统的安全性。

    su

    su(switch user)是一个在Unix和类Unix操作系统中用于切换用户的命令。它允许已登录的用户切换到另一个用户账户,通常是超级用户(root),以便执行需要特殊权限的任务。

    语法:

    su [options] [username]
    
    • options:可选参数,用于指定一些特定选项,例如保持环境变量、使用登录 shell 等。
    • username:可选参数,要切换到的目标用户账户。如果未提供该参数,默认会切换到超级用户账户(root)。

    示例

  • 切换到超级用户(root):
  • 如果不提供任何用户名,su 命令会默认将用户切换到超级用户(root):

    su 
    

    需要输入超级用户的密码才能切换到 root 用户。

  • 切换到其他用户:
  • 要切换到特定的用户账户,只需将目标用户名作为参数传递给 su 命令:

    su username
    

    在这里,将 username 替换为要切换到的实际用户名。

  • 保持环境变量:
  • 默认情况下,使用 su 命令切换到其他用户时,环境变量会被重置为目标用户的默认值。如果希望保留当前用户的环境变量,可以使用 - 选项:

    su - username   
    

    或者可以使用 --login 选项,效果相同:

    su --login username
    
  • 使用登录 shell:
  • 使用 -l 选项,也可以使用 --login 选项,可以强制切换到目标用户的登录 shell:

    su -l username   
    

    注意事项

    • 当切换到其他用户账户时,需要输入目标用户的密码,除非是超级用户(root)。
    • 使用 su 命令时,请小心不要意外地执行系统中的敏感操作,尤其是当切换到超级用户时。因为超级用户具有系统的最高权限,可以对系统进行任何更改。
    • 请谨慎使用超级用户(root)权限,仅在必要时切换到超级用户账户来执行需要特殊权限的任务。
    • 在许多系统中,为了安全起见,su 命令可能需要在特定的用户组中或具有特定权限的用户才能使用。

    chown

    chown 是一个用于更改文件或目录的所有者(owner)和所属组(group)的命令。在Unix和类Unix操作系统中,每个文件和目录都有一个所有者和一个所属组,这些属性决定了谁可以访问文件以及如何访问。chown 命令允许系统管理员或文件所有者更改这些属性,以便更好地管理文件系统。

    语法:

    chown [options] owner[:group] file(s)
    
    • options:可选参数,用于指定一些特定选项,例如递归操作、改变文件类型等。
    • owner:新的所有者的用户名或用户ID。
    • group:可选参数,新的所属组的组名或组ID。如果省略,将保持原始所属组不变。
    • file(s):要更改所有者和/或所属组的文件或目录。

    示例

  • 更改文件所有者:
  • 要更改文件的所有者,只需提供新的用户名或用户ID,以及要更改的文件的路径:

    chown newuser file.txt   
    
  • 更改文件的所有者和所属组:
  • 要同时更改文件的所有者和所属组,可以在 owner 后面加上 :,然后指定新的组名或组ID:

    chown newuser:newgroup file.txt
    
  • 只更改所属组:
  • 如果只想更改文件的所属组,而不改变所有者,可以使用 :,但省略 owner

    chown :newgroup file.txt  
    
  • 递归更改目录及其内容:
  • 使用 -R 选项可以递归地更改目录及其所有内容的所有者和/或所属组:

    chown -R newuser:newgroup directory/
    

    注意事项

    • 在使用 chown 命令时,确保提供正确的用户名、用户ID、组名或组ID。否则,可能会导致文件所有权混乱,甚至可能导致访问问题。
    • 使用 chown 命令需要足够的权限。通常,只有文件的所有者或超级用户(root)可以更改所有者和所属组。
    • 谨慎使用 chown 命令,特别是在系统范围内递归更改所有者和所属组。不正确的使用可能会影响系统的正常运行和安全性。
    • 如果是普通用户,可能需要超级用户权限(通过 sudo 命令)来执行某些 chown 操作。
    • 在执行递归操作时,请特别小心。确认要更改的文件和目录,以及更改后的所有者和所属组。

    结束语

    本系列就到此为止了,这些命令不用全记住 用到的时候想不起来查一下就好,其实用多了 自然而然就记住了~

    本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

    Linux相关文章

    • 一起来学Linux命令(一)
    • 一起来学Linux命令(二)
    • 一起来学Linux命令(三)
    • 一起来学Linux命令(四)
    • 一起来学Linux命令(五)
    • 一起来学Linux命令(六)
    • 一起来学Linux命令(七)
    • 一起来学Linux命令(八)
    • 一起来学Linux命令(九)

    往期面试题相关文章

    • 查漏补缺第一期(Redis相关)
    • 查漏补缺第二期(synchronized & 锁升级)
    • 查漏补缺第三期(分布式事务相关)
    • 查漏补缺第四期(Mysql相关)
    • 查漏补缺第五期(HashMap & ConcurrentHashMap)
    • 查漏补缺第六期(京东一面)
    • 查漏补缺第七期(美团到店一面)
    • 查漏补缺第八期(阿里一面)
    • 查漏补缺第九期(阿里二面)
    • 查漏补缺第十期(网易实习一面)
    • 查漏补缺第十一期(网易实习二面)
    • 查漏补缺第十二期(网易实习三面)
    • 查漏补缺第十三期(滴滴实习一面)
    • 查漏补缺第十四期(滴滴实习二面)
    • 查漏补缺第十五期(华为一面)
    • 查漏补缺第十六期(华为二面)
    • 查漏补缺第十七期(华为三面)
    • 查漏补缺第十八期(你了解class文件吗)

    项目源码(源码已更新 欢迎star⭐️)

    • java-interview-all: https://github.com/qiuChengleiy/java-interview-all

    往期设计模式相关文章

    • 一起来学设计模式之认识设计模式
    • 一起来学设计模式之单例模式
    • 一起来学设计模式之工厂模式
    • 一起来学设计模式之建造者模式
    • 一起来学设计模式之原型模式
    • 一起来学设计模式之适配器模式
    • 一起来学设计模式之桥接模式
    • 一起来学设计模式之组合模式
    • 一起来学设计模式之装饰器模式
    • 一起来学设计模式之外观模式
    • 一起来学设计模式之享元模式
    • 一起来学设计模式之代理模式
    • 一起来学设计模式之责任链模式
    • 一起来学设计模式之命令模式
    • 一起来学设计模式之解释器模式
    • 一起来学设计模式之迭代器模式
    • 一起来学设计模式之中介者模式
    • 一起来学设计模式之备忘录模式
    • 一起来学设计模式之观察者模式
    • 一起来学设计模式之状态模式
    • 一起来学设计模式之策略模式
    • 一起来学设计模式之模板方法模式
    • 一起来学设计模式之访问者模式
    • 一起来学设计模式之依赖注入模式

    设计模式项目源码(源码已更新 欢迎star⭐️)

    • java-design-mode-all: https://github.com/qiuChengleiy/java-design-mode-all

    Kafka 专题学习

    • 一起来学kafka之Kafka集群搭建
    • 一起来学kafka之整合SpringBoot基本使用
    • 一起来学kafka之整合SpringBoot深入使用(一)
    • 一起来学kafka之整合SpringBoot深入使用(二)
    • 一起来学kafka之整合SpringBoot深入使用(三)

    项目源码(源码已更新 欢迎star⭐️)

    • springboot-kafka-all: https://github.com/qiuChengleiy/springboot-kafka-all

    ElasticSearch 专题学习

    • 利用docker搭建es集群

    • 一起来学ElasticSearch(一)

    • 一起来学ElasticSearch(二)

    • 一起来学ElasticSearch(三)

    • 一起来学ElasticSearch(四)

    • 一起来学ElasticSearch(五)

    • 一起来学ElasticSearch(六)

    • 一起来学ElasticSearch(七)

    • 一起来学ElasticSearch(八)

    • 一起来学ElasticSearch(九)

    • 一起来学ElasticSearch(十)

    • 一起来学ElasticSearch之整合SpringBoot(一)

    • 一起来学ElasticSearch之整合SpringBoot(二)

    • 一起来学ElasticSearch之整合SpringBoot(三)

    项目源码(源码已更新 欢迎star⭐️)

    • springboot-es-all: https://github.com/qiuChengleiy/springboot-es-all

    往期并发编程内容推荐

    • Java多线程专题之线程与进程概述
    • Java多线程专题之线程类和接口入门
    • Java多线程专题之进阶学习Thread(含源码分析)
    • Java多线程专题之Callable、Future与FutureTask(含源码分析)
    • 面试官: 有了解过线程组和线程优先级吗
    • 面试官: 说一下线程的生命周期过程
    • 面试官: 说一下线程间的通信
    • 面试官: 说一下Java的共享内存模型
    • 面试官: 有了解过指令重排吗,什么是happens-before
    • 面试官: 有了解过volatile关键字吗 说说看
    • 面试官: 有了解过Synchronized吗 说说看
    • Java多线程专题之Lock锁的使用
    • 面试官: 有了解过ReentrantLock的底层实现吗?说说看
    • 面试官: 有了解过CAS和原子操作吗?说说看
    • Java多线程专题之线程池的基本使用
    • 面试官: 有了解过线程池的工作原理吗?说说看
    • 面试官: 线程池是如何做到线程复用的?有了解过吗,说说看
    • 面试官: 阻塞队列有了解过吗?说说看
    • 面试官: 阻塞队列的底层实现有了解过吗? 说说看
    • 面试官: 同步容器和并发容器有用过吗? 说说看
    • 面试官: CopyOnWrite容器有了解过吗? 说说看
    • 面试官: Semaphore在项目中有使用过吗?说说看(源码剖析)
    • 面试官: Exchanger在项目中有使用过吗?说说看(源码剖析)
    • 面试官: CountDownLatch有了解过吗?说说看(源码剖析)
    • 面试官: CyclicBarrier有了解过吗?说说看(源码剖析)
    • 面试官: Phaser有了解过吗?说说看
    • 面试官: Fork/Join 有了解过吗?说说看(含源码分析)
    • 面试官: Stream并行流有了解过吗?说说看

    推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)

    • springboot-all https://github.com/qiuChengleiy/springboot-all.git

    • SpringBoot系列教程合集

    • 一起来学SpringCloud合集

    • SpringCloud整合 Oauth2+Gateway+Jwt+Nacos 实现授权码模式的服务认证(一)

    • SpringCloud整合 Oauth2+Gateway+Jwt+Nacos 实现授权码模式的服务认证(二)

    博客(阅读体验较佳)

    • 我的博客(阅读体验较佳)

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论