0%

Linux

unix和linux的区别

  • UNIX是商业化的,而Linux是开源的,是免费、公开源代码的;

  • UNIX系统大多是与硬件配套的,也就是说无法安装在x86服务器和个人计算机上的,而Linux则可以运行在多种硬件平台上。

shell

  • Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
    Shell 本身并不是内核的一部分,它只是在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。
    然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。

    bash与zsh的区别

  • 一句话,二者均是shell的一种,zsh能基本完美兼容bash的命令,并且使用起来更加优雅。由于bash或zsh本质上都是解释器,他们所共同服务的是shell语言,因此在命令语法上基本相同,部分兼容性差异可参考:zsh和bash的兼容性差异。

    chsh -s /bin/bash # 切换bash
    chsh -s /bin/zsh # 切换zsh
  • bash读取的配置文件:/.bash_profile文件
    zsh读取的配置文件:
    /.zshrc文件
    当从bash切换为zsh时,如果不想重新配置一遍.zshrc文件,可以__在.zshrc文件中加上source ~/.bash_profile,从而直接从.bash_profile文件读取配置。

yum和rpm

  • rpm命令和yum命令都可以用来安装软件
  • 但与yum命令最大的区别为yum命令在安装软件时如果碰到了依赖性的问题,yum会去主动尝试解决依赖性,如果解决不了才会反馈给用户。而rpm命令一旦遇到了依赖性的问题不会去解决依赖性,而是直接反馈给用户,让用户自行解决

repo源

  • repo文件是linux中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!

homebrew

  • homebrew是MacOS系统里面包的管理工具,类似于CentOS系统里面的yum,主要解决软件或者包下载时的各种依赖包。
  • 拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。

mac终端和linux

  • Mac和Linux基于都是基于Unix,命令也很多都是仿照Unix的,所以常用命令基本没有区别,如查看文件(ls),查找文件(find),复制文件(cp),创建目录(mkdir),打包文件(tar)等等,以及他们的软件包安装都是基于相同的理念(./configure,install)。

  • 但是一些细节是不同的,比如Linux因为是用C语言写的,所以命令需要区分大小写,而Mac是不存在的。

    使用mac的终端时候,需要递归复制目录,在Linux系统中一般是-r参数,请注意在mac中是-Rp,如果复制的路径是在/usr/local等级别的路径下,还需要sudo权限

sudo cp -Rp source /usr/local/source_copy
  • linux中的yum工具在mac中用homebrew替代

《高级Linux》 -Centos7

LVM和标准分区

简单的说就是LVM可以方便的动态调整分区大小。比如你的/home分区不够用了,如果是基于分区,那将是非常痛苦的事情。但如果是LVM,使用lvextend命令就可以了

lvm 分区 虽然 方便也有蛋疼的事 误删除不能恢复 风险 大 一般lvm 用的也少

文件和目录操作

touch touch [选项] [文件] 如果文件不存在,使用touch命令默认创建一个空文件。

-c -t touch -c -t 06071930 file1 将文件file1现在的时间已经改为6月7日19点30分

cp cp [选项] [源文件/目录] [目标文件/目录]拷贝文件

cp makefile makefile1 将makefile另外复制一份为makefile1

cp -r a/ b/ ../lesson5 将当前目录 a/文件夹 b/文件夹 递归拷贝到上一级目录下的lesson5目录

file file [文件]显示文件类型

tree tree查看该文件夹内垂直目录结构

pwd pwd显示用户当前工作目录路径

ls ls [选项] [文件]查看当前目录下所有可见文件

-d 只显示当前文件夹

-l 以长格式的形式查看当前目录下所有可见文件的详细属性,不包括隐藏文件

-la 查看文件详细信息,包括隐藏文件。

-ld 查看当前目录本身的权限与属性信息

mkdir mkdir [选项] [文件]创建目录

-m xxx 创建具有xxx权限的目录

rmdir rmdir [选项] [文件]删除目录

mv mv [选项] [源文件] [目标文件]文件和目录改名、移动文件和目录路径 如mv -f *.png picture

-f 不询问,或者说覆盖前不询问
-i 询问,或者说覆盖前询问
-n 不覆盖已存在的文件

rm rm [选项] [文件]删除文件或目录

-f 忽略不存在的文件,从不给出提示。

-i 进行交互式删除

-r 指示rm将参数中列出的全部目录和子目录均递归地删除。

-rf 无提示地强制递归删除文件

-v 详细显示进行的步骤

wc wc [选项] [文件]统计文件行数、单词数和字节数和字符数 不加选项的话总是按行数、单词数、字节数、文件的顺序显示每项信息。

-c或–bytes或–chars 只显示Bytes数。

-l或–lines 只显示列数。

-w或–words 只显示字数。

-m 只显示字符数

