1 Star 0 Fork 0

qxy-linux-study/linux-study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

openSource 开源

linux之父 林纳斯·本纳第克特·托瓦丝

linux发行版介绍:

RHEL

  • 红帽linux 商业公司 收费的 centos
  • Community Enterprise Operating System
  • 社区企业操作系统,免费 Ubuntu
  • 乌班图
  • 桌面应用为主的GNU/Linux开源系统 Debian
  • Debian社区

RHCE 红帽认证

  • RHCSA 红帽认证系统管理员
  • RHCE 红帽认证工程师
  • RHCA 红帽认证架构师

服务器种类

  • 塔式服务器(跟电脑主机差不多)
  • 机架式服务器(抽屉长得很像)
  • 刀片式服务器(机架式服务器,刀片一样)

部署

  • 下来 centos 系统镜像
  • 通过使用 VMware 部署 centos
    • 选择自定义
    • 选择虚拟机硬件兼容性
      • 随便选择,就是是否兼容旧版本的VMware,选择高版本的即可
    • 安装客户机操作系统,如何安装
      • 稍后安装
    • 安装客户机操作系统,安装哪种操作系统
      • 选择 Linux CentOS 7 64位,下载的镜像是什么版本的就选择什么版本的
    • 命名虚拟机
      • 虚拟机名称:随便写,用来区分别的虚拟机
      • 位置:虚拟机安装的文件夹,单独创建一个文件夹保存,方便以后迁移
    • 处理器配置
      • 数量:1
      • 内核数:1
      • 看着选 够用就好
    • 虚拟机内存
      • 内存足够多的话,就2G,不够就推荐的内存
    • 网络类型
      • 默认就好,以后可以改,使用网络地址转换。
    • 选择I/O控制器类型
      • 默认推荐的就好(LSI Logic)
    • 选择磁盘类型
      • 默认推荐就好(SCSI)
    • 选择新的磁盘
      • 创建新虚拟磁盘
    • 指定磁盘容量
      • 推荐的值就好,不够往上加
    • 指定磁盘文件
      • 默认给的文件名就好,直接下一步
    • 点击完成
      • 这样一台机器就创建好了
    • 选择CD/DVD(IDE),点击选择 使用ISO映像文件,选择最开始下载的centos7的镜像文件
  • 启动机器,自动部署操作系统
    • 选择安装镜像
    • 安装成功后,进入系统设置页面
    • 选择中英文,点击下一步
    • 点击软件选择,左侧选择 带GUI的服务器,右侧选择 兼容性程序库、开发工具,点击完成
    • 点击安装位置,选择手动分区,点击完成(也可以选择自动分区,自动帮你分好的)
      • 在下一个页面,点击加号,添加新的挂载点
      • 先添加一个 /boot,容量 1024,作为启动分区(手动输入)
      • 在添加一个 swap,容量 2048,当内存不够用的情况下,会使用此硬盘的区域(下拉选择)
      • 在添加一个根目录,不设置容量,剩余的容量都是它的,作为C盘
    • 点击KDUMP,设置关闭dump,个人计算机没用
    • 点击安装,进入下一个页面
    • 点击设置 root 密码,设置完后,开始安装
    • 安装完成后,进入系统,根据提示及继续设置即可
  • 进入桌面后,会有回收站和主文件夹
  • 点击右上角的电源按钮,点击自己的用户名,注销用户, 重新回到登录账户的界面,选择 未列出,输入 root 账户,密码输入安装系统时,设置的密码 重新进入 桌面

删除虚拟机

关机之后,右键虚拟机的标签,选择管理,选择右键从磁盘中删除

又或者直接找到文件夹删除也可以

远程连接centos机器

  • vsCode下载插件 Remote - SSH
  • 下载后,右侧多出来个图标,点击
  • 添加新的SSH主机,弹出的输入中输入 ssh root@192.169.x.x,root为远程主机名,@后面的是主机地址
  • 如果新打开了个窗口,提示输入主机密码,输入即可连接

免密登录

  • 如果自己的电脑上没有 公钥和私钥,可以执行 ssh-keygen 这个命令生成
  • 找到自己电脑用户下的 .ssh 文件夹,复制 id_rsa.pub 公钥的内容
  • 打开远程机器,在根目录下 cd ~,创建 .ssh/authorized_keys 的文件夹和文件,有的话就不用了,将刚才在本地电脑上复制的公钥复制进 authorized_keys 文件中(追加)即可
  • 再次连接远程机器就不用输入密码了

快照

最好是关机快照; 选择虚拟机->快照->快照管理器,进行快照操作

文件和用户管理

root 系统管理员 / 根目录

