Linux day01-day02-day03

发布于 2025-10-01  86 次阅读


  • 面试题
  • 关于操作系统及进程的一些概念
  • 环境变量的设置
  • 常用命令 ls pwd cd clear echo history help ! man reboot alias
  • Linux中的文件类型 - d b c l s p
  • 文件管理命令 grep head tail cd touch mkdir
  • vim
  • find
  • 用户权限管理 groupadd groupmod groupdel
  • 用户组管理
  • 用户管理 useradd userdel
  • 用户权限管理
  • 文件权限管理
  • 文件权限设置
  • 文件访问控制列表,acl权限 getfacl setfacl
  • mask有效权限
  • 特殊权限suid sgid sticky
  • 文件属性
  • lsattr:查看文件的属性
  • chattr:设置文件的属性
  • 文件的属性(只作了解)
  • umask
  • 一些常见Linux文件中保存的内容

面试题:


  • 什么是操作系统?
  • 什么是Linux内核、什么是Linux操作系统?

一些概念(记)


  • Linux系统内核指的是一个由Linus Torvalds负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程序。
  • Linux发行套件系统是我们常说的Linux操作系统,也即是由Linux内核与各种常用软件的集合产品
  • 计算机的元年
    1970年的一月一日
    时间戳:记录了1970年1月1日到现在的秒数

环境变量


window 加 PATH:系统环境变量,可通过 win+R 键入

Linux 加 PATH:

  • 临时:export PATH=$PATH:新路径
  • 永久:写入文件 [root@localhost ~]# echo $PATH /root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

常用命令:


ls [-alrtAFRh] 显示内容

  • -l 长格式
  • -R 递归输出
  • -h 以合适的大小输出
  • -F 在列出的文件名称后加一符号 : *:(可执行文档)/:(目录)@:(链接)

pwd 显示工作目录

cd:

  • cd ~ 进入家目录
  • cd .. 返回上一层目录
  • cd - 返回上一次操作的目录 eg : ​ -dir1 ​ -a ​ -b ​ -c
  cd dir1
  cd a/b/c

clear 清屏 ----------快捷键ctrl+l

echo 输出

echo "hello world" >hello.txt  

(没有.txt文件的话会自动创建)

  • -n 不换行
  • 注意:echo helloBrenda >> /root/Beth/soft和 echo hello > /root/Beth/hello.txt的区别,前者>>是追加,后者>是覆盖

history

history -a .bash_history
  • history -a .bash_history 将缓存写入文件(文件在磁盘上,缓存就是内存)
  • history -r 将文件读入history记忆
  • -c 清空缓存
  • -w 记忆写入文件

help

help [-dms] [内置命令]

  • eg:
   ls --help -m

! 回溯

  • !! 执行上条命令
  • !ping 从下往上数第一条ping命令
  • !6 第6条命令

man

​ man + 需要帮助的命令或者文件

reboot 重启

alias

Linux中的文件类型


-:文本文件

d:目录文件

b:块设备文件

c:字符设备文件

l:链接文件

s:套接字文件

p:管道文件

文件管理命令


touch: 文件 无则建,有则刷新时间

mkdir 目录 [-mvp]

  • -p 递归创建 eg:
   mkdir -p a/b/c

cp cp + 源 + 目(相对路径)-r -p

mv mv + 源 + 目(相对路径)

rm rm + 源 + 目(相对路径)

  • -r 递归操作
  • -f 强制(不会抛出疑问)

cat 打开文本文件并显示

  • -n 逐行编号

less 翻页查看

head 默认十行

  • -n N 文件 显示N行

tail 默认十行

  • -n N 文件 显示N行
  • -f 实时追踪更新

grep 筛选过滤

​ grep '关键词' 文件目录 (不包含特殊符号时单引号可省略,也允许双引号)

eg:

[root@xwz ~]# grep 'root' /etc/passwd
[root@xwz ~]# grep '^root' /etc/passwd
[root@xwz ~]# grep 'bash$' /etc/passwd

stat 显示文件时间和 inode 内容

file 查看文件的类型

find查找(记+熟练使用)

常见用法

