• linux概念基础认识(基于阿里云ecs服务器操作)



    linux基本介绍

    linux是一种自由的开放源代码的类unix操作系统

    unix操作系统是由贝尔实验室于1969年开发的一个操作系统,最初由汇编语言实现,在1973年的时候用C语言重写,更加方便移植到不同的平台上去

    linux则是由linus Torvalds在1991年与赫尔辛基大学上学时,对于操作系统的好奇而开发的

    linux发行版本:
    ubuntu
    debian
    rhel
    centos
    fedora
    arch
    gentoo
    alibaba cloud linux

    SSH登录方式

    SSH全称Secure Shell,是一种加密的网络传输协议,可以创建安全的隧道用于客户端与服务器连接,也可以使用非对称加密做验证

    linux系统目录结构FHS介绍

    FHS,中文名文件系统结构层次,定义了linux操作系统中的主要目录和目录结构

    目录描述
    /根目录
    /bin可执行文件,比如ls命令
    /boot引导程序文件,内核,以及initrd等文件
    /dev设备文件,比如磁盘设备
    /etc系统范围的配置文件
    /home用户home目录,个人用户的配置
    /media可移除的媒体,cd-rom等的挂载点
    /lib和/lib64/bin和/sbin中用到的库文件存放为止
    /mnt临时挂载点
    /opt可选的应用包,一般用于存放一些直接提供二进制程序的非开源包
    /proc虚拟文件系统
    /rootroot用户的home目录
    /run存放一些pid和socket文件
    /sbin系统的可执行文件,init,mount等
    /sys非FHS标准,但是大部分发行版都有,虚拟文件系统,用来对内核和设备驱动做设置
    /usrunix software resource,绝大多数的程序和应用工具安装在这里,结构和根目录相似
    /usr/bin放置可执行二进制文件
    /usr/lib放置对应的库文件
    /usr/share和计算机架构无关的一些共享资源文件
    /usr/src源代码存放路径,如linux内核源代码
    /var在程序运行中内容不断变化的文件,如日志
    /tmp临时文件系统,重启后丢失

    linux基础操作

    命令

    在shell中可执行的命令分为两类:

    内部命令:由shell自带,而且通过某命令形式提供
    help内部命令表
    enable cmd 启用内部命令
    enable -n cmd 禁用内部命令
    enable -n 查看所有禁用的内部命令

    外部命令:在文件系统路径下有对应的可执行程序文件(查看路径:which -a | --skip-alias; whereis)

    区分指定命令是内部或外部命令:type COMMAND

    # 内部命令
    [root@httpsl ~]# type enable
    enable is a shell builtin
    [root@httpsl ~]# type type
    type is a shell builtin
    # 外部命令
    [root@httpsl ~]# type who
    who is hashed (/usr/bin/who)
    # 报错
    [root@httpsl ~]# type zabbix
    -bash: type: zabbix: not found
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    # 禁用命令
    [root@httpsl ~]# enable -n type
    [root@httpsl ~]# type type
    -bash: type: command not found
    # 查看所有禁用对的命令
    [root@httpsl ~]# enable -n 
    enable -n type
    # 启用命令
    [root@httpsl ~]# enable type
    [root@httpsl ~]# type type
    type is a shell builtin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    修改命令提示符名称

    一次性修改:

    # 查看当前提示符格式
    [root@httpsl /]# echo $PS1
    [\u@\h \W]\$
    # 修改命令符提示格式,将[]改为{},且加上时间显示
    [root@httpsl /]# PS1="{\u@\H \t}"
    {root@httpsl 22:10:08}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    永久修改:

    # 创建一个文件
    {root@httpsl 22:21:45}vi test.sh
    # 将PS1="{\u@\H \t}"输入到test.sh文件中
    
    • 1
    • 2
    • 3
    命令提示符描述
    \h主机名简称
    \w当前工作目录
    \t24小时时间格式
    \!命令历史数
    \u当前用户
    \H主机名
    \W当前工作目录基名
    \T12小时时间格式
    \#开机后命令历史数

    时间同步

    在linux系统时间不准确的情况下可以手动调整时间或者与其他系统进行同步时间

    同步时间:

    # 安装ntp服务
    [root@httpsl ~]# yum install -y ntpdate
    # 时间同步
    [root@httpsl ~]# ntpdate 192.168.1.1
    
    • 1
    • 2
    • 3
    • 4

    手动调整时间:

    [root@httpsl ~]# date -s "2022-01-01 12:34:56"
    
    • 1

    Hash缓存表

    系统初始hash表为空,当外部命令执行时,默认会从path路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次调用该命令时,shell解释器首先会查看hash表,存在将执行忙不存在,将会去path路径下寻找

    常见用法:

    命令描述
    hash显示hash缓存
    hash -l显示hash缓存,可作为输入使用
    hash -p path name将命令全路径path起别名为name
    hash -t name打印缓存中name的路径
    hash -d name清除name缓存
    hash -r清除缓存

    文件通配符

    *匹配零个或多个字符
    ?匹配任何单个字符
    [0-9]匹配数字范围
    [a-z]匹配小写字母范围
    [A-Z]匹配大写字符范围
    [s]匹配列表中的任何的一个字符
    [^s]匹配列表中的所有字符以外的字符
    # *使用
    [root@httpsl etc]# ls /etc/*.conf
    /etc/asound.conf  /etc/krb5.conf       /etc/nfs.conf          /etc/rsyslog.conf
    /etc/chrony.conf  /etc/ld.so.conf      /etc/nfsmount.conf     /etc/sestatus.conf
    /etc/dracut.conf  /etc/libaudit.conf   /etc/nscd.conf         /etc/sudo.conf
    /etc/e2fsck.conf  /etc/libuser.conf    /etc/nsswitch.conf     /etc/sudo-ldap.conf
    /etc/fuse.conf    /etc/locale.conf     /etc/ntp.conf          /etc/sysctl.conf
    /etc/host.conf    /etc/logrotate.conf  /etc/request-key.conf  /etc/vconsole.conf
    /etc/idmapd.conf  /etc/man_db.conf     /etc/resolv.conf       /etc/yum.conf
    /etc/kdump.conf   /etc/mke2fs.conf     /etc/rsyncd.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    # ?使用(如果没有一个字符的文件则会报错)
    [root@httpsl etc]# ls ?
    a
    [root@httpsl etc]# ls ?
    ls: cannot access ?: No such file or directory
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # []使用
    [root@httpsl ms]# touch test{0..9}
    [root@httpsl ms]# ls
    test0  test1  test2  test3  test4  test5  test6  test7  test8  test9
    [root@httpsl ms]# touch test{A..C}
    [root@httpsl ms]# ls
    test0  test1  test2  test3  test4  test5  test6  test7  test8  test9  testA  testB  testC
    [root@httpsl ms]# ls test[0]
    test0
    [root@httpsl ms]# ls test[9]
    test9
    [root@httpsl ms]# ls test[^9]
    test0  test1  test2  test3  test4  test5  test6  test7  test8  testA  testB  testC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    创建硬链接

    在Linux系统中,硬链接(Hard Link)是一种特殊类型的文件链接,它允许多个文件名引用相同的文件内容。这是通过使用索引节点(Inode Index)来实现的,每个存储在磁盘分区中的文件都被分配一个唯一的编号,也就是索引节点号。比如,如果有两个文件A和B,它们都指向同一个索引节点,那么A和B就是硬链接。这就意味着,对文件系统来说,A和B是完全平等的,删除其中任何一个都不会影响另一个的访问。因此,硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止误删的功能。但需要注意的是,只有在同一文件系统中的文件之间才能创建硬链接,不能对目录进行创建。

    [root@httpsl test]# ln test1.txt test2.txt
    [root@httpsl test]# ls
    sc.txt  test1.txt  test2.txt
    [root@httpsl test]# ll -i
    total 0
    1441795 -rw-r--r-- 1 root root 0 Nov 10 17:06 sc.txt
    1441794 -rw-r--r-- 2 root root 0 Nov 10 17:06 test1.txt
    1441794 -rw-r--r-- 2 root root 0 Nov 10 17:06 test2.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建软连接

    在Linux系统中,软链接也被称为符号链接(Symbolic Link),它是一种特殊类型的文件链接,用于在Linux系统中,软链接也被称为符号链接(Symbolic Link),它是一种特殊类型的文件链接,用于创建对另一个文件或目录的引用。这种链接实际上是一个独立的文件,它包含了指向目标文件或目录的路径。软链接的主要作用是为某一个文件在另外一个位置建立一个同步的链接,类似于Windows系统中的快捷方式。

    [root@httpsl test]# mkdir a
    [root@httpsl test]# ls
    a
    [root@httpsl test]# cd a
    [root@httpsl a]# cd ../
    [root@httpsl test]# ls
    a
    [root@httpsl test]# ln -s a b
    [root@httpsl test]# ls
    a  b
    [root@httpsl test]# cd b
    [root@httpsl b]# ls
    [root@httpsl b]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    软连接与硬链接的区别

    软链接和硬链接都是Linux系统下的文件链接方式,它们之间存在一些主要的区别:

    • 本质不同:硬链接是多个文件名指向同一个文件,可以理解为一个文件拥有多个文件名。而软链接则是指向另一个文件的路径,实际上是一个新文件,只不过它包含了对另一个文件的路径信息。
    • 跨分区:硬链接不支持跨分区,即不能链接不同分区的文件。而软链接则支持跨分区。
    • 目录:硬链接不支持对目录创建,而软链接可以对目录创建。
    • 存储空间:硬链接以文件副本的形式存在,所有的硬链接都指向同一个iNode,他们都享有同一个inode和一个数据块。但硬链接本身并不占用实际存储空间。每增加一个硬链接,只是增加一个计数。而软链接则是一个新的文件,会占用实际的存储空间。
    • 使用指令:默认情况下,ln命令产生硬链接。例如,使用ln -s bar.txt foo.txt指令,会创建一个软链接。

    查看是否是文件或文件夹命令

    [root@httpsl test]# file a b
    a: directory
    b: symbolic link to `a'
    [root@httpsl /]# file bin
    bin: symbolic link to `usr/bin'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    file参数描述
    -b列出文件辨识结果,但不显示文件名称
    -f filelist列出文件filelist中文件名的文件类型(是一个可执行的文本文件)
    -F使用指定分隔符号替换输出文件名后默认的“:”分隔符
    -L查看对应软链接对应文件的文件类型

    令牌

    令牌(Token)和身份(Identity)在计算机安全领域具有重要的意义。令牌是服务端生成的一种凭证,主要用于验证用户的身份和授权。它通常包含有关用户的信息以及声明,比如受众、发行者和过期时间等。这些信息被加密后放在一个头部,并将头部使用Base64编码得到一个格式的字符串。

    身份则是指一个实体在计算机系统中的独特标识。在许多系统中,每个用户或程序都有一个唯一的身份,以便对他们的行为进行追踪和控制。

    在具体实现上,如Identity Server4会注册一个管道处理程序 IdentityServerMiddleware 类专门处理登录验证的逻辑。生成的Token通常属于TokenResponse类型,具有用于标准令牌响应参数等属性access_token,expires_in等等。

    文本管理工具

    文本处理是指,自动创建或者操纵电子文本的理论和实践,涉及到文本处理的计算机命令包括,内容提取,内容改变,光标移动等等,具体一点说,内容的查找和替换,格式化,过滤文本内容等等

    nano

    gun nano是一个小巧而又友好的文本编辑器,除了基本的文本编辑功能外,还提供了一些特色功能,如:redo/undo,交互式查找和替换自动缩进等功能

    安装nano:

    [root@httpsl ~]# yum -y install nano
    
    • 1

    调用nano:

    [root@httpsl ~]# nano tset.txt
    
    • 1

    快捷键:

    快捷键描述
    ctrl+o保存
    ctrl+r读入
    ctrl+g帮助
    ctrl+x退出
    alt+6复制
    ctrl+u粘贴

    vim

    vim是vi improved的缩写,它是由bram moolenaar编写的免费开源文本编辑器,它于1991年首次发布,其主要目标是为vi编辑器提供增强,与vi一样,它也是以命令为中心的编辑器。

    优势:高可配置性,高可扩展性

    调用vim:

    [root@httpsl ~]# vim test.txt
    
    • 1

    快捷键:

    快捷键描述
    q!不保存文件退出
    wq保存退出
    yy复制当前行
    p粘贴
    dd删除
    set nu显示行号
    n G跳到指定行
    n向下查找
    N向上查找

    grep

    grep全称是global regular expression print,直译过来是,全局正则表达式打印,此工具是通过正则表达式来匹配文件中的内容并将匹配到的内容打印出来,grep工具有一系列变体,如fgrep、agrep、egrep等

    正则表达式:
    正则表达式实际上是一种模式,使用这种模式可以匹配对应的字符串集,正则表达式可以看做是一个有穷自动机

    sed

    sed是一个简单而又强大的文本解析转换工具,在1973-1974年期间由贝尔实验室的lee e.mcmamahon开发

    mcmahon创建了一个通用的行编辑器,最终编程了sed,sed的很多语法和特性都借鉴了ed编辑器

    用户和权限

    linux是一个多用户系统,linux1允许使用者在linux系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境

    linux允许不同的用户同时登录主机,同时使用主机的资源,因此linux被称为是多用户系统

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

    root用户

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

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

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

    用户组

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

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

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

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

    linux权限构成

    linux下权限可以分为三类:

    • user(权限)u
    • group(权限)g
    • other(权限)o
    who用户类型说明
    uuser文件所有者
    ggroup文件所有者所在组
    oothers所有其他用户
    aall所有用户,相当于ugo

    linux将权限分为read读,write写,execut执行三个不同的基本类别

    文件与文件夹权限

    在linux中,可以使用umask查看当前用户的默认权限,创建文件时会遵循这个权限

    • r:表示文件的内容可以被读取
    • w:表示这个文件的内容可以被修改
    • x:表示文件可以被执行

    文件及文件夹权限示例:

    drwxr-xr-x  3 root   root     60 Nov 13 17:32 user
    -rw-rw-r--  1 root   utmp   2304 Nov 13 17:32 utmp
    
    • 1
    • 2
    文件类型用户权限(user)组权限(group)其他用户权限(other)链接数属主属组文件大小时间文件名
    drwxr-xr-x3rootroot60nov 13 17:32user
    -rw-rw-r- -1rootutmp2304nov 13 17:32utmp

    修改文件权限

    [root@httpsl var]# ll 
    -rw-r--r--   1 root root    0 Nov 13 17:44 test
    [root@httpsl var]# chmod g+r,o+r test 
    [root@httpsl var]# ll
    -rw-r--r--   1 root root    0 Nov 13 17:44 test
    [root@httpsl var]# chmod 444 test 
    -r--r--r--   1 root root    0 Nov 13 17:44 test
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    特殊权限

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

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

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

    init进程

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

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

    init进程是所有linux进程的父进程,它的进程号为1

    init进程的实现:

    • openrc:是一个基于依赖的init系统,它用c语言和遵循posix的shell写成,使得它在bsd和linux系统上可以使用
    • systemd:systemd是一套中央化系统及设置管理程序,其中包括守护进程、程序库以及应用软件
    • upstart:是一个基于时间的init程序,用于替代传统的init
    • sysvinit:system V风格的init系统,源于system V系列UNIX

    systemd

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

    systemd的service:
    systemd的service是一种用于管理系统进程的服务单元。它可以用来启动、停止、重启和管理系统进程,以及监控进程的状态。service文件通常位于/etc/systemd/system/目录下,使用systemctl命令来管理这些服务。

    [Unit]
    Description=My Custom Service
    After=network.target
    
    [Service]
    User=myuser
    WorkingDirectory=/path/to/working/directory
    ExecStart=/path/to/executable
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这个示例中,我们定义了一个名为"My Custom Service"的服务。它的描述是"My Custom Service",在网络目标(network.target)之后启动。服务将运行在"/path/to/working/directory"目录下,使用"/path/to/executable"作为执行文件。如果服务意外终止,它将自动重启。最后,我们希望这个服务在所有用户目标(multi-user.target)下运行。

    systemd的service:
    Systemd的unit,也被称为单元,是Systemd管理系统资源的基本单位。Systemd可以管理所有类型的系统资源,包括但不限于系统服务。每个系统资源都被划分为一个特定的Unit。

    对于如何控制Unit的启动,Systemd使用Unit文件作为单元文件来进行操作。例如,常见的MySQL服务和Httpd服务,分别被Systemd视为一个Unit,并使用mysql.service和httpd.service作为它们的启动配置文件。

    此外,systemctl命令是主要的工具来管理systemd,它集成了SysVinit service和chkconfig命令的功能到单个工具中,可以用来永久启用和禁用服务,或者仅针对当前会话启用和禁用服务。

    systemd的install:
    systemd的install指的是在Linux操作系统中安装和配置Systemd的过程。Systemd是Linux下的一种init软件,由Lennart Poettering带头开发,旨在提供更优秀的框架以表示系统服务间的依赖关系,实现系统初始化时服务的并行启动,降低Shell的系统开销。

    对于那些支持systemd的软件,其安装过程会自动在/usr/lib/systemd/system目录下添加一个配置文件。此外,若想让该软件在开机时自动启动,可以通过执行特定的命令实现。

    例如,httpd.service就是一个常用的systemd的服务单元文件,它负责管理系统下的Httpd服务。当安装Apache HTTP Server后,系统中就会存在这个文件。如果需要设置Httpd服务开机自启,可以使用以下命令:sudo systemctl enable httpd.service。

    综上,systemd的install并不仅仅是软件的安装过程,还包括了对软件开机自启动等行为的管理与配置。

    示例:

    [Unit]
    Description=Write Something
    Wants=network-online.target
    After=network.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=touch /tmp/test1
    Restart=rm -f /tmp/test1
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    然后运行即可,systemctl start test.service

    crontab

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

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

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

    常用命令:

    命令描述
    crontab -l列出目前的日程表
    crontab -e编辑当前日程表
    crontab -r删除当前日程表
    crontab -u xx -l列出xx用户的日程表
    [root@httpsl tmp]# crontab -l
    no crontab for root
    [root@httpsl tmp]# crontab -e
    # 在任意时间,任意年月份执行这个任务
    * * * * * echo "123/r/n" >> /tmp/test
    
    [root@httpsl tmp]# systemctl restart  crond.service
    [root@httpsl tmp]# cat test
    123/r/n
    123/r/n
    123/r/n
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    supervisor

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

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

    安装:

    [root@httpsl tmp]# yum install epel-release
    [root@httpsl tmp]# yum -y install supervisor
    
    • 1
    • 2

    加载配置文件并运行:

    [root@httpsl tmp]# echo_supervisord_conf > /etc/supervisord.conf 
    [root@httpsl tmp]# supervisor -c /etc/supervisord.conf 
    
    • 1
    • 2
  • 相关阅读:
    简易机器学习笔记(十)Windows下 PaddlePaddle配置CUDA加速环境
    Jenkins Pipeline 方法(函数)定义及调用
    京东笔试-校招
    JVM垃圾回收算法介绍
    服务器主机托管一站式托管服务有哪些?
    EraseNet:End-to-End Text Removal in the wild
    Shell 编程三剑客
    golang将pcm格式音频转为mp3格式
    Oracle VM VirtualBox安装并下载安装CentOS7
    vue-计算属性
  • 原文地址:https://blog.csdn.net/weixin_44774550/article/details/134320144