文件夹说明

bin 执行命令,命令行执行的命令 boot 启动目录,系统启动 dev 驱动、设备、硬件,跟硬件相关的 etc 配置文件 home 用户自己的文件 root 只有超级管理员才可以进 run 运行文件,临时的 sbin 超管命令 tmp 临时目录 usr 应用程序 var 可变的 日志

命令

语法:命令 选项 参数 比如:ls -l / 查看根目录下的文件列表

可以查看文档 https://www.runoob.com/linux/linux-command-manual.html

文件管理

切换目录
  • cd 改变目录(change directory)
    • cd / 跳到根目录,绝对路径一般都是从这儿跳转的
    • cd ./../ 相对路径
显示路径
  • pwd 显示当前目录
查看目录和文件
  • ls 文件列表

    -a 显示所有文件及目录 (. 开头的隐藏文件也会列出) -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录) -d 只列出查询的目录(不递归列出目录内的文件)。 ls -d 是不会列出所有的文件夹的,ls -d 文件夹 只会列出 查看的文件夹 -l 以长格式显示文件和目录信息,包括权限、所有者、大小、创建时间等。 -r 倒序显示文件和目录。 -R 递归显示目录中的所有文件和子目录。 -t 将按照修改时间排序,最新的文件在最前面。 -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"

    • ls -l 详细信息 d 开头的是文件夹; - 开头的是普通文件; b 块设备,存储设备硬盘,u盘 c 设备文件 字符设备,打印机 i 链接文件 s 套接字文件 p 管道文件 Alt text
创建文件
  • touch 创建文件
    • touch /root/桌面/aaa 在桌面上创建一个aaa的文件
创建文件夹
  • mkdir 创建文件夹

    -p 确保目录名称存在,不存在的就建一个。 -v 创建的过程显示出来

    • mkdir /root/桌面/文件夹1 在桌面上创建一个文件夹1
    • mkdir -p /aa/bb 创建一个文件夹aa,aa中包含bb文件夹
    • mkdir -p cc/{1,txt,2.js} 创建一个cc文件夹(没有的话创建),并且创建其子文件1.txt和2.js。注意逗号前后没有空格
    • mkdir -pv cc/{c-1/{1.txt,2.txt},3.txt},{}内自动识别是文件还是文件夹 alt text
复制文件夹或文件
  • cp 复制文件或者文件夹

    -r 或 --recursive:用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。

    • cp aa/a.txt bb 将aa文件夹下的a.txt 复制到bb里面去
    • cp -r aa bb 将aa文件夹复制到bb文件夹中去
移动文件夹或文件
  • mv 移动文件或文件夹
    • mv aa bb 将文件夹aa移动到bb中去
    • mv aa bb/aa-1 将文件夹aa移动到bb中去,并改名为aa-1
    • mv aa aa-1 只改名,不移动,将aa文件夹改名为aa-1