ln ln [选项] [源文件] [目标文件]使用ln命令可以创建链接文件(包括软链接文件和硬链接文件)

硬链接文件的使用 echo hello > a ln a b

软链接文件的使用 echo hello > a ln –s a b

文本内容显示

cat cat [选项] [文件]显示文本文件

无选项 显示文件内容

cat -n textfile1 > textfile2 把textfile1文件的内容加上行号后输入到textfile2文件中

cat >mm.txt<<EOF 输入>Hello >Linux >EOF 使用cat命令创建mm.txt并输入Hello Linux。

more more [选项] [文件名]分页显示文本文件

无选项 分页显示该文件内容

more -s testfile 逐页显示testfile文件内容,如有连续两行以上空白行则以一行空白行显示

more +20 testfile 从第20行开始显示testfile文件的内容

more -2 /etc/passwd 一次两行显示/etc/passwd文件内容

less less [选项] [文件名]回卷显示文本文件

less /etc/services 回卷显示/etc/services文件的内容

head head[选项][文件]显示指定文件前若干行 如果没有给出具体行数值,默认为10行

head -c -50 a 查看a文件前五十个字节数据

head -50 a 查看a文件前五十行数据

tail tail[选项][文件]显示指定文件末尾若干行 如果没有给出具体行数值,默认为10行 具体选项用法完全同head

文本内容处理

sort sort [选项] [文件]对文件中的数据进行排序

-r 倒序排序

uniq uniq [选项] [文件] 将重复行从输出文件中删除

-d 查看文件中重复的数据内容

-u 查看文件中不重复的数据内容

cut cut [选项] [ 文件 ]从文件每行中显示出选定的字节、字符或字段

-b 以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。

-c 以字符为单位进行分割。

-d 自定义分隔符,默认为制表符。

-f 与-d一起使用,指定显示哪个区域。

-n 取消分割多字节字符。仅和 -b 标志一起使用。

cut -f 1,5 -d: /etc/passwd 显示文件/etc/passwd中的第1个和第5个字段,由冒号隔开。

comm comm [选项] [文件1] [文件2]逐行比较两个已排过序的文件

-1 不输出文件1特有的行

-2 不输出文件2特有的行

-3 不输出两个文件共有的行

diff diff [选项] [文件1] [文件2]逐行比较两个文本文件,列出其不同之处

文件和命令查找

grep grep [选项] [查找模式] [文件名] 查找文件中符合条件的字符串

grep ‘test file’ kkk 在文件kkk中搜索匹配字符“test file”

grep ‘test’ d* 显示所有以d开头的文件中包含“test”的行数据内容

grep ^b /root/aa 在/root/aa文件中找出以b开头的行内容

grep -v ^b /root/aa 在/root/aa文件中找出不以b开头的行内容

grep le$ /root/kkk 在/root/kkk文件中找出以le结尾的行内容

ps –ef|grep sshd 查找sshd进程信息

find find [路径] [选项]列出文件系统内符合条件的文件

find / -name ‘*.conf’ 查找/目录下所有以“.conf”为扩展名的文件

find . -ctime -20 列出当前目录及其子目录下所有最近20天内更改过的文件

locate locate [选项][范本样式]在数据库中查找文件

locate httpd.conf 查找httpd.conf

locate -c httpd.conf 显示找到几个httpd.conf文件

系统信息显示

uname uname [选项]显示计算机及操作系统相关信息

-r 显示操作系统的内核发行号

-m 显示计算机硬件架构名称

-a 显示操作系统的全部信息

hostname 设置主机名:hostname [选项] [主机名] 显示主机名:hostname [选项] 显示或修改计算机主机名

free free [选项]查看内存信息

free 查看系统的物理内存和交换分区使用情况

free -m 以MB为单位查看系统的物理内存和交换分区使用情况

free -t 显示系统的物理内存加上交换分区总的容量

du du [选项] [文件|目录]显示目录或文件的磁盘占用量

无选项 显示文件的磁盘占用量

-s 显示目录的磁盘占用量

-sh 以MB为单位显示目录磁盘占用量

查看日期与时间

cal cal [选项] [[[日] 月] 年]显示日历信息

cal 显示本月的月历

cal 2001 显示公元2001年年历。

cal 9 2007 显示公元2007年9月的月历。

cal -m 以星期一为每周的第一天的方式显示本月的日历。

cal -jy 以1月1日起的天数显示今年的年历。

date date [选项] [显示时间格式](以+开头,后面接格式)显示和设置系统日期和时间

date 显示当前计算机上的日期和时间

date 0202191428 设置计算机日期和时间为2028年2月2日19点14分

date +’%r%a%d%h%y’ 按照指定的格式显示计算机日期和时间

date -s 09:16:00 设置计算机时间为上午9点16分