-name:根据文件名进行查找
-iname:忽略大小写
-size:按照文件大小进行查找
-maxdepth:最大深度
-mindepth:最小深度
-a:同时连接多个条件,表示and预算,多个条件同时成立才可以
-o:同时连接多个条件,表示or运算,多个条件中只要出现有一个是成立的就可以
-not:条件进行取反操作
-atime 访问时间
​ +N:N天前
​ N:N天
​ -N:N天以内
-mtime 修改时间
-ctime 改变时间
-user:根据属主进行查找
-group:根据属组进行查找
-nouser:没有属主的
-nogroup:没有属组的
-type:文件类型
​ f
​ d
​ b
​ c
​ s
​ p
​ l
-perm:文件权限

  • find / -perm 644 -ls 精确查找权限为644的文件
  • find / -perm -644 -ls 查找权限大于等于644的文件
  • find / -perm /222 或运算,相当于 >=2 or >=2 or >=2 ,属主属组和其它用户只要有一个满足条件就算匹配. -perm /mode 表示:只要文件权限在 __某个权限位(属主/属组/其他人)上包含了 ___mode 中对应的所有比特位,就算匹配成功**

-regex:通过正则表达式进行匹配文件名称

-exec : 允许对找到的每个文件执行一个命令

-ls : 对查找到的文件执行 ls ‐l 命令

-delete : 删除查找到的文件

eg:

** [root@localhost ~]# find /root -name "*.log" -exec mv {} /home/dir1 \;

[root@localhost ~]# find /var -user root -group mail
[root@localhost ~]# find /usr -not -user root -a -not -user bin -a -not -user ftp

**[root@localhost ~]# find /usr -not \( -user root -o -user bin -o -user ftp \)

[root@localhost ~]# find /etc -mtime -7
[root@localhost ~]# find /etc -size +1M -type f
[root@localhost ~]# find /etc -not -perm /222
[root@localhost ~]# find /etc -not -perm -111
[root@localhost ~]# find /etc/init.d -perm -113

补充:生成一个指定大小为5MB的文件

__dd if=/dev/zero of=test1.txt bs=1M count=5__

正则表达式

案例:

[root@server1 ~]# find test?

[root@server1 ~]# find test*

vim

注意:快捷键ctl+z十是把进程挂起,不是正常退出,一定要用:wq或者:x正常退出

命令模式常见命令 :

:set nu 显示行号

:set nonu 取消显示行号

:set ai 智能缩进

:set noai 取消智能缩进

0 本行第一个字符

$ 本行最后一个字符

gg 第一行(1G)

h← j↓ k↑ l→

G 移动到文档最后一行

nG 移动到第n行 (移动到第一行的方式有两种 gg 和1G)

n + Enter 光标向下移动n行

/something 向下寻找something

?something 向上寻找something

n 重复前一个搜索 N 反向搜索

: (g:将一行中所有符合条件的此全部替换,无g则只替换第一个;c:逐 个提问,与用户交互)

  • :n1,n2s/源/目/g
  • :%s/源/目/g
  • :1,$s/源/目/g

删除

以字符为位单个删除:x(向后删)或X(向前删)(ndd)

以行为单位删除:dd (ndd) / nc 以行为单位,光标向前删d0, 向后删d$

以整个文档为单位,光标所在向前删完:d1G,向后删完:dG

复制

以行为单位复制:yy

其他同 delete y1G yG y0 y$

粘贴 p(向前粘贴) P(向后粘贴)

可以删除全文的方式
gg dG
G d1G
G dgg
:%d
:1,$d

可以保存并退出的方式
:wq
:x
ZZ

用户权限管理


用户组管理

groupadd 增加用户组

  • -g 新建组的 id

groupmod 修改用户组

  • -g 改组 id groupmod -g 目的ID 组名
  • -n 改组名 groupmod -n 目 源
  • -o 允许重复的 id

groupdel 删除用户组

gpasswd 将一个用户添加到组或删除

  • -a 添加用户到组 gpasswd -a 用户名 组名
  • -d 从组删除用户
  • -A 指定管理员 -M 替换组中全部用户列表,不在内的被删除 -R 限制用户登入组,只有组中成员才可以用newgrp加入该组

eg:

