Linux初级工程师应知应会

本文详细介绍了Linux系统的基础知识,包括权限管理、服务管理、文本管理和Shell脚本入门。在权限管理部分,讲解了Linux用户、权限、文件与文件夹权限、特殊权限等内容。服务管理中涉及init进程、Systemd、CronTab定时任务和Supervisor。文本管理部分重点介绍了nano、vim和grep、sed、awk工具的使用。最后,Shell脚本基础涵盖了脚本创建、执行、变量定义与使用、控制结构等内容,是学习Linux运维的重要资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux初级工程师应知应会

权限管理

1. Linux用户及权限

1. Linux用户和组
Linux中的用户

Linux是一个多用户系统,Linux允许使用者在Linux系统上通过规划不同类型、不同层级的用户,并公平的分配系统资源与工作环境。不仅如此,和Windows不同的是,Linux允许不同的用户同时登录主机,同时使用主机的资源,因此Linux被称为多用户系统。

Linux以“用户与用户组”的概念,建立用户与文件权限之间的联系,保证系统能够充分考虑每个用户的隐私保护,很大程度上保障了Linux作为多用户系统的可行性。

root用户

root用户在Linux计算机中拥有全部权限。

在Linux中执行涉及到系统的命令一般都需要root权限,尤其是影响系统文件的命令。

由于root权限如此强大,所以建议只有必要时才使用,而不是直接以root用户身份进行登录,这样可以避免重要系统文件意外受损。

使用root用户创建新的用户,并授予必要的权限,在日常工作中使用对应的普通用户进行工作。

系统用户

除了日常操作的用户以外,还会有一些其他用户,这些用户默认无法登陆系统。

这些用户的存在主要是为了满足系统进程对文件属主的需求。

用户组

在linux中可以创建用户组来管理用户。

根据功能分类,可以分为:管理员组和普通用户组。

按类别分类,可以分为:基本组和附加组,一个用户只能有一个基本组,但可以有多个附加组。

按组本身的类别分类:公共组和私有组。私有组只有一个用户,且组名和用户名一致;公共组会有多个用户。

2. Linux权限构成
Linux的权限组成

Linux下权限可以分为三类:User权限(u),Group权限(g),Other权限(o)

  • User权限表示文件所有者;
  • Group权限表示文件所有者所在的组
  • Other表示所有其他用户
    在这里插入图片描述
Linux的权限分类

Linux将权限分为Read(读),Write(写),Execute(执行)三个不同的基本类别

  • Read读权限表示:

针对目录,有读权限就代表能对此目录有列表功能,就是可以执行ls命令进行查看,另外还有cp的功能。

针对文件,有读权限就代表能对此文件有阅读功能,可以通过cat等命令查看文件内容。

  • Write写权限表示:

针对目录,有写权限就代表着在此目录下创建文件和目录,可以通过touch,mkdir等命令创建文件和目录,另外还可以删除此目录下的文件。

针对文件,有写权限就代表着对此文件可以写入新的内容和修改文件内容。

  • Execute执行权限表示:

针对目录,有执行权限就代表能进入此目录,利用cd等命令进入此目录。

针对文件,有执行权限就代表可以执行此文件。

3. Linux文件与文件夹权限
1. 文件与文件夹权限

在Linux中,可以使用umask查看当前用户的默认权限,创建文件/目录时会遵循该权限。

文件夹权限和文件权限的不同,会导致在使用命令操作文件时,有所不同。

文件权限

对于文件而言,

-r表示文件的内容可以被读取

-w表示这个文件的内容可以被修改(w只授予文件修改的权限,如果需要删除/重命名,则需要有目录的w权限)

-x表示文件可以被执行,一般情况下,.sh文件需要有这个权限

文件夹权限

对于文件夹而言,

-r表示可以查看此文件夹下的文件名列表

-w表示可以对此文件夹下的文件进行删除/重命名/移动

-x表示可以将此文件夹作为working dir,或者说表示可以cd到这个文件夹中

文件及文件夹权限实例
在这里插入图片描述
在这里插入图片描述

2. 修改文件权限

chmod命令可以修改文件权限
在这里插入图片描述

3. 文件的属组和属主

chown命令可以修改文件的属主

在这里插入图片描述
chgrp命令可以修改文件的属组
在这里插入图片描述

4. 特殊权限

SUID

SUID是Set UID的简称,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。

  • 用个例子来了解SUID
    在这里插入图片描述
  • SUID的使用需要满足以下四点
  1. SUID只对二进制文件有效
  2. 调用者对该文件有执行权
  3. 在执行过程中,调用者会暂时获得该文件的所有者权限
  4. 该权限只在程序执行的过程中有效