date -s 240414 设置计算机时间为2024年4月14日

hwclock hwclock [选项] 查看和设置硬件时钟

hwclock 查看硬件时间

hwclock -w 以系统时间更新硬件时间

hwclock -s 以硬件时间更新系统时间

信息交流

echo echo [选项] [字符串] 在显示器上显示文字

echo Hello Linux 将一段信息写到标准输出 结果:Hello Linux

echo Hello Linux > notes 将文本“Hello Linux”添加到新文件notes中

echo $HOME 显示$HOME变量的值

mesg mesg [选项]允许或拒绝写消息

控制系统中的其它用户是否能够用 write 命令或 talk 命令向您发送消息。不带选项的情况下,mesg 命令显示当前主机消息许可设置

wall wall [消息] 对全部已登录用户发送信息

wall ‘aaaaaaa’ 对全部已登录用户发送aaaaaaa

write write [用户] [终端名称] 向用户发送消息

write root tty3 向tty3终端上的root用户发送信息

用户和组群账户管理

用户管理

在Linux系统中,用户账户是登录系统的唯一凭证,其中root用户是系统的最高管理者,该用户的UID是0级,与用户和组账户相关的配置文件有/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow。

在实际的管理中,用户的角色是通过UID(用户ID号)来标识的,每个用户的UID都是不同的。在Linux系统中有三大类用户,分别是

root用户:UID为0

系统用户:比如bin、daemon、adm、ftp、mail等,这类用户都是系统自身拥有的。系统用户的UID为1~999

普通用户:能登录系统,在Linux系统上进行普通操作,能操作自己目录的内容,其使用系统的权限受限,这类用户都是系统管理员创建的。普通用户的UID为1000~60000

  • /etc/passwd文件是系统识别用户的一个重要文件,Linux系统中所有的用户都记录在该文件中。假设用户以账户zhangsan登录系统时,系统首先会检查/etc/passwd文件,看是否有zhangsan这个账户,然后确定用户zhangsan的UID,通过UID来确认用户的身份,如果存在则读取/etc/shadow文件中所对应的密码。如果密码核实无误则登录系统,读取用户的配置文件

    任何用户都可以读取/etc/passwd文件内容,在/etc/passwd文件中,每一行表示的是一个用户账户的信息,一行有7个段位,每个段位用“:”分隔。zhangsan:x:1000:1000:张三:/home/zhangsan:/bin/bash

    /etc/passwd文件字段含义

image-20221108180023752
  • /etc/shadow文件是/etc/passwd的影子文件,这个文件并不是由/etc/passwd文件产生,这两个文件应该是对应互补的。/etc/shadow文件内容包括用户及被加密的密码以及其它/etc/passwd不能包括的信息,比如用户账户的有效期等。

    /etc/shadow文件只有root用可以读取和操作

​ /etc/shadow文件字段含义

image-20221108180638552

useradd useradd [选项] [用户名] 在Linux系统中创建用户账户

useradd zhangsan

cat /etc/passwd|grep zhangsan //查看/etc/passwd文件,显示已经创建了用户zhangsan

passwd zhangsan //更改张三的密码

useradd -u 1010 moon 创建用户moon,并设置该用户UID为1010

useradd -g root pp 创建用户pp,并指定该用户是属于组群root的成员

useradd -s /bin/ksh abc 创建用户abc,并设置该用户的Shell类型是/bin/ksh

useradd -d /home/www newuser 创建用户newuser,并设置该用户主目录为/home/www

usermod usermod [选项][用户名] 更改用户的Shell类型、所属的组群、用户密码的有效期,还能更改用户的登录名

usermod -d /home/kkk zhangsan 修改用户zhangsan的主目录为/home/kkk

usermod -s /bin/ksh zhangsan 修改用户zhangsan的Shell类型为/bin/ksh

usermod -l zhaoliu wangwu 修改用户wangwu的登录名为zhaoliu

usermod -u 1700 zhangsan 修改用户账户zhangsan的UID为1700

usermod -c 张三 zhangsan 修改用户zhangsan的用户名全称为张三

usermod -f 20 zhangsan 修改用户zhangsan在密码过期后20天就禁用该账户

usermod -g root sun 修改用户sun所属的组群为root,该组群必须事先存在

usermod -L zhangsan 锁住用户zhangsan密码,使密码无效

usermod -U zhangsan 解除用户zhangsan密码锁住

userdel userdel [选项][用户名] 以在Linux系统中删除用户账户,甚至连用户的主目录也一起删除

userdel -r moon 删除用户moon,并且在删除该用户的同时一起删除主目录

族群账户管理

具有某种共同特征的用户集合就是组群。通过组群可以集中设置访问权限和分配管理任务。

组群账户有关的配置文件/etc/group和/etc/gshadow