创建用户Beth
[root@localhost ~]#useradd Beth
将 Beth 添加到组it(同理添加用户Brenda)
[root@localhost ~]#gpasswd -a Beth it
在group文件中可以过滤查找
[root@localhost ~]# cat /etc/group |grep it:
将Brenda从组中删除(Brenda不在it组中,但是Brenda的主组仍在group
  |是一根管道将前面的作为输入传递给后面
  这句命令等同于:grep it: /etc/passwd即grep 'it:' /etc/passwd
[root@localhost ~]# cat /etc/group

用户管理

useradd 添加用户

useradd 用户名
  • -c comment:指定一段注释性描述。
  • -d 目录:指定用户家目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
  • -m:创建用户的主目录
  • -g 用户组:指定用户所属的用户组,默认会创建一个和用户名同名的用户组。
  • -G 用户组:指定用户所属的附加组,一个用户可以属于多个附加组。
  • -s Shell文件:指定用户的登录Shell
  • -u 用户号:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

su 切换用户

su Brenda
su - Brenda
区别:前者只相当于调用用户完成任务,环境不变,后者把环境变量和目录完全切换到目标用户的环境

usermod 修改用户

[root@localhost ~]# usermod -d /home Brenda
[root@localhost ~]# su - Brenda
[user01@localhost ~]$ pwd
/home
  • -c<备注>:修改用户帐号的备注文字。
  • -a:追加,默认的修改是覆盖
  • -d登入目录>:修改用户登入时的目录。
  • -e<有效期限>:修改帐号的有效期限。
  • -f<缓冲天数>:修改在密码过期后多少天即关闭该帐号。
  • -g<群组>:修改用户所属的群组。
  • -G<群组>:修改用户所属的附加群组。
  • -l<帐号名称>:修改用户帐号名称。
  • -L:锁定用户密码,使密码无效。
  • -s:修改用户登入后所使用的shell。
  • -u:修改用户ID。
  • -U:解除密码锁定

userdel 删除用户

userdel -r [用户帐号]

passwd 修改用户密码root

交互式
[root@localhost ~]# passwd test01
Linux非交互式密码修改命令
[root@localhost ~]# echo 123456 | passwd --stdin test01

chage :

  • -d:设置密码的最后更改日期
  强制下次登陆重设密码:
      1.先设置一个旧密码   passwd;
      2.运行下面的指令;
      3.logout 重新进入一个新会话;
      4.输入旧密码,系统提示设置一个新密码,新密码需要复杂些否则而不予通过;
  [root@localhost ~]# chage -d 0 test01
  • -E 过期日期:设置账号的过期日期
  • -I INACITVE:设置密码过期后若未更改,多少天后用户账号被禁用。
  • -l:显示用户账号的密码过期信息。
  • -m 最小天数:设置两次改变密码之间相距的最小天数
  • -M 最大天数:设置将两次改变密码之间相距的最大天数
  • -W 警告天数:设置密码过期前的警告天数

sudo用户提权

-u:以指定用户或 ID 运行命令(或编辑文件)
    eg : [test01@localhost ~]$ sudo -u Beth cat /etc/group
-l:显示出自己(执行 sudo 的使用者)的权限
    eg : User test01 may run the following commands on              localhost:
        (ALL) ALL
-b:将要执行的指令放在后台执行
-i: 以目标用户身份运行一个登录 shell;可同时指定一条命令。相当于切换到root,不过只需要用户自己的密码即可。
  • 设置用户密码
  • 将在root将用户加入到wheel组里,不是所有用户都可以进行提权,只有组里的用户才可以
  • sudo 命令
  • 执行目标指令 如 chage -l root
papi ALL=/usr/sbin/,/sbin/,!/usr/sbin/fdisk

这是关于sudo权限的配置,主要作用是控制用户papi能通过sudo执行哪些系统命令。
papi目标用户规则仅适用于名为 papi 的用户
ALL主机限制规则适用于所有主机(如果是多主机环境,这里可替换为具体主机名)
/usr/sbin/允许执行目录允许运行 /usr/sbin/ 目录下的所有命令
/sbin/允许执行目录允许运行 /sbin/ 目录下的所有命令
!/usr/sbin/fdisk具体命令禁止特例排除:明确禁止运行 /usr/sbin/fdisk 命令(即使它在允许目录中)

文件权限管理


权限对文件的影响对目录的影响
r(读取)可以读取文件的内容可以列出目录的内容(文件名),可以使用ls命令
w(写入)可以更改文件的内容可以创建或删除目录中的任一文件,可以使用touch、rm命令
x(可执行)可以作为命令执行文件可以访问目录的内容(取决于目录中文件的权限),可以使用cd命令

文件权限设置

chown 修改文件属主/属组

  • -R: 处理指定目录以及其子目录下的所有文件
属组
[root@localhost ~]# chown :Beth test01
属主+属组
root@localhost ~]# chown Beth:Brenda test01
[root@localhost ~]# ll
total 8
-rw-------. 1 root root   1067 Jul  7 11:21 anaconda-ks.cfg
-rw-------. 1 root root     32 Jul  7 15:41 bash_history
d-w--w-r--. 2 Beth Brenda    6 Jul  8 07:52 test01

