linux目录详解
linux 将所有硬件都映射为一个文件,所以在 linux 中一切皆文件
具体的目录结构
- /bin 【常用】(/usr/bin、/usr/local/bin):是 Binary 的缩写,存放着最常用的命令
- /sbin(/usr/sbin、/usr/local/sbin):s 即Super User 的意思,存放着系统管理员使用的系统管理程序
- /home【常用】:存放着普通用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录是以用户的账号命名
- /root【常用】:为系统管理员,也称为超级权限者的用户主目录
- /lib:系统开机所需要的最基本的动态连接共享库,其作用类似于 Windows 中的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
- /lost+found:这个目录通常是空的,当系统非法关机后,这里会存放一些文件
- /etc【常用】:系统管理所需要的配置文件和子目录,比如安装mysql 数据库 my.conf
- /usr【常用】:用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录
- /boot【常用】:存放的是启动 Linux 时使用的一些核心文件,包括一些链接文件以及镜像文件
- /proc【不能动】:是一个虚拟目录,它是系统内存的映射,访问这个目录来获取系统信息
- /srv【不能动】:service 的缩写,存放一些服务启动后需要提取的数据
- /sys 【不能动】:linux2.6 内核一个很大的变化,该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs =>
- /tmp:用来存放一些临时文件
- /dev:类似于 windows 的设备管理器,把所有的硬件用文件的形式存储
- /media【常用】:linux 系统会自动识别一些设备,例如 U 盘、光驱等,当识别后,linux 会把识别的设备挂载到这个目录下
- /mnt【常用】:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。d:/myshare
- /opt:这是给主机额外安装软件所存放的目录。如安装 ORACLE 数据库就可放到该目录下。默认为空。
- /usr/local【常用】:软件安装的目标目录,一般是通过编译源码方式安装的程序。
- /var【常用】:这个目录存放着在不断扩充着的东西,习惯将经常被修改的文件放在这个目录下。包括各种日志文件。
- /selinux 【security-enhanced linux】:SELinux 是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可自行设置。
远程登录到 Linux
xshell
远程传输文件
XFTP
vi和vim编辑器
Linux 系统会内置 vi 文本编辑器 VIm 具有程序编辑的能力,可以看作是 Vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完,编译及错误跳转等方便编程的功能。
vi和vim常用的三种模式
- 正常模式:以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,可以使用 上下左右 键来移动光标,可以使用 删除字符 或 删除整行 来处理档案内容,也可以使用 复制 粘贴 来处理文件数据
- 插入模式:按下 i,I,o,O,a,A,r,R 等任何一个字母后才会进入编辑模式,一般来说按 i 即可
- 命令行模式:在这个模式中,可以提供相关指令,完成读取、存盘、替换、离开 vim、显示行号等动作。wq 写入并退出 ![[Pasted image 20240222211225.png]]
vi和vim快捷键
- 拷贝当前行 yy,拷贝当前行向下 5 行 5yy,并粘贴 p。
- 删除当前行 dd,删除当前行向下的 5 行 5dd
- 设置文件的行号,取消文件的行号 .[命令行下:set nu 和 :set nonu]
- 在文件中查找某个单词【命令行下/关键字,回车 查找,输入 n 就是查找下一个】
- 编辑/etc/profile 文件,使用快捷键到该文档的最末行[G]和最首行[gg]
- 在一个文件中输入"hello",然后使用 u 撤销这个动作(一般模式下)
- 编辑/etc/profile 文件,并将光标移动到 20 行,输入 20shift + g(一般模式下)
开机、重启和用户的登录注销
基本介绍
- shutdown -h now:立刻进行关机 (h 代表 halt )
- shutdown -h 1:一分钟后关机(r 代表 reboot )
- shutdown -r now:立刻重启计算机
- halt:关机,作用和上面一样
- reboot:立刻重启计算机
- sync:把内存的数据同步到磁盘
注意细节:
- 不管是重启还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
- 目前的 shutdown/reboot/halt 等命令均已经在关机前进行了 sync
- 登录时尽量少用root账号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用 'su - 用户名' 命令来切换成系统管理员身份
- 在提示符下输入 logout 即可注销用户
使用细节:
- logout 注销指令再图形运行级别无效,在运行级别3下有效
- 运行级别这个概念,后面讲到
用户管理
基本介绍
Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统
添加用户
- 基本语法
useradd 用户名 - 细节说明
- 当创建用户成功后,会自动创建和用户名相同的home目录,默认再 /home 目录下
- 也可以通过
’useradd -d 指定目录 新的用户名’,给新创建的用户指定home目录,如useradd -d /home/test king
指定/修改密码
- 基本语法:
passwd 用户名,不指定用户名则是给当前用户设置密码
删除用户
- 基本语法:
userdel 用户名 - 应用案例:
- 删除用户,但保留其home目录
userdel 用户名 - 删除用户以及其home目录
userdel -r 用户名
- 删除用户,但保留其home目录
- 一般情况下建议保留用户的home目录
查询用户信息
- 基本语法:
id 用户名 - 应用实例:查询 root 的信息
切换用户
- 介绍:在Linux中,如果当前用户的权限不够,可以通过 su - 指令,切换到高权限用户。
- 基本语法:
su - 用户名 - 应用实例:创建一个用户jack,指定密码,然后切换到jack
- 细节说明
- 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
- 当需要返回原来用户时,使用 exit/logout 指令
查询当前用户/登录用户
- 基本语法:
whoami
用户组
- 介绍:类似于角色,系统可以对有共性/权限的多个用户进行统一管理
- 新增组:
groupadd 组名 - 删除组:
groupdel 组名 - 增加用户时添加到某个组:
useradd -g 用户组 用户名 - 新增用户未制定组,会默认创建与用户名相同的组,并将用户指定到该组
- 修改用户的组:
usermod -g 用户组 用户名 - 用户和组相关的文件:
- /etc/passwd文件:
- 用户(user)的配置文件,记录用户的各种信息
- 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell(命令解释器,如bash,tcsh,csh等)
- /etc/shadow文件
- 口令的配置文件
- 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:时效时间:标志
- /etc/group文件
- 组(group)的配置文件,记录Linux包含的组的信息
- 每行含义:组名:口令:组标识号:组内用户列表
- /etc/passwd文件:
指定运行级别
- 基本介绍
- 运行级别说明:
- 0:关机
- 1:单用户【找回丢失密码】
- 2:多用户状态没有网络服务
- 3:多用户状态有网络服务
- 4:系统未使用保留给用户
- 5:图形界面
- 6:系统重启
- 常用的运行级别是3和5,也可以指定默认运行级别
- 运行级别说明:
- 应用实例:
- 命令:
init [0123456] - 应用案例:通过init来切换不同的运行即便,比如5-3,然后关机
- 命令:
- 指定默认运行级别:
- centos 7之前,在/etc/inittab文件中进行修改;
- centos7之后进行了简化:
- muti-user.target: analogous to runlevel 3
- graphical.target: analogous to runlevel 5
- 查看当前运行级别:
systemctl get-default - 设置默认运行级别:
systemctl set-default TARGET.target
找回root密码
centos 中:
- 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面;
- 进入编辑界面,使用键盘的上下键把光标往下移动,找到以"Linux16"开头所在的行数,在行的最后输入:
int=/bin/sh; - 然后 ctrl + x 进入单用户模式;
- 接着,在光标闪烁的位置输入:
mount -o remount,rw /(注意:各个单词间有空格),完成后按键盘的回车键 - 在新的一行最后面输入:
passwd,完成后按键盘的回车键。输入密码,然后再次确认密码即可(密码长度最好是 8 位以上,但不是必须的),密码修改成功后,会显示 passwd......的样式,说明密码修改成功; - 接着,在鼠标闪烁的位置中(最后一行)输入:
touch / .autorelabel(注意:touch 与 / 后面有一个空格),完成后按键盘的回车键; - 继续在光标闪烁的位置中,输入:
exec /sbin/init(注意:exec 与 / 中间有一个空格),完成后按键盘的回车键,等待系统自动修改密码(时间较长),完成后,系统会自动重启,新的密码就生效了。 设置运行级别,Linux 进行后,直接进入到命令行终端(3)
帮助命令
- man 获取帮助信息:
man [命令或配置文件] - help 指令:
help 命令(功能描述:获取 shell 内置命令的帮助信息)
文件目录类
- pwd 指令:显示当前工作目录的绝对路径
- ls 指令
- -a:显示当前目录所有的文件和目录,包括隐藏的
- -l:以列表的方式显示信息
- -lh:显示更加人性化,如单位转换为M,K,G
- cd 指令:切换到指定目录
cd [参数]- cd ~ 或者 cd : 回到自己的 home 目录
- cd .. 回到当前目录的上一级目录
- mkdir 指令:
mkdir [选项]创建目录- 常用选项:
-p创建多级目录 - 案例:
- 创建一个目录 /home/dog
- 创建多级目录 /home/animal/tiger(mkdir -p)
- 常用选项:
- rmdir 指令:
rmdir [选项]- 细节:rmdir 删除的是空目录,如果目录下有内容时无法删除
- 如果要删除非空目录,需要使用
rm -rf
- touch 指令:
touch 文件名创建空文件 - cp 指令:
cp [选项] source dest(source代表拷贝哪个文件,dest表示文件拷贝到哪)拷贝文件到指定目录- 常用选项:
-r:递归复制整个文件夹 - 强制覆盖不提示的方法:
\cp,如:\cp -r /home/bbb /opt
- 常用选项:
- rm 指令:
rm [选项] 要删除的文件或目录移除文件或目录- 常用选项:
-r:递归删除整个文件夹-f:强制删除
- 常用选项:
- mv 指令:移动文件/目录或重命名
- 基本语法:
- 重命名:
mv oldNameFile newNameFile - 移动文件:
mv /temp/movefile/targetFolder
- 重命名:
- 基本语法:
- cat 指令:
cat [选项] 文件名,查看文件内容- 常用选项:
-n:显示行号 - 使用细节:cat 只能浏览文件,不能修改文件,为了浏览方便,一般会带上管道符号
| more; 如:cat -n /etc/profile | more
- 常用选项:
- more 指令:
more [文件名]一个基于VI编辑器的文本过滤器,以全屏的方式按页显示文本文件的内容。more指令中内置了若干快捷键- 快捷键
- 空格(space):下翻一页
- Enter:下翻一行
- q:立即离开more,不再显示该文件内容
- Ctrl + F:向下滚动一屏
- Ctrl + B:返回上一屏
- =:输出当前行的行号
- :f:输出文件名和当前行的行号
- 快捷键
- less 指令:
less 文件名分屏查看文件内容,与more类似,但是比more更加强大,支持各种显示终端,less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率- 快捷键:
- 空格:向下翻动一页
- pagedown,向下翻动一页
- pageup,向上翻动一页
- /字串:向下搜寻【字串】的功能;n:向下查找;N:向上查找
- ?字串:向上搜寻【字串】的功能;n:向上查找;N:向下查找
- q:退出
- 快捷键:
- echo 指令:
echo [选项] [输出内容]输出内容到控制台- 案例 1:使用 echo 指令输出环境变量
echo $HOSTNAME:输出主机名echo $PATH:输出环境变量
- 案例 2:使用 echo 指令输出 hello,world!
- 案例 1:使用 echo 指令输出环境变量
- head 指令:用于显示文件开头部分内容,默认 情况下 head 指令显示文件的前 10 行内容
- 基本语法:
head 文件:查看文件前 10 行内容head -n 5 文件:查看文件前 5 行内容
- 基本语法:
- tail 指令:用于输出文件中尾部的内容,默认显示文件最后 10 行的内容
- 基本语法:
tail 文件:查看文件尾10 行的内容tail -n 5 文件:查看文件尾5 行的内容tail -f 文件:实时最粽该文档的所有更新
- 基本语法:
- > 指令和 >> 指令:输出重定向,覆盖和追加
- 基本语法:
ls -l > 文件:列表的内容写入文件中(覆盖写),如果文件不存在则自动创建ls -al >> 文件:列表的内容追加到文件的末尾cat 文件 1 > 文件 2:将文件 1 的内容覆盖到文件 2echo "内容" >> 文件:追加
- 基本语法:
- ln 指令:软连接也成为符号链接,类似于windows中的快捷方式,主要存放了链接其他文件的路径
- 基本语法:
ln -s [原文件或目录] [软连接名]给原文件创建一个软连接 - 应用实例:
- 在/home目录下创建一个软连接myroot,链接到/root目录:
ln -s /root /home/myroot - 删除软连接myroot:
rm myroot
- 在/home目录下创建一个软连接myroot,链接到/root目录:
- 细节说明:当我们使用pwd指令查看目录时,仍然看到的是软连接所在目录
- 基本语法:
- history 查看已经执行过的指令
- 应用实例:
- 显示所有历史命令:
history - 显示最近使用过的10个命令:
history 10 - 执行历史编号为5的指令:
!5
- 显示所有历史命令:
- 应用实例:
时间日期类
- date:显示当前日期
- 基本语法:
date:显示当前时间date +%Y:显示当前年份date +%m:显示当前月份date +%d:显示当前是哪一天date "+%Y-%m-%d %H:%M:%S":显示年月日时分秒
- 设置系统当前日期:
date -s 字符串时间,如date -s 2024-03-07 17:13:10
- 基本语法:
- cal:
cal [选项]查看日历,不加选项显示本月日历;cal 2020显示2020年日历
搜索查找类
- find:从指定目录向下递归遍历其各个子目录,将满足条件的文件或目录显示在终端
- 基本语法:
find [搜索范围] [选项] - 选项说明:
-name:按照指定的文件名查找模式查找文件-user:查找属于指定用户名的所有文件-size:按照指定的文件大小查找文件
- 应用案例:
- 按文件名:根据名称查找 /home 目录下的 hello.txt 文件
find /home -name hello.txt - 按拥有者:查找 /opt 目录下,用户名称为 nobody 的文件
find /opt -user nobody,如果过多,分页显示:find /opt -user root | more - 查找整个 Linux 系统下大于 200M 的文件(+n大于 -n小于 n等于)(单位:k,M,G)
find / -size +200M
- 按文件名:根据名称查找 /home 目录下的 hello.txt 文件
- 基本语法:
- locate:快速定位文件路径。利用事先建立的系统中所有文件名称及路径的 locate 数据库实现快速定位给定的文件。locate 指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新 locate 时刻。
- 基本语法:
locate 搜索文件 - 特别说明:由于 locate 指令给予数据库进行查询,所以第一次运行前,必须使用 updatedb 指令创建 locate 数据库
- 应用实例:使用 locate 指令快速定位 hello.txt 文件所在目录
- 基本语法:
- which:查看某个指令在哪个目录下,如:
which ls查看 ls 指令存放在哪个目录 - grep指令和管道符 | :grep 过滤查找,管道符表示将前一个命令的处理结果输出传递给后面的命令处理
- 基本语法:
grep [选项] 查找内容 源文件 - 常用选项:
-n显示匹配行及行号;-i忽略字母大小写 - 应用实例:在 hello.txt 文件中,查找 yes 所在行,并显示行号
cat /home/hello.txt | grep -n "yes"grep -n "yes" /home/hello.txt
- 基本语法:
压缩和加压类
- gzip/gunzip 指令:gzip 用于压缩文件;gunzip 用于解压
- 基本语法:
gzip 文件:压缩文件,只能将文件压缩位 *.gz文件gunzip 文件.zp:解压缩文件命令
- 应用实例:
- 将/home 下的 hello.txt 文件进行压缩
- 将/home 下的 hello.txt.gz 文件进行解压缩
- 基本语法:
- zip/unzip 指令:zip 用于压缩文件,unzip 用于解压,在项目打包发布中很有用
- 基本语法:
zip [选项] xxx.zip 文件/目录:压缩文件或目录unzip [选项] xxx.zip:解压缩文件,默认解压到当前目录- zip 常用选项:
-r递归压缩,即压缩目录 - unzip 常用选项:
-d指定解压后文件的存放目录
- 应用实例:
- 将/home 下的所有文件进行压缩成 myhome.zip:`zip -r myhome.zip /home/
- 将 myhome.zip 解压到 /opt/tmp 目录下:
unzip -d /opt/tmp myhome.zip
- 基本语法:
- tar 指令:打包指令,打包后的文件是 .tar.gz 文件
- 基本语法:
tar [选项] xxx.tar.gz 文件/目录:打包目录,压缩后的文件格式是 .tar.gz - 选项说明:
-c:产生.tar 打包文件-v:显示详细信息-f:指定压缩后的文件名-z:打包同时压缩-x:解包 .tar 文件
- 应用实例:
- 压缩多个文件,将 /home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz:
tar -zcvf pc.tar.gz /home/pig.txt /home/cat/txt - 将 /home 文件夹压缩成 myhome.tar.gz:
tar -zcvf myhome.tar.gz /home/ - 将 pc.tar.gz 解压到当前目录,切换到 /opt/:
tar -zxvf pc.tar.gz - 将 myhome.tar.gz 解压到 /opt/tmp2 目录下:
mkdir /opt/tem2 tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
- 压缩多个文件,将 /home/pig.txt 和 /home/cat.txt 压缩成 pc.tar.gz:
- 基本语法:
组管理和权限管理
- 组的基本介绍:在Linux中,每个用户必须属于一个组,不能独立于组外。Linux中的每个文件都有所有者、所在组、其他组的概念。
- 所有者
- 所在组
- 其他组
- 改变用户所在的组
- 文件/目录 所有者:一般为文件的创建者,创建文件的人,自然就成了该文件的所有者
- 查看文件的所有者:
ls -ahl - 修改文件的所有者:
chown 用户名 文件名
- 查看文件的所有者:
- 创建组
- 基本指令:
groupadd 组名 - 应用实例:
- 创建一个组,monster:
groupadd monster - 创建一个用户fox,并放入到monster组中:
useradd -g monster fox
- 创建一个组,monster:
- 基本指令:
- 文件/目录 所在组:当某个用户创建了一个文件后,这个文件所在组就是该用户所在的组。
- 查看文件/目录所在组:
ls -ahl - 修改文件/目录所在组:
chgrp 组名 文件名- 应用实例:使用root用户创建orange.txt,查看文件所在组,然后将这个文件所在组更改到 fruit 组:
chgrp fruit orange.txt
- 应用实例:使用root用户创建orange.txt,查看文件所在组,然后将这个文件所在组更改到 fruit 组:
- 查看文件/目录所在组:
- 其他组:除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组。
- 改变用户所在组:在添加用户时,可以指定用户的所在组,用root的管理权限可以改变某个用户的所在组。
- 改变用户所在组:
usermod -g 新组名 用户名usermod -d 目录名 用户名:改变用户登陆的初始目录;注意:用户需要有进入到新目录的权限。
- 应用实例:将zwj这个用户从原来所在组修改到wudang组。
cat /etc/group | grep wudang:查看是否有wudang组
- 改变用户所在组:
- 权限的基本介绍:
ls -l中显示的内容为:-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc- 0-9位说明:
- 第0位,确定文件类型(d,-,l,c,b)
- l:链接,相当于windows的快捷方式
- d:目录,相当于windows的文件夹
- c:字符设备文件,如鼠标、键盘
- b:块设备,如硬盘
- 1-3位:所有者User的权限
- 4-6位:用户组Group的权限
- 7-9位:其他组Other的权限
- 第0位,确定文件类型(d,-,l,c,b)
- 其他说明:
- 1:文件:文件硬链接数;目录:子目录数+文件数
- root:用户
- root:组
- 1213:文件大小(字节),如果是文件夹,显示4096字节
- Feb 2 02:39:最后修改时间
- abc:文件名
- 0-9位说明:
- rwx权限详解:可用数字表示:r=4,w=2,x=1,因此rwx=4+2+1=7
- rwx作用到文件
- r:read,读取查看
- w:write,可以修改,但不代表可以删除,删除一个文件的前提是对文件所在的目录有写权限
- x:execute,可执行
- rwx作用到目录
- r:可读,即可ls查看目录内容
- w:可写,可在目录内创建+删除+重命名目录
- x:可执行,即可进入该目录
- rwx作用到文件
- 修改权限:chmod
- 第一种方式:+、-、=变更权限;u:所有者,g:所在组,o:其他人,a:所有人
chmod u=rwx,g=rx,o=x 文件/目录名chmod o+w 文件/目录名chmod a-x 文件/目录名- 案例1:给abc文件的所有者读、写、执行的权限,给所在组读、执行的的权限,给其它组读、执行的权限
chmod u=rwx,g=rx,o=rx abc - 案例2:给abc文件的所有者去除执行的权限,增加组写的权限
chmod u-x,g+w abc - 案例3:给abc文件的所有用户添加读的权限
chmod a+r abc
- 第二种方式,通过数字变更权限:r=4,w=2,x=1;rwx=4+2+1=7
chmod u=rex,g=rx,o=x 文件/目录相当于chmod 752 文件/目录- 案例:将/home/abc.txt 文件的权限修改为 rwxr-xr-x,使用数字的方式实现:
chmod 755 /home/abc.txt
- 第一种方式:+、-、=变更权限;u:所有者,g:所在组,o:其他人,a:所有人
- 修改文件所有者:chown
- 基本介绍:
chown newowner 文件/目录:改变所有者chown newowner:newgroup 文件/目录:改变所有者和所在组-R:如果是目录,则使其下所有子文件/目录递归生效
- 案例:
- 将/home/abc.txt文件的所有者修改成tom:
chown tom /home/abc.txt - 将/home/kkk目录下所有的文件和目录的所有者改成tom:
chmod -R tom /home/kkk
- 将/home/abc.txt文件的所有者修改成tom:
- 基本介绍:
- 修改文件所在组:chgrp
chgrp newgroup 文件/目录- 案例:
- 将/home/abc.txt文件的所在组修改为shaolin:
groupadd shaolin;chgrp shaolin /home/abc.txt - 将/home/kkk目录下所有的文件和目录所在组修改为shaolin:
chgrp -R shaolin /home/kkk
- 将/home/abc.txt文件的所在组修改为shaolin:
- 权限管理实践
- 警匪游戏:
- 组:police,bandit(土匪);jack,jerry:警察;xh,xq:土匪
- 创建组:
groupadd police;groupadd bandit - 创建用户:
useradd -g police jack;useradd -g police jerry;useradd -g bandit xh;useradd -g bandit xq - jack创建一个文件,自己可以读写,本组人可以读,其他组人没有任何权限:
vim jack.txt;chmod 640 jack.txt - jack修改该文件,让其他组人可以读,本组人可以读写:
chmod 644 jack.txt或者chmod o=r,g=r - xh投靠警察,看看是否可以读写:
usermod -g police xh,不可以,因为没有jack目录的权限,因此并不能访问到jack下的jack.txt
- 西游
- 建立两个组(神仙sx,妖怪yg)
- 建立四个用户(唐僧,悟空,八戒,沙僧)
- 设置密码
- 把悟空,八戒放入妖怪组,沙僧,唐僧放入神仙组
- 用悟空建立一个文件(monkey.java,该文件要输出I am monkey)
- 给八戒一个可以 r w的权限
- 八戒修改monkey.java加入一句话(I am pig)
- 唐僧沙僧对该文件没有权限
- 把沙僧放入妖怪组
- 让沙僧修改该文件,加入一句话(“我是沙僧,我是妖怪!”)
- 对于目录来说, rwx 分别代表什么
- w:在目录中创建、删除文件/目录
- r:在目录中列出(ls)其中的文件/目录
- x:进入(cd)
- 警匪游戏:
crond任务调度
- crontab 进行定时任务的设置
- 概念:任务调度指系统在某个时间执行特定的命令或程序。
- 任务调度分类:
- 系统工作:一些重要的工作必须周而复始的执行,如病毒扫描等
- 个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
- 基本语法:
crontab [选项] - 常用选项:
-e:edit 编辑crontab定时任务-l:list 查询crontab任务-r:remove 删除当前用户所有的crontab任务
- 快速入门:设置任务调度文件:/etc/crontab;设置个人任务调度。执行crontab -e命令;接着输入任务到调度文件
- 如:
*/1 * * * * ls -l /etc/ > /tmp/to.txt:每小时的每分钟执行ls -l /etc/ > tmp/to.txt命令
- 如:
- 参数细节说明,5个占位符的说明
- 第一个
*:一小时当中的第几分钟;范围:0-59 - 第二个
*:一天当中的第几小时;范围:0-23 - 第三个
*:一个月当中的第几天:范围:1-31 - 第四个
*:一年当中的第几月:范围:1-12; - 第五个
*:一周当中的星期几;范围:0-7(0和7都代表星期日)
- 第一个
- 特定时间执行任务案例
45 22 * * * 命令:在22点45分执行命令0 17 * * 1 命令:每周1的17点0分执行命令0 5 1,15 * * 命令:每月1和15号的凌晨5点0分执行命令40 4 * * 1-5 命令:每周一到周五陵城4点40分执行命令*/10 4 * * * 命令:每天的凌晨4点,每隔10分钟执行一次命令0 0 1,15 * 1 命令:每月1号和15号,每周一的0点0分执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天,非常容易让管理员困惑
- 应用实例
- 案例1:每隔1分钟,将当前的日期信息追加到/tmp/mydate文件中:
*/1 * * * * date >> /tmp/mydate - 案例2:每隔1分钟,将当前日期和日历都追缴到/home/mycal文件中
- 写脚本my.sh:
vim /home/my.sh;脚本内容:date >> /home/mycal;cal >> /home/mycal - 给my.sh增加执行权限:
chmod u+x /home/my.sh crontab -e,添加定时任务1/* * * * * /home/my.sh
- 写脚本my.sh:
- 案例3:每天凌晨2:00将mysql数据库testdb,备份到文件中。提示:命令为
mysqldump -u root -p密码 数据库 >> /home/db.bak:crontab -e0 2 * * * mysqldump -u root -proot testdb >> /home/db.bak
- 案例1:每隔1分钟,将当前的日期信息追加到/tmp/mydate文件中:
- crond相关指令
crontab -r:终止任务调度crontab -l:列出当前有哪些任务调度service crond restart:重启任务调度crondselect-editor:切换crontab默认编辑器
at定时任务
- 基本介绍
- at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
- 默认情况下,atd守护进程每60秒检查一次任务队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
- at命令是一次性定时计划任务,执行完一个任务后就不再执行此任务了
- 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
ps -ef | grep atd:检查atd进程是否在运行
- at命令格式:
at [选项] [时间]Ctrl + D 结束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 2031-03-01
- 使用相对计时法。指定格式为:now + count time-units,now即当前时间,time-units是时间单位,可以还minutes、hours、days、weeks。count是时间的数量,如:now + 5 minutes
- 直接使用today、tomorrow来指定完成命令的时间
- 应用实例:
- 案例1:2天后下午5点执行/bin/ls /home:
at 5pm + 2days回车/bin/ls /homectrl + D 退出 - 案例2:atq命令来查看系统中没有指定的工作内容:
atq - 案例3:明天17点,输出时间到指定文件内,如/root/date100.log:
at 5pm tomorrow回车date > /root/date100.log - 案例4:2分钟后,输出时间到指定文件内,如/root/date200.log:
at now + 2 minutes回车date > /root/date200.log - 案例5:删除已经设置的任务,
atrm 编号
- 案例1:2天后下午5点执行/bin/ls /home:
Linux磁盘分区、挂载
lsblk:<list block>查看分区挂载情况
![[Pasted image 20240314160754.png]]
lsblk -f
![[Pasted image 20240314161032.png]]
- 原理介绍
- 对于Linux来说,无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux 中每个分区都是用来组成整个文件系统的一部分的。
- Linux 采用一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且讲一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
- 硬盘说明
- Linux硬盘分为IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
- 对于IDE硬盘,驱动器标识符为“hdx~”,其中"hd"表明分区所在设备的类型,这里是指IDE硬盘。"x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),"~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。如:hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
- 对于SCSI硬盘,则表示为"sdx~",SCSI硬盘是用"sd"来区分所在设备的类型的,其余和IDE硬盘的表示方法一样。
- 挂载的经典案例
- 说明:以增加一块硬盘为例,熟悉磁盘的相关指令,深入理解磁盘分区、挂载、卸载的概念。
- 如何增加一块硬盘
- 虚拟机添加硬盘:在【虚拟机】菜单中,选择【设置】,然后设备列表添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方才需要修改,直至完成。然后重启系统(才能识别)![[Pasted image 20240314162140.png]]
- 分区:
- 命令:
fdisk /dev/sdb - 开始对/sdb分区:
- m:显示命令列表
- p:显示磁盘分区,同
fdisk l - n:新增分区
- d:删除分区
- w:写入并退出
- 说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。![[Pasted image 20240314164113.png]]
- 命令:
- 格式化:
mkfs -t ext4 /dev/sdb1,其中ext4是分区类型 - 挂载:将一个分区与一个目录联系起来
mkdir /newdisk;mount /dev/sdb1 /newdisk/- 卸载:
umount /dev/sdb1或者umount /newdisk - 注意:用命令行挂载。重启挂载关系会失效。
- 卸载:
- 永久挂载:通过修改 /etc/fstab 实现,添加完成后,执行
mount -a即刻生效vim /etc/fstab![[Pasted image 20240314180730.png]]- 写入:
/dev/sdb1 /newdisk ext4 defaults 0 0![[Pasted image 20240314180936.png]] - 保存退出,这样挂载关系就会一直存在
- 磁盘情况查询:
- 查询系统整体磁盘使用情况:
df -h![[Pasted image 20240315143043.png]] - 查询指定目录的磁盘占用情况:
du -h /目录,默认为当前目录-s:指定目录占用大小汇总-h:带计量单位-a:含文件--max-depth=1子目录深度-c:列出明细的同时,增加汇总值- 应用实例:查询/opt目录的磁盘占用情况,深度为1:
du -h --max-depth=1 /opt
- 查询系统整体磁盘使用情况:
- 磁盘情况——工作实用指令
- 统计/opt文件夹下文件的个数:
ls -l /opt | grep "^-" | wc -l - 统计/opt文件夹下目录的个数:
ls -l /opt | grep "^d" | wc -l - 统计/opt文件夹下文件的个数,包括子文件夹里的:
ls -lR /opt | grep "^-" | wc -l - 统计/opt文件夹下目录的个数,包括子文件夹里的:
ls -lR /opt | grep "^d" | wc -l - 以树状显示目录结构:
tree /home,没有tree,则使用yum install tree安装,unbantu使用apt install tree
- 统计/opt文件夹下文件的个数:
网络配置
- 网络配置原理图![[Pasted image 20240315162732.png]]
- 查看网络IP和网关
- 查看虚拟网络编辑器和修改IP地址
- 查看Windows环境中的VMnet8网络配置
ipconfig![[Pasted image 20240315170404.png]] - 查看Linux的网络配置
ifconfig![[Pasted image 20240315170447.png]] - ping测试主机之间网络连通性:
ping 目的主机,测试当前服务器是否可以连接目的主机 - Linux网络环境配置
- 第一种方法——自动获取:登录后,通过界面来设置自动获取IP。特点:Linux启动后互自动获取IP,缺点是每次自动获取的IP地址可能不一样。
- 第二种方法:指定IP
- 说明:直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)。
- 编辑
vi /etc/sysconfig/network-scripts/ifcfg-ens33 - 要求:将IP地址配置为静态的。如:IP地址为 192.168.200.130
- ifcfg-ens33 文件说明:![[Pasted image 20240315173459.png]]
- 重启网络服务或重启系统生效:
service network restart或reboot
- 设置主机名和hosts映射
- 设置主机名
- 为了方便记忆,可以给Linux系统设置主机名,也可以根据需要修改主机名
- 指令:
hostname查看主机名 - 修改文件在 /etc/hostname 指定
- 修改后,重启生效
- 设置hosts映射:如何通过主机名能找到(比如ping)某个Linux系统
- Windows:在C:\windows\system32\drivers\hosts文件指定即可。案例:192.168.200.130 hspedu100
- Linux:在 /etc/hosts 文件指定。案例:192.168.200.1 ThinkPad-PC
- 设置主机名
- 主机名解析过程分析
- hosts是什么:一个文本文件,用来记录IP和Hostname(主机名)的映射关系
- DNS:即Domain Name System的缩写,即域名系统;是互联网上作为域名和IP地址相互映射的一个分布式数据库。
- 应用实例:用户在浏览器输入www.baidu.com
- 浏览器先检查浏览器缓存中有没有该域名解析IP地址,有则调用这个IP完成解析;没有则检查操作系统DNS解析器缓存,有则返回IP完成解析。这两个缓存都为本地缓存。
- 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址(DNS解析记录)如,在cmd窗口输入:
ipconfig /displaydns //DNS域名解析缓存;ipconfig /flushdns //手动清理DNS缓存
- 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射。如果有,则完成解析并返回。
- 如果hosts文件中也没有找到对应IP,则到域名服务DNS进行解析域名。
进程管理
- 基本介绍
- 在Linux中,每个执行的程序都成为一个进程。每一个进程都分配一个ID号(pid,进程号)。程序run起来,加载到内存就成为了一个进程。
- 每个进程都可能以两种方式存在。前台与后台。
- 前台进程就是用户目前屏幕上可以进行操作的。
- 后台进程则是实际在操作,但屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都回常驻在系统中。直到关机才结束。
- 显示系统执行的进程
- 基本介绍:ps 命令用来查看目前系统中,有哪些正在执行的进程,以及它们的执行情况。可以不加任何参数
- ps命令选项
ps -a:显示当前终端的所有进程信息ps -u:以用户的格式显示进程信息ps -x:显示后台进程运行的参数- 通常结合使用:
ps -aux
- ps 详解
- 指令:
ps -aux | grep xxx,比如查看有没有sshd服务 - 指令说明:
- System V 展示风格
- USER:用户名
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用物理内存的百分比
- VSZ:进程占用虚拟内存的大小(单位KB)
- RSS:进程占用物理内存的大小(单位KB)
- TTY:终端名称,缩写 .
- STAT:进程状态。
- S-睡眠;
- s-表示该进程是会话的先导进程;
- N-表示进程拥有比普通优先级更低的优先级;
- R-正在运行;
- D-短期等待;
- Z-僵死进程;
- T-被跟踪或者被停止;等等
- START:启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
- 指令:
- 应用实例
- 要求:以全格式显示当前所有进程,查看进程的父进程
ps -ef:以全格式显示当前所有进程;-e:显示所有进程;-f:全格式ps -ef | grep sshd- PPID:父进程![[Pasted image 20240319155557.png]]
- 终止进程:若某个进程执行一半需要终止,或已经消耗了很大的系统资源时,此时就可以考虑停止该进程。使用kill命令来完成此项任务。
- 基本语法:
kill [选项] 进程号:通过进程号杀死进程killall 进程名称:通过进程名称杀死进程,也支持通配符,在系统负载过大而变得很慢的时候有用
- 常用选项:
-9:强迫进程立即停止 - 最佳实践:
- 踢掉某个非法登录用户:如:
kill 11421 - 终止远程登录sshd,在适当时候再次重启sshd服务:
kill sshd;/bin/systemctl start sshd.service - 终止多个gedit:
killall gedit - 强制杀掉一个终端:如:
kill -9 10487
- 踢掉某个非法登录用户:如:
- 基本语法:
- 查看进程树
- 基本语法:
pstree [选项],可以更加直观的查看进程信息 - 常用选项:
-p:显示进程的PID-u:显示进程的所属用户
- 应用案例:
- 以树状的形式显示进程的pid
- 以树状的形式显示进程的用户id
- 基本语法:
- 服务管理
- 介绍:服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如mysqld、sshd、防火墙等,因此又称为守护进程,是Linux中非常重要的知识点。
- service管理指令
service 服务名 [start | stop | restart | reload |status]- 在CentOS 7.0之后,很多服务不再使用service,而是 systemctl
- service 指令管理的服务在 /etc/init.d 查看![[Pasted image 20240319165820.png]]
- service 管理指令案例:使用 service 指令,查看,关闭,启动 network 【注意:在虚拟系统演示,因为网络连接会关闭
- 查看服务名:
- 方式1:使用 setup -> 系统服务:可以看到全部
- 方式2:
ls -l /etc/init.d/etc/init.d 看到 service 指令管理的服务
- 服务的运行级别(runlevel):
- Linux有7种运行级别,3和5常用
- 运行级别0:系统停止状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
- 运行级别2:多用户状态(没有NFS),不支持网络
- 运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登录后进入GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
- 开机流程说明:开机 --> BIOS --> /boot --> systemd进程1 --> 运行级别 --> 运行级别对应的服务
- CentOS7之后版本运行级别说明: 在 /etc/initab 进行了简化,如下
- multi-user.target : analogous to runlevel 3
- graphical.target : analogous to runlevel 5
- # To view current default target, run :
systemctl get-default - # To set a default target, run :
systemctl set-default TARGET.target
- Linux有7种运行级别,3和5常用
- chkconfig指令
- 介绍
- 通过 chkconfig 命令可以给服务的各个运行级别设置自启动/关闭
- chkconfig 指令管理的服务在 /etc/init.d 查看
- 注意:CentOS7.0后,很多服务使用 systemctl 管理
- 基本语法:
- 查看服务
chkconfig --list [| grep xxx] chkconfig 服务名 --listchkconfig --level 5 服务名 on/off
- 查看服务
- 案例演示:对network服务进行各种操作,把network在3运行级别关闭自启动:
chkconfig --level 3 network off;chkconfig --level 3 network on - 使用细节:chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 生效
- 介绍
- systemctl指令:管理 /usr/lib/systemd/system 下的所有服务
- 基本语法:
systemctl [start | stop | restart | status] 服务名 - systemctl管理的服务在
/usr/lib/systemd/system查看 - systemctl 设置服务的自启动状态
systemctl list-unit-files [ | grep 服务名]:查看服务开机启动状态,grep可以进行过滤systemctl enable 服务名:设置服务开机启动systemctl disable 服务名:关闭服务开机启动systemctl is-enabled 服务名:查询某个服务是否自启动
- 应用案例:查看当前防火墙的状况,关闭防火墙和重启防火墙
systemctl status firewalld:查看防火墙的运行状态systemctl stop firewalld:关闭防火墙systemctl start firewalld:启动防火墙
- 细节讨论:
- 关闭或启用防火墙后,立即生效。【telnet测试 某个端口即可】
- 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
- 如果希望设置某个服务自启动或关闭永久生效:
systemctl [enable | disable] 服务名
- 基本语法:
- 打开/关闭指定端口
- 在真正的生产环境,往往需要将防火墙打开,但是,如果防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。如80、22、8080等
- firewall指令
- 打开端口:
firewall-cmd-permanent --add-port=端口号/协议 - 关闭端口:
firewall-cmd-permanent --remove-port=端口号/协议 - 重新再入才能生效:
firewall-cmd --reload - 查询端口是否开放:
firewall-cmd --query-port=端口/协议
- 打开端口:
- 应用案例:
- 启动防火墙,测试111端口是否能telnet:不行
- 开放111端口:
firewall-cmd --permanent --add-port=111/tcp;firewall-cmd --reload - 再次关闭111端口:
firewall-cmd --permanent --remove-port=111/tcp;firewall-cmd --reload
- 动态监控进程
- 介绍:top与ps命令相似。它们都用来显示正在执行的进程。top和ps最大的不同之处在于top在执行一段时间可以更新正在运行的进程
- 基本语法:
top [选项] - 选项说明:
-d 秒数:指定top命令每隔几秒更新,默认是3秒-i:使top不显示任何闲置或者僵死进程-p:通过指定监控进程ID来仅仅监控某个进程的状态
- 交互操作说明:
- p:以CPU使用率排序,默认即此项
- m:以内存的使用率排序
- n:以PID排序
- q:退出top
- 应用实例:
- 案例1:监视特定用户
- top:输入此命令,按回车键,查看执行的进程
- u:然后输入"u"回车,再输入用户名即可
- 案例2:终止指定的进程
- top:输入此命令,按回车键,查看执行的进程
- k:输入“k”回车,再输入要结束的进程ID号
- 案例3:指定系统状态更新的时间(每隔10秒自动更新):
top -d 10
- 案例1:监视特定用户
- netstat 查看系统网络情况
- 基本语法:
netstat [选项] - 选项说明:
-an:按一定顺序排列输出-p:现实哪个进程在调用
- 应用案例:查看服务明未sshd的服务的信息:`netstat -anp | grep sshd
- 基本语法:
- ping 检测主机连接:网络检测工具,主要用来检测远程主机是否正常,或者两部主机间的网线或网卡故障
RPM 与 YUM
- 介绍: rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。Linux的分发版本都有采用(suse,redhat,CentOS等),可以说是工人的行业标准了。
- rpm包的简单查询指令:
rpm -qa - rpm包名基本格式: 一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64 名称:firefox 版本号:60.2.2-1 适用操作系统:el7.centos.x86_64 表示centos7.x的64位系统 如果是i686、i386表示32位系统,noarch表示通用。
- rpm 包的其他查询指令:
rpm -qa:查询所安装的所有rpm软件包rpm -qa | grep firefoxrpm -q 软件包名:查询软件包是否安装rpm -qi 软件包名:查询软件包信息rpm -ql 软件包名:查询软件包中的文件rpm -qf 文件全路径名:查询文件所属的软件包rpm -qf /etc/passwdrpm -qf /root/install.log
- rpm 包的管理
- 卸载 rpm 包
- 基本语法:
rpm -e 包名// erase - 应用案例:删除Firefox软件包
- 细节讨论
- 如果其他软件包依赖于要卸载的软件包,卸载时会产生错误信息。如:
rpm -e foo-->removing these packages would break dependencies:foo is needed by bar-1.0-1 - 如果要删除foo这个rpm包,可以增加 --nodeps 参数,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行。
rpm -e --nodeps foo
- 如果其他软件包依赖于要卸载的软件包,卸载时会产生错误信息。如:
- 基本语法:
- 安装rpm包
- 基本语法:
rpm -ivh RPM包全路径名称 - 参数说明:
- i=install:安装
- v=verbose:提示
- h=hash:进度条
- 应用案例:演示卸载和安装firefox浏览器
- 基本语法:
- 卸载 rpm 包
- yum:是一个shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包病安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
- 基本指令:
- 查询yum服务器是否有需要安装的软件:
yum list | grep xx - 安装指定的yum包:
yum install xxx下载安装
- 查询yum服务器是否有需要安装的软件:
- 应用实例:使用yum的方式来安装firefox。
rpm -e firefox;yum list | grep firefox;yum install firefox
- 基本指令:
搭建JavaEE环境
- 概述:Linux下进行JavaEE开发,需要安装如下软件: ![[Pasted image 20240321144710.png]]
- 安装JDK
- 安装步骤:
mkdir /opt/jdk- 通过xftp6上传到/opt/jdk下
cd /opt/jdk- 解压:
tar -zxvf jdk-8u261-linux-x64.tar.gz mkdir /usr/local/javamv /opt/jdk/jdk1.8.0_261 /usr/local/java- 配置环境变量的配置文件 vim /etc/profile
export JAVA_HOME=/user/local/java/jdk1.8.0_261export PATH=$JAVA_HOME/bin:$PATHsource /etc/profile刷新环境变量,让文件生效
- 测试是否安装成功:编写一个简单的Hello.java 输出 "hello,world!"
- 安装步骤:
- 安装tomcat
- 步骤
- 上传安装文件,并解压缩到/opt/tomcat
- 进入解压目录/bin,启动tomcat
./startup.sh - 开放端口8080
- 测试是否安装成功:在windows、Linux下访问 http://linuxip:8080
- 步骤
- 安装idea2020
- 步骤
- 下载地址:www.jetbrains.com/idea/downlo…
- 解压缩到/opt/idea
- 启动 idea bin 目录下 ./idea.sh ,配置 jdk
- 编写 Hello world 程序并测试成功
- 步骤
- 安装mysql5.7步骤
mkdir /opt/mysqlcd /opt/mysql/wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar:下载 mysql 安装包tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar- centos7.6自带的类mysql数据库是mariadb,会和MySQL冲突,要先删除
rpm -qa | grep mari:查询mariadb相关安装包rpm -e --nodeps mariadb-libs
- 然后开始安装mysql,依次执行以下几条:
rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpmrpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpmrpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
systemctl stat mysqld.service:启动mysql- 设置root用户和密码。MySQL自动给root用户设置随机密码,运行
grep "password" /var/log/mysqld.log可以看到当前密码 mysql -u root -p回车-->输入默认密码- 设置root密码,对于个人开发环境,如果要设置比较简单的密码(生产环境服务器要设置复杂密码),可以运行
set global validate_password_policy=0,其默认值为1 set password for 'root'@'localhost'=password('hspedu100')flush privileges使密码设置生效
Linux之大数据定制篇——Shell编程
- 为什么要学习Shell编程
- Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理
- 对于JavaEE和Python程序员来说,需要编写一些Shell脚本进行程序或者服务器的维护,比如编写一个定时备份数据库的脚本
- 对于大多数程序员来说,需要编写Shell程序来管理集群
- Shell是什么:是一个命令行解释器,它未用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序
- Shell脚本的执行方式
- 脚本格式要求
- 脚本以 #!/bin/bash 开头
- 脚本需要有可执行权限
- 编写第一个Shell脚本:创建一个Shell脚本,输出Hello world!
vim hello.sh内容:#!/bin/bashecho hello,world! - 脚本的常用执行方式
- 输入脚本的绝对路径或相对路径:首先要赋予 helloworld.sh 脚本的 +x 权限,再执行脚本
- sh + 脚本:不用赋予脚本 +x 权限,直接执行即可。如:
sh hello.sh
- 脚本格式要求
- Shell 的变量
- Shell变量介绍
- Linux Shell中的变量分为系统变量和用户自定义变量
- 系统变量:
$HOME、$PWD、$SHELL、$USER等 - 显示当前 shell 中所有变量:
set
- shell变量的定义
- 定义变量:
变量名=值 - 撤销变量:
unset 变量名 - 声明静态变量:
readonly 变量名,不能unset
- 定义变量:
- 快速入门
- 定义变量A
- 撤销变量A:
unset A - 声明静态变量B=2,不能unset
- 可以把变量提升为全局环境变量,可供其他shell程序使用
- 变量定义规则
- 变量名可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯大写
- 将命令的返回值赋值给变量
- A=
date反引号,运行里面的命令,并把结果返回给变量A - A=$(date) 等价于反引号
- A=
- Shell变量介绍
- 设置环境变量
- 基本语法:
export 变量名=变量值:将shell变量输出位环境变量source 配置文件:让修改后的配置信息立即生效echo $变量名:查询环境变量的值
- 快速入门:
- 在 /etc/profile 文件中定义 TOMCAT_HOME 环境变量
- 查看环境变量 TOMCAT_HOME 的值
- 在另一个 shell 程序中使用 TOMCAT——HOME
- 注意:在输出TOMCAT_HOME环境变量前,需要让其生效
source /etc/profile - shell脚本的多行注释:
:<<! (换行)内容(换行) !
- 基本语法:
- 位置参数变量:当执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用位置参数变量。如:
./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息- 基本语法:
$n:n为数字,1-{10}$*:表示命令行中的所有参数,$*把所有的参数看做一个整体$@:表示命令行中的所有参数,不过$@把每个参数区分对待$#:表示命令行中参数的个数
- 案例:编写一个shell脚本,position.sh,在脚本中获取到命令行
- 基本语法:
- 预定义变量:即shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
- 基本语法:
$$:当前进程的进程号PID$!:后台运行的最后一个进程的进程号PID$?:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确
- 应用实例:在一个shell脚本中简单使用一下预定义变量
- 基本语法:
- 运算符
- 基本语法:
$((运算符))或$[运算符]或expr m + n:expression- 注意expr运算符间要有空格,如果希望将 expr 的结果赋给某个变量,使用反引号
expr m - nexpr \*,/,%乘 、除、取余
- 应用实例
- 案例1:计算(2+3)X 4的值
RES1=$(((2+3)*4));RES2=$[(2+3)*4];TEMP=expr 2 + 3RES3=$TEMP \* 4 - 案例2:求命令行的两个参数(整数)的和
SUM=$[$1+$2]
- 案例1:计算(2+3)X 4的值
- 基本语法:
- 条件判断
- 基本语法:
[ condition ]注意condition前后要有空格;非空返回true,可使用 $? 验证(0为true,>1为false) - 应用实例:
[ hspEdu ]:返回true[ ]:返回false[ condition ] && echo OK || echo notok:条件满足,执行后面的语句
- 判断语句:
- 字符串比较:
= - 两个整数比较:
- 小于:
-lt - 小于等于:
-le - 等于:
-eq - 大于:
-gt - 大于等于:
-ge - 不等于:
-ne
- 小于:
- 按照文件权限进行判断
- 有读的权限:
-r - 有写的权限:
-w - 有执行的权限:
-x
- 有读的权限:
- 按照文件类型进行判断
- 文件存在且是一个常规的文件:
-f - 文件存在:`-e'
- 文件存在且是一个目录:`-d'
- 文件存在且是一个常规的文件:
- 字符串比较:
- 应用实例
- 案例1:“ok”是否等于“ok”;使用 =:
if [ "ok" = "ok" ] then echo "equal" fi - 案例2:23是否大于等于22;使用 -ge:
if [ 23 -ge 22 ] then echo "yes" fi - 案例3:/root/shcode/aaa.txt 目录中的文件是否存在;使用 -f:
if [ -f /root/shcode/aaa.txt ] then echo "存在" fi
- 案例1:“ok”是否等于“ok”;使用 =:
- 基本语法:
- 流程控制
- if判断:
- 语法:
多分支if [ 条件判断式 ] then 代码 fiif [ 条件判断式 ] then 代码 elif [ 条件判断式 ] then 代码 fi - 案例:编写一个shell程序,如果输入的参数大于等于60,输出“及格了”,如果小于60,输出“不及格”
#!/bin/bash if [ $1 -ge 60 ] then echo "及格了" elif [ $1 -lt 60 ] then echo "不及格" fi - 语法:
- case语句:
- 基本语法:
case $变量名 in "值1") 如果变量的值等于,则执行程序1 ;; "值2") 如果变量的值等于2,则执行程序2 ;; ...省略其他分支... *) 如果变量的值都不是以上的值,则执行此程序 ;; esac- 应用实例:
- 当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”
case $1 in "1") echo "周一" ;; "2") echo "周二" ;; *) echo "other" ;; esca
- 当命令行参数是1时,输出“周一”,是2时,输出“周二”,其他情况输出“other”
- 应用实例:
- 基本语法:
- for循环:
- 基本语法1:
for 变量 in 值1 值2 值3... do 程序 done - 应用实例:打印命令行输入的参数【这里可以看出
$*和$@的区别】
#!/bin/bash # $* 是把输入的参数当作一个整体,因此,只会输出一句话 for i in "$*" do echo "num is $i" done # $@ 是把输入的参数分开对待,因此,有几个参数输出几句 for j in "$@" do echo "num is $j" done- 基本语法2:
for ((初始值;循环控制条件;变量变化)) do 程序 done - 应用实例:从1加到100的值输出显示
#!/bin/bash SUM=0 for (( i=1;i<=100;i++ )) do #业务代码 SUM=$[$SUM+$i] done echo "SUM=$SUM"
- 基本语法1:
- while循环
- 基本语法1:
while [ 条件判断式 ] do 程序 done - 应用实例:从命令行输入一个数n,统计从1+..+n的值是多少
#!/bin/bash SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] i=$[$i+1] done echo "SUM=$SUM"
- 基本语法1:
- if判断:
- read读取控制台输入
- 基本语法:
read (选项) (参数) - 选项
-p:指定读取值时的提示符-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待
- 参数:指定读取值的变量名
- 应用实例
- 案例1:读取控制台输入一个NUM1值
- 案例2:读取控制台输入一个NUM2值,在10秒内输入
#!/bin/bash #案例1 read -p "请输入一个值NUM1=" NUM1 echo "你输入的NUM1=$NUM1" # 案例2 read -t 10 -p "请输入一个值NUM2=" NUM2 echo "你输入的NUM2=$NUM2"
- 基本语法:
- 系统函数
- basename:返回完整路径最后 / 的部分,常用语获取文件名
- 基本语法:
basename [pathname] [suffix];获取文件名,suffix未后缀,如果后缀被指定了,basename会讲pathname或string中的suffix去掉 - 案例:返回 /home/aaa/test.txt 的 “test.txt”部分
basename /home/aaa/test.txt =>test.txt basename /home/aaa/test.txt .txt =>test
- 基本语法:
- dirname:
dirname 文件绝对路径返回完整路径最后 / 前面的部分,常用于返回路径部分- 案例:返回/home/aaa/test.txt 的 /home/aaa
dirname /home/aaa/test.txt =>/home/aaa
- 案例:返回/home/aaa/test.txt 的 /home/aaa
- basename:返回完整路径最后 / 的部分,常用语获取文件名
- 自定义函数
- 基本语法:调用直接写函数名:
funname [值]
[ functiion ] funname[()] { Action [return int;] }- 案例:计算输入两个参数的和,getSum
#!/bin/bash function getSum(){ SUM=$[$n1,$n2] echo "和=$SUM" } #输入两个值 read -p "请输入一个数n1=" n1 read -p "请输入一个数n2=" n2 #调用自定义函数 getSum $n1 $n2 - 基本语法:调用直接写函数名:
- Shell编程综合案例:定期备份数据库
- 每天凌晨2:30备份数据库 hspedu到/data/backup/db
- 备份开始和备份结束能够给出响应的提示信息
- 备份后的文件要求以备份时间为文件名,并打包成.tar.gz格式,如2021-03-12_230201.tar.gz
- 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除
#!/bin/bash #备份目录 BACKUP=/data/backip/db #当前时间 DATETIME=$(date +%Y-%m-%d_%H%M%S) #数据库的地址 HOST=localhost #数据库用户名 DB_USER=root #数据库密码 DB_PW=hspedu100 #备份的数据库 DATABASE=hspedu #创建备份目录,如果不存在就创建 [ ! -d "${BACKUP}/${DDATETIME}" ] && mkdir -p "${BACKUP}/${DDATETIME}" #备份数据库 mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gizp > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz #将文件处理成 tar.gz cd ${DATABASE} tar -zcvf $DATETIME.tar.gz ${DATETIME} #删除备份后对应的目录 rm -rf ${BACKUP}/${DATETIME} #删除10天前的备份文件;-atime +10 十天前 find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "备份数据库${DATABASE}成功"crontab -e30 2 * * * /usr/sbin/mysql_db_backup.shcrontab -l查看是否添加定时任务
Python定制篇——Python开发平台Ubuntu
- Ubuntu介绍:是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。专业的Python开发者一般选择Ubantu这款Linux系统作为生产平台。
温馨提示:Ubuntu和Centos都是基于GNU/Linux内核的,因此基本使用和Centos几乎一样,它们的各种指令可以通用。只是界面和安装的软件有所差别。
- 设置Ubuntu支持中文:默认安装的ubuntu只有英文语言,要正确显示汉字,需要安装中文语言包
- 单击左侧图标栏打开 Language Support 菜单,点击打开Language Support(语言支持)选项卡
- 点击 Install / Remove Languages,在弹出的选项卡中下拉找到Chinese(Simplified),即中文简体,在后面的选项中打勾。然后点击Apply Changes提交,系统会自动联网下载中文语言包。(保证Ubuntu是联网的)。
- 这时“汉语(中国)”在最后一位。将其拖动到第一位
- 设置后不会即刻生效,需要下一次登录时生效。
- Ubuntu的root用户:安装Ubuntu成功后,都是普通用户权限,并没有最高root权限,如果需要使用root权限,通常都会在命令前加上sudo。一般使用su命令来直接切换到root用户。但是如果没有给root设置初始密码,就会抛出
su : Authentication failure。所以,只要给root用户设置一个初始面膜就好了。- 给root用户设置密码并使用:
- 输入
sudo passwd命令,输入一般用户密码并设定root用户密码 - 设置root密码成功后,输入su命令,并输入刚才设定的root密码。就可以切换成root了。提示符 $ 代表一般用户,提示符 # 代表root用户
- 以后就可以使用root用户了
- 输入 exit 命令,退出 root 并返回一般用户
- 输入
- 给root用户设置密码并使用:
- Ubuntu下开发python
- 说明:安装好Ubuntu后,默认已经安装好python的开发环境![[Pasted image 20240401145955.png]]
- 在Ubuntu下开发一个Python程序
vi hello.py:编写hello.pypython3 hello.py:运行hello.py
- APT软件管理和远程登录
- apt:Advanced Packaging Tool的简称,是一款安装包管理工具。在Ubuntu下,使用apt命令进行软件包的安装、删除、清理等,类似于Windows中的软件管理工具
- Ubuntu软件管理的原理图:/etc/apt/sources.list 记录着apt获取软件的服务器地址![[Pasted image 20240401153923.png]]
- Ubuntu软件操作的相关命令
sudo apt-get update更新源sudo apt-get install package安装包sudo apt-get remove package删除包sudo apr-cache search package搜索软件包sudo apt-cache show package获取包的相关信息,如:说明、大小、版本等sudo apt-get install package --reinstall重新安装包sudo apt-get -f install修复安装sudo apt-get remove package --purge删除包,包括配置文件等sudo apt-get build-dep package安装相关的编译环境sudo apt-get upgrade更新已安装的包sudo apt-get dist-upgrade升级系统sudo apt-cache depends package了解使用该包依赖哪些包sudo apt-cache rdepends package查看该包被哪些包依赖sudo apt-get source package下载包的源代码
- 更新Ubuntu软件下载地址
- 寻找国内镜像源:mirrors.tuna.tsinghua.edu.cn/
- 备份Ubantu默认的源地址:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup - 更新源服务器列表
- 清空sources.list文件赋值镜像网站的地址:
su root;echo ' ' > sources.list - 复制镜像网站的地址,拷贝到 sources.list 文件
- 更新源:
sudo apt-get update
- 清空sources.list文件赋值镜像网站的地址:
- 远程登录Ubuntu
- ssh介绍:SSH为Secure Shell的缩写,由IEIF的网络工作小组(Network Working Group)所制定,SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录。几乎所有的UNIX/Linux平台都可以运行SSH。
使用SSH服务,需要安装响应的服务器和客户端。客户端于服务器的关系:如果A机器想被B机器远程控制,那么A机器需要安装SSH服务器,B机器需要安装SSH客户端。
和CentOS不一样,Ubuntu默认没有安装SSHD服务(使用netstat指令
netstat -anp | more查看,指令apt install net-tools安装netstat),因此,不能进行远程登录。 - 安装ssh和启用:
sudo apt-get install openssh-server:安装SSH服务端和客户端。service sshd restart或sudo systemctl enable ssh.service:启动sshd服务。监听22端口。 - 在windows使用XShell6/XFTP6登录Ubuntu
- ssh介绍:SSH为Secure Shell的缩写,由IEIF的网络工作小组(Network Working Group)所制定,SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录。几乎所有的UNIX/Linux平台都可以运行SSH。
使用SSH服务,需要安装响应的服务器和客户端。客户端于服务器的关系:如果A机器想被B机器远程控制,那么A机器需要安装SSH服务器,B机器需要安装SSH客户端。
和CentOS不一样,Ubuntu默认没有安装SSHD服务(使用netstat指令
- 从一台Linux系统远程登录到另一台Linux系统
- 在创建服务器集群时,会使用到该技术
- 基本语法:
ssh 用户名@IP,如:ssh hspedu@192.168.200.22 - 使用ssh访问,如果访问出现错误。可查看是否有 /.ssh/known_ssh 尝试删除该文件解决,一般不会有问题
- 登出:
exit或logout