Linux-韩顺平
基础篇#
Linux分区一般分为:boot分区、交换分区和根分区。
虚拟系统安装好后,它的本质就是文件。
虚拟机克隆:如果你已经安装了一台liux操作系统,你还想再更多的,使用虚拟机克隆即可。方式1,直接拷贝一份安装好的虚拟机文件。然后在VM上点击打开对应的vmx文件即可。方式2,使用vmware的克隆操作,右键点击管理,后选择克隆即可。注意,克隆时,需要先关闭linux系统。
虚拟机快照:如果你在使用虚拟机系统的时候,你想回到原先的某个状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,vmware也提供了这样的功能,就叫快照管理。
vmtools安装后可以让我们在Windows下更好的管理VM虚拟机,可以设置Windows和centos的共享文件夹。在设置中开启共享文件夹后,可以在主文件夹->其他位置->mnt->hgfs下找到该文件夹。
Windows和centos就可以共享文件了,但是在实际开发中,文件的上传下载是需要使用远程方式完成的。
使用tab键可以实现自动补全。
在Linux世界里,一切皆文件。
三种网络连接模式:桥接模式:虚拟系统可以和外部系统通讯,但是容易导致IP冲突。NAT模式:网络地址转换模式,虚拟系统可以和外部系统通讯,不造成IP冲突。主机模式:独立的系统,不与外部系统通讯。
使用ifconfig查看虚拟机的inet地址,然后使用xshell进行远程连接。
目录结构#
- /bin(usr/bin、/usr/local/bin) 是Binary的缩写,这个目录存放着最经常使用的命令。
- /sbin (/usr/sbin /usr/local/sbin) s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
- /home存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名。
- /root该目录为系统管理员,也称作超级权限者的用户主目录。
- /Iib系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所 有的应用程序都需要用到这些共享库。
- /lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /etc所有的系统管理所需要的配置文件和子目录,比如安装mysq数据库my.conf
- /usr这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
- /boot存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /poc这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。不能轻易修改,否则会导致系统崩溃。
- /srv service缩写,该目录存放一些服务启动之后需要提取的数据。
- /sys这是Iinux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs。
- /tmp这个目录是用来存放一些临时文件的。
- /dev 类似于windows的设备管理器,把所有的硬件用文件的形式存储。
- /media linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。例如d:/myshare。
- /opt这是给主机额外安装软件所存放的目录。如安装ORACLE数据库就可放到该目录下。默认为空。
- /usr/Iocal这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
- /var这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
- /selinux [security-enhanced linux] SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置。
Linux实操篇#
vi和vim#
vi和vim的三种模式#
- 正常模式:以vim打开一个档案就直接进入一般模式(这是默认的,模式)。在这个模式中,你可以使用方向按键来移动光标,使用删除字符或删除整行来处理档案内容,也可以使用复制、粘贴来处理文件数据。
- 编辑模式:按下i、I、o、O、a、A、r、R等任何一个字母之后才会进入编辑模式,一般是按i。
- 命令行模式:输入esc后再输入:。在该模式下,可以提供相关指令完成读取、存盘、替换、离开vim、显示行号等动作。
快捷键使用#
- 拷贝当前行yy,拷贝当前行向下的5行5yy,并粘贴(输入P)。 注意不要使用小键盘的数字,否则会进入编辑模式。
- 删除当前行dd,删除当前行向下的5行5dd。
- 在文件中查找某个单词[命令行下输入/关键字,回车查找,输入n就是查找下一个]
- 设置文件的行号,取消文件的行号。[命令行下:set nu和:set nonu) 。
- 编辑/etc/profile文件,在一般模式下使用快捷键到该文档的最末行[G]和最首行[gg]。注意是区分大小写的。
- 在一个文件中输入"hello”,然后又撤销这个动作u。
- 编辑/etc/profile文件,在一般模式下,并将光标移动到,输入20,再输入20行shift+g。
关机、重启和用户登录注销#
指令 | 作用 |
---|---|
shutdown -h now | 立刻关机 |
shutdown -h 1 | 1分钟后关机,shutdown默认结果 |
shutdown -r now | 立即重启计算机 |
halt | 关机 |
reboot | 重启 |
sync | 把内存中的数据同步到磁盘 |
不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。目前的shutdown/reboot/halt等命令均已经在关机前进行了sync。
登录时尽量少用root帐号登录,因为它是系统管理员,拥有最大的权限,避免操作失误。可以利用 普通用户登录,登录后再用”su-用户名'命令来切换成系统管理员身份.。
在提示符下输入logout即可注销用户,logout注销指令在图形运行级别无效,在运行级别3下有效。
用户管理#
指令 | 作用 |
---|---|
useradd milan | 添加用户,默认该用户的家目录在/home/milan |
useradd -d 指定目录 新用户名 | 给新创建的用户指定家目录 |
passwd 用户名 | 修改用户的密码 |
pwd | 显示当前用户所在目录 |
userdel 用户名 | 删除用户,但保留用户主目录 |
userdel -r 用户名 | 删除用户及其主目录 |
id 用户名 | 查询用户信息 |
su - jack | 切换到jack用户 |
who am i | 查询第一次登录的用户名 |
whoami | 显示当前操作的用户名 |
使用su切换用户时,从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。当需要返回到原来用户时,使用exit/logout:指令。
在新建用户时,如果没有为其指定组,会默认创建一个与用户名同名的组,并进行绑定。
用户和组相关文件#
/etc/passwd文件:用户(user)的配置文件,记录用户的各种信息。每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell。
/etc/shadow文件:口令的配置文件。每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志。
/etc/group文件:组(group)的配置文件,记录Linux包含的组的信息。每行的含义:组名:口令:组标识号:组内用户列表。
实用指令#
文件目录类#
指令 | 作用 |
---|---|
init [0123456] | 切换不同的运行级别 |
systemctl get-default | 查看当前运行级别 |
systemctl set-default [multi-user.target,graphical.target] | 前者类似运行级别3,后者类似运行级别5 |
man [命令或配置文件] | 功能描述,获得帮助信息,使用空格键可以往下翻 |
help | 获得shell内置命令的帮助信息 |
pwd | 显示当前工作目录的绝对路径 |
ls [选项] [目录或文件] | -a:显示当前目录的所有文件和目录,包括隐藏的。-l:以列表的方式显示信息 |
cd ~ | 回到自己的家目录 |
cd .. | 回到当前目录的上一级目录 |
mkdir 目录名 | 创建目录,-p创建多级目录 |
rmdir 目录名 | 删除空目录 |
rm 目录名 | 移除文件或目录,-r:递归删除整个文件夹,-f:强制删除不提示 |
touch 文件名称 | 创建空文件 |
cp 要复制的文件名或文件夹 目录名 | 拷贝文件到指定目录,-r:递归复制整个文件夹,\cp是强制覆盖不提示 |
mv oldName newName | 重命名文件 |
mv /temp/movefile /targetFolder | 移动文件与目录 |
cat 文件名 | 查看文件内容,-n:显示行号 |
echo 输出内容 | 输出内容到控制台 |
head -n 5 文件名 | 查看文件开头5行 |
tail 文件名 | 输出文件尾部的内容默认显示前10行;-n:指定行数;-f:实时追踪该文档的所有更新。使用-f时可以使用ctrl+C退出浏览。 |
ln -s 原文件或目录 软链接名 | 给原文件创建一个软链接,相当于快捷方式 |
history | 查看历史命令 |
基本介绍运行级别说明:0:关机;1:单用户,可以用来找回丢失密码; 2:多用户状态没有网络服务;3:多用户状态有网络服务;4:系统未使用保留给用户;5:图形界面 6:系统重启。常用运行级别是3和5,也可以指定默认运行级别。
在Linux中,隐藏文件是以"."开头。
cat只能浏览文件,而不能修改文件,为了浏览方便,通常加上管道命令 | more。
>输出重定向和>>追加指令
,重定向是改变默认的输出位置。
more指令交互
指令 | 作用 |
---|---|
空白键(space) | 向下翻一页 |
Enter | 向下翻一行 |
q | 立即离开more,不再显示该文件内容 |
Ctrl+F | 向下翻动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前行的行号 |
:f | 输出文件名和当前行的行号 |
less指令交互
less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。Iess指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
指令 | 作用 |
---|---|
空白键 | 向下翻动一页 |
pagedown | 向下翻动一页 |
pageup | 向上翻动一页 |
/字符串 | 搜寻子串;n:向下查找;N:向上查找 |
?字符串 | 搜寻子串;n:向上查找;N:向下查找 |
q | 离开less程序 |
时间日期类#
指令 | 作用 |
---|---|
date | 显示当前日期 |
date -s 字符串时间 | 设置系统时间 |
cal | 查看日历 |
搜索查找类#
指令 | 作用 |
---|---|
find 搜索范围 选项 | 从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。有name、user和size三种查找选项。 |
locate 搜索文件 | 快速定位文件路径 |
which | 可以查看指令的路径 |
grep 选项 查找内容 源文件 | 过滤查找。-n:显示匹配行及行号;-i:忽略字母大小写 |
locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locatel数据库。由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库。
管道符号“|”,表示将前一个指令的处理结果输出传递给后面的指令处理。
压缩和解压缩类#
指令 | 作用 |
---|---|
gzip 文件名 | 压缩文件 |
gunzip 文件名.gz | 解压文件 |
zip | 压缩文件或文件夹。-r:递归压缩,即压缩目录 |
unzip | 解压文件或文件夹。-d:指定解压后文件的存放目录- |
tar 选项 文件名.tar.gz 打包的内容 | 将文件夹打包。-c:产生.tar打包文件;-v:显示详细信息;-f:指定压缩后的文件名;-z:打包同时压缩;-x:解包tar文件 |
组管理和权限管理#
指令 | 作用 |
---|---|
ls -ahl | 查看文件的所有者 |
chown 用户名 文件名 | 修改文件所有者,-R:如果是目录,则使其下所有子文件或目录递归生效 |
chgrp 组名 文件名 | 修改文件所在的组,-R:如果是目录,则使其下所有子文件或目录递归生效 |
groupadd 组名 | 新增组 |
groupdel 组名 | 删除组 |
useradd -g 用户组 用户名 | 增加用户的时候直接加上组 |
usermod -g 用户组 用户名 | 修改用户的组 |
chmod u=rwx,g=rx,o=x 文件或目录名 | 给文件或目录的所有者读写执行的权限,给所在组读执行权限,给其他组执行权限。+增强权限,-减少权限,=赋予权限。u所有者,g所在组,o其他组,a全部用户。 |
chmod 751 文件或目录名 | 通过数字变更权限,r=4,w=2,x=1,相加得到数字,u=7=4+2+1=rwx,g=5=4+1=rx,o=1=x。因此相当于chmod u=rwx,g=rx,o=x 文件或目录名。 |
在linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其它组的概念。
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组。
权限基本介绍
- 第0位确定文件类型(d,-,I,c,b):I是链接,相当于windows的快捷方式;-是普通文件;d是目录,相当于windows的文件夹;c是字符设备:文件,鼠标,键盘;b是块设备,比如硬盘。
- 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。
- 第4-6位确定所属组(同用户组的)拥有该文件的权限。
- 第7-9位确定其他用户拥有该文件的权限。
rwx作用到文件:[r]代表可读(read):可以读取,查看。[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件。[x]代表可执行(execute):可以被执行.
rwx作用到目录:[r]代表可读(read):可以读取,Is查看目录内容。[w]代表可写(write):可以修改,对目录内创建+删除+重命名目录。[x]代表可执行(execute):可以进入该目录。
权限更新会有延时性,系统记录的是你刚开始登录的所在组,需要更新或者重新登录来更新自己的组。
任务调度#
指令 | 作用 |
---|---|
crontab | -e:编辑定时任务;-l:查询任务;-r:删除所有任务 |
*/1 * * * * ls -l /etc/ > /tmp/to.txt |
每小时的每分钟执行一次后面的指令。 |
at 选项 时间 | 一次性定时任务,输入ctrl+d结束at命令的输入 |
atrm 编号 | 删除编号的at任务 |
任务调度是指系统在某个时间执行的特定的指令或程序。
at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。 at命令是一次性定时计划任务,执完一个任务后不再执行此任务了。在使用at命令的时候,一定要保证atd程的启动,可以使用相关指令ps -ef | grep atd
来查看。
crontab#
5个占位符
项目 | 含义 | 范围 |
---|---|---|
第一个* | 一小时当中的第几分钟 | 0-59 |
第二个* | 一天中的第几小时 | 0-23 |
第三个* | 一个月当中的第几天 | 1-31 |
第四个* | 一年当中的第几月 | 1-12 |
第五个* | 一周当中的星期几 | 0-7(0和7都代表星期日) |
特殊符号
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。 |
, | 代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令。 |
- | 代表连续的时间范围。比如“0 5 * * 1-6 命令”,代表在周一到周六的凌晨5点0分执行命令。 |
*/n | 代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令。 |
at命令#
at命令选项
选项 | 含义 |
---|---|
-m | 当指定的任务被完成后,将给用户发送邮件,即使没有标准输出 |
-I | atq的别名 |
-d | atrm的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q <队列> | 使用指定的队列 |
-f <文件> | 从指定文件读入任务而不是从标准输入读入 |
-t <时间参数> | 以时间参数的形式提交要运行的任务 |
at时间定义
- 接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。例如: 04:00。
- 使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
- 采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm。
- 指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04:00 2021-03-1。
- 使用相对计时法。指定格式为:now+count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。例如:now+5 minutes。
- 直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
磁盘分区与挂载#
指令 | 作用 |
---|---|
lsblk | 查看磁盘分区情况,-f可以查看更详细的信息 |
fdisk /dev/sdb | 对sdb硬盘进行分区 |
mkfs -t 分区类型 /dev/sdb1 | 格式化sdb1磁盘 |
mount 磁盘名 文件夹名 | 将磁盘挂载到文件夹上 |
umount 磁盘名或文件夹名 | 取消挂载 |
df -h | 查询系统整体磁盘使用情况 |
du -h 目录名 | 查询指定目录的磁盘占用情况 |
tree 目录名 | 以树状显示目录结构,可能需要使用yum install tree安装该指令 |
增加硬盘的步骤#
- 虚拟机添加硬盘:在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,直到完成。然后重启系统(才能识别)!
- 分区:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
- 格式化。
- 挂载:用命令行挂载是临时的,重启后会失效。永久挂载通过修改/etc/fstab文件实现挂载,添加完成后执行mount -a立即生效。
网络配置#
指令 | 作用 |
---|---|
ifconfig | 查看Linux的网络配置 |
ipconfig | 查看Windows的网络配置 |
ping 目的主机 | 测试当前服务器是否可以连接目的主机 |
service network restart | 重启网络服务 |
指定IP地址:直接修改配置文件来指定IP,并可以连接到外网。编辑vim /etc/sysconfig/network-scripts/ifcfg-ens33。修改后重启网络服务或重启系统生效。
通过vim /etc/hostname修改主机名,修改后重启生效。
主机名与hosts映射。Windows端:在C:\Windows\System32\drivers\etc\hosts文件指定。Linux端:在/etc/hosts文件指定。
进程管理#
指令 | 作用 |
---|---|
ps | 查看目前系统中,有哪些正在执行,以及执行情况。-a:显示当前终端的所有进程信息;-u:以用户的格式显示进程信息;-x:显示后台程序运行的参数。 |
kill 选项 进程号 | 通过进程号终止进程。-9表示强制进程立即停止。 |
killall 进程名称 | 通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用。 |
pstree 选项 | 查看进程树。-p:显示进程的PID;-u:显示进程的所属用户。 |
service 服务名 选项 | 管理服务 |
setup | 查看所有系统服务,带*的会自启动 |
chkconfig | 给服务的各个运行级别设置自启动或关闭,需要重启后生效。 |
systemctl 选项 服务名 | 管理服务 |
firewall-cmd --permanent --add-port=端口号/协议 | 打开端口,改为--remove=port则是关闭端口 |
firewall-cmd --reload | 重新载入后才能生效 |
firewall-cmd --permanent --query-port=端口号/协议 | 查询端口是否开放 |
top 选项 | 用于动态更新正在执行的进程 |
netstat 选项 | 查看系统网络情况。-an:按一定顺序排列输出;-p:显示哪个进程在调用 |
ping 对方ip | 网络检测工具 |
ps指令依次显示进程执行用户、进程号、占用CPU的百分比、占用虚拟内存的百分比、占用物理内存的百分比、终端信息、当前运行状态、开始时间、占用的CPU时间和执行该进程的指令。
PPID是父进程ID。
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
systemctl指令关闭或者启用防火墙后,立即生效。但这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。如果希望设置某个服务自启动或关闭永久生效,要使用systemctl的enable和disable选项。
service管理的指令可以在/etc/init.d查看。
systemctl指令管理的服务在/usr/Iib/systemd/system查看。
使用dism /Online /Enable-Feature /FeatureName:TelnetClient指令在Windows安装Telnet指令。
RPM和YUM#
指令 | 作用 |
---|---|
rpm -qa | 查询已安装的RPM列表 |
rpm -q firefox | 查询软件是否安装 |
yum list | 查询可以安装的软件 |
yum install 包名 | 按照指定的yum包 |
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHats软件包管理工具)的缩写,类似windows的 setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
可以在光盘的package文件夹中找需要按照的rpm包。
yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
提高篇#
java#
安装jdk要注意写入环境变量,并在写入后更新文件。
安装Tomcat要注意打开防火墙的端口。
安装idea要注意在图像界面启动.sh文件,因为安装时需要图形界面。
安装MySQL时,centos7.6自带的类mysql数据库是mariadb,会跟mysql冲突,要先删除。
shell#
指令 | 作用 |
---|---|
set | 显示当前shell中的所有变量 |
变量=值 | 定义变量 |
unset 变量 | 撤销变量 |
readonly 变量 | 声明静态变量,不能unset |
export 变量名=变量值 | 将shell变量输出为环境变量/全局变量 |
source 配置文件 | 刷新配置文件使其生效 |
echo $变量名 | 输出变量的值 |
:<<! 内容 ! | 多行注释,注释符号需要分行 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0则证明上一个命令执行不正确。 |
$((运算符)) 或$[运算式] 或expr 运算式 |
算术运算,expr运算符间要有空格且乘法需要/转义符号 |
[ condition ] | 条件判断,condition前后有空格,非空返回true |
read 选项 参数 | 读取用户的输入。-p设置提示信息;-t设置等待时间。 |
basename pathname suffix | 返回完整路径最后的/的部分,常用于获取文件名,suffix选择是否去掉该后缀 |
dirname | 返回完整路径最后的/的前面的部分,常用于获取路径部分。 |
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
脚本需要以#!/bin/bash开头,还需要有可执行权限。
Linux Shellr中的变量分为,系统变量和用户自定义变量。系统变量:$HOME、$PWD、$SHELL、$USER
等等。
定义变量的规则#
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200这样是错误的。
- 等号两侧不能有空格变量。
- 名称一般习惯为大写。
- 将命令的返回值赋给变量:A=
date
反引号,运行里面的命令,并把结果返回给变量A。A=$(date)等价于反引号。
位置参数变量#
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。比如:./myshell.sh100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息。
语法 | 作用 |
---|---|
$n|n为数字,$0 代表命令本身,$1 -$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如${10} 。 |
|
$# | 这个变量代表命令行中所有参数的个数。 |
流程控制#
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
for i in "$*"
do
echo "num is $i"
done
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$1+1]
done
自定义函数#
Ubuntu#
指令 | 作用 |
---|---|
sudo apt-get update | 更新源 |
sudo apt-get install package | 安装包 |
sudo apt-get remove package | 删除包 |
sudo apt-cache show package | 获取包的相关信息 |
sudo apt-get source package | 下载包的源代码 |
ssh 用户名@IP | 在Linux上远程连接其他Linux |
apt是Advanced Packaging Tool的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令进行软件包的安装、删除、清理等,类似于Windows中的软件管理工具。在/etc/apt/sources.list文件中有服务器地址(美国APT),由于网络问题,通常我们将其改为国内的镜像站。
和CentOS不一样,Ubuntu默认没有安装SSHD服务(使用netstat指令查看:apt install net-tools),因此,我们不能进行远程登录。
日志#
指令 | 作用 |
---|---|
cron | 系统定时任务相关的日志 |
lastlog | 系统中所有用户最后一次的登录时间的日志 |
message | 系统重要消息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息。如果系统出现问题,首先要检查的应该就是这个日志文件。 |
secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su的切换用户, sudo的授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。 |
ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。这个文件不能用vi查看,而要使用w、who、users等命令查看 |
journalctl | 查看内存日志,重启清空 |
系统日志文件的保存位置是/var/log/。
在文件/etc/rsyslog.conf在可以查看日志的服务。
由日志服务rsyslog记录的日志文件的格式包含以下4列:事件产生的时间;产生事件的服务器的主机名;产生事件的服务名或程序名和事件的具体信息。
/etc/logrotate.conf记录全局的日志轮替策略,当然也可以单独给某个日志文件指定策略。也可以把某个日志的轮替规则写到/etc/logrotate.d目录上。
定制自己的Linux系统#
Linux启动流程#
- Linux要通过自检,检查硬件设备有没有故障。
- 如果有多块启动盘的话,需要在BIOS中选择启动磁盘。
- 启动MBR中的bootloader引导程序。
- 加载内核文件。
- 执行所有进程的父进程、老祖宗systemd。
- 欢迎界面。
源码阅读#
文件夹 | 作用 |
---|---|
boot | 存放与系统引导相关的代码 |
fs | 存放Linux支持的文件系统代码 |
include | 存放Linux核心需要的头文件 |
init | 存放初始化相关的源码 |
kernel | 存放与内核相关的代码 |
lib | 存放库代码 |
mm | 内存管理的代码 |
tools | 工具相关的代码 |
内核升级#
指令 | 操作 |
---|---|
uname -a | 查看当前的内核版本 |
yum info kernel -q | 检测内核版本,显示可以升级的内核 |
yum update kernel | 升级内核 |
yum list kernel -q | 查看已经安装的内核 |
备份与恢复#
linux的备份和恢复很简单,有两种方式: 1、把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,再解压开覆盖即可。2、使用dump和restore命令。
dump指令在备份分区时,是可以支持增量备份的,如果备份文件或者目录,不再支持增量备份,即只能使用0级别备份。
权限管理#
- 注意权限分离,比如:工作中,Liux系统权限和数据库权限不要在同一个部门权限最小原则,即在满足使用的情况下最少优先。
- 减少使用root用户,尽量用普通用户+sudo提权进行日常操作。
- 重要的系统文件,比如/etc/passwd,/etc/shadow etc/fstab,/etc/sudoers等,日常建议使用chattr(change attribute)锁定,需要操作时再打开。
- 使用SUID,SGID,Sticky设置特殊权限。
- 可以利用工具,比如chkrootkit/rootkit hunter检测rootkit脚本(rootkit是入侵者使用工具,在不察觉的建立了入侵系统途径)。
- 利用工具Tripwire检测文件系统完整性。
CentOS7启动#
- 硬件引导启动
- GRUB2启动引导
- 内核引导
- systemd初始化阶段
作者:xiqin
出处:https://www.cnblogs.com/xiqin-huang/p/17898612.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?