文章目录
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 | 虚拟文件系统 |
/root | root用户的home目录 |
/run | 存放一些pid和socket文件 |
/sbin | 系统的可执行文件,init,mount等 |
/sys | 非FHS标准,但是大部分发行版都有,虚拟文件系统,用来对内核和设备驱动做设置 |
/usr | unix 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
bash
# 内部命令
[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
bash
# 禁用命令
[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
修改命令提示符名称
一次性修改:
bash
# 查看当前提示符格式
[root@httpsl /]# echo $PS1
[\u@\h \W]\$
# 修改命令符提示格式,将[]改为{},且加上时间显示
[root@httpsl /]# PS1="{\u@\H \t}"
{root@httpsl 22:10:08}
永久修改:
bash
# 创建一个文件
{root@httpsl 22:21:45}vi test.sh
# 将PS1="{\u@\H \t}"输入到test.sh文件中
命令提示符 | 描述 |
---|---|
\h | 主机名简称 |
\w | 当前工作目录 |
\t | 24小时时间格式 |
\! | 命令历史数 |
\u | 当前用户 |
\H | 主机名 |
\W | 当前工作目录基名 |
\T | 12小时时间格式 |
\# | 开机后命令历史数 |
时间同步
在linux系统时间不准确的情况下可以手动调整时间或者与其他系统进行同步时间
同步时间:
bash
# 安装ntp服务
[root@httpsl ~]# yum install -y ntpdate
# 时间同步
[root@httpsl ~]# ntpdate 192.168.1.1
手动调整时间:
bash
[root@httpsl ~]# date -s "2022-01-01 12:34:56"
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] | 匹配列表中的所有字符以外的字符 |
bash
# *使用
[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
bash
# ?使用(如果没有一个字符的文件则会报错)
[root@httpsl etc]# ls ?
a
[root@httpsl etc]# ls ?
ls: cannot access ?: No such file or directory
bash
# []使用
[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
创建硬链接
在Linux系统中,硬链接(Hard Link)是一种特殊类型的文件链接,它允许多个文件名引用相同的文件内容。这是通过使用索引节点(Inode Index)来实现的,每个存储在磁盘分区中的文件都被分配一个唯一的编号,也就是索引节点号。比如,如果有两个文件A和B,它们都指向同一个索引节点,那么A和B就是硬链接。这就意味着,对文件系统来说,A和B是完全平等的,删除其中任何一个都不会影响另一个的访问。因此,硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止误删的功能。但需要注意的是,只有在同一文件系统中的文件之间才能创建硬链接,不能对目录进行创建。
bash
[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
创建软连接
在Linux系统中,软链接也被称为符号链接(Symbolic Link),它是一种特殊类型的文件链接,用于在Linux系统中,软链接也被称为符号链接(Symbolic Link),它是一种特殊类型的文件链接,用于创建对另一个文件或目录的引用。这种链接实际上是一个独立的文件,它包含了指向目标文件或目录的路径。软链接的主要作用是为某一个文件在另外一个位置建立一个同步的链接,类似于Windows系统中的快捷方式。
bash
[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]#
软连接与硬链接的区别
软链接和硬链接都是Linux系统下的文件链接方式,它们之间存在一些主要的区别:
- 本质不同:硬链接是多个文件名指向同一个文件,可以理解为一个文件拥有多个文件名。而软链接则是指向另一个文件的路径,实际上是一个新文件,只不过它包含了对另一个文件的路径信息。
- 跨分区:硬链接不支持跨分区,即不能链接不同分区的文件。而软链接则支持跨分区。
- 目录:硬链接不支持对目录创建,而软链接可以对目录创建。
- 存储空间:硬链接以文件副本的形式存在,所有的硬链接都指向同一个iNode,他们都享有同一个inode和一个数据块。但硬链接本身并不占用实际存储空间。每增加一个硬链接,只是增加一个计数。而软链接则是一个新的文件,会占用实际的存储空间。
- 使用指令:默认情况下,ln命令产生硬链接。例如,使用ln -s bar.txt foo.txt指令,会创建一个软链接。
查看是否是文件或文件夹命令
bash
[root@httpsl test]# file a b
a: directory
b: symbolic link to `a'
[root@httpsl /]# file bin
bin: symbolic link to `usr/bin'
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:
bash
[root@httpsl ~]# yum -y install nano
调用nano:
bash
[root@httpsl ~]# nano tset.txt
快捷键:
快捷键 | 描述 |
---|---|
ctrl+o | 保存 |
ctrl+r | 读入 |
ctrl+g | 帮助 |
ctrl+x | 退出 |
alt+6 | 复制 |
ctrl+u | 粘贴 |
vim
vim是vi improved的缩写,它是由bram moolenaar编写的免费开源文本编辑器,它于1991年首次发布,其主要目标是为vi编辑器提供增强,与vi一样,它也是以命令为中心的编辑器。
优势:高可配置性,高可扩展性
调用vim:
bash
[root@httpsl ~]# vim test.txt
快捷键:
快捷键 | 描述 |
---|---|
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 | 用户类型 | 说明 |
---|---|---|
u | user | 文件所有者 |
g | group | 文件所有者所在组 |
o | others | 所有其他用户 |
a | all | 所有用户,相当于ugo |
linux将权限分为read读,write写,execut执行三个不同的基本类别
文件与文件夹权限
在linux中,可以使用umask查看当前用户的默认权限,创建文件时会遵循这个权限
- r:表示文件的内容可以被读取
- w:表示这个文件的内容可以被修改
- x:表示文件可以被执行
文件及文件夹权限示例:
bash
drwxr-xr-x 3 root root 60 Nov 13 17:32 user
-rw-rw-r-- 1 root utmp 2304 Nov 13 17:32 utmp
文件类型 | 用户权限(user) | 组权限(group) | 其他用户权限(other) | 链接数 | 属主 | 属组 | 文件大小 | 时间 | 文件名 |
---|---|---|---|---|---|---|---|---|---|
d | rwx | r-x | r-x | 3 | root | root | 60 | nov 13 17:32 | user |
- | rw- | rw- | r- - | 1 | root | utmp | 2304 | nov 13 17:32 | utmp |
修改文件权限
bash
[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
特殊权限
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命令来管理这些服务。
bash
[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
这个示例中,我们定义了一个名为"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并不仅仅是软件的安装过程,还包括了对软件开机自启动等行为的管理与配置。
示例:
bash
[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
然后运行即可,systemctl start test.service
crontab
crontab是用来定期执行程序的命令
当安装完成操作系统之后,默认便会启动此任务调度命令
crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作
常用命令:
命令 | 描述 |
---|---|
crontab -l | 列出目前的日程表 |
crontab -e | 编辑当前日程表 |
crontab -r | 删除当前日程表 |
crontab -u xx -l | 列出xx用户的日程表 |
bash
[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
supervisor
supervisor是用python开发的一套通用的进程管理程序,能将一个普通的命令进程变为后台daemon,并监控进程状态,异常退出时能自动重启
supervisor可以很方便的管理批量进程,不仅支持启动,重启,关闭,重载,还支持监控进程,进程以外僵死后可自动拉起
安装:
bash
[root@httpsl tmp]# yum install epel-release
[root@httpsl tmp]# yum -y install supervisor
加载配置文件并运行:
bash
[root@httpsl tmp]# echo_supervisord_conf > /etc/supervisord.conf
[root@httpsl tmp]# supervisor -c /etc/supervisord.conf