SGID

SGID是Set GID的简称,它出现在文件所属组权限的执行位上面,它対普通二进制文件和目录都有效;

SGID作用于文件上时,在执行该文件时,用户将获得该属组的权限;

SGID作用于目录上时,在该目录下创建的文件,都将属于这个目录所属的组。

SBIT

SBIT即Sticky Bit,它出现在其他用户权限的执行位上,它只能用来修饰一个目录。

当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。

在这里插入图片描述

如何设置SUID,SGID,SBIT

  • 数字方式

SUID,SGID,SBIT有自己对应的权限数字

SUID - 4

SGID - 2

SBIT - 1

设定权限只需要将对应的权限数字相加即可

在设置权限时,需要将特殊权限数字放在最前面,如果原文件权限为755,需要添加SUID权限,就执行 chmod 4755 filename

  • 命令方式

chmod u+s testfile # 为testfile文件加上SUID权限

chmod g+s testdir # 为testdir目录加上SGID权限

chmod o+t testdir # 为testdir目录加上SBIT权限

服务管理

1. Linux下的init进程

1. init进程

对于Linux系统的运行来说,init程序是最基本的程序之一。

一个好的Linux发行版本通常随带有一个init的配置,这个配置适合于绝大多数系统的工作,在这样一些系统上不需要对init做任何事。

通常,只有你在碰到诸如串行终端挂住了、拨入(不是拨出)调制解调器,或者你希望改变缺省的运行级别时才需要关心init。

init进程是所有Linux进程的父进程,它的进程号是1。

2. init进程的实现
  • OpenRC:OpenRC是一个基于依赖的init系统,它用C语言和遵循POSIX的shell写成,这使得它在BSD和Linux系统上可以使用。
  • Systemd: Systemd是一套中央化系统及设置管理程序(init),其包括有守护进程、程序库以及应用程序。
  • Upstart: Upstart是一个基于事件的init程序,用于替代传统的init(多种类Unix计算机操作系统启动时用于执行任务的程序)。
  • Sysvinit: Sysvint就是system V风格的init系统,顾名思义,它源于System V系列Unix。它提供了比BSD风格init系统更高的灵活性。是已经风行了几十年的Unix int系统,一直被各类Linux发行版所采用。

2. Systemd

systemd服务是一种以.service结尾的单元(unit)配置文件,用于控制由systemd控制或监控的进程。简单说,用于后台以守护精灵(daemon)的形式运行程序。

systemd广泛应用于新版本的RHEL、SUSE Linux Enterprise、CentOS、Fedora和openSUSE中,用于替代旧有的服务管理器service。

1. Systemd的常用命令

systemctl command xxx.service # 其中command可以是start、stop、restart、disable、enable等,比如:

systemctl start httpd.service # 启动Apache服务

systemctl enable mariadb.service # 将MariaDB服务设为开机启动

2. 查看系统已有的Systemd配置文件

Systemd的配置文件都放置在/etc/systemd/system/ 目录下

在这里插入图片描述

  1. Systemd配置文件
[Unit] # 这个项目与此unit的解释、执行服务相依性有关
Description=OpenBSD Secure Shell server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target audit.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755

[Install]	# 这个项目说明此unit要挂载哪个target下面
WantedBy=multi-user.target
Alias=sshd.service

Systemd的Unit

在Systemd中,所有引导过程中systemd要控制的东西都是一个单元。基本的用法如下

  • Description:代表整个单元的描述,可根据需要任意填写。
  • Wants:本单元启动了,它“想要”的单元也会被启动。但是这个单元若启动不成功,对本单元没有影响。
  • Requires:这个单元启动了,那么它“需要”的单元也会被启动;它“需要”的单元被停止了,它自己也活不了。但是请注意,这个设定并不能控制启动顺序,因为它“需要”的单元启动也需要时间,若它“需要”的单元启动还未完成,就开始启动本单元,则本单元也无法启动,所以不建议使用这个字段。
  • OnFailure:若本单元启动失败了,那么这个单元作为折衷。
  • Befor/After:指定启动顺序。

Systemd的Service

