Linux
2022/1/25 7:07:48
本文主要是介绍Linux,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux:
网络连接的三种模式:
1.桥接模式:虚拟系统可以和外部系统通讯,但是容易造成IP冲突(虚拟机和主机使用统一网段的IP地址)
2.NAT模式:网络地址转换模式,虚拟机系统可以和外部系统通讯,不会造成IP冲突(虚拟机通过主机的代理IP地址和外部网络进行连接,但是外部网络不能连接到虚拟机)
3.主机模式:独立的系统
虚拟机克隆:
1.拷贝文件,在VM上打开文件即可
2.先关闭Linux系统,然后在管理里面点克隆即可
虚拟机快照:
在某些操作造成系统异常了,回到原先正常运行状态,叫做快照管理
Linux-vmtools:
安装后实现Linux和windows文件共享(需要gcc)
Linux目录结构:
Linux主要采用的是级层目录结构,根目录是"/",主要常见的目录有/bin,主要存放的是系统管理员使用的系统管理程序,sbin/,主要存放的是系统管理员使用的系统管理程序,/home主要存放普通用户的主目录,/root,该目录为系统管理员的主目录,称为超级权限者的用户主目录,/lib,系统开机所需要最基本的动态连接共享库,/lost+found这个目录一般情况下是空的, 当系统非法管理后,这里会存放一些文件,/etc,所有的系统文件管理所需要的配置文件和子目录,/usr,用户的很多应用程序和文件都放在这个目录下,/boot,存放了Linux启动时的相关文件,/dev,类似于windows的设备管理器,/media,该目录为Linux系统会自动识别一些设备,/mnt,该目录是为了让用户临时挂载别的系统文件
Linux-vi,vim:
vi(vim)是Linux系统内置的文本编译器
正常模式:以vim打开一个文档就直接进入一般模式(vim hello.java)
插入模式:按下i,o,a,r任意字母进入编译模式
命令模式:先按esc,然后输入:然后输入wq(保存退出),q(退出),q!(强制退出不保存)结束编译
快捷键:
拷贝当前行 yy 拷贝当前行向下的5行 5yy,并粘贴§
删除当前行 dd,删除当前行向下的5行 5dd
在文件中查询某个单词(命令行下/关键字,回车 查找,输入n就是查找下一个)
设置文件的行号,取消文件的行号.(命令行下:set nu 和:set nonu)
编辑/etc/profile 文件,在一般模式下使用快捷键到该文档的最末行G和最首行gg
在一个文件中输入"hello",在一般模式下然后又撤销这个动作 u
编辑/etc/profile 文件,在一般模式下并将光标移动到20行,输入20+ shift+g
关机,重启命令:
shutdown -h now 立刻进行关机
showdown -h 1 一分钟后关机
shutdown -r now 现在重新启动计算机
halt 关机,作用和上面一样
reboot 现在重新启动计算机
sync 把内存数据同步到磁盘
su -root进入系统管理员系统
logout退出当前用户
useradd 用户名 创建指定用户 (当用户创建成功会自动的创建和用户名相同的家目录)
useradd -d /home/test 用户名 创建用户到指定文件夹下
password 用户名 指定密码
pwd 显示当前目录
userdel 用户名 删除指定用户但保留家目录
userdel -r 用户名 删除指定用户并且不保留家目录
id 用户名 查询用户信息
who am i 查看当前用户
groupadd 组名 增加一个组
groupdel 组名 删除一个组
groupadd wudang
useradd -g wudang zwj
增加一个用户到指定组
usermod -g 用户组 用户名 修改用户的组
etc/passwd文件 用户的配置文件 ,记录用户的各种信息
etc/shadow文件 口令的配置文件(经过加密的)
etc/group文件 记录Linux包含的组的信息
Linux的运行级别:
0:关机
1:单用户(找回丢失密码)
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
命令:init(加上级别)
另一种指定运行级别
systemctl get-default 获取指定的运行级别
systemctl set-default (multi-user/graphical).target
多用户联网状态/图形化界面
默认是图形化界面
Linux找回root密码:
1.启动系统在界面按e进入编辑界面
2.找到"Linux16"开头内容所在的行数,在最后输入init=/bin/sh
3.输入 Ctrl+X进入单用户模式
4.在光标闪烁的位置输入 mount -o remount,rw / 回车
5.输入passwd 然后输入确认密码
6.输入 touch/.autorelabel
7.输入 exec/sbin/init
Linux帮助指令:
man 获得帮助指令 man ls(-l 是单列输出,-a是展示所有隐藏文件)
在Linux下,隐藏文件一般以.开头
help指令
help cd 查看cd命令的帮助信息
文件目录类:
cd 切换到指定目录
cd~ 回到自己的家目录
cd… 回到当前目录的上一级目录
pwd:查看当前文件所在的绝对路径
cd /root 绝对路径返回root目录
cd…/…/root 相对路径但会root目录
mkdir 创建目录
mkdir 目录名
mkdir -p 目录名 创建多级目录
rmdir 删除空目录
rmdir 目录名
rm -rf 目录名 (删除非空目录名)
touch 创建空文件夹
touch 文件夹名
cp指令:拷贝文件到指定目录
cp source dest
cp -r /home/bbb /opt 复制整个目录到/opt目录下
\cp -r /home/bbb /opt
rm 移出文件或目录
rm 要删除的文件或者目录
-r 递归删除整个文件夹
-f 强制删除整个文件夹
rm -rf /home/bbb
mv 移动文件与目录或重命名
mv oldname newname 重命名
mv /temp/movefile /targetFolder 移动文件
mv cat.txt /home/cow.txt 移动文件并且重命名
mv /opt/bbb /home/ 将整个文件夹移动
cat 查看文件内容
cat 文件名
-n 显示行号
cat -n /etc/profile 查看文件内容,并且显示行号
cat只能浏览文件,不能修改文件
more 指令是一个基于VI编译器的文本过滤器
more /etc/profile 查看文件
空格 代表向下翻一页
Enter 代表向下翻一行
q 代表立刻离开
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f输出文件名和当前行的行号
查看较大的文件用less
less /opt/杂文.txt
空白键 向下翻一页
pagedown 向下翻一页
pageup 向上翻一页
/字串 搜寻字串 n向下 N向上 (?字串)
q 离开less程序
echo 输出内容到控制台
echo $PATH echo “hello,world”
head 用于显示文件的开头部分内容 ,默认情况下head指令显示文件的前10行
head 文件名 (查看文件头10行内容)
head -n 文件(查看文件头5行内容)
head -n 5 /etc/profile 查看文件的前5行代码
tail 用于输出文件尾部的内容 默认最后10行
tail 文件(尾10行)
tail -n 5 文件
tail -f 文件 实时追踪该文档的所有更新
Ctrl+c 退出
当前日期信息
“>” 输出重定向 “>>” 追加
ls -l >a.txt 将列表内容写入文件a.txt中(复写)
ls -al >>aa.txtx 将列表文件内容追加到aa.txt末尾
cat 文件1 >文件2 将文件1内容覆盖到文件2中
echo “内容” >>文件 (追加)
cal指令是显示日期信息
cal 2022 显示2022年的所有月份信息
Ln 软链接 类似于快捷方式
Ln -s 原文件或目录 软链接名
Ln -s/root /home/myroot
删除软链接 rm /home/myroot
history 指令 查看已经执行过的命令
history 10 查看最近使用的10条命令
! 编号 执行曾经执行过的指令
date 显示当前日期
date 当前时间
date +%Y 显示当前年份
date +%m 显示当前月份
date+%d 显示当前是哪一天
date “+%Y-%m-%d %H:%M:%S” 显示年月日时分秒
date -s 字符串时间
date -s “2022-01-16 14:26:10”
find 指令 将从指定目录向下递归的遍历其各个子目录
find 搜索范围 选项
-name 按照指令文件名查找符合的文件
-user 查找属于指定用户名的所有文件
-size 按照指定的文件大小查找文件
find /home -name hello.txt 根据名称查找 /home 目录下的hello.txt文件
find /opt -user nobody 查找/opt目录下用户名称为nobody的文件
find / -size +200M 查找整个Linux系统下大于200M的文件(+大于 -小于 不写等于 单位:M,K,G)
locate 指令可以快速定位文件路径,它会事先建立系统中所有文件名称及路径的locate数据库事先快速定位给定的文件,在第一次运行前,使用updatedb指令创建locate数据库
locate hello.txt 快速查询hello.txt文件
grep 指令和管道符号|一起使用
grep过滤查找,管道符"|"表示将前一个命令的处理结果输出传递给后面的命令处理
cat /home/hello.txt |grep “yes” 在hello.txt文件中查找"yes"所在行
grep -n “yes” /home/hello.txt 在hello.txt文件中按行号查找yes
gizp 用于压缩文件
gizp 文件名 (只能将文件压缩为 *.gz文件)
gunzip 文件.gz 解压文件
zip/unzip
zip -r 递归压缩目录
unzip -d 指定压缩后文件的存放目录
zip -r myhome.zip /home 将home目录及其包含的文件和子文件夹都压缩
unzip -d /opt/tmp /home/myhome.zip 将/home文件夹下的myhome.zip压缩到/opt/tmp文件夹下
tar 指令 打包文件夹,最后的文件是 .tar.gz文件
tar 选项 xxx.tar.gz 打包内容
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压.tar文件
tar -zcvf pc.tar.gz空格/home/pig.txt空格/home/cat.txt
将 /home/pig.txt和/home/cat.txt压缩成pc.tar.gz
tar -zcvf myhome.tar.gz /home/
将/home 的文件夹压缩成 myhome.tar.gz
tar -zxvf pc.tar.gz
将pc.tar.gz解压到当前目录
mkdir /opt/tmp2
tar -zxvf /home/myhome.tar.gz -C /opt/tmp2
将myhome.tar.gz 解压到/opt/tmp2目录下
Linux组管理和权限管理:
在Linux中每个用户必须属于一个组,每个文件有所有者,所在组,其他组的概念
1.一般创建文件的就是该文件的所有者
ls -ahl 查看文件的所有者
chown 用户名 文件名 修改文件所有者
groupadd 组名
groupadd monster 创建一个组 monster
useradd -g monster fox 创建一个用户fox,并放入到monster组中
chgrp 组名 文件名 修改文件所在的组
使用root用户创建文件orange.txt 看看当前这个文件属于那个组,然后将这个文件所在组修改到fruit组
groupadd fruit
touch orange.txt(root)
ll 或者ls -ahl
chgrp fruit orange.txt
改变用户所在组
usermod -g 新组名 用户名
usermod -d 目录名 用户名 (改变用户登录的初始目录 注意:用户需要有进入新目录的权限)
权限的介绍
-rwxrw-r–
第0位:(d,-,l,c,b)
l:是链接,详单与windows的快捷方式
-:代表普通文件(.txt)
d:代表目录(文件夹)
c:是字符设备文件,鼠标,键盘
b:是块设备,硬盘
第1-3位确定所有者拥有文件的权限
第4-6位确定所在组拥有文件的权限
第7-9位确定其他用户拥有该文件的权限
rwx权限:
rwx作用在文件上:
r:代表可读(read) 可以读取,查看
w:代表可写(write) 可以修改,但不代表可以删除该文件,删除该文件的前提是对该文件所在的目录有写权限
x:代表可执行(execute) 可以被执行
rwx作用到目录上:
r:可以读取 ls查看目录内容
w:可以修改,对目录内创建+删除+重命名目录
x:可以进入该目录
-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc
1: 文件:1 目录:子目录数
1213: 文件大小(字节),如果是文件夹,显示4096字节
Feb 2 09:39 最后修改日期
修改权限-chmod
第一种方式:+、-、=修改
u:所有者 g:所在组 a:所有人
chmod u=rwx,g=rx,o=x 文件/目录名
chmod o+w 文件/目录名
chmod a-x 文件/目录名
第二种方式:通过数组变更权限
r=4,w=2,x=1
chmod 751 文件目录名
修改文件所有者-chown
chown newowner 文件/目录 该百年所有者
chown newowner:newgroup 文件/目录 改变所有者和所在组
-R 如果是目录,则使其下所有子文件或目录递归生效
chown tom /home/abc.txt 将/home/abc.txt文件所有者修改成tom
chown -R tom /home/kkk 将/home/kkk目录下所有的文件和目录的所有者修改成tom
修改文件/目录所在组-chgrp
chgrp newgroup 文件/目录
groupadd shaolin
chgrp shaolin /home/abc.txt
将/home/abc.txt文件所在组修改成shaolin
chgrp -R shaolin /home/test
对文件夹的rwx:
x:表示可以进入到该目录,比如cd
r:表示可以ls,将目录内容显示
w:表示可以在该目录,删除或者创建文件
crond任务调度:
crontab 进行定时任务的设置
任务调度:是指系统在某个时间执行的特定的命令或程序
分类:1.系统工作:有些重要的工作必须周而复始的执行
2.个别用户工作:个别用户可能希望执行某些程序
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
crontab 选项
快速入门:
设置任务调度文件: /etc/crontab
设置个人任务调度,执行crontab -e 命令
接着输入任务到调度文件:*/1 * * * * ls -l /etc/ > /tmp/to.txt命令
意思说每个小时的每分钟执行 ls -l /etc/ > /tmp/to.txt命令
第一个*:一小时当中的第几分钟 0-59
第二个*:一天当中的第几小时 0-23
第三个*:一个月当中的第几天:1-31
第四个*:一年当中的第几个月:1-12
第五个*:一周当中的星期几:0-7
*:代表任意时间
,:代表不连续的时间
-:代表连续的时间范围:
*/n:代表每隔多久执行一次
crontab -r:终止任务调度
crontab -l:列出当前有哪些任务调度
service crond restart:重启任务调度
at定时任务:
1.at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行
2.默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业
3.at命令是一次性定时计划任务,执行完成一个任务后不在执行此任务了
4.在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
ps -ef 检查当前正在执行的进程 ps -ef |grep atd 可以检测atd是否在运行
命令格式:
at 选项 时间
Ctrl +D 结束at命令的输入
选项:
-m:当指定的任务被完成后,将给用户发送邮件,即使没有标准输出
-I:atq的别名
-d:atrm的别名
-v:显示任务将被执行的时间
-c:打印任务的内容到标准输出
-V:显示版本信息
-q<队列>:使用指定的队列
-f<文件>:从指定文件读入任务而不是从标准输入读入
-t<时间参数>:以时间参数的形式提交要运行的任务
时间:
1.接受在当天的hh:mm式的时间指定,假如时间已经过去,那么就在第二天执行
2.使用midnight,noon,teatime等比较模糊的词语来指定时间
3.采用12小时计时制,即在时间后面加上AM或者PM来表明是上午还是下午
4.指定命令执行的具体日期,指定格式为moom day 或 mm/dd/yy 或 dd.mm.yy,指定的日期必须跟在指定时间的后面
5.使用相对计时法,指定格式为:now+count time-units,now就是当前 时间,time-units是时间单位,这里能够是minutes,hours,days,weeks.count是时间的数量,几天,几小时
6.直接使用today,tomorrow来指定文成命令的时间
Linux分区:
简单说就是分区挂载到文件上
1.Linux来说无论有几个分区,分区给那一,兖使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分
2.LIinU型采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来,这时要载入一个分区将使它的存储空间在一个目录下获得
Linux硬板分为IDE(hd)硬盘和SCSI(sd)硬盘,目前基本都是SCSI硬盘
对于SCSI硬盘标志文"sdx",SCSI硬盘是用"sd"来表示分区所在设备的类型,x表示盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),代表分区(1-4表示主分区或扩展分区,5开始就是逻辑分区)
查看所有设备挂载情况
lsblk或者 lsblk -f
以增加一块硬盘为例来熟悉磁盘的相关指令和深入理解磁盘分区,挂载,卸载的概念
1.虚拟机添加硬盘
在虚拟机菜单里选择设置,然后设备列表里添加硬盘,然后一路下一步,磁盘大小可以选择修改,然后重启即可
2.分区
分区指令 fdisk /dev/sdb
开始对/sdb分区
m:显示命令列表
p:显示磁盘分区 同 fdisk -l
n:新增分区
d:删除分区
w:写入并退出
q:不保存直接退出
开始分区后输入n,新增分区,然后选择p,分区类型为主分区,两次回车默认剩余全部空间,最后输入w写入分区并退出
3.格式化
格式化磁盘 mkfs -t ext4 /dev/sdb1 (ext4是分区类型)
4.挂载
挂载:将一个分区与一个目录联系起来
mount 设备名称 挂载目录 mount /dev/sdb1 /newdisk
unmount 设备名称 或者挂载目录 unmount /dev/sdb1 或者 unmount /newdisk
注意:使用命令行挂载重启后会失效
5.设置可以自动挂载
永久挂载:通过修改/etc/fstab实现挂载
添加完成后 执行mount -a即可生效
文件的创建其实真实存放的还是在硬盘上
磁盘情况查询:
df -h 查询系统磁盘使用情况
查询指定目录的磁盘占用情况:
du -h
查询指定目录的磁盘占用情况,默认为当前目录
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
–max-depth=1 子目录深度
-c 列出明细的同时,增加汇总值
磁盘情况-工作实用指令:
统计/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目录,如果没有tree,则使用yum install tree安装
tree /home/
网络配置:
NAT网络模式:
简单来说:就是Linux先连接本机,然后本机通过无线网卡代理找到局域网的网关,最后连接到互联网,实现上网
查看网络IP和网关
查看windows环境中的VMnet8网络配置(ipconfig,cmd)
查看Linux网络配置ifconfig
ping测试主机之间网络连通性
ping 目的主机 测试房钱服务器是否可以连接到目的主机
Linux网络环境配置:
第一种方法 (自动获取):登录后,通过界面的来设置自动获取ip
特点:Linux启动后自动获取IP
缺点:每次自动获取的IP地址可能不一样
第二种(指定IP):
直接修改配置文件来指定IP,并可以连接到外网
编辑 vi /etc/sysconfig/network-script/ifcfg-ens33
ifg-ens33文件说明:
DEVICE=eth0 接口名(设备,网卡)
HWADDR=00:0c:2x:6x:0x:xx MAC地址
TYPE=Ethernet 网络类型
UUID=… 随机id
重启网络服务或者重启系统生效
service network restart /reboot
设置主机名和hosts映射:
1.为了方便记忆,可以给Linux系统设置主机名。也可以根据需要修改主机名
2.指令hostname:查看主机名
3.修改文件在/etc/hostname指定
4.修改后,重启生效
通过主机名找到某个Linux系统
windows:
C:\Windows\System32\drivers\etc\hosts
192.168.200.130 gssStu
Linux:
/etc/hosts文件指定
192.168.200.1 主机名随意
Hosts:
一个文本文件,用来记录IP和Hostname的映射关系
DNS:Domain Name System 的缩写,域名系统
是互联网上作为域名和IP地址相互映射的一个分布式数据库
主机名解析机制分析:
1.浏览器先检查浏览器缓存中有没有该域名解析IP地址,有就先调用这个IP完成解析,如果没有,就检查DNS解析器缓存,如果有直接返回IP完成解析,这两个缓存可以理解为本地解析器缓存
2.一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存它的IP地址(DNS解析记录),在cmd窗口中输入 ipconfig/displaydns DNS域名解析缓存
3.如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有对应的域名IP映射,如果有,则完成解析并返回
4.如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析域
进程管理:
1.在Linux中,每个执行的程序都称为一个进程,每个进程都分配一个ID号
2.每个进程都可能以两种方式存在的,前台和后台,所谓前台程序就是用户目前的屏幕上可以进行操作的,后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行
3.一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,知道关机才结束
程序就是代码,将程序放进内存中就成了进程
显示系统执行的进程
ps 查看目前系统中正在执行的进程以及它们的状况
-a:显示当前终端的所有进程信息
-u:以用户的格式显示进程信息
-x:显示后台进程运行的参数
以全格式显示当前所有的进程,查看进程的父进程
ps -ef 是以全格式显示当前所有的进程
终止进程:
若某个进程执行一半需要停止,或是已消耗很大的系统资源时,此时可以考虑停止此进程,使用kill命令来完成此项任务
kill 选项 进程号 (通过进程号杀死进程)
killall 进程名称 (通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时有用)
常用选项: -9 表示强迫进程立即停止
踢掉某个非法用户
kill 进程号
终止远程登录服务sshd,在适当时候再次重启sshd服务
kill sshd对应的进程号 /bin/systemctl start sshd.service
终止多个gedit
killall gedit
强制杀掉一个终端
kill -9 终端进程号
查看进程树 pstree
pstree 选项 ,可以更加直观的来看进程信息
-p :显示进程的PID
-u :显示进程的所属用户
服务管理(service):
服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求(mysqld,sshd,防火墙),又叫守护进程
service 服务名(start,stop,restart,reload,status)
在CentOS7.0后,很多服务器不在使用service,而是systemctl
service 指令管理器的服务在 etc/init.d查看
查看服务名:
setup 看到全部的系统服务
运行级别:
systemctl get-default 获取当前运行级别
systemctl set-default TARGET.target 设置当前运行级别
chkconfig指令可以给服务的各个运行级别设置自 启动/关闭
chkconfig指令管理的服务在/etc/init.d查看
查看服务 chkconfig --list (grep xxx)
chkconfig 服务名 --list
修改服务 chkconfig --level 5 服务名 on/off
chkconfig重新设置服务后自启动或自关闭需要重新启动机器生效
systemctl管理指令
systemctl (start/stop/restart/status) 服务名
systemctl指令管理的服务在 /usr/lib/systemd/system 查看
systemctl list-unit-files(grep 服务名) 查看服务开机启动状态
systemctl enable 服务名 设置服务开机启动
systemctl disable 服务名 关闭服务开机启动
systemctl is-enabled 服务名 查询某个服务是否是自启动的
细节:
1.关闭或者启用防火墙后,立即生效
2.这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
3.如果想要设置某种服务自启动或关闭永久生效,要使用systrmctl (enable/diable) 服务名
打开或者关闭指定端口:
firewall-cmd --permanent --add-port=端口号/协议 打开端口
firewall-cmd --permanent --remove-port=端口号/协议 关闭端口
firewall-cmd --reload 重新载入才能生效
firewall-cmd --query-port=端口号/协议
查看协议: netstat -anp
动态监控进程:
top与ps命令相似,它们都用来显示正在执行的进程,但top可以在执行一段时间可以更新正在运行的进程
top 选项
-d 秒数 指定top命令每隔几秒更新,默认3秒
-i 使top不显示任何闲置或者僵死进程
-p 通过指定监控进程ID来仅仅监控某个进程的状态
P 以CPU使用率排序,默认就是此项
M 以内存的使用率排序
N 以PID排序
q 退出top
监听特定用户:
top:输入此指令,按回车键,查看执行的进程
u:然后输入"u"回车,在输入用户名
终止指定的进程
top:输入此指令,按回车键,查看执行的进程
k:输入"k"回车,在输入要结束的进程ID号
查看系统网络情况netstat
netstat 选项
-an 按一定顺序排列输出
-p 显示那个进程在调用
检测主机连接命令ping:
是一种网络检测工具,主要是用于检测远程主机是否正常,或是两部主机间的网线或网卡故障
rpm包的管理:
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版本中,它生成具有.RPM扩展名的文件
rpm -qa |grep xxx
rpm -qa 查询所安装的所有rpm软件包
rpm-qa 软件包名 查询软件包是否安装
rpm -qi 软件报名 查询软件包信息
rpm -ql 软件包名 查询软件包中的文件
rpm -qf 文件全路径名 查询文件所属的软件包
卸载rpm包:
rpm -e RPM包名称
–nodeps 强制删除
$ rmp -e --nodeps 软件包名
安装rpm包:
rpm -ivh rpm包全路径名称
-i install 安装
-v verbose 提示
-h hash 进度条
yum是shell前端软件包管理器,基于RPM包管理,能够从指定发服务器自动下载RPM包并且安装,自已自动处理依赖性关系,并且一次安装所有依赖的软件包
yum list 查询yum服务器是否有需要安装的软件
yum install xxx 下载安装
Shell编程:
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是写一些编程
Shell脚本的执行方式
要求:
1.脚本以#!/bin/bash开头
2.脚本需要有可执行权限
vim hello.sh
#!bin/bash echo "hello,world"
脚本常用的执行方式
1.赋于hello.sh脚本的+x权限,再执行
2.直接执行 sh hello.sh
Shell变量
1.Linux Shell中的变量分为系统变量和用户自定义变量
2.系统变量: H O M E , HOME, HOME,PWD, S H E L L , SHELL, SHELL,USER
3.显示当前shell中所有变量
变量的定义:变量名=值
撤销变量: unset 变量
声明静态变量: readonly 变量
定义变量A A=100
输出变量前面要加$ echo A e c h o " A = A echo "A= Aecho"A=A"
撤销变量A unset A
声明静态变量B readonly B=2 静态变量不能被unset
定义变量的规则
1.变量名称可以由字母,数字和下划线组成,但不能以数字开头
2.等号两边不能有空格
3.变量名称一般习惯为大写
将命令的返回值赋值给变量
A=date
,运行里面的命令,并把结果返回给变量A 等价于A=$(date)
设置环境变量:
打开 /etc/profile 加入全局变量
export 变量名=变量值 将shell变量输出为环境变量/全局变量
source 配置文件 让修改后的配置信息立即生效
echo $变量名 查询环境变量的值
注:在输出TOMCAT_HOME环境变量前,需要让其生效 source /etc/profile
Shell脚本单行注释 # 多行注释 :<<!内容!
位置参数变量:
n 表 示 第 几 个 参 数 , 10 以 上 的 用 n 表示第几个参数,10以上的用 n表示第几个参数,10以上的用{10} $0代表命令本身
$* 表示命令行中所有的参数
$@ 表示命令行中所有的参数
$# 表示命令行中所有参数的个数
预定义变量:
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
$? 最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行,如果非0则上一个命令执行不正确
运算符:
基本语法:
1." ( ( 运 算 式 ) ) " 或 " ((运算式))" 或" ((运算式))"或"[运算式]" 或 expr m + n
2.注意expr运算符间要有空格,如果希望把expr的结果付给某个变量使用反引号
3.expr m - n
4.expr * ,/,%
(2+3)x4
res1=$(((2+3)*4))
res2=$[(2+3)*4]
TEMP=expr 2 + 3
res3=expr $TEMP \* 4
res4=$[$1+$2]
条件判断:
[ condition ] 注意condition前后有空格
非空返回true,可使用$!验证(0为true,>1为false)
常用判断条件
= 字符串比较
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-ne 不等于
-r 有读权限
-w 有写权限
-x 有执行权限
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并且是一个目录
if判断语句
“ok” 是否等于"ok"
if[ “ok” = “ok” ]
then
echo"equal"
fi
case语句
case $变量名 in
“值1” )
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for循环
语法1:
for 变量 in 值1 值2 值3 …
do
程序
done
语法2:
for((初始值;循环控制条件;变量变化))
do
程序
done
while循环
语法1:
while [ 条件判断式 ]
do
程序
done
read读取控制台输入
read (选项) (参数)
-p 指定读取值时的提示符
-t 指定读取值时等待的时间,如果没有在指定的时间内输入,就不再等待
参数 变量:指定读取值的变量名
read -p “请输入一个数NUM1” NUM1
echo “$NUM1”
函数:
Shell编程和其他编程语言一样,有系统函数,也可以自定义函数
basename 返回完整路径最后/的部分 ,常用于获取文件名
basename [string] [suffix] basename命令会删掉所有的前缀包括最后一个(’/’)字符,然后将字符串显示出来
返回 /home/aaa/test.txt
basename /home/aaa/test.txt
返回值:test.txt
basename /home/aaa/test.txt .txt
返回值:test
dirname 返回完整路径最后/的前面部分,常用于返回路径部分
返回/home/aaa/test.txt的/home/aaa
dirname /home/aaa/test.txt
自定义函数:
[ function] funname[()]
{
Action;
[return int;]
}
调用直接写函数名 funname [值]
日志管理:
1.日志管理是总要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息,系统的启动信息,系统的安全信息,邮件的相关信息,各种服务相关信息
2.日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者而受到攻击时攻击者留下的痕迹
3.可以这样理解日志是用来记录重大事件的工具
日志保存在 var/log下
/var/log/boot.log 系统启动日志
/var/log/cron 记录与系统定时任务相关的日志
/var/log/lastlog 记录系统中所有用户最后一次的登录时间的日志,这个文件也是二进制文件,要用lastlog命令查看
/var/log/mailog 记录邮件信息的日志
/var/log/message 记录系统重要消息的日志,这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题,首先要检查的用该就是这个日志文件
/var/log/secure 记录验证和授权方面的信息,只要设计账号和密码的程序都会记录,比如系统的登录,ssh的登录,su切换用户.sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件
/var/tun/ulmp 记录档案已经登录的用户的信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息,这个文件不用vi查看,而使用w,who,users等命令查看
日志管理服务 rsyslogd
查询Linux中的rsyslogd服务是否启动
ps aux |grep “rsyslog” |grep -v “grep”
查询rsyslogd 服务的自启动状态
systemctl list-unit-files |grep rsyslog
日志文件的格式:
1.时间产生的时间
2.产生事件的服务器的主机名
3.产生事件的服务名或程序名
4.事件的具体信息
日志的类型:
auth pam产生的日志
authpriv ssh,ftp等登录信息的验证信息
corn 时间任务相关
kern 内核
lpr 打印
mail 邮件
mark 服务器内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to nuix copy 主机之间相关的通信
local 1-7 自定义日志设备
日志级别:
debug 有调试信息的,日志通信最多
info 一般信息日志,最常用
notice 最具有重要性的普通条件的信息
warning 警告级别
err 错误级别,阻止某个功能或者模块不能正常工作的信息
crit 严重级别,阻止整个系统或者整个软件不能正常工作
alert 需要立即修改的信息
emerg 内核崩溃等重要信息
none 什么都不记录
从上到下,级别从低到高
日志轮替:
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除
日志轮替文件命名:
1.centos7使用logrotate进行日志轮替管理,要想法改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中"dateext"参数
2.如果配置文件中有"dateext"参数,那么日志会用日期来作为日志文件的后缀,这样日志文件名不会重叠,也不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件
3.如果配置文件中没有"dateext"参数,日志文件就需要进行改名了,当第一次进行日志轮替时,当前的"secure"日志会自动改名为"secure1",然后新建"secure"日志,用来保存新的日志,当第二次进行日志轮替时,“sercure.1"会自动改名为"secure.2”,当前的"secure"日志会自动改名为"secure.1"然后也会新建"secure"日志,用来保存新的日志
/etc/logrotate.conf为logrotate的全局配置文件
weekly 每周对日志文件进行一次轮替
rotate 4 共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
create 创建新的空的日志文件,在日志轮替后
dateext 使用日期作为日志轮替文件的后缀
也可以把某个日志文件的轮替规则写到/etc/logrotate.d目录
参数说明:
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
rotate 数字 保留的日志文件的个数,0指没有备份
compress 日志轮替时,旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者的所属组
mail address 当位置轮替时,输出内容通过邮件发送到指定的邮件地址
missingok 如果日志不存在则忽略日志的警告信息
notifempty 如果日志为空文件,则不进行日志轮替
minsize 大小 日志轮替的最小值也就是日志一定要到达这个最小值才会轮替,不然不轮替
size 大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
dateext 使用日期作为日志轮替文件的后缀
sharedscripts 在此关键字之后的脚本只执行一次
preotate/endscript 在日志轮替之前执行脚本命令
postrotate/endscript 在日志轮替之后执行脚本命令
日志轮替机制原理:
日志轮替之所以可以在指定的时间备份,是依赖系统定时任务,在/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件以阿里定时任务执行
查看内存日志:
journalctl 可以查看内存日志
journalctl 查看全部
journalctl -n 3 查看最新3条
journalctl --since 19:00 --until 19:10:10 查看起始时间到结束时间的日志可加日期
journalctl -p err 报错日志
journalctl -o verbose 日志详细内容
journalctl _PID=1245 _COMM=sshd 查看包含这些参数的日志
注意: journalctl 查看的是内存日志,重启清空
Linux备份和恢复:
1.把需要的文件用tar打包就行
2.使用dump和restore命令
安装dump和restore
yum -y install dump
yum -y install restore
dump支持分卷和增量备份
-c 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头
-0123456789 备份的层级,0为最完整备份,会备份所有文件,若指定0以上层级,则备份至上一次备份依赖修改或新增的文件,到9再次轮替
-f <备份后文件名> 指定备份后文件名
-j 调用bzlib库压缩备份文件,就是将备份后的文件压缩
-T<日期> 指定开始备份后文件名
-u 备份完毕后,在/etc/dumpdares中记录备份的文件系统,层级,日期和时间
-t 指定文件名,若该文件已经存在备份文件中,则列出名称
-W 显示需要备份的文件及其最后一次备份的层级,时间,日期
-w 与-W类似,但仅显示需要备份的文件
将/boot 分区所有内容备份到/opt/boot.bak0.bz2 文件中,备份层级为"0"
dump -0uj -f /opt/boot.bak0.bz2 /boot
在/boot目录下新增新文件,备份层级为"1"
dump -1uj -f /opt/boot.bak1.bz2 /boot
dump 备份分区时是可以支撑增量备份的,如果备份文件或者目录不在支持增量备份,即只能使用0级别备份
restore 命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原始文件
restore 模式选项 选项
-C 使用对比模式,将备份的文件与已存在的文件相互对比
-i 使用交互模式,在进行还原操作时,restore指令将依序询问用户
-r 进行还原模式
-t 查看模式,看备份文件有哪些文件
选项:
-f <备份设备> 从指定的文件中读取备份数据,进行还原操作
restore 命令比较模式,比较备份文件和原文件的区别
mv /boot/hello.java /boot/hello100.java
restore -C -f boot.bak.bz2 有一处不同就是修改的
restore 命令查看模式 看备份文件有哪些数据
restore -t -f boot.bak0.bz2
restore 命令还原模式 如果有增量备份,需要把增量备份问价也进行恢复,有几个增量备份问价就要恢复几个,按顺序来恢复
mkdir /opt/boottmp
cd /opt/boottmp
restore -r -f /opt/boot.bak.bz2 恢复到第一次完全备份状态
restore -r -f /opt/bok.bak1.bz 恢复到第二次增量备份状态
restore 命令付汇备份的文件,或者整个目录的文件
restore -r -f 备份好的文件
Linux可视化管理:
Webmin是功能强大的基于Web的Linux系统管理工具,管理员通过浏览器访问Webmin的各种管理功能完成相应的管理操作
重启webmin
/etc/webmin/restart 重启
/etc/webmin/restart 启动
/etc/webmin/restart 停止
防火墙开放6666端口:
firewall-cmd --zone=public --add-port=8848/tcp --permanent 配置防火墙
firewall-cmd --reload 更新防火墙
firewall-cmd --zone=public --list-ports 查看已经开放的端口号
这篇关于Linux的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南