/etc/group文件是组群的配置文件,内容包括用户和组群,并且能显示出用户是归属哪个组群或哪几个组群。一个用户可以归属一个或多个不同的组群,同一组群的用户之间具有相似的特征。比如把某一用户加入到root组群,那么这个用户就可以浏览root用户主目录的文件,如果root用户把某个文件的读写执行权限开放,root组群的所有用户都可以修改此文件;如果是可执行的文件,root组群的用户也是可以执行的。

  • 组群的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户有对系统管理有最重要的内容,最好让用户拥有独立的组群,或者把用户的文件的权限设置为完全私有。

  • /etc/group文件的内容包括组群名、组群密码、GID及该组群所包含的用户,每个组群一条记录,一行有4个段位,每个段位用“:”分隔。zhangsan:x:1000:

image-20221108191645542

/etc/gshadow是/etc/group的加密文件,组群密码就是存放在这个文件中。/etc/gshadow和 /etc/group是互补的两个文件;对于大型服务器,针对很多用户和组群,定制一些关系结构比较复杂的权限模型,设置组群密码是很有必要的。比如不想让一些非组群成员永久拥有组群的权限和特性,可以通过密码验证的方式来让某些用户临时拥有一些组群特性,这时就要用到组群密码。

  • /etc/gshadow文件中每个组群都有一条记录。每个段位用“:”分隔。beijing:$6$E/xvWMmh$rhYLQwwffEqIudVLFzMlv1::ou
image-20221108191848542

groupadd

groupmod -g 1800 group1 创建组群group1,并且在创建时设置其GID为180

groupmod

groupmod -n shanghai group1 修改组群group1的新组群名称为“shanghai”

groupdel

磁盘分区和文件系统管理

磁盘分区:

  • 在Linux中,如需在某个磁盘上存储数据。则需将磁盘进行分区,然后创建文件系统,最后将文件系统挂载到目录下

  • 在安装Linux系统后需要添加更多的交换空间,可以通过添加一个交换分区或添加一个交换文件来实现

  • 磁盘分区一共有3种:主分区、扩展分区和逻辑驱动器。扩展分区只不过是逻辑驱动器的“容器”,实际上只有主分区和逻辑驱动器才能进行数据存储。在一块磁盘上最多只能有四个主分区,可以另外建立一个扩展分区来代替四个主分区的其中一个,然后在扩展分区下可以建立更多的逻辑驱动器

  • 在Linux系统中进行分区可以使用fdiskparted等命令,或者使用相同功能的图形界面程序

格式化:

  • 磁盘经过分区之后,下一个步骤就是要对磁盘分区进行格式化的工作(也就是创建文件系统的工作)。格式化是指对磁盘分区进行初始化的一种操作,这种操作通常会导致现有的分区中所有的数据被清除。简单说,就是把一张空白的磁盘划分成一个个小区域并编号,供计算机储存和读取数据使用
  • 通过分区当然不能产生任何文件系统。分区只是对磁盘上的磁盘空间进行了保留,还不能直接使用,在此之后分区必须要进行格式化。在Windows系统下可以通过资源管理器下的文件菜单或者format程序来执行,而在Linux系统中大多使用mkfs命令来完成
  • Linux系统支持不同的文件系统,目前应用最广泛的就是xfsext4
磁盘分区

fdisk fdisk [选项] [设备] 使用fdisk命令可以用来对磁盘进行分区

m 显示所有能在fdisk中使用的子命令

p 显示磁盘分区信息

a 设置磁盘启动分区

n 创建新的分区

e 创建扩展分区

p 创建主分区-t 更改分区的系统ID(也就是分区类型ID)

d 删除磁盘分区

q 退出fdisk,不保存磁盘分区设置

l 列出已知的分区类型

v 验证分区表

w 保存磁盘分区设置并退出fdisk

fdisk -l /dev/sda 查看当前磁盘上的分区情况,该磁盘设备是/dev/sda

Linux常用分区类型

image-20221108194826444
创建文件系统

partprobe

使用fdisk工具只是将分区信息写到磁盘,如果需要mkfs创建文件系统则需要事先重启系统,而使用partprobe则可以使kernel重新读取分区信息,从而避免重启系统

mkfs mkfs [选项] [设备] 使用mkfs命令可以在分区上创建各种文件系统

mkfs并不建立文件系统,而是调用相关的程序来执行。这里的文件系统是要指定的,比如xfs、ext4、ext3、vfat或者是msdos等

mkfs -t ext4 /dev/sda5 格式化/dev/sda5分区,创建ext4文件系统

挂载和卸载文件系统

mount mount [选项] [设备] [挂载目录] 将指定分区、光盘、U盘或者是移动硬盘挂载到Linux系统的目录下

image-20221108201743403