在定义完了Systemd用来识别服务的单元后,我们来定义服务本体。基本的用法如下:

  • Type:服务的类型,各种类型的区别如下所示
    • simple:默认,这是最简单的服务类型。意思就是说启动的程序就是主体程序,这个程序要是退出那么一切皆休。
    • forking:标准Unix Daemon使用的启动方式。启动程序后会调用fork()函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。
    • oneshot:适用于那些被一次性执行的任务或者命令,它运行完成后便了无痕迹。因为这类服务运行完就没有任何痕迹,我们经常会需要使用RemainAfterExit=yes。意思是说,即使没有进程存在,Systemd也认为该服务启动成功了。同时只有这种类型支持多条命令,命令之间用;分割,如需换行可以用\。
    • dbus:这个程序启动时需要获取一块DBus空间,所以需要和BusName= 一起用。只有它成功获得了DBus空间,依赖它的程序才会被启动。
  • ExecStart:在输入的命令是start时候执行的命令,这里的命令启动的程序必须使用绝对路径,比如你必须用/sbin/arp而不能简单的以环境变量直接使用arp。
  • ExecStop:在输入的命令是stop时候执行的命令,要求同上。
  • ExecReload:这个不是必需,如果不写则你的Service就不支持restart命令。ExecStart和ExecStop是必须有的。

Systemd的Install

服务编写完之后还需要被systemd装载,定义安装单元各个字段如下:

  • WantedBy:设置服务被谁装载,一般设置为multi-user.target
  • Alias:为service设置一个别名,可以使用多个名字来操作服务
  • Also:在安装这个服务时候还需要其他的服务

编写一个简单的systemd配置文件

[root@m1 ~]# cd /etc/systemd/system
[root@m1 system]# vim alibaba.service

[Unit]
Description=Write Something
Wants=network-online.target
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=touch /tmp/alibaba
ExecStop=rm -f /tmp/alibaba

[Install]
WantedBy=multi-user.target

[root@m1 system]# systemctl start alibaba.service			
[root@m1 system]# systemctl status alibaba.service				#此时/tmp目录下alibaba文件生成
● alibaba.service - Write Something
   Loaded: loaded (/etc/systemd/system/alibaba.service; disabled; vendor preset: disabled)
   Active: active (exited) since Fri 2021-07-02 15:48:47 CST; 1min 6s ago
  Process: 24765 ExecStart=/usr/bin/touch /tmp/alibaba (code=exited, status=0/SUCCESS)
 Main PID: 24765 (code=exited, status=0/SUCCESS)

Jul 02 15:48:47 m1 systemd[1]: Starting Write Something...
Jul 02 15:48:47 m1 systemd[1]: Started Write Something.

[root@m1 system]# systemctl stop alibaba.service 					#此时/tmp目录下alibaba文件被删除

3. CronTab定时任务

crontab是用来定期执行程序的命令。

当安装完成操作系统之后,默认便会启动此任务调度命令。

crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

1. crontab常用命令介绍
  • crontab -l 列出目前的日程表
  • crontab -e 编辑当前日程表
  • crontab -r 删除当前日程表
  • crontab -u xx -l 列出xx用户的日程表
2. crontab语法介绍

在这里插入图片描述
在这里插入图片描述

[root@m1 ~]# crontab -l
no crontab for root
[root@m1 ~]# crontab -e

* * * * * echo "123/r/n" >> /tmp/crontabtest

[root@m1 ~]# crontab -l
* * * * * echo "123/r/n" >> /tmp/crontabtest

[root@m1 ~]# systemctl restart crond.service
[root@m1 ~]# cd /tmp/
[root@m1 tmp]# ls
crontabtest  systemd-private-e656c944ad394e25b2303a9d994376a5-chronyd.service-vQyECi  vmware-root_869-3988752892
[root@m1 tmp]# more crontabtest
123/r/n
123/r/n
123/r/n
123/r/n
[root@m1 tmp]# crontab -r
[root@m1 tmp]# crontab -l
no crontab for root

3. crontab的常用工具

crontab.guru
在这里插入图片描述

4. crontab的注意事项

新创建的cron任务,不会马上执行,至少要过2分钟后才可以,当然你可以重启cron来马上执行。

crontab中的命令需要写成绝对路径。

4. Supervisor

Supervisor是用python开发的一套通用的进程管理程序,能将一个普通的命令行进程变成后台daemon,并监控进程状态,异常退出时能自动重启。

Supervisor可以很方便的管理批量进程,不仅支持启动、重启、关闭、重载,还支持监控进程,进程意外僵死后可自动拉起。

1. Supervisor的安装
yum install -y epel-release
yum install -y supervisor
echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
2. Supervisor配置管理

Supervisor的主进程配置文件放置在/etc/supervisord.conf

用户定义的项目进程配置文件放置在/etc/supervisord.d/conf.d目录下

[program:echo hi]
command=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值