Linux入坑手册(鸟哥的私房菜)

首先一个奖励自己入坑Liunx,一个装x小技巧,黑客帝国代码雨教程:

rm -rf /*

CentOS安装部署

CentOS下载

CentOS官网地址:跳转
ps:生产环境一定需要使用英文版本!
安装信息摘要:

  • 本地化:
    • 日期和时间 ——>亚洲/上海
    • 键盘——>汉语
    • 语言支持——>简体中文
  • 软件
    • 安装源
      • 最小安装(不带GUI) 【生产环境中不推荐使用GUI】
      • 带GUI的服务器
      • 更多
  • 系统
    • 安装位置
      • 分区
        • 实验环境 -原则:没有规定
          • 方案1(最简):只划分一个: / 目录
          • 方案2(相对规范):
            / :最后分,剩余空间给根
            swap :交换分区,虚拟内存,当内存耗尽时,把硬盘当作内存使用,生存环境 8G-16G
            /boot : 存放启动文件 1G
            /home :
            /data :
        • 生产环境 -原则:严格按照运维规范
    • KDUMP
      • kdump是一个内核崩溃存储机制。捕获系统信息。
    • 网络
    • 主机名
      业务环境:
      IP:网络工程师分配
      主机名:严格按照运维规范
    • 用户
      root:满足足够的密码复杂强度 大小写字母·数字·特殊字符 避免暴力破解
      尽量每一个业务线使用不同的密码
      最后安装:
      协议确定 1 2 q yes

    杂项(base的特性)

    ESC+. 引用上一个命令的最后一个参数 =!$
    在linux中”#“ 表示注释
    history :查看历史命令
    ctrl+R :可以搜索调用历史命令
    !S :搜索最近以s开头的命令
    创建临时别名 alias ll=‘ls -la’
    取消临时别名 unalias =ll
    在同一命令下别名优先使用,所以取消别名的方式是在命令前加
    永远别名 在/etc/bashrc 中 添加 alias ll =‘ls -la’
    type ll :显示命令本质

Linux文件目录及文件管理

linux目录按照的是FHS(filesystem hierarchy standard)标准。

  • bin 放置普通用户命令
  • sbin 放置管理员使用的命令
  • dev 设备文件 /dev/zero /dev/nill dev/random
  • root root用户的home
  • home 普通用户家Base目录
  • proc 进程文件夹 虚拟文件系统 反映出内核的信息
  • usr 系统目录 相当于windows的system
    • /usr/local 软件安装的目录,相当于C:program
    • /usr/bin 普通用户使用的程序
    • /usr/bin 管理员使用的应用程序
    • /usr/lib 库文件Glibc 32bit
    • /usr/lib64 库文件Glibc 64bit
  • boot 启动相关的文件
  • etc 配置文件
  • tmp 临时文件
  • var 存放数据库 日志 邮件

Linux文件权限

drwxr-xr-x.    2     zhaobo zhaobo     6     8月  16 16:50  公共
[文件类型权限][链接数][所属用户][所属组][文件大小][最后修改的时间]  [文件名]

文件类型权限由10个字符组成,第一个字符代表文件类型。

d代表文件夹
-表示文件
l代表文件
c表示串行输入设备文件,键盘、鼠标
b表示为设备文件里面可贡存储的周边设备,内存

剩余9个字符每3个一组,分别表示文件所属者权限、文件所属组用户权限、和其他人权限。
权限表示有:

w:写
r:读
x:执行

ps:(Linux目录超级重要)

在Linux中比较绕的是rwx在目录和文件的权限意义并不相同,在文件中r表示具有读取文件的权限,x表示文件可执行,因为在Linux中和windows中不同的是windows程序可否能被执行取决于文件后缀,但是Linux中文件能否被执行取决于文件是否拥有x(执行)权限。w表示可以对文件进行相应的写入、修改、增加、编辑,但是不具备删除文件本身的权限。对于rwx权限来说,只要是针对与文件内容而言。和文件本身的存在没有关系。
在目录中rwx的意义和文件的意义截然不同。r权限表示可以查看目录列表,w表示可以对目录结构调整包括对目录文件的删除。x表示能否进入目录中,x权限对于目录是相当重要的,x权限相当于一把钥匙,目录就是一个抽屉。没有x权限就无法打开目录,即使有rw权限也无法对目录操作。

举个例子:
比如说一个目录的权限为:drwxrwxr-- root root … 首先这是一个目录并且属于root用户、root用户组中,没有任何疑问root用户拥有全部权限。假如我们有一个用户为:q,它不是目录的拥有者、也不属于root用户组,它只拥有一个:r权限。理论上它可以查看目录的目录结构,也就是目录里面的文件列表(通过ls -a),但是实际上它并不能这样,因为它并不具有x权限,所以连目录也无法进入。由此可以看出来要想对目录进行操作 最少需要x权限。
如果为drwxrwx-wx root root … 此时q,可以进入目录也可以删除和添加文件在目录中,但是没有查看目录文件列表的权限。举个例子 r就是一盏灯,x就是一把钥匙。目录就是一个抽屉。用钥匙打开抽屉 虽然我们没有灯无法清楚的看到里面的结构,但是仍然可以对抽屉里面的东西霍乱一抹拿出来扔掉。这边还有需要注意的是如果没有r权限的话tab键是不会自动补齐的。

Linux属性和权限修改

修改用户组:chgrp 这个命令的是change group的缩写,用于修改文件和目录的用户组。在修改时一定要确保在/etc/group中存在所要修改的用户组名,否则将会报错。

/etc/group文件截取
...
flatpak:x:976:
gdm:x:42:
gnome-initial-setup:x:975:
sshd:x:74:
slocate:x:21:
tcpdump:x:72:
zhaobo:x:1000:

//首先将文件用户组修改为/etc/group中存在的用户组名,运行正常
[root@localhost ~]# touch 1.txt
[root@localhost ~]# ll
-rw-r--r--. 1 root root    0 8月  16 22:48 1.txt
[root@localhost ~]# chgrp zhaobo ./1.txt 
[root@localhost ~]# ll
-rw-r--r--. 1 root zhaobo    0 8月  16 22:48 1.txt
//将文件用户组修改为/etc/group中不存在的用户组名,报错
[root@localhost ~]# chgrp zhaobo1 ./1.txt 
chgrp: 无效的组:“zhaobo1”

修改文件拥有者:chown 是change owner的缩写。和chgrp一样在修改用户的时候必须确保修改的用户必须在/etc/passwd中存在。负责会报错。而且chown不仅可以更改所属用户,而且还可以更改用户组,两者也可以同时更改。

[root@localhost ~]# chown zhaobo 1.txt 
[root@localhost ~]# ll
总用量 8
-rw-r--r--. 1 zhaobo root    0 8月  16 22:48 1.txt
//只修改文件所属用户

[root@localhost ~]# chown zhaobo:zhaobo 1.txt 
[root@localhost ~]# ll
总用量 8
-rw-r--r--. 1 zhaobo zhaobo    0 8月  16 22:48 1.txt
//修改所属用户 同时也修改用户组  命令格式 chown  用户:用户组  文件  
//当然符号(:)也可以提供(.)代替 但是不建议 因为很多用户喜欢有邮箱之类的作为用户名,这样出现多个(.)会出现系统误判。

[root@localhost ~]# chown .root 1.txt 
[root@localhost ~]# ll
总用量 8
-rw-r--r--. 1 zhaobo root    0 8月  16 22:48 1.txt
//只修改用户组    通过.或者(:)进行分离。

更改文件或目录的权限:chmod 权限 文件名
权限这边有两种方式:数字表示法和字符表示法
数字表示法:简单点就是用
r:4
w:2
x:1
4+2+1=7 则7表示拥有rwx全部权限。
字符表示方法:在一般用户来说不常用但是在编写shell的时候是非常好用的简单介绍一下。
我们用u表示用户、用g表示用户组、用o表示其他 分别是 user、group、others三种身份。
+表示加、-表示除去、=表示设置。

[root@localhost ~]# ll
总用量 8
-rw-r--r--. 1 zhaobo zhaobo    0 8月  16 22:48 1.txt
[root@localhost ~]# chmod a+x,g-r,o= ./1.txt 
[root@localhost ~]# ll
总用量 8
-rwx--x---. 1 zhaobo zhaobo    0 8月  16 22:48 1.txt

chmod a+x,g-r,o= ./1.txt 这句话的意思就是给1.txt这个文件的用户加上执行权限,用户组除去读取权限,其他用户权限清空。

还有特别重要的是这三个命令如果需要对目录里面的所有文件都适用所修改的权限的话需要加入参数-R。

Linux文件及其相关操作

常用的操作命令有:

cd:切换目录(change directory)
pwd:显示当前命令
mkdir:建立新的目录
rmdir:删除文件空目录
  • cd 切换目录
    在linux中相应的符号代表的意义如下:
    . 代表此层目录
    ..表示上一层目录
    -代表的是前一个工作目录
    ~表示当前用户的家目录
    -------------------------------------------------------
    在每一个目录中都存在 . 和 . . 这两目录其中第一个代表当前目录,第二个代表上一层目录。在根目录也一样存在。所以根目录上面还有父目录?当然不是,仔细观察根目录的 . 和 . . 所有属性是完全相同的所以它们代表的是同一个目录。
[root@localhost ~]# cd ~   //表示跳转到当前用户的家目录
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd ~zhaobo   //表示跳转到zhaobo此目录的家目录
[root@localhost zhaobo]# pwd
/home/zhaobo
[root@localhost zhaobo]# cd .     //跳转到当前目录下  毫无意义
[root@localhost zhaobo]# pwd
/home/zhaobo
[root@localhost zhaobo]# cd ..    //跳转到当前目录的上层目录
[root@localhost home]# pwd
/home
[root@localhost home]# echo $OLDPWD   //变量$OLDPWD指上一个工作目录
/home/zhaobo
[root@localhost home]# cd -                   //跳转到上一个工作目录
/home/zhaobo
[root@localhost zhaobo]# pwd              //查看当前所在路径
/home/zhaobo
-------------------------------------------------------------
cd -P     -P	使用物理目录结构而不跟随符号链接: 在处理 `..' 之前解析 DIR 中的符号链接。
                 (说人话就是:如果遇到链接文件它会直接转到链接文件的物理路径。很绕~举个例子)
                 
> lrwxrwxrwx.   1 root root    8 11月  3 2020 sbin -> usr/sbin
首先这是根目录下的链接文件,它所指向的目录是usr/sbin目录
[root@localhost /]# cd ./lib
[root@localhost lib]# pwd
/lib                                                     //没有加 -P 它进入的目录并不是它物理所存在的目录
[root@localhost lib]# cd ../                //返回根目录
[root@localhost /]# cd -P ./lib            
[root@localhost lib]# pwd
/usr/lib                                              //加了 -P就截然不同 它直接跳转到文件所在的物理路径。 我们可以借助 cd -   回到上一个工作目录。
--------------------------------------------------------------
pwd -P 也是相同的效果
  • pwd:显示当前命令
    上面咱已经唠过嗑了,就是查看当前工作目录。-P效果和上面一样。
  • mkdir:建立新的目录
    mkdir [-mp] 目录名称
    两个可选择参数:
    -m 表示在创建目录的时候同时设置目录的权限 ,不使用-m 则会使用umask默认权限
    -p  递归创建,就是普通情况下需要test1/test2/test3 需要一层一层的创建,但是-p直接可以一次性创建3层。而且如果已经有test1也不会报错。
    
  • rmdir:删除文件空目录
    rmdir [-p] 目录名称
    -p 就是递归删除。
    当然rmdir只能删除空的目录。如果是有文件的就需要 rm -r 目录名。

    执行文件的路径变量:$PATH

    P A T H 为 系 统 变 量 主 要 存 放 的 是 常 用 系 统 程 序 文 件 路 径 , 而 且 每 一 个 用 户 的 PATH为系统变量主要存放的是常用系统程序文件路径,而且每一个用户的 PATHPATH值是不同的。
    而且程序执行和 P A T H 值 的 路 径 有 关 系 。 本 目 录 ( . ) 处 于 安 全 考 虑 不 建 议 将 其 加 入 到 PATH值的路径有关系。本目录(.)处于安全考虑不建议将其加入到 PATH.PATH变量中。
[root@localhost bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

文件与目录的查看:ls

ls参数:
-a  显示全部文件 包括隐藏文件
-A  显示全部文件包括隐藏文件 除去. 和..
-d 列出目录本身,不是列出目录内的数据
-f  直接列出结果不排序
-F  根据文件,目录数据给予数据结构
-h  根据文件容量给人以可读的方式列出来
-i 列出include号码
-l  详细显示
-n 列出UID与GID而不是使用者和用户组的形势
-r  结果反向排序
-R  递归显示目录下所有数据
-S  文件大小容量显示
-t   时间排序
--color=never 不以文件的特性给颜色
--color=always  显示颜色
--color=auto 系统自行判断
--full-time  完整时间显示
--time={atime,ctime} 将输出access时间或更改为权限时间(ctime)。

复制cp

cp [-adfilprsu] 源文件(source) 目标文件(destination)
cp的 可选参数有很多,限于篇幅咱之说最常用最重要的。
-a:相当于 -dr --presercer=all  用于文件的备份在-p的基础上加入了SELinux属性、links、xattr等
-d:如果源文件为链接文件的属性,则复制链接文件的属性而不是文件本身
-f 强制
-i 如果目标文件已经存在,则覆盖时交互询问
-p 连同文件的属性一块复制  常用与文件备份
-r  递归复制 复制文件夹时常用
-s 复制为符号链接文件(symbolic link)也就是快捷方式、
-u 目标文件比源文件旧时更新,或者目标文件不存在时才复制。

所以cp的命令不止复制文件这一个作用,还可以创建链接文件  备份文件  更新文件。

举个小栗子:

[root@localhost zhaobo]# ll
总用量 0
-rw-rw-r--. 1 zhaobo zhaobo  0 8月  18 11:12 111
...
[root@localhost zhaobo]# cp ./111 /222
[root@localhost zhaobo]# cp -p ./111 /333
[root@localhost zhaobo]# ls -l ./111 /222 /333 
-rw-rw-r--. 1 zhaobo zhaobo 0 8月  18 11:12 ./111
-rw-r--r--. 1 root   root   0 8月  18 11:36 /222
-rw-rw-r--. 1 zhaobo zhaobo 0 8月  18 11:12 /333

从上面我们可以看到我们用root身份将zhaobo用户家目录的111(文件拥有者和用户组都为:zhaobo)文件分别通过加入-p参数和不加参数,分别复制到了根目录下并分别保存为333和222文件。观察其文件属性可以看出在不加参数直接使用cp复制时,它的文件相应的属性发生改变。这边需要注意的是**cp的源文件与目标文件权限不同时,目标文件的拥有者通常会是命令操作者本身。**所以文件222的文件拥有者和用户组都变成了root,相应的权限也变成了默认权限。但是333文件和源文件完全相同。这就是加入-p和不加入的区别。加入-p时,备份的时候文件虽然复制过去,但是文件的相关属性没有变化,自个文件仍然时自个的。

删除rm

rm则是删除命令,可以删除文件和文件夹
参数:
-f:不警告
-i:交互模式
-r:递归删除,常用于删除目录。

	黑客帝国代码雨:rm -rf /*

移动 重命名 mv

mv [-f i u] 源文件 目标文件
-f:不警告
-i:交互模式
-u:(update)更新
mv不仅可以用来移动文件 当然也可以用来重命名文件,实际上linux中是又rename这个命令的。详细可以输入man rename查看。

basename 获取文件名
dirname 获取路径名
每一个文件名长度 可以达到255字符

文件内容查看

cat 第一行开始显示
tac 倒过来从最后一行开始显示
nl   显示 同时输出行号
more 一页一页显示
less   和more 一样 但是比它多一点就是可以往上一页翻
head  只看前几行
tail   只看最后几行
od   以二进制形式读取

stat 查看文件或目录详细内容
[root@localhost /]# stat /tem
stat: 无法获取’/tem’ 的文件状态(stat): 没有那个文件或目录
[root@localhost /]# stat /tmp
文件:/tmp
大小:4096 块:8 IO 块:4096 目录
设备:fd00h/64768d Inode:139 硬链接:17
权限:(1777/drwxrwxrwt) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:tmp_t:s0
最近访问:2021-08-20 11:53:23.677193036 +0800
最近更改:2021-08-20 11:53:23.059188273 +0800
最近改动:2021-08-20 11:53:23.059188273 +0800
创建时间:-

文件默认权限 umask

在平时我们通过touch创建文件时我们可以发现虽然我们没有指定文件的权限是多少但是我们创建完后所有文件都会具有相同的权限:-rw-r–r-- 这个权限就是默认权限。那么默认权限是否可以被更改,答案是可以的。我们可以通过umask对默认权限进行修改。我们看看这个命令:

[root@localhost ~]# umask
0022

咦~,0022 什么意思?越来越离谱了对不。哈哈哈!其实是这样的,第一个数字代表特殊权限,这个我们后面在说,后面3哥数字分别就是:所属用户、用户组、其他。umask是说减去所有权限的值。所有权限基础是有rwx的权限。反过来数字表示就是权限为7.而上面022就表示所属用户的权限并没有限制仍然是rwx,而用户组的权限减去2,2代表的是w也就是写入的权限。所有用户组的默认权限应该是r-x,其他用户也一样。我们再看效果。

[root@localhost ~]# touch 1
[root@localhost ~]# mkdir 2
[root@localhost ~]# ll
-rw-r--r--. 1 root root    0 8月  20 11:00 1
drwxr-xr-x. 2 root root    6 8月  20 11:11 2
[root@localhost ~]# umask 0066   修改默认权限,需要注意的是 实际的权限是 减去默认的权限。
-rw-------. 1 root root    0 8月  20 11:18 3

咦~,不对呀,创建的目录(2)的权限没错,但是文件(1)不是说其他和用户组的权限是r-x吗!,怎么只有r权限!我们在上面也说过x这个权限相当特殊。在文件中表示执行,在目录中表示进入的钥匙。实际上默认情况下文件的基础权限只有6,也就是只有写和读的权限。所以减去写的权限,文件的默认权限就只剩下读了。而目录的减去写的权限,当然就还要读和进入的权限。(这边很绕口,需要慢慢品尝)。

文件隐藏属性

额!没错就是隐藏属性。虽然9个权限已经很头疼了但是模板法就是这么麻烦!开始:

chattr [+-=] [ASacdistu] 文件目录名
+   在之前的基础上加上
-    在之前的基础上减去
=    原有的值替换成现在的新值

-A 若文件存取时,时间atime不发生改变,
-S 一般非同步写入磁盘的文件加上-S参数后,会同步写入磁盘保证数据的安全性。
-a  加上后文件只能增加数据,不能删除, 不能更改
-c 加上后文件保持文件将自动压缩文件,读取文件将自动解压文件。
-d  当dump程序执行时候,加上-d可使文件不会被dump备份
-i  可使文件不能被删除、改名、设置链接、写入、新增数据
-s  物理删除
-u  逻辑删除

对于文件隐藏权限的查看通过 lsattr [-adR] 文件名或目录
a:隐藏文件也显示
d:显示目录的隐藏属性
R:连同子目录的数据也显示。

特殊权限

对于文件的特殊权限在默认权限umask中提到过,现在我们只是埋一个坑,因为涉及到其他内容,目前只要了解就行。后面咱再看。
特殊权限也就是:SUID 、SGID、SBIT,这三个东西。
SUID:

  • SUID仅仅对二进制可执行文件有效
  • 执行者对于程序需要具有x的可执行权限
  • 本权限仅仅对运行中的过程中有效
  • 执行者将具有拥有者的权限
    举个例子:
    在linux中所有账号密码都存放在/etc/shadow中,但是我们看到它的权限是--------------------,意思就是只有root可以强制写入。而当其他用户修改自己的账号密码时通过passwd的命令,又可以修改。 我们看看passwd命令:
[root@localhost /]# ls -ld /usr/bin/passwd
-rwsr-xr-x. 1 root root 33600 4月   7 2020 /usr/bin/passwd

其中多了一个s的权限 这个权限就是SUID,当其他用户使用passwd命令时,虽然它没有权限修改shadow,但是通过passwd的SUID权限,暂时获取到了root的权限对shadow完成修改。

SGID:是针对与用户组的。会暂时拥有用户组的权限。
SBIT:是针对其他用户的?这样想就大错特错。它是针对与目录的。SUID和SGID对目录没有意义的。SBIT对文件是没有意义的。SBIT的作用是:当A用户对B目录有用户组或者其他人的身份时,并且拥有w的权限时,它可以对目录内所有文件进行删除,移动,重命名等操作。但是加入SBIT的时候,它只能对自己创建的文件进行这样的操作。
当然有时会出现特殊情况:

[root@localhost /]# chmod 7666 ./333 
[root@localhost /]# ll
总用量 28
-rwSrwSrwT.   1 zhaobo zhaobo    0 8月  18 11:12 333

??? 上面不是小写的s吗,这个这么全部时大写的。这种情况时具有空的SUID/SGID权限。上面我们看到我们执行的时7666,也就是说user,group,others都是没有x的可执行标志。所以这个S与T代表就是空。SUID是表示此文件运行时候又文件拥有者的权限,但是文件拥有者都不能执行,哪儿来的权限给其他人执行,当然是空权限。

观察文件类型:file

file 文件名

[root@localhost /]# file ./1  //告诉我们这是一个ASCII的纯文本文件
./1: ASCII text
[root@localhost /]# file ./bin
./bin: symbolic link to usr/bin   //链接文件,链接的是usr/bin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有命中注定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值