删除文件夹或文件
  • rm 删除文件或目录 慎用 删了就真的没了,最好是用 mv 重命名

    -r 将目录中的内容逐一删除 -f 直接删除 无需确认 -i 删除前,一个一个询问确认

    • rm -rf aa 删除文件夹aa
    • rm -rf aa/* 删除aa文件夹下所有的内容,隐藏文件除外
查看文件内容
  • cat 查看文件内容
    • cat aa/a-1.txt 查看文件a-1的内容
    • head -3 aa/a-1.txt 查看a-1文件内容的前三行
    • tail -3 aa/a-1.txt 查看a-1文件内容的后三行
    • more aa/a-1.txt 当文件内容过多时,在当前终端界面显示不下,会隐藏一部分,按空格翻篇或者回车换行显示剩下的内容
    • grep 2 aa/a-1.txt 搜索a-1文件中,包含2的内容,如果没有搜索到内容,啥都不返回
修改文件内容

重定向 > 将命令输出的内容写入到一个文件中

  • ls -l > 1.txt 将 ls -l 命令 输出的内容,写入到 1.txt 文件中
  • ls -l >> 1.txt 一个 > 是覆盖,两个 >> 是追加
打开图形文件编辑器
  • gedit 1.txt 用图形文件编辑器 打开 1.txt
vi 和 vim
  • 编辑时,按键盘 i,进入插入模式
    • a、i、o、A 都可以进入插入模式
      • a 当前字符的后面插入
      • i 当前字符的前面插入
      • o 新换一行插入
      • A 当前行的末尾插入
  • 不编辑时,按键盘 esc,返回命令模式

扩展命令模式

  • 保存并退出,按键盘 :wq
  • 只保存不退出,按键 :w
  • 只退出不保存,按键 :q,如果修改了内容退出时,需要加一个!强制退出,:q!
  • 显示行号,按键 :set nu
  • 隐藏行号,按键 :set nonu

命令模式

  • 复制 当前行,先按两下 yy 复制,再按 p 粘贴,会复制到光标的下一行
    • 复制多行,在开始复制的行上先按 数字yy 复制,再按 p 粘贴,复制到光标的下一行,比如 3yy 表示复制了 3 行
  • 删除 当前行,按两下 dd
    • 删除多行,在开始删除的行上按下 数字dd 表示删除的行数,比如 3dd 表示从光标位置开始删除三行
  • 撤销 u
  • 删除 某个字,x 删除光标后的那个字,实际上是剪切,按 p 粘贴
  • 光标控制
    • h 光标前移,l 光标后移,k 光标向上,j 光标向下
    • 0 跳到行首,$ 跳到行尾
    • gg 回到页首,G 跳到页尾,3G 或者 3gg 跳到第三行
  • 查找
    • /aa 回车后,会查找 aa 的字符,n 会跳转到查找到的下一项,N 跳转查找的上一项
  • 替换
    • : 1,5 s/111/222/g 将第1行到第5行的内容111替换成222,g表示全局
  • 另存为
    • :w 路径 会将新文件保存到指定路径
  • :set list 显示控制字符,查看特殊符号
  • :set nolist 隐藏控制字符

可视化模式

  • 可视化模式,v,可以进入选取模式,相当于鼠标拉动选取,对于没有鼠标的情况下使用,选取完成后,按一下 y,就会复制刚才选取的内容,然后光标移动到适当位置,按 p 就会将复制的内容粘贴下来
  • 一个 y,复制,然后再按 p 粘贴
  • 一个 d,删除

注意 有时候,编辑了一半意外的退出了,然后再进入,会询问你是否使用之前的文件,类似这样的 .aaa.txt.swap,如果不需要,可以 ls -a 查看 .aaa.txt.swap 是否有这个文件,有的话,使用 rm 命令删除掉,再次进入就可以正常进入了

用户/组

概念

管理

用户基本信息文件

存储在 vim /etc/passwd 文件中,该文件中的数据以一个类似表格的方式存储内容,以冒号分隔,共有七列,每一列表示用户不同信息 比如 head -1 /etc/passwd 查看第一行的内容 root:x:0:0:root:/root:/bin/bash

root :x :0 :0 :root :/root :/bin/bash
用户名 密码占位符 UID(用户身份证号) GID(组号) 描述 家目录(登录系统时,所在的目录) (普通用户的家目录在“/home/【用户名】”下) 登录shell 命令解释器 /sbin/nologin 表示不能登录系统

UID:

  • 0 特权用户(超管)
  • 1-499 系统用户,系统分配的
  • 1000+ 普通用户

shell 中文:壳 功能:命令解释器、定义命令、接受命令、执行命令

用户密码信息文件(了解)

vim /etc/shadow 例如: root: $6$yo/8rcV.xV8.kQP8$iPJJvoOJ9nPnHctmNBO/ld.zlkivrNF7J9W05WmMS9JmSim2aAgd65l..PRhMMntdPH/PUe6rbiLmjFRqjvb/.: : 0 : 99999 : 7 : : : 1. : 2. : 3. : 4. : 5. : 6. : 7. : 8. : 9. 解释:以冒号进行分割

  1. root: 用户名
  2. $6$yo/8rcV.xV8.kQP8$iPJJvoOJ9nPnHctmNBO/ld.zlkivrNF7J9W05WmMS9JmSim2aAgd65l..PRhMMntdPH/PUe6rbiLmjFRqjvb/.:
  • $6$ 开头的是SHA-512加密
  • $1$ MD5加密
  • $2$ Blowfish加密
  • $5$ SHA-256加密的
  • 剩下的部分是加密过后的密码值
  1. 最后一次修改的时间,从1970年1月1日开始计算
  2. 0: 修改密码时间的 最小时间间隔,多长时间之后才可以再改
  3. 99999: 密码有效期,最大时间间隔,超过这个天数,必须设置新密码
  4. 7: 提示修改密码的警告时间,倒数第七天
  5. 不活动时间,用户不登录系统,保留的最大时间,超过这个时间账号被禁用
  6. 失效时间,不管登不登录,超过这个天数,就禁用
  7. 保留
组信息文件(了解)

/etc/group 例如: wheel:x:10:centos7 解释:冒号分割,每列说明 wheel : x : 10 : centos7 组名 : 组密码 : 组id : 成员

每创建一个用户,都会自动生成一个相同名称的组

用户

超级管理员才可以操作用户

添加用户

useradd user01 创建一个名为 user01 的用户,如果已存在,会返回提示已存在的信息

  • -u 指定uid
  • useradd user01 -d /abc 指定家目录,默认是在 home 里面跟用户名相同的文件夹,指定之后,会在指定位置生成指定名称的用户文件夹,打开终端默认就会在这个文件夹中
查询用户

id user01 可以查看名为 user01 的用户的信息,不存在 会返回提示信息

修改密码命令

passwd user01 修改 user01 用户的密码,会有提示

  • passwd 会修改当前用户的密码,当前用户可以修改自己本身的密码,其他用户只能由超管修改
查看当前系统登录的用户

whoami

删除用户

userdel -r user01 删除 user01 用户,-r 表示 /home 下的用户文件夹也一起删掉

修改用户属性

usermod

  • usermod -s /sbin/nologin aaa 修改 aaa 用户的shell解释器,/sbin/nologin 表示无法登陆,-s 表示修改 shell 解释器

创建和修改时,都可以指定 -u 指定用户的 UID -g 指定用户的基本组 -G 指定用户的附加组

类型:

  • 基本组: 创建用户的时候,会默认创建一个和用户名相同的组,就是基本组,每个用户只能有一个基本组
  • 附加组: 除了基本组,加入到其他的组都是附加组
添加组

groupadd group01 添加一个名为 group01 的组

  • cat /etc/group 查看是否添加组成功 /etc/passwd/etc/shadow 存储的是用户的信息,没有组的信息。
  • grep group01 /etc/group 也可以查找名称为 group01 的组是否存在,存在会输出
  • groupadd -g 1000 group01 创建一个名称为 group01 的组,并且指定 gid 为 1000,如果没有指定,会自动分配一个 gid
删除组

groupdel group02 删除名称为 group02 的组

修改组信息

groupmod -g 1001 group01 修改名称为 group01 的组的 gid 为 1001

查看组成员

cat /etc/group 查看需要查看的组信息,最后一列会显示 组成员,比如 group01:x:1003:user02,user01 grep group01 /etc/group 或者使用搜索

查看用户属于哪些组

id 用户名 可以查看 用户名当前属于哪些组,以及基本组是哪个

  • uid=222222(user01) gid=1001(user02) 组=1001(user02),1003(group01)
    • 用户 user01 的基本组是 gid:user02
    • 用户 user01 一共加入了两个组,一个是 user02,一个是 group01
将用户从组中删除

gpasswd -d user01 group01 表示 将用户 user01 从 group01 中删除

  • 不能将用户从基本组中移出,因为用户必须有一个组
将用户加入到组中

gpasswd -a qxy01 group01 将用户 qxy01 添加到 group01 中,如果 qxy01 不存在,会提示不存在

/var/spool/mail/user01 邮件

提权

永久提权
  • 普通用户没有权限
  • 少用root
  • 需要执行特殊指令时,使用 su 切换到超管

su - root 切换到超级管理员账户,需要输入密码

  • 注:su root 只会切换用户,不会切换环境变量,su - root 切换用户和环境变量
  • 执行 exit 可以退出切换到的超管账户,回到之前的用户账户
临时提权
  • 普通用户登录服务器
  • 完成部分特权指令
  • 如何授权?

etc/sudoers 文件中,可以配置允许哪些用户使用 sudo 命令,哪些用户可以执行哪些命令,哪些用户可以用 sudo 管理哪些用户。 第107行,%wheel ALL=(ALL) ALL 表示 wheel 组的用户可以用 sudo 执行所有命令,并且可以管理所有用户。

举例: usermod -G 10 qxy01 将 qxy01 用户添加到 wheel 组,这样 qxy01 就可以用 sudo 执行所有命令,并且可以管理所有用户。

切换到 qxy01 用户(需要重新登陆一下qxy01用户),执行超级管理员才能执行的命令

sudo useradd qxy02 就可以使用 qxy01 用户创建一个用户 qxy02,id qxy02 查看是否输出信息

权限

基本权限UGO

  • (user + group + other)
  • a 表示 all,所有权限

权限的类型

  • 读:r:4
  • 写:w:2
  • 执行:x:1

设置权限

  • chmod u+r 1.txt
    • 解释:chmod 命令 u+r 设置权限 1.txt 设置的文件
    • 语法:chmod 对象(u/g/o)赋值(+/-/=)权限类型(r/w/x) 文件/目录
    • -R 对一个文件夹下所有的文件授权
查看文件的权限:
  • ls -l 显示详细信息,包括权限,简写 ll

可以看到打印出来的第一列信息就是文件的权限信息,比如:

-rw-r--r--. 1 root root 0 6月 28 01:18 file01

第一列: -rw-r--r--.,除去第一个和最后一个字符,中间的字符每三个表示一组权限 rw-r--r--rw- 表示用户权限 r-- 表示组权限 r-- 表示其他权限

第二列: 1 表示链接的次数

第三列: root 表示文件所有者(属主)

第四列: root 表示文件所属的组(属组),比如:在这个组中的用户,对这个文件只能 第一列中的 r--

第五列: 0 表示文件大小,单位是字节

第六列: 6月 28 01:18 表示文件最后一次修改的时间

第七列: file01 表示文件名

权限的修改
  • chmod u=rwx,g=rw,o=r 1.txt
    • 解释:chmod 命令 u=rwx 设置用户权限为 读、写、执行 g=rw 设置组权限为 读、写 o=r 设置其他用户权限为 读
    • 语法:chmod 对象(u/g/o)赋值(+/-/=)权限类型(r/w/x) 文件/目录
      • = 表示覆盖,+ 和 - 表示追加和删除
    • a 表示 u/g/o 所有人
    • chmod u=rwx 1.txt 仅修改用户权限,为 读 写 执行
    • chmod g=rw 1.txt 仅修改组权限,为 读 写
    • chmod o=r 1.txt 仅修改其他用户权限,为 读
    • chmod a=r-- 1.txt 所有人只有读的权限
    • chmod a=w 1.txt 所有人只有写的权限,读 和 执行没有设置,表示没权限
    • chmod u+x 1.txt 增加用户执行权限
    • chmod u-x 1.txt 取消用户执行权限
      • 执行一个文件,需要使用相对路径或绝对路径找到文件,直接回车即可 ./1.txt 比如文件中写入:
          echo 'hello linux!!';
          read -p "请输入名字:" name;
          echo "欢迎使用,$name";
        
        然后 ./1.txt 就可以执行了。
    • chmod 444 1.txt 所有人只有读的权限
    • chmod 644 1.txt 用户有读写权限,组和其他只有读权限
    • chmod 777 1.txt 所有人有读写执行权限

设置属主和属组

比如:-rw-r--r--. 1 root root 85 6月 29 01:55 file01.txt

上面 file01.txt 文件的属主是第三列root,属组是第四列root

修改命令:

chown 用户.组 文件名 修改文件的属主和属组,也可以单独设置

  • chown qxy01.group01 file01.txt 修改文件 file01.txt 的属主和属组为 qxy01group01
    • -rw-r--r--. 1 qxy01 group01 85 6月 29 01:55 file01.txt 修改完成后 ll 查看
  • chown root file01.txt 也可以只修改 属主,不修改 属组
    • -rw-r--r--. 1 root group01 115 6月 29 22:13 file01.txt
  • chown .qxy02 file01.txt 也可以只修改 属组,不修改 属主
    • -rw-r--r--. 1 root qxy02 115 6月 29 22:13 file01.txt

chgrp 组 文件名 只修改文件的属组

  • chgrp group01 file01.txt 修改文件 file01.txt 的属组为 group01
    • -rw-r--r--. 1 root group01 115 6月 29 22:13 file01.txt

目录权限

上面的对文件的所有操作,对文件夹也同样生效。

查看文件夹中的子文件和文件夹相当于读取的操作 r(4)

创建文件夹相当于写入的操作 w(2)

打开文件夹相当于执行的操作 x(1)

chomd -R 774 aaaaa 递归设置文件夹权限为 774,包括文件夹中的所有文件和文件夹 chown -R 774 aaaaa 递归设置文件夹属主和属组为 774,包括文件夹中的所有文件和文件夹

总结一下

对一个文件夹和文件可以设置 属主属组,根据 属主属组 需要设置 对应的 wrx 权限。

如果一个用户既不属于 属主属组,那么只能看 other 其他权限。

升级版的基本权限ACL

UGO 顶多设置 三种角色的权限,用户、组、其他角色权限。

ACL 可以设置更多的不同用户的权限

命令:

setfacl

  • setfacl -m u:qxy01:rwx file01.txt

    • -m 表示设置权限
    • u: 表示设置用户,也可以 setfacl -m u::rwx file01.txt 不写用户,表示设置属主的权限,属组和其他 也类似
    • g: 表示设置组
    • o: 表示设置其他用户
      • setfacl -m o::rw file01.txt 设置 other 其他用户的权限为 读、写
    • rwx 表示读、写、执行权限 设置了 setfacl 后,查看文件的信息,就可以看到第一列的最后一个字符变成了 + 号,表示有 ACL 权限。 -r--rwxr--+ 1 root group01 87 6月 29 23:34 file01.txt

    也就是说有 + 号的,一定要用 getfacl 查看权限,否则可能不准确

    删除:

    • setfacl -x u:qxy01 file01.txt 删除用户 qxy01 的权限
      • -x 删除 qxy01 用户的权限
    • setfacl -b file01.txt
      • -b 删除所有扩展出来的 ACL 权限

getfacl

  • getfacl file01.txt 查看文件的 ACL 权限

      # file: aaaaaa/
      # owner: root     // 属主
      # group: root     // 属组
      user::rwx         // 属主的权限
      group::rwx        // 属组的权限
      other::r--        // 其他用户的权限
    

    如果设置了 setfacl -m u:qxy01:rwx file01.txtsetfacl -m u:qxy02:r file01.txt 则可以看到

      # file: file01.txt
      # owner: root
      # group: group01
      user::r--
      user:qxy01:rwx  // 这里显示的是 qxy01 的权限
      user:qxy02:r--  // 这里显示的是 qxy02 的权限
      group::r--
      mask::rwx
      other::r--
    

特殊权限(了解)

创建一个文件 默认的权限是 644

创建一个文件夹 默认的权限是 755


特殊位,文件临时提权

suid 高级权限,针对文件或程序,具备临时提升权限的能力,可以让文件或程序以超级用户权限运行。

  ls -l /usr/bin/cat      # 显示文件权限,没有 suid 权限
  chmod u+s /usr/bin/cat  # 给 cat 文件添加 suid 权限
  ls -l /usr/bin/cat      # 显示文件权限,s 就是 suid 权限

  # 切换用户
  su - qxy01
  cat /home/test11/file01.txt # 可以查看文件内容
  exit

  # 回到 root 用户,去掉 suid 权限
  chmod u=rwx /usr/bin/cat
  # 重新切换回 qxy01 用户,发现 无法读取 file01.txt 文件内容了

如果设置时,原本就没有执行的权限,那么 设置 chmod u+s 后,会出现 大写S,如果有权限,会出现 小写 s。

文件属性

有一个文件,防止被无删除如何操作?也包括超管

  # 1. 查看文件属性,没有任何属性
  lsattr file01.txt
  # ---------------- file01.txt

  # 2. 添加 i 属性, 表示不可删除,更改,移动等等
  chattr +i file01.txt

  # 3. 尝试删除文件,提示不允许
  rm -rf file01.txt

  # 4. 取消文件不可删除属性
  chattr -i file01.txt

  # 5. 查看文件属性, 没有 i 属性
  lsattr file01.txt

  rm -rf file01.txt  # 成功删除文件
  • +i 不可删除更改等操作
  • +a 只能追加内容,其他操作不允许

权限掩码 umask

会更改 创建文件时的默认权限

查看掩码

umask 查看默认的权限,会返回四个数字 0022,掩码 目录创建文件文件夹的权限时就是 0777 - 0022 = 0755 文件的默认权限就是 0777 - 0022 - 0111 = 0644

chmod 7777 file01.txt 中间原本是三个数字,现在多出来了一个,第一位就表示特殊位的权限,4、2、1 分别表示设置 用户、组、其他的特殊位权限 chmod 7777 file01.txt 表示文件权限变成了 rwsrwsrwt chmod 4777 file01.txt 表示文件权限变成了 rwsrwxrwx chmod 2777 file01.txt 表示文件权限变成了 rwxrwsrwx chmod 1777 file01.txt 表示文件权限变成了 rwxrwxrwt

修改掩码

umask 0000 创建文件和文件夹的权限就是 0777 - 0000 = 0777 文件的默认权限就是 0777 - 0000 - 0111 = 0666 现在在创建文件夹就是 rwxrwxrwx,文件 rw-rw-rw-

进程管理

查看进程

ps aux

  • ps aux 查看进程列表

    • a 显示所有程序
    • u 以用户为主的格式显示
    • x 不以终端来区分
    • ps aux | head -2 查看前两行
    • ps aux --sort %cpu 按照 CPU 使用率升序排序
    • ps aux --sort -%cpu 按照 CPU 使用率降序排序
    • ps -ef 查看进程的父子关系
    • ps axo user,pid,ppid,%cpu,%mem,command 自定义显示信息
      USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
      root          1  2.3  0.3 193908  6976 ?        Ss   19:04   0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
      root          2  0.0  0.0      0     0 ?        S    19:04   0:00 [kthreadd]
    
    • USER 表示开启进程的用户名
    • PID 表示进程的 ID
    • %CPU 表示进程的 CPU 使用率
    • %MEM 表示进程的内存使用率
    • VSZ 表示进程的虚拟内存大小
    • RSS 表示进程的实际内存大小
      • free -m 查看进程内存的使用情况
    • TTY 表示进程运行的终端,?表示没有任何终端
      • tty 查看当前终端的编号
    • STAT 表示进程的状态
      • S: sleep 睡眠
      • R: run 运行
      • T: stop 停止
      • Z: zombie 僵尸进程
    • START 表示进程的启动时间
    • TIME 表示进程的运行时间
    • COMMAND 表示进程的命令
  • ps aux | grep vim 查看某一个特定的进程信息

    • 可能会显示两个信息,一条是查询的进程所占的进程,一条是查询这条命令所占的进程,如果查询的进程没有,则只有查询的信息
        root       3062  0.8  0.2 149852  5596 pts/0    S+   19:31   0:00 vim /etc/group  # vim 的进程信息
        root       3064  0.0  0.0 112824   976 pts/1    S+   19:31   0:00 grep --color=auto vim  # `ps aux | grep vim` 查询这条命令所占的进程
      

top

命令:

  • top -d 3 每隔 3 秒刷新一次进程信息
  • top -p 1666 只查看进程 1666 的信息
  • top -p 1666,2977 只查看进程 1666 和 2977 的信息

按键功能:

  • 按 h 显示帮助
  • 按 q 退出查看
  • 按 z 显示颜色
  • 按 < > 翻页
  top - 21:34:06 up  1:00,  1 user,  load average: 0.00, 0.01, 0.05
  # 程序名 - 系统时间 up 运行时间 用户登录数 CPU负载 1分钟,5分钟,15分钟平均负载
  Tasks: 177 total,   1 running, 176 sleeping,   0 stopped,   0 zombie
  # 任务总数 177,     运行数 1,  睡眠数 176,   停止数 0,     僵死数 0
  %Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  # CPU占用率:us用户占用,sy系统占用,ni优先级,id空闲,wa等待,hi硬件,si软件,st虚拟机
  KiB Mem :  2027896 total,  1165436 free,   502684 used,   359776 buff/cache
  #          内存总量,       空闲内存,      使用内存,      缓冲内存/缓存 
  KiB Swap:  2097148 total,  2097148 free,        0 used.  1350432 avail Mem
  #          交换区总量,       空闲交换区,      使用交换区。      可用内存

  PID       USER      PR      NI     VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  1666      gdm       20       0  3241608 136652  62856 S   0.7  6.7   0:08.98 gnome-shell
  2977      root      20       0   162096   2308   1580 R   0.7  0.1   0:00.11 top
  1218      root      20       0   574288  19528   6144 S   0.3  1.0   0:01.26 tuned
  1         root      20       0   193832   7004   4184 S   0.0  0.3   0:06.80 systemd
  2         root      20       0        0      0      0 S   0.0  0.0   0:00.06 kthreadd
  4         root       0     -20        0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
  6         root      20       0        0      0      0 S   0.0  0.0   0:00.25 ksoftirqd/0

  # PID 进程id
  # USER 进程所有者
  # PR 进程优先级
  # NI 进程nice值
  # VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  # RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  # SHR 共享内存大小,单位kb
  # S 进程状态(S表示休眠,R表示运行,Z表示僵尸进程)
  # %CPU 进程使用的CPU资源百分比
  # %MEM 进程使用的内存资源百分比
  # TIME+ 进程运行时间
  # COMMAND 进程名称

信号

控制进程的运行,比如终止进程,杀死进程等。

  • kill -l 查看所有信号
    • 1 SIGHUP 将 pid 进程 重新加载配置, kill -1 1666
    • 2 SIGINT 键盘退出 ctrl+c
    • 3 SIGQUIT 键盘中断 ctrl+\,类似 sigint
    • 20 SIGTSTP 键盘暂停 ctrl+z
    • 9 SIGKILL 强制终止进程, kill -9 1666
    • 15 SIGTERM 终止进程(正常结束),缺省信号,kill -15 1666
    • 18 SIGCONT 进程继续运行
    • 19 SIGSTOP 进程停止运行

常用的 15 和 9,使用 15 正常关闭,关闭不成功,使用 9 强制关闭。

进程优先级

可以查看和调整进程的 cpu 优先级,nice 值。

nice 值越大,优先级越低,可以设置 -20 - 19 之间,默认值是 0。

NI 是真实设置的值 PR 是 NI设置的值 +20,表示进程的实际优先级,比如 设置 -20,实际 PR 就是 0 通过 top 命令查看进程的 PR 和 NI 值。

nice -n -5 sleep 7000 & 启动一个 sleep 7000 的进程,放入到后台,优先级为 -5

修改已有进程的优先级

renice -20 3881 调整进程 3881 的优先级为 -20

作业控制

前台运行(fg)

sleep 7000 启动一个 sleep 7000 的进程,放入到前台运行,等待进程结束。

后台运行(bg)

sleep 7000 & 启动一个 sleep 7000 的进程,放入到后台运行,并不等待进程结束。

jobs 查看后台运行的进程,第一列为后台的进程号 fg 1 将后台进程号 1 放入到前台运行

如果,按键 ctrl + z 将正在运行的前台进程放入后台运行,并暂停进程。 可以使用 bg 4 运行进程号为 4 的进程

消除 后台进程

kill %1 杀死后台进程号为 1 的进程,百分号是一定要带的,否则就识别成 进程id(PID)了

虚拟文件系统

ls /proc/ 查看服务器的自身 内核、进程运行的状态信息

cat /proc/cpuinfo 查看 Cpu 信息

cat /proc/meminfo 查看内存信息

cat /proc/cmdline linux 的内核信息

管道符与重定向

输出重定向

当使用了 输出重定向,就是调用了 FD,将内容输出到指定位置。

FD 就是文件描述符,是一个数字,表示文件在操作系统中的位置。 0 标准输入,1 标准输出,2 标准错误输出。

输出重定向 就有了 1> 1>> 2> 2>>

写入正常的输出: > 覆盖写入,将命令的输出重定向到文件,是 1>的简写 >> 追加写入,将命令的输出追加到文件,是 1>>的简写

写入错误的输出: 2> 错误输出重定向到文件 2>> 错误输出追加到文件

写入正常和错误的输出: &> 将命令的输出结果和错误输出结果都重定向到文件 &>> 将命令的输出结果和错误输出结果都追加到文件

  ls /root > file.txt  # 将 ls /root 的输出重定向到 file.txt 文件
  ls /root >> file.txt  # 将 ls /root 的输出追加到 file.txt 文件
  ls /root 2> error.txt  # 将 ls /root 的错误输出重定向到 error.txt 文件
  ls /root 2>> error.txt  # 将 ls /root 的错误输出追加到 error.txt 文件
  ls /root &> all.txt  # 将 ls /root 的输出和错误输出都重定向到 all.txt 文件
  ls /root &>> all.txt  # 将 ls /root 的输出和错误输出都追加到 all.txt 文件

  # 合起来写
  ls /root > success  2> error # 正确结果将输出到 success 文件,错误结果将输出到 error 文件
  
  # 任何结果都不输出
  ls /root &> /dev/null  # 将 ls /root 的输出和错误输出都重定向到 /dev/null 文件,即不输出

输入重定向

将一些内容输入给一个程序

程序 < 内容 将内容输入给程序,程序从标准输入读取内容

  cat < file  # 将 file 文件的内容输入给 cat 程序

管道

进程管道

前一个命令的输出结果,作为后一个命令的输入。

命令1 | 命令2 将命令1的输出结果作为命令2的输入

  cat /etc/passwd | tail -3  # 显示 /etc/passwd 文件的最后三行内容

tee管道

相当于三通

命令1 | tee 文件名 | 命令2 将命令1的输出结果,同时交给 tee 和 命令2处理。tee 既可以输出到终端,也可以输出到文件中

  cat /etc/passwd | tee file2 | tail -3  # 将 /etc/passwd 文件中的内容输入到 file2 文件中,同时 只在终端显示 最后三行

Xargs 参数传递

有一些命令,不接受上一个管道输出的结果,就用到了 xargs 命令。

比如 cp rm 不接受上一个管道输出的结果

  # 这样删除是不成功的
  cat info | rm -rfv # 将读取到的 info 文件中的内容,传递给 rm 命令,告知 rm 要删除那些文件。会删除失败


  # 这样写,才可以将读取到的 info 文件中的内容,传递给 rm 命令,告知 rm 要删除那些文件。
  cat info | xargs rm -rfv

watch

watch -n1 'ls -l' 每隔一秒刷新一次 ls -l 命令的输出

watch -n1 'date' 每隔一秒刷新一次 date 命令的输出

ln aaa.js bbb.js 创建一个硬链接,两个文件指向同一个文件,修改其中一个,另一个也会跟着变化。

ln -s aaa.js bbb.js 创建一个符号链接。类似快捷方式,bbb.js 保持指向aaa.js的路径地址

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/qxy-linux-study/linux-study.git
git@gitee.com:qxy-linux-study/linux-study.git
qxy-linux-study
linux-study
linux-study
master

搜索帮助