mount /dev/sda5 /mnt/kk 挂载分区/dev/sda5到/mnt/kk目录中

mount -o ro /dev/sda5 /mnt/kk 以只读方式挂载/dev/sda5分区到/mnt/kk目录中

umount umount [选项] [设备|挂载目录] 卸载分区

umount /dev/sda5 卸载分区/dev/sda5文件系统

df df [选项] [文件] 查看磁盘分区挂载情况

自动挂载

修改/etc/fstab文件,使得1GB分区开机时自动挂载到/mnt/kk目录中。

[root@centos7 kjg]#vim /etc/fstab
[root@centos7 kjg]#/dev/sdb1 /mnt/kk xfs defaults 1 2 # 添加
交换文件

在计算机上添加交换文件,文件大小为1GB

[root@centos7 kjg]#mkswap /dev/sda5
[root@centos7 kjg]#swapon /dev/sda5
[root@centos7 kjg]#free
[root@centos7 kjg]#vim /etc/fstab
[root@centos7 kjg]#/dev/sda5 swap swap defaults 0 0 # 添加

软件包管理

RPM软件包管理

在Linux系统中,最常用的软件包是RPM包和tar包。要管理RPM软件包可以使用rpm和yum命令,yum命令自动化地收集RPM软件包的相关信息,检查依赖性,并且一次安装所有依赖的软件包,无需繁琐地一次次安装。

目前在众多的Linux系统上都采用RPM软件包,这种软件包格式在安装、升级、删除以及查询方面非常方便,不需要进行编译即可安装软件包。本节主要讲述RPM软件包的使用和管理。

RPM软件包管理用途:

  • 可以安装、删除、升级、刷新和管理RPM软件包;
  • 通过RPM软件包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个RPM软件包;
  • 可以查询系统中的RPM软件包是否安装并查询其安装的版本;
  • 可以把自己的程序打包为RPM软件包并发布;
  • 软件包签名GPG和MD5的导入、验证和签名发布;
  • 依赖性的检查,查看是否有RPM软件包由于不兼容而扰乱系统

RPM软件包管理主要有安装(添加)、删除(卸载)、刷新、升级、查询这五种基本操作模式

使用yum管理RPM软件包
  • yum(Yellow dog Updater Modified)起初是由Terra Soft研发,其宗旨是自动化地升级、安装和删除RPM软件包,收集RPM软件包的相关信息,检查依赖性并且一次安装所有依赖的软件包,无须繁琐地一次次安装。

  • yum的关键之处是要有可靠的软件仓库,软件仓库可以是HTTP站点、FTP站点或者是本地软件池,但必须包含rpm的header,header包括了RPM软件包的各种信息,包括描述、功能、提供的文件以及依赖性等。正是收集了这些header并加以分析,才能自动化地完成余下的任务。

  • yum特点

    可以同时配置多个软件仓库;

    简洁的配置文件/etc/yum.conf;

    自动解决安装或者删除RPM软件包时遇到的依赖性问题;

    保持与RPM数据库的一致性

yum软件仓库
  • yum软件仓库配置文件

repo文件是Linux系统中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,比如从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。软件仓库配置文件默认存储在/etc/yum.repos.d目录中。

#以下是yum软件仓库配置文件的格式内容。
[rhel-source] #方括号里面是软件源的名称,会被yum识别。
name=Red Hat $releasever-$basearch-Source #定义软件仓库名称,$releasever变量定义了发行版本,$basearch变量定义了系统架构,方便yum升级时选择适合当前系统的软件包。
baseurl= ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/SRPM/ #指定RPM软件包来源,支持的协议有http://、ftp://、file:///(本地源)
enabled=1 #软件仓库中的源是否启用,0禁用,1启用。
gpgcheck=1 #表示对软件仓库中下载的RPM软件包进行GPG校验,确定来源是否有效和安全。
gpgkey=file:///etc/pki/rpm-gpg/the-file #用于校验的GPG密钥
  • 创建本地软件仓库
  1. 安装软件包:安装deltarpm、python-deltarpm和createrepo软件包

  2. 复制软件包:复制Linux系统安装光盘中的软件包

  3. 创建软件仓库配置文件:创建软件仓库配置文件

  4. 创建软件仓库:使用createrepo命令创建软件仓库

使用yum命令进行软件管理
  1. yum help 显示使用信息

  2. yum list 列出软件包

  3. yum search keyword 搜索关键字

  4. yum info packagename 列出软件包详细信息

  5. yum install packagename 安装软件包

  6. yum remove packagename 删除软件包

  7. yum update packagename 升级软件包

使用yum命令管理软件包组
  1. yum grouplist 列出所有可用组

  2. yum groupinfo 提供特定组的信息

  3. yum groupinstall 安装软件包组

  4. yum groupupdate 更新软件包组

  5. yum grouperase 删除软件包组