chmod 修改文件权限

  • u/g/o/a +-= rwx/rw-/...
  • 八进制语法 chmod 644 文件名 读 r 4 列出目录内容(如用 ls 查看目录下的文件列表)。
    写 w 2 修改目录内容(创建、删除、重命名目录内的文件或子目录touch 、rm)。
    执行 x 1 进入目录(如用 cd 进入该目录,或访问目录内的文件/子目录的元数据)

单独对某个用户/组设置文件的acl权限

getfacl:查看文件的acl权限列表

  • -c:不显示注释行

setfacl:单独对某个用户设置文件的acl权限

  • -m:添加
  • -x:删除
  • -b:清除所有
  • -m d: 可以设置默认ACL权限,来让目录下面的新建文件和文件夹都继承父目录的权限(否则对workdir设置的acl权限并不会被之后在workdir下创建的子文件和子目录继承)
添加权限-m   u:user    g:group
[root@localhost ~]# setfacl -m u:user1:rx /workdir/
[root@localhost ~]# setfacl -m g:worker2:rwx /workdir
移除权限-x   u:user    g:group
[root@localhost ~]# setfacl -x u:user1 /workdir/

继承操作:
    注意,继承只是指子目录继承,default中的权限属于一种提示,不属于真正的权限,只有在root中执行setfacl -m u:user1:r-x /workdir/指令才能在user1中cd进workdir和workdir的下一层子目录。且只有当workdir建立在根目录之下每一个不同的用户才能对其进行操作。
[root@localhost ~]# setfacl -m d:u:user1:rx /workdir

mask 有效权限 指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。

特殊权限 :

suid 所有人获得某个命令的属主的权限

注意:

  • 只运行在可执行文件上,目录不行
  • 执行该文件的所有者的权限,权限从属主处获得,因此是u+s
  • 可执行文件例如/usr/bin/rm和/usr/bin/cat,若直接给 /usr/bin/rm 设置 SUID需要额外注意,这会允许普通用户删除任何文件,导致系统灾难。我们将通过受控脚本实现安全删除。
  • 对于本来就自带suid的文件,如/etc/passwd,权限是-rwsr-xr-x,使得所有用户都可以使用passwd指令进行密码修改操作。
更改用户 user1 的密码 
[user1@localhost ~]$ passwd

如果想某个文件添加suid权限,可以输入下面两个命令

chmod u+s file
chmod 4644 file

eg:

实例步骤:
1.在 根目录 下创建一个目录,目录下创建一个文件比如 file1(/workdir,如果直接创建mkdir workdir则是相对目录,其他用户没法进入到root的家目录下,也就没办法对其进行操作
2.文件在root下用chmod 000 file1 将其权限设置为0,即不可操作
3.在root下用chmod u+s file 例如rm,即chmod u+s /usr/bin/rm赋予其root的权限
4.切到任意用户比如user1,即可对文件采取rm操作,可将其删除

sgid 所有人获得某个命令的属组的权限

注意:

  • 作用在二进制文件:和suid类似,不过权限从属组处获得,因此是g+s
  • 作用在目录上:在这个目录下创建的文件会继承此目录的属组(不包含属主);如果一个文件拥有此权限时,可以借出所属组的权限。

如果想某个文件添加sgid权限,可以输入下面两个命令

chmod g+s file
chmod 2644

![](pic\屏幕截图 2025-07-10 201059.png)

sticky 注意:

  • sticky 权限只能运用于目录上,该目录下所有的文件和子目录只能由所属者或者root删除。
  • 案例/tmp目录,该目录下在任意一个用户下创建一个文件,切到其他用户均不能对其进行修改或是删除。

如果想某个文件添加sticky权限,可以输入下面两个命令

chmod o+t
chmod 1644

文件属性

  • lsattr:查看文件的属性
  • chattr:设置文件的属性
  • -i 不得任意更改文件或目录
  • -a 设置文件或目录仅支持追加
  • 文件的属性(只作了解)

umask 影响创建文件时的初始权限
文件最终权限=666-umask
目录最终权限=777-umask
如果想要修改umask的数值能够永久生效,可以写入到/etc/profile中

一些Linux常见文件保存的内容


/etc/passwd:用户信息
/etc/shadow:密码信息
/etc/group:组信息
/etc/gshadow:组密码
/etc/login.defs:创建用户时参考的一些设置
/etc/skel:创建新用户时会从此目录拷贝文件到新用户的家目录中

A life of freedom is all my ambition
最后更新于 2025-10-01