唠唠闲话

初学 Linux ,在这里记录 Linux 常用命令和语法等,方便查阅。部分语法合并到了另一篇博客中:Ubuntu 教程(三) | shell 编程入门

基本使用

常用命令

  1. 软件管理 apt,参考这里

    1
    2
    3
    4
    5
    6
    7
    apt install <package> # 安装软件包
    apt remove <package> # 移除软件包,保留配置文件
    apt purge <package> # 移除软件包及配置文件
    apt update # 刷新存储库索引
    apt upgrade # 升级所有可升级的软件包
    apt autoremove # 自动删除不需要的包
    apt search <package> # 搜索软件包
  2. 移动文件夹
    path 中的文件移动到 newpath 中,有下边几种方法

    1
    2
    3
    4
    5
    mv path/* newpath # 不建议
    mv path/* newpath/
    mv path/* newpath/ -i
    mv path/* path/.[^.]* newpath/
    cp path/* newpath/ -rf && rm path/* -rf

    方法区别:

    • 第一行当文件夹 newpath 不存在,且 path 下只有一个文件时,执行“文件重命名操作”,不建议用
    • 第二行是一般用法,缺点是自动覆盖同名文件,且不移动隐藏文件
    • 第三行 -i 设置覆盖前提醒
    • 第四行 path/* 匹配所有非隐藏文件,path/.[^.]* 匹配隐藏文件,移动多个文件用空格隔开
    • mv 命令不能覆盖同名目录,第五行用 cprm 组合来实现目录覆盖
  3. wget 下载文件
    使用 wget --help 查看使用方法,常用参数:

    • -c 断点续传
    • -P <path> 指定下载目录
    • -O <filename> 指定文件名
  4. 关于 mv 命令

    • mv 常用于文件或文件夹的重命名
    • 用于文件夹重命名时, mv path1/folder1 path2/folder2 有两种可能结果
    • 如果文件夹 folder2 不存在,则将 path1/folder1 移动为 path2/folder2
    • 如果文件夹 folder2 已存在,则将 path1/folder1 移动为 path2/folder2/ 目录下

查看目录

  1. 安装软件

    1
    sudo apt-get install tree
  2. 输入 tree 查看当前目录树
    filetree

  3. 设置显示深度

    1
    2
    # tree <path> -L <depth>
    tree . -L 2 # 显示当前目录的两层目录结构

压缩解压

几种文件后缀:

  • .tar 是打包
  • .tar.gz 才是压缩过的文件
  • .tar.gz 常见于unix系统,在 ubuntu 或 macos 可以直接解压
  • .zip 常见于 windows 系统
  • .tar.bz2 也是一种
  1. .tar 文件

    1
    2
    3
    4
    5
    # 仅打包,并非压缩
    tar -xvf FileName.tar # 解包
    tar -xvf FileName.tar -C newpaht/ # 解包到指定路径
    tar -xvf FileName.tar.bz2 # 解包 .bz2 文件
    tar -cvf FileName.tar DirName # 将DirName和其下所有文件(夹)打包
  2. .gz 文件

    1
    2
    3
    4
    # .gz
    gunzip FileName.gz # 解压1
    gzip -d FileName.gz # 解压2
    gzip FileName # 压缩,只能压缩文件
  3. .tar.gz 文件

    1
    2
    3
    4
    # .tar.gz 和 .tgz
    tar -zxvf FileName.tar.gz # 解压
    tar -zcvf FileName.tar.gz DirName # 将 DirName 和其下所有文件(夹)压缩
    tar -C DesDirName -zxvf FileName.tar.gz # 解压到目标路径
  4. .tar.bz2 文件,使用 -j 参数

    1
    2
    tar -xjf FileName.tar.bz2 # 解压文件
    tar -cjf File FilePath # 压缩文件
  5. .zip 文件

    1
    2
    3
    4
    # 感觉.zip占用空间比.tar.gz大
    unzip FileName.zip # 解压
    zip FileName.zip DirName # 将DirName本身压缩
    zip -r FileName.zip DirName # 压缩,递归处理,将指定目录下的所有文件和子目录一并压缩
  6. .rar 文件

    1
    2
    rar x FileName.rar      # 解压
    rar a FileName.rar DirName # 压缩

    linux 没有自带 rar ,需下载安装

    1
    sudo apt install rar

参考 CSDN:Ubuntu 常用解压与压缩命令


其他

连接蓝牙

参考知乎:ubuntu连接AirPods

设置图标

TODO

文件权限控制

文件权限

参考 B 站视频

Linux 是多用户的操作系统,允许多个用户在系统上登录和工作,为了确保系统和用户安全,Linux 采取了很妒忌安全措施。

  1. 输入 ls -al 查看文件权限
    深度截图_选择区域_20220506194543

  2. 权限信息如下

    1
    2
    3
    # ls -ahl
    drwxrwxr-x 11 rex rex 4.0K 6月 8 16:20 .
    -rw-rw-r-- 1 rex rex 1.2K 6月 9 17:15 package.json
    • drwxrwxr-x 为权限信息,分为“用户”,“组”,“其他”三个区域
      • d 代表目录,- 代表文件,l 代表链接
      • 第一处 rwx 代表用户(文件拥有者)拥有可读,可写,可执行权限
      • 第二处 rwx 代表同组用户拥有可读,可写,可执行权限
      • 第三处 r-x 代表其他用户拥有可读,可执行权限,没有可写权限
    • 11 暂不了解
    • 第一处 rex 代表文件所有者
    • 第二处 rex 代表文件所有者所在组
    • 4.0K 代表文件大小
    • 6月 代表文件最后修改时间
    • 8 暂不了解
    • 16:20 代表文件最后修改时间
  3. 对于文件夹,rwx 有其他含义:

    • r 代表文件夹可以被 ls 查看属性
    • w 代表可以文件夹内创建或删除文件
    • x 代表是否能进入该目录
  4. 修改权限使用 chmod 命令,比如

    • chmod u+x <file> 为用户赋予文件的执行权限,u 代表用户,+ 代表赋予,x 代表可执行权限
    • chmod ug-rx <file> 将拥有者和同组用户的执行读取权限 r 和执行权限 x 移除
    • 第一个处 u 代表用户,g 代表组,o 代表其他用户,a 代表所有用户
    • 第二个处 + 代表赋予,- 代表移除
    • 第三处 r 代表读,w 代表写,x 代表执行
  5. 关于三种权限的赋予一共 8 种可能:

    整数简写 二进制 字母形式 权限含义
    0 000 --- 无权限
    1 001 r-- 只读权限
    2 010 -w- 只写权限
    3 011 rw- 读写权限
    4 100 --x 只执行权限
    5 101 r-x 读执行权限
    6 110 -wx 写执行权限
    7 111 rwx 读写执行权限
  6. 因此,chmod 可以用二进制来赋予权限,比如

    • chmod 777 <file> 等价于 chmod a+rwx <file>
    • chmod 755 <file> 等价于 chmod go+rx <file>; chmod a+rwx <file>
  7. 如果需要递归地赋予权限,可以使用 chmod -R 命令,比如

    • chmod -R 777 <file> 将会赋予 <file> 的所有子文件夹和子文件的所有权限(不包括文件夹自身)
  8. chmod 为 change mode 的缩写,用于修改文件权限;chown 为 change owner 的缩写,用于修改文件所有者和组,比如

    • chown <user> <file><file> 的所有者改为 <user>
    • chown :<group> <file><file> 的所有者改为 <group>

    注意:chown 命令需要 root 权限才能使用

setgid

“setgid”(设置组 ID)可以确保一个文件夹中新创建的文件和子文件夹自动继承其父文件夹的组。这对于多用户环境中共享文件非常有用,可以确保所有组成员都能访问和编辑文件。

使用以下命令进行设置:

1
sudo chmod g+s /path/to/directory

终端演示:
access-control

可以看到,新创建的文件都是 cubenlp 组的,而不是用户的默认组 zhihong。组权限也被设置为 rws,而不是 rwx

1
2
3
4
5
6
7
ls -al
total 12
drwxrwsr-x 3 zhihong cubenlp 4096 May 13 07:17 .
drwxrwxr-x 23 zhihong zhihong 4096 May 13 07:16 ..
-rw-rw-r-- 1 zhihong cubenlp 0 May 13 07:17 1
-rw-rw-r-- 1 zhihong cubenlp 0 May 13 07:17 2
drwxrwsr-x 2 zhihong cubenlp 4096 May 13 07:17 test

umask

umask用于设置新创建文件和目录的默认权限。

umask 的值是一组数字,通常是三位数,每一位对应文件和目录权限的设置。“mask” 顾名思义,就是掩码的意思,将权限减去该数字。默认地,文件的权限是 666,目录的权限是 777。

比如 umask 值为 002 则创建文件的权限是 666-002=664,用户和同组用户有读写权限,其他用户只有读权限;创建目录的权限是 777-002=775,用户和同组用户有读写执行权限,其他用户只有读执行权限。

通常,组共同工作的文件夹的 umask 值为 002,这样所有用户都可以读写文件,但其他用户只能读取文件。

使用 Access Control Lists (ACLs)

另一个方法是使用 ACLs 对特定文件和目录设置更细致的权限控制。例如,为特定用户或组设置默认的读/写权限,这些设置可以超越基本的文件系统权限。

安装了 acl 包:

1
sudo apt-get install acl

使用 setfacl 命令来设置默认的访问控制列表:

1
sudo setfacl -dm "g:groupname:rwx" /path/to/directory

这里 groupname 是组名,/path/to/directory 是目录路径。这个命令设置了一个默认的 ACL,使得组内所有用户对目录有读、写和执行权限。