使用yum命令安装本地rpm包

yum localinstall *.rpm

yum -y bind 无需确认、直接安装bind软件包

yum info bind 显示bind软件包的详细信息

yum info installed 显示所有已经安装的软件包信息

yum list bind 列出bind软件包

yum deplist bind 列出bind软件包的依赖关系

yum repolist 显示软件仓库的配置

yum provides /etc/named.conf 查看/etc/named.conf文件是属于哪个软件包的

yum remove bind 删除bind软件包

tar包管理

使用tar命令可以将许多文件一起保存到一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件 tar [选项][文件|目录]

tar cvf abc.tar /root/abc 备份/root/abc目录及其子目录下的全部文件,备份文件名为abc.tar

tar tvf abc.tar 查看abc.tar备份文件的内容,并显示在显示器上

tar xvf abc.tar 将打包文件abc.tar解包出来

tar rvf abc.tar /root/abc/d 将文件/root/abc/d添加到abc.tar包里面去

tar uvf abc.tar /root/abc/d 更新原来tar包abc.tar中的文件/root/abc/d

权限和所有者

权限字符组合举例

image-20221128215509056

ls –l [文件名] 可以显示文件的详细信息

image-20221128215934831

文字设定法设置权限

chmod [操作对象] [操作符号] [权限] [文件|目录]

image-20221128220607286

image-20221128220621457

chmod u+w a 添加所有者对a文件的写入权限

chmod u-r a 取消所有者对a文件的读取权限

chmod g=w a 重新分配同组用户对a文件有写入的权限

chmod u+rw,g+r,o+rwx a 添加所有者为读取、写入权限;同组用户为读取权限;其他用户读取、写入和执行的权限

chmod a-rwx a 取消所有用户的读取、写入和执行权限

数字设定法设置权限

chmod [n1n2n3] [文件|目录]

n1表示用户所有者的权限 ,n2表示组群所有者的权限,n3表示其它用户的权限。

  • 文件和目录的权限表中用r、w、x这三个字符来为用户所有者、组群所有者和其它用户设置权限。有时候,字符似乎过于麻烦,因此还有另外一种方法是以数字来表示权限,而且仅需3个数字。

  • 使用数字设定法更改文件权限,首先必须了解数字表示的含义:0表示没有权限,1表示可执行权限,2表示写入权限,4表示读取权限,然后将其相加。

  • 所有数字属性的格式应该是三个0~7的数,其顺序是u、g、o。

r:对应数值4

w:对应数值2

x:对应数值1

-:对应数值0

-rwx——:用数字表示为700;

-rwxr–r–:用数字表示为744;

-rw-rw-r-x:用数字表示为665;

drwx–x–x:用数字表示为711;

drwx——:用数字表示为700。

chmod 777 a 所有用户拥有读取、写入和执行的权限

chmod 7 a 设置a文件权限,其他用户拥有读取、写入和执行的权限

特殊权限

(1)SUID

对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的用户所有者身份来执行;对一个目录无影响

(2)SGID

对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的组群所有者身份来执行;对一个目录,在该目录中创建的任意新文件的所属组与该目录的所属组相同。

(3)Sticky

对一个可执行文件无影响;对目录设置Sticky之后,尽管其它用户有写权限,也必须由文件所有者执行删除和移动等操作

文字设定法设置特殊权限

chmod u+s a 添加a文件的特殊权限为SUID

chmod g+s a 添加a文件的特殊权限为SGID

chmod o+t a 添加a文件的特殊权限为Sticky

数字设定法设置特殊权限

chmod 4000 a 设置文件a具有SUID权限

chmod 2000 a 设置文件a具有SGID权限

chmod 1000 a 设置文件a具有Sticky权限

chmod 7000 a 设置文件a具有SUID,SGID和Sticky权限

更改文件和目录所有者

使用chown命令可以更改文件和目录的用户所有者和组群所有者

chown [选项] [用户.组群] [文件|目录]chown [选项] [用户:组群] [文件|目录]

chown root.root a 将文件a的所有者和用户组一起改成root

chown .newuser a 将文件a的用户组改成newuser

chown -R newuser.newuser /root/b 将目录/root/b连同它的下级文件/root/b/ccc的所有者和用户组一起更改为newuser

Linux日常管理和维护

进程管理
ps命令

ps [选项]

ps命令是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行以及进程运行的状态、进程是否结束、进程有没有僵死,以及哪些进程占用了过多的资源等

image-20221128230540723

ps –e 显示所有进程

ps -aux 显示所有不带控制台终端的进程,并显示用户名和进程的起始时间

ps -ax|grep less 查看less进程是否在运行

ps -u 显示用户名和进程的起始时间

ps -u root 显示用户root的进程。

ps -t tty1 显示tty1终端下的进程

ps -p 1659 显示进程号为1659的进程

top命令

top [选项]

使用top命令可以显示当前正在运行的进程以及关于它们的重要信息,包括它们的内存和CPU使用量。执行top命令可以显示目前正在系统中执行的进程,并通过它所提供的互动式界面,用热键加以管理。要退出top,按[q] 键即可

top 使用top命令动态显示进程信息

杀死进程
ps –ef|grep crond 	#查询到crond进程号为1659
kill –9 1659 #强制杀死进程号为1659的进程
任务计划
  • 如果要在固定的时间上触发某个作业,就需要创建任务计划,按时执行该作业,在Linux系统中常用cron实现该功能

  • 使用cron实现任务自动化可以通过修改/etc/crontab文件以及使用crontab命令实现,其结果是一样的

/etc/crontab文件详解
  • root用户通过修改/etc/crontab文件可以实现任务计划,而普通用户却无法修改该文件。crond守护进程可以在无需人工干预的情况下,根据时间和日期的组合来调度执行重复任务。

  • /etc/crontab文件是cron的默认配置文件,前面3行是用来配置cron任务运行环境的变量:

    Shell: 告诉系统要使用哪个Shell环境(在这个例子里是/bin/bash)

    PATH: 定义用来执行命令的路径

    MAILTO: cron任务的输出被邮寄给MAILTO变量定义的用户名。如果MAILTO变量被定义为空白字符串,电子邮件就不会被寄出

  • /etc/crontab文件中的每一行都代表一项任务,它的格式如下:

`minute hour day month dayofweek user-name commands`
  • /etc/crontab文件内容

    image-20221128232732524

  • /etc/crontab时间格式

    image-20221128232808175

/etc/crontab文件配置举例
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
30 21* * * root /root/backup.sh //在每天晚上的21:30执行/root/backup.sh文件
45 4 1,10,22 * * root /root/backup.sh //在每月1、10、22日的4:45执行/root/backup.sh文件
20 1 * * 6,0 root /bin/find / -name core -exec rm {} \; //在每星期六、星期日的1:20执行一个find命令,查找相应的文件
0,30 18-23 * * * root /root/backup.sh //在每天18:00~23:00之间每隔30分钟执行/root/backup.sh
0 23 * * 6 root /root/backup.sh //在每星期六的23:00执行/root/backup.sh
/etc/cron.d目录

除了通过修改/etc/crontab文件实现任务计划之外,还可以在/etc/cron.d目录中创建文件来实现。

该目录中的所有文件和/etc/crontab文件使用一样的配置语法。

crontab命令

crontab [选项]

crontab [选项] [文件]

使用crontab命令可以创建、修改、查看以及删除crontab条目

GRUB 2相关

设置GRUB 2 PBKDF2加密口令

先要使用grub2-mkpasswd-pbkdf2命令PBKDF2加密口令,然后在/etc/grub.d/00_header文件中添加超级用户和PBKDF2加密口令,最后使用grub2-mkconfig命令生成GRUB 2配置文件

破解root用户密码

  1. 开机按光标上下键停止启动,在GRUB2菜单处按进入编辑模式

  2. 在 linux16 行,按键定位到这行末尾,添加 rd.break console=tty0

  3. 继续启动,然后输入下面命令行:

    # mount -o remount,rw /sysroot/

    # chroot /sysroot/

    # passwd root # 或者 echo redhat123 | passwd –stdin root

    # touch /.autorelabel

    # sync

    # exit # 两次 或者 ctrl + d

  4. 重新启动后,使用指定的密码登录系统,从而验证密码是否正确

将网卡名称eno16777736更改为eth0

1.修改/etc/default/grub文件

在GRUB_CMDLINE_LINUX变量中添加“net.ifnames=0 biosdevname=0”

2.生成GRUB 2配置文件,执行下面命令:

grub2-mkconfig -o /boot/grub2/grub.cfg

3.查看网卡名称: 重新启动Linux系统,使用ifconfig查看网卡名称

Linux网络基本配置

常用网络配置文件
  1. /etc/sysconfig/network-scripts/ifcfg-eno16777736文件

    在Linux统中,系统网络设备的配置文件保存在/etc/sysconfig/network-scripts目录下,其中文件ifcfg-eno16777736包含一块网卡的配置信息,文件ifcfg-lo包含回路IP地址信息

  2. /etc/resolv.conf文件

    /etc/resolv.conf文件是由域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件

  3. /etc/hosts文件

    当计算机启动时,在可以查询DNS前,计算机需要查询一些主机名到IP地址的匹配。这些匹配信息存放在/etc/hosts文件中。在没有域名服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址

  4. /etc/services文件

    /etc/services文件定义了Linux系统中所有服务的名称、协议类型、服务的端口等信息

常用网络命令

在Linux系统中提供了大量的网络命令用于网络配置、测试以及诊断:traceroute、ifconfig、ping、netstat、arp、tcpdump

traceroute

traceroute [选项] [主机名|IP地址] [数据包大小]

使用traceroute命令可以显示数据包到目标主机之间的路径。traceroute命令使用户可以追踪网络数据包的路由途径,预设IPv4数据包大小是60字节,用户可以另外设置

traceroute www.163.com 跟踪从本地计算机到www.163.com网站的路径

ifconfig

ifconfig [接口] [选项| IP地址]

使用ifconfig命令可以显示和配置网络接口,比如设置IP地址、MAC地址、激活或关闭网络接口

ifconfig eno16777736 192.168.0.100 netmask 255.255.255.0 up 配置网卡eno16777736的IP地址, 同时激活该设备

ifconfig eno16777736:1 192.168.0.3 配置网卡eno16777736别名设备eno16777736:1的IP地址为192.168.0.3

ifconfig eno16777736:1 up 激活网卡eno16777736:1设备

ifconfig eno16777736 查看网卡eno16777736网络接口的配置

ifconfig 查看所有的网卡网络接口配置

ifconfig eno16777736:1 down 禁用网卡eno16777736:1设备

ifconfig eno16777736 hw ether 00:0C:29:18:2E:3D 更改网卡eno16777736的硬件MAC地址为00:0C:29:18:2E:3D

ping

ping [选项] [目标]

使用ping命令用来测试与目标计算机之间的连通性。执行ping命令会使用ICMP传输协议发出要求回应的信息,如果远程主机的网络功能没有问题,就会回应该信息,因而得知该主机是否运作正常

ping www.ak.com 测试与网站www.ak.com的连通性

ping -s 128 192.168.0.222 测试与192.168.0.222计算机的连通性,每次发送的ICMP数据包大小为128字节

ping -c 4 192.168.0.5 测试与192.168.0.5计算机的连通性,要求返回4个ICMP数据包

netstat

netstat [选项] [延迟]

使用netstat命令来显示网络状态的信息,得知整个Linux系统的网络情况,比如网络连接、路由表、接口统计、伪装连接和组播成员

netstat -r 显示内核路由表信息

netstat –antu |grep 22 显示端口号为22的连接情况

netstat -u 显示UDP传输协议的连接状态

arp

arp [选项] [IP地址][MAC地址]

使用arp命令可以用来增加、删除和显示ARP缓存条目。

arp 查看系统arp缓存

arp -s 192.168.0.99 00:60:08:27:CE:B2 添加一个IP地址和MAC地址的对应记录

arp -d 192.168.0.99 删除一个IP地址和MAC地址的对应缓存记录

tcpdump

tcpdump [选项] [表达式]

是Linux系统中强大的网络数据采集分析工具之一,可以将网络中传送的数据包的头完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来筛选信息。作为互联网上经典的的系统管理员必备工具 tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一

tcpdump -i eno16777736 捕获经过网络接口eno16777736的数据包

管理网络服务
systemd简介

RHEL 7系统使用systemd,它提供更优秀的框架以表示系统服务间的依赖关系,并实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V

在RHEL7之前,服务管理工作是由System V通过/etc/rc.d/init.d目录下的Shell脚本来执行的,通过这些脚本允许管理员控制服务的状态。在RHEL 7中,这些脚本被服务单元文件替换。在systemd中,服务、设备、挂载等资源统一被称为单元,所以systemd中有许多单元类型,服务单元文件的扩展名是.service,同Shell脚本的功能相似。比如有查看、启动、停止、重启、启用或者禁止服务的参数。

一个单元的配置文件可以描述 系统服务(.service)、挂载点(.mount)、sockets(.sockets)、系统设备(.device)、交换分区(.swap)、文件路径(.path)、启动目标(.target)、由systemd管理的计时器(.timer)

systemd单元文件放置位置

/usr/lib/systemd/system:systemd默认单元文件安装目录

/etc/systemd/system:系统管理员创建和管理的单元目录,优先级最高

systemctl

systemctl [选项] [单元命令|单元文件命令]

使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名(比如sshd.service)。如果没有指定扩展名,systemctl 默认把扩展名当作.service。

systemctl start named.service 启动named服务

systemctl status named.service 查看named服务当前状态

systemctl stop named.service 停止named服务

systemctl restart named.service 重新启动named服务

systemctl reload named.service 重新加载named服务配置文件

systemctl enable named.service 设置named服务开机自动启动

systemctl is-enabled named.service enabled 查询named服务是否开机自动启动

systemctl disable named.service 停止named服务开机自动启动

systemctl list-units –type=service 查看所有已启动的服务