Linux基础

一 安装
1.RPM—红帽软件包管理器 简化了以前安装软件的复杂度
2.Yum软件仓库能够根据用户的要求分析出所需要的软件包及其关系,自动从服务器下载软件包安装,类似于maven
十个基础命令
1.用户和Linux系统之间交互的关系图:从里到外依此为:硬件–》内核–》系统调用接口–》程序或者软件–》用户
2.shell不仅仅是脚本的称谓,它其实是命令行工具,就是平时敲的命令行,Linux系统一般使用的是bash解释器,解释用户输入的shell命令行,
从而调用相应的程序或者服务工作,bash解释器的优势
i.通过上下键来调用执行过的命令;ii.tab键补全命令;iii.强大的批处理能力,可以写shell脚本批处理
3.Linux中命令的格式为: 命令名称 [命令参数] [命令对象] 命令参数有长格式 man --help
和短格式 man -h 两种
4.echo在终端输入字符串或者定义的变量的值 格式:echo [字符串|$变量名]
5.date命令 使用格式:date[选项][+格式] ,如果只输入date则是系统默认当前时间,date中常用的参数举例如下:
date “+%Y-%m-%d%t%H:%M:%S” 参数说明:%Y大写Y表示四位数年份(2019) %y小写y表示两位数年份(19)
%m表示月份,%M表示分钟,%d只展示某一日,%D会展示如dd/mm/yy这种格式,后面H表示24小时制,I表示12小时制,除了固定的格式外,其他字符输入进去,正常展示出来
6.ps 显示系统进程 -a显示所有进程 -u用户及其他详细信息
7**.top 命令类似于windows中的任务管理器**,能够动态监控进程活动以及系统负载
第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。
第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程 数。
第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源 百分比、空闲的资源百分比等
ps:
⦁ 如果不在高峰期,进程多数是在S状态,Z是僵尸态,这种进程实际已经结束,但是父进程还没有回收资源,僵尸态进程已经释放了除进程入口外的所有资源

ps:状态描述参考:https://mp.weixin.qq.com/s/fzLcAkYwKhj-9hgoVkTzaw
cpu使用率的计算公式:
在这里插入图片描述
一般会将这四种cpu时间细分成top中的8种状态:
在这里插入图片描述
cpu使用率和负载飙高的原因归类分析
cpu sys高: 可能是上下文切换比较多,线程数过多;
或者存在I/O、内存等系统资源瓶颈,大量进程无法获取所需资源,导致的上下文切换。
cpu us高: 用户进程使用cpu多,主要消耗在应用上。原因可能有:
i:死循环或者循环过多或代码中存在CPU密集计算,比如循环百万次或者千万次的内存空间操作
ii.资源等待导致线程数过高或者线程池满了,导致CPU也上涨
定位过程:top定位具体是cpu高还是内存高,然后jstack查看线程,内存溢出问题则看tomcat系统日志或者dump

在这里插入图片描述

第 4 行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量
第 5 行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
topa按照cpu或者内存使用排序 topd打开的情况下 按大写P或M分别查看
参考:
https://www.cnblogs.com/jiqing9006/p/9270504.html

  1. centos如果是最小化安装有时候会默认不安装ifconfig命令,解决方法:
    (1)echo $PATH 看下环境变量的路径,在/user/sbin路径下 使用ls /sbin|grep ifconfig找下,如果没有,则什么都找不到
    (2)yum search ifconfig 找出这个命令在哪个包 ,然后 yum -y install 包名即可
    9.uname -a显示内核名称、主 机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名 称等信息。

10.uptime 查勘系统当前时间,系统已经运行的时间,系统的负载情况,是系统在1分钟、5分钟、15分钟的压力情况,一般不超过1,生产不超过5
11。free -h查看当前内存的使用情况 显示内存的总量,使用和剩余等 以及swap空间的使用情况
swap空间的解释:当物理内存已经满时,系统将使用交换空间,如果系统物理内存已经满了 但是需要更多的内存,那么内存中的非活动页面将移交至交换空间,
虽然交换空间可以帮助具有少量RAM的计算机,但不应将其视为替代更多RAM。交换空间位于硬盘驱动器上,其访问时间比物理内存慢
12.who能够查看当前所有登录系统的用户和终端ip
13.history 能够展示出当前用户在本终端执行过的100条命令,不管这些命令是否起到了作用,统统展示,history -c是清空所有历史记录
14…开头的都是隐藏文件
15.工作目录切换命令
(1)cd切换目录,cd- 从当前目录换回上一次目录,cd ~切换到当前用户的家目录, cd…返回到上一层目录
(2)ls 列出当前目录所有的文件夹或者文件,ls -a 列出所有包括隐藏文件,ls -l=ll 列出文件(夹)包括大小,修改时间以及权限等详细信息,
ls 文件夹 查看具体文件夹中的文件的情况
(3)ll -h能以合适的单位展示文件大小,比如k M等 等价于 ll --block-size=M/K命令
对于文件夹而言,这里的大小表示的是子文件和子目录名所占的字节数,而非真正目录大小,目录大小用du查看
在这里插入图片描述

16.文本文件查阅编辑命令
(1)cat命令 可以查看内容较少的纯文本文件,cat -n则是带上行号,会直接将整个文本内容全部展示,如果过多,则一下子看不完
(2)more 适合长文本阅读,因为分屏展示的,会展示当前阅读的百分比,空格可翻页
(3)tail -n 20查看文件后20行,另外tail -f 文件名 可以实时持续刷新输出文件内容,这个在查看日志特别有用
(4)stat 文件名 可以查看文件具体存储信息,大小,以及最近访问时间,最近更改时间(指的是更改文件本身内容)。最近改动时间(指修改文件)本身
属性,如权限、文件类型等)
(5)wc 文件名 统计文件内容具体:-l 统计文件行数 -w 统计单词数 -c统计字节数
17.文件目录管理命令
(1)touch创建一个空白文件,touch -d “时间” 文件名 改变一个文件最近访问时间和最近内容修改时间
(2)mkdir 创建目录,可以嵌套创建 即 mkdir test/testinner 前提test必须存在,如果不存在要加-p,mkdir -p test/testinner
(3)cp “文件名” 目录 复制文件到目录 -p能够使得源文件属性保持不变,比如最近访问时间等
(4)mv 移动或者重命名文件,若不同目录则是移动,同一目录则是重名令(先删除,再粘贴)
(5)rm -fr 删除操作 -f是避免每次都多询问一次,-r添加之后目录也可以删除
(6)设备文件/dev/zero 本身不会占用系统空间,但是却能够提供任意大小的文件,通过dd if=zero of=…/home/test/textfromzero.text count=1 bs=100M ,
其中 if来源 of为去向,count为数据块的个数,bs为一个块的大小
(7)file文件名 能够知道文件的具体类型
18.打包压缩
(1)tar命令 格式为 tar 选项 文件
(2)常见的压缩格式有.tar ,.tar.gz,.tar.bz2
(3)常见命令 压缩: tar -czvf 目标文件名 源目录 -c表示创建 -z表示压缩格式为Gzip -v能够展示整个压缩过程,否则如果压缩时间过长,仿佛系统卡死一样
-f必须有,且放最后面 后面跟上目标文件名
(4)解压命令: tar -xzvf 源文件 -C 目标目录 -C(大写)后面跟目标目录
19.搜索命令
(1)grep 选项 关键字 文件 在文件中搜索关键字, 常用选项-n 显示行号,-v反向选择 :eg grep -nv echo startup.sh,
在startup.sh中搜索不含echo关键字的行,带行号显示出来
(2)find [查找路径] 查找条件 操作 以下是查询条件
find命令的正则表达式: 匹配的是文件全路径名,而非只是文件名本身

  find ./ -regex   ".*kaf.*"  有结果
    find ./ -regex   "kaf.*"  没结果,虽然命令kafka-server-stop.sh有,但是是以./开头的

-name 匹配名称
-perm 匹配权限(mode 为完全匹配,-mode 为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n 指 n 天以内,+n 指 n 天以前)
-atime -n +n 匹配访问文件的时间(-n 指 n 天以内,+n 指 n 天以前)
-ctime -n +n 匹配修改文件权限的时间(-n 指 n 天以内,+n 指 n 天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件 f1 新但比 f2 旧的文件
–type b/d/c/p/l/f
匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管 道、链接文件、文本文件)
-size
匹配文件的大小(+50KB 为查找超过 50KB 的文件,而-50KB 为查找小 于 50KB 的文件)
-prune 忽略某个目录
-exec …… {}; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)
eg:find /home/tomcat/tomcat/bin -name “com*” ,此处必须用双引号,否则用星号会报错
eg: find /home -size +50K 查找超过50K的文件,+表示超过,-表示小于,K或者M必须大写
eg:find /home -size -50M exec rm -rf {} ; 其中{}表示每一个查找出来的文件
三、管道符、重定向与环境变量
1.重定向的五种模式:标准覆盖输出重定向(文件描述符1)、标准追加输出重定向、错误覆盖输出重定向(文件描述符2)、错误追加输出重定向、输入重定向(冷门)
2.输出重定向命令详解用法:
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1

命令 &>> 文件
将标准输出与错误输出共同写入到文件中(追加到原有内容
的后面)
3.管道符命令,将前一个命令的结果交给后一个结果作为输入值 管道符用法 命令1|命令2
eg: grep “name” receiver.log | wc -l 将grep查找出的用wc -l统计行数
4.linux系统装jdk8并设置环境变量
参考 https://www.cnblogs.com/wulixia/p/11008601.html
(1)rz 命令从xshell将64位linux的tar.gz传输斤lunix中
(2)解压
(3)设置环境变量
在/etc/profile文件中最后位置插入以下配置:

export JAVA_HOME=/home/java/jdk1.8.0_231 //这里是jdk安装的主目录
export CLASSPATH=${JAVA_HOME}/lib/
export PATH=$PATH:${JAVA_HOME}/bin

(4)source /etc/profile使得配置文件实时生效
(5)最后 java -version 看能否找到java命令
5.tomcat正常启动但是浏览器访问不到,一般都是防火墙设置禁止访问端口的问题,解决参考 https://blog.csdn.net/weixin_37766087/article/details/100026220#%E4%B8%80%207%E6%AD%A5%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88
Step4. 检验防火墙是否启动
输入命令 " firewall-cmd --state " 如果输出running 则表示防火墙开启了,如果没有正在运行需要执行命令" systemctl start firewalld "开启防火墙服

Step5. 检查8080端口是否被防火墙开启
输入命令" firewall-cmd --permanent --zone=public --list-ports “ 如果终端输出 “8080/tcp” 则说明8080端口被开启

如果没有该输出则需要执行命令" firewall-cmd --zone=public --add-port=8080/tcp --permanent"开启8080端口, 出现" success" 则表示添加成功。

Step6. 重新启动防火墙
输入命令" firewall-cmd --reload" 重新启动防火墙,出现” success“ 字样则表示重新启动成功。

Step7.验证开启的8080端口是否生效

    输入命令” firewall-cmd --zone=public --query-port=8080/tcp“ 验证8080端口是否生效,如果出现 ” yes “字样则代表生效。

6.命令行中的通配符
(1)目前实验只有表示任意多个字符,?表示一个字符,[a-z]匹配字母。[0-9]匹配数字 其他暂时未验证成功
(2)常用的转移符号
4 个最常用的转义字符如下所示。 ➢ 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。 ➢ 单引号(’’):转义其中所有的变量为单纯的字符串。 ➢ 双引号(""):保留其中的变量属性,不进行转义处理。 ➢ 反引号(``):把其中的命令执行后返回结果。 ,最后一个eg:
波浪号那个键 不按shift 反引号,echo uname -a 输出uname -a,但是加反引号uname -a则是执行uname -a的结果打印出来
5.重要的环境变量
(1)用户输入命令执行时其实走了四步
i.判断用户是否以绝对路径或者相对路径方式输入路径,如果是则直接去该路径找对应命令执行
ii.检查输入命令是否为别名 alias 命令能够创建别名命令:
alias 别名=“命令” eg:alias into =“cat /logs.log&>>test.txt” ;然后直接执行into 就能实现效果
unalias 别名 取消别名的设置
iii.bash解释器判断用户输入的是内部命令还是外部,内部即解释器内部指令,直接执行,外部指令交给下一步
iv.外部命令系统会在多个路径查找,定义这些路径的变量为PATH,变量一般都大写,每个路径分号隔开
(2)系统中常见重要的10个环境变量
HOME 用户的主目录(即家目录)
SHELL 用户在使用的 Shell 解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash 解释器的提示符
PATH 定义解释 器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器
(3**)自定义变量 NGINX_CONFIG=usr/local/nginx/co**nf 使用 cd &NGINX_CONFIG
五、vi编辑器与shell命令脚本
1.vim编辑器
(1)vim是vi的升级版,兼容vi,此外功能更强大,比如可多次撤销,可图形化界面等
(2)vim的三种模式
i.命令模式,文本只读,可移动光标,复制查找等工作
ii.输入模式
iii.输入完之后保存或退出文档时的模式
(3)默认进入命令模式,然后切换,到输入模式操作,然后再到命令模式,最后由命令模式切换到末行模式退出,输入模式无法直接切换到行末模式
(4)命令模式下的一些常用命令
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的 5 行
yy 复制光标所在整行 5yy 复制从光标处开始的 5 行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作 加粗样式
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
G 光标定位到文本最后一行
(5)末行模式下常用命令
:w 保存 :q 退出 :q! 强制退出(放弃对文档的修改内容) :wq! 强制保存退出
:set nu 显示行号 :set nonu 不显示行号 :命令 执行该命令 :整数 跳转到该行
?字符串 在文本中从下至上搜索该字符串 /字符串 在文本中从上至下搜索该字符串
(6)修改机器名 在/etc/hostname文件中保存机器名,修改即可,hostname命令可查看机器名,如果没变化则需要重启虚拟机
2.shell脚本
(1)shell命令的工作方式有两种:交互式(用户每次输入一条命令,立即执行)和批处理(一次性写好所有命令,批量执行)
(2)理论上shell脚本命名任意,但是为了区分一般.sh结尾
(3)shell脚本中三种不同元素:
i. #!/bin/bash 即告诉系统用bash解释器执行脚本
ii. #后面的内容是注释,对脚本或者命令有个说明
iii. 直接命令
(4)接受用户的参数
i.内设的几个接受参数的变量 : 0 表 示 当 前 脚 本 的 名 称 , 0表示当前脚本的名称 , 0#对应总共几个参数, ∗ 对 应 的 是 所 有 参 数 值 , *对应的是所有参数值, ?表示上次命令的执行返回值,$1、$2等分别代表第1和第2个参数值,以此类推
eg:脚本里:echo 执行的脚本为 0 , 脚 本 的 参 数 一 共 0,脚本的参数一共 0#个,分别是$

执行脚本时参数值空格分开 bash practice.sh one two three
(5)判断用户的参数
测试语句格式:[ 条件表达式 ]两边都有空格,条件成立返回0,否则返回其他随机整数
条件测试语句按照测试对象来划分,可以分为 4 种:
i. ➢ 文件测试语句;使用指定条件来判断文件是否存在或者是否权限满足等情况的运算符, -d测试是否为目录 eg:[ -d /home/tomcat ] echo $?展示上个命令的执行结果为0
-e 文件是否存在 -r当前用户是否可读 -w 当前用户是否可写 -x当前用户是否可执行
ii. ➢ 逻辑测试语句; &&与前面成立才会执行后面,||或 前面不成立才会执行后面,! 非,取反
iii.➢ 整数值比较语句; 10 -eq 10 整数比较运算符前后要有空格 -eq 相等 -ne 是否不相等 -gt大于 -lt 是否小于 -le是否等于小于 -ge是否大于等于
iv.➢ 字符串比较语句 字符串比较符 =相等 !=是否不相等 -z是否空值(常用于判断某个变量是否被定义)
(6)流程控制语句
if条件测试语句:
单分支结构 if then fi 如果。。。那么。。
双分支结构 if then else fi
if 条件语句的多分支结构由 if、then、else、elif、fi 关键词组成
注意: then 要么写在if的下一行,即换行写,要么写在if的同行,但是要用分号隔开

eg : if [ $GRADE -gt 100 ]|| [ $GRADE -lt 0 ] ;then
      echo "......"
	  或者:
	 if [ $GRADE -gt 100 ]|| [ $GRADE -lt 0 ] 
	 then  echo "......"

(7)read -p 提示信息 value 接收用户输入的值作为变量 ,这里的提示文本一定要放在引号中,否则无法与变量分开

eg: read -p "please input score :" GRADE

(8)for循环
格式: for 变量 in 取值列表
do 命令
done

eg:
**IPLIST=“cat /home/shtest/ipaddr.txt” //这里对取值列表的定义,如果是通过该命令获得的,一定要“``”来执行,获得最终的执行结果,也可以使用 $(命令) 效果是一样的,也是取最后的结果

for IP in $IPLIST 
do ping  -c 4 $IP &>> $LOG
if [ $? = 0 ]
then echo $IP ping成功====
else
echo $IP 没有ping成功
fi
done

(9)变量的命名方式
i.变量名与=之间不能有空格
ii.只能使用英文字母,数字和下划线,首个字符不能以数字开头
iii.bash解释器里定义的关键字不能使用
iv.变量使用加上${name}(推荐),防止变量与其他字符混在一起
(10)while条件循环语句
while 条件为真
do 命令
done
(11)case 变量 in
模式1)
命令
;;
模式2)
命令
;;

*)
命令
esac

eg:
case ${VALUE} in
[a-z] | [A-Z])
echo 您输入的是字母=====
;;
[0-9])
echo 您输入的是数字======
;;
*)
echo 您输入的是符号=====	

esac
(10)linux下查cpu信息
参考:https://www.cnblogs.com/QicongLiang/p/10318487.html
/proc/cpuinfo记录了关于cpu的信息
process id是逻辑cpu的id
physical id是物理cpu的id
cpu cores是每个cpu的核数

cat /proc/cpuinfo | grep "physical id" | uniq | wc -l   #可以看出物理cpu的总个数。

cat /proc/cpuinfo | grep "cpu core" | uniq  #可以看出每个cpu的核数。

cat /proc/cpuinfo | grep  "processor" | wc -l #可以看出逻辑cpu的个数。

(11)查看系统能打开的文件句柄数:cat /proc/sys/fs/file-max
(12)句柄和文件描述符的含义
i**.只有windows中才有句柄,windows中的句柄是指针的指针**,因为windows中对象的经常会在内存中移动(如进行垃圾回收后),所以地址值经常会变,所以就对外提供一个指针的指针即句柄给用户,句柄的地址是不会变的;
ii.在进程的地址空间中设一张表,表里头专门保存一些编号和由这个编号对应一个地址,而由那个地址去引用实际的对象,这个编号跟那个地址在数值上没有任何规律性的联系,纯粹是个映射而已;Handle本身是一个32位的无符号整数,它用来代表一个内核对象。它并不指向实际的内核对象,用户模式下的程序永远不可能获得一个内核对象的实际地址(一般情况下)。那么Handle的意义何在?它实际上是作为一个索引在一个表中查找对应的内核对象的实际地址。那么这个表在哪里呢?每个进程都有这样的一个表,叫句柄表。该表的第一项就是进程自己的句柄
iii.文件句柄只是windows中众多句柄中的一种
iv. 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符
v.内核为了不让某一个进程消耗掉所有的文件资源,其也会对单个进程最大打开文件数做默认值处理(称之为用户级限制),默认值一般是1024,使用ulimit -n命令可以查看。在Web服务器中,通过更改系统默认值文件描述符的最大值来优化服务器是最常见的方式之一.
六、用户身份与文件权限
1.用户身份与能力
(1).uid是系统中用户的身份号码,管理员ID为0,即root用户uid为0,系统用户UID为1~999;普通用户从1000开始创建和分配,满足日常需求
(2)useradd命令创建用户
i.默认的用户家目录会 被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名 的基本用户组
ii.参数:-d 指定用户的家目录(默认为/home/username) -e 账户的到期时间,格式为 YYYY-MM-DD. -u 指定该用户的默认 UID -g 指定一个初始的用户基本组(必须已存在) -G 指定一个或多个扩展用户组 -N 不创建与用户同名的基本用户组 -s 指定该用户的默认 Shell 解释器
(3)groupadd创建用户组
i.格式为“groupadd [选项] 群组名”。
ii.创建用户时默认创建一个与用户同名的基本组,组内只有该用户,若该用户创建后被归入到其他组,则这个其他组称为扩展组,一个用户只能有一个基本组
但可以有多个扩展组
,来控制用户权限
(4)usermod命令修改用户属性
i.格式:“usermod [选项] 用户名
ii.用户信息保存在/etc/paawd中,修改用户属性其实也就是修改该配置文件,等价于直接vim修改,扩展组信息保存在etc/group文件中
iii.参数
-c 填写用户账户的备注信息
-d -m
参数-m 与参数-d 连用,可重新指定用户的家目录并自动把旧的数据转移过 去 -e 账户的到期时间,格式为 YYYY-MM-DD -g 变更所属用户组
-L 锁定用户禁止其登录系统 -U 解锁用户,允许其登录系统 -s 变更默认终端 -u 修改用户的 UID -G 变更扩展用户组
(5)id 用户名 能展示用户的基本信息
uid=1000(tomcat) gid=1000(tomcat) 组=1000(tomcat)//这里是基本组,1001(tomcats)//这里是扩展组
(6)passwd 命令 修改用户密码、过期时间、认证信息
修改密码:
i. passwd ,即修改当前用户自己的密码
ii.修改别人的密码 passwd user 需要root权限

参数选项 -l 锁定用户,禁止其登录 -u 解除锁定,允许用户登录 --stdin 允许通过标准输入修改用户密码,如 echo “NewPassWord” | passwd --stdin Username ‘
-d 使该用户可用空密码登录系统 -e 强制用户在下次登录时修改密码 -S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称
eg:passwd -l zsx 锁住账户密码,passwd -S zsx 可查看是否被锁住; passwd -u zsx 解锁
(7)userdel 命令 删除某个用户
i.格式用法 userdel [选项] 用户名 eg:userdel zsx
ii.-f强制删除,-r同时删除家目录
iii.不加r默认保留家目录
2.文件权限与归属
(1)文件类型及字符区分:目录 d;普通文件 -;连接文件 l;块设备文件 b;字符设备文件 c;管道文件p;
(2)每个文件权限都区分所有者,所属组合和其他用户,且三种权限之间没有关系
(3)目录文件的权限解释:r4表示可以读取查勘目录中的文件列表,w2表示能够在目录中新增删除重名令等操作,x1表示能够进入到目录中
(4)硬链接,类似于快捷方法,或者说是目录的可达方式,一个新建目录硬链接为2,及该目录通过 自身目录名和./目录名方式可达,新增一个子目录则硬链接数+1,文件硬链接都是1

在这里插入图片描述
(5)su 不退出的情况下切换用户
i.su - 用户名 减号表示系统中所有的环境变量也跟着变化
ii.root切换到普通用户无需密码,普通用户切换到root需要密码
(6)sudo [参数] 命令 给用户授权
i.参数:-h 列出帮助信息 -l 列出当前用户可执行的命令 -u 用户名或 UID 值 以指定的用户身份执行命令 -k 清空密码的有效时间,下次执行 sudo 时需要再次进行密码验证 -b 在后台执行指定的命令 -p 更改询问密码的提示语
ii.sudo比su的好处在于,sudo一般用户不需要知道root用户的密码,root用户提前将普通用户的名字和执行的特殊命令以及什么权限存在特殊文件中(/etc/sudoers)中,在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,减少root被别人知道的概率,保护账户
(7)修改文件目录权限 chmod
i.格式为“chmod [参数] 权限 文件或目录名称” -R 递归设置权限
ii.修改方式1,通过数字给权限
iii. chmod [ugoa…][[±=][rwxX]
u表示文件的所有者,g表示所有者所在群组,o表示其他人 ,a表示所有人员,+表示增加权限,-表示减少权限

chmod 666 shelltest.sh
chmod u+x shelltest.sh  //文件所有者增加执行权限

chmod 增删改对root用户无效,只针对普通用户有效
只拥有读权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件;
只拥有写的权限 既不能ls 查看目录内容,也不能切换进目录中去 更不能创建目录或文件;
只拥有执行权限 不能ls 查看目录内容,可以切换进目录中去 但是不能创建目录或文件
(8)chown改变文件属组
i.该命令需要root用户才能执行,普通用户没权限
ii.参数介绍:
使用方式 : chown [-cfhvR] [–help] [–version] user[:group] file…
-c或-change:作用与-v相似,但只传回修改的部分
-f或–quiet或–silent:不显示错误信息
-h或–no-dereference:只对符号链接的文件做修改,而不更改其他任何相关文件
-R或-recursive:递归处理,将指定目录下的所有文件及子目录一并处理
-v或–verbose:显示指令执行过程
–dereference:作用和-h刚好相反
–help:显示在线说明
–reference=<参考文件或目录>:把指定文件或目录的所有者与所属组,统统设置成和参考文件或目录的所有者与所属组相同
–version:显示版本信息
iii.使用举例:

chown -R zsx:zsx ./ # 将当前目录文件夹及文件递归改变文件归属人为zsx,组为zsx
ll
-rw-r--r--. 1 zsx zsx     0 212 22:57 0
-rw-r--r--. 1 zsx zsx   283 211 17:06 awk
#chown所接的新的属主和新的属组之间可以使用:连接,属主和属组之一可以为空。如果属主为空,应该是“:属组”;如果属组为空,“:”可以不用带上。
chown -R  root ./   #只改变其拥有者
ll
-rw-r--r--. 1 root zsx     0 212 22:57 0
-rw-r--r--. 1 root zsx   283 211 17:06 awk
chown :root ./*   #如果只改变组,则需要加:,
ll
-rw-r--r--. 1 root root     0 212 22:57 0
-rw-r--r--. 1 root root   283 211 17:06 awk

七、存储结构与磁盘划分
(1)/路径下文件介绍
在这里插入图片描述
(2)物理硬件设备的命名
i硬件设备也是已文件的形式管理的,在/dev底下在这里插入图片描述
ii.设备文件名的解释
在这里插入图片描述
以上表示在dev/目录下存在的硬件设备文件,sd表示存储设备,a表示同类型接口中第一个被操作系统识别的设备,5表示逻辑分区是5
一般来说 a可表示第一块硬盘,b可表示第二块硬盘,依次类推
iii.硬盘设备相关概念
硬盘设备由大量扇区组成,每个扇区512字节,第一个扇区中有64字节存的分区表,每个分区表的信息需要16字节,这样主分区一般就只能有4个,未解决主分区不够的问题,一般将最后一个分区表信息存储一个指针,指向扩展
在这里插入图片描述
(2)文件系统与数据资料
i.文件系统用于控制用户在硬件存储设备中执行的文件操作,合理规划硬盘空间
ii. Linux 把每个文件的权限与属性记录在 inode 中,而且每个文件占用一个独立的 inode 表格,该表格的大小默认为 128 字节,里面记 录着如下信息: ➢ 该文件的访问权限(read、write、execute); ➢ 该文件的所有者与所属组(owner、group); ➢ 该文件的大小(size); ➢ 该文件的创建或内容修改时间(ctime); ➢ 该文件的最后一次访问时间(atime); ➢ 该文件的修改时间(mtime); ➢ 文件的特殊权限(SUID、SGID、SBIT); ➢ 该文件的真实数据地址(point)
iii.文件的实际内容保存在block块中,,有linux自动分配好处一个block专门的像inode那样记录其他block块信息,这样将不同的块连起来,用户读到的就是完整信息,为了使用户在读取或写入文件时不用 关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个VFS (Virtual File System, 虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作 了
(3)挂载硬件设备
i.挂载:用户需要使用硬盘设备或者分区中的数据时,需要将其与已存在的一个目录关联起来,关联动作就是挂载;。挂载是在使用硬件设备前所执行的最后一步操作
ii mount命令用于挂载 mount 文件系统 挂载目录,
参数 -a 挂载所有在/etc/fstab 中定义的文件系统
iii.mount进行文件系统挂载之后,虽然能立即生效,但是每次开机都要重新挂载,如果要永久生效,则需要将挂载信息按照格式写入/etc/fstab文件中
iv.fstab中记录的每个字段的含义
在这里插入图片描述
在这里插入图片描述
(4)umount取消挂载的设备文件
格式:“umount [挂载点/设备文件]
(5**)添加硬件磁盘设备的步骤**
i.添加新的硬盘存储设备,分区,格式化,挂载等步骤
(6)fdisk命令管理磁盘分区
i.格式:fdisk [磁盘名称]
ii.参数命令
m 查看全部可用的参数 n 添加新的分区 d 删除某个分区信息 l 列出所有可用的分区类型 t 改变某个分区的类型 p 查看分区信息 w 保存并退出
(7) 格式化分区 mkfs
i. 该命令将文件系统作为了后缀名
mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
ii.例如要格式分区为 XFS 的文件系统,则命令 应为 mkfs.xfs /dev/sdb1
(8)挂载分区
i.创建一个新目录,mkdir
ii.mount /dev/sdb1 /root/newsd/ mount 设备路径 文件目录
iii.一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用
(10). df -h 查看挂载状态和硬盘使用情况
(11)du -sh 能够查看文件夹的大小
eg:查看/下各个文件夹目录的大小 du -sh /
eg:查看home下各文件夹大小 进入home du -sh ./* 即可
在这里插入图片描述
(12)最后将挂载信息写入dev/fstab中,永久生效
/dev/sdb1 /root/newsd sfs defaults 0 0
八、iptables和firewalld防火墙
1、防火墙管理工具
(1)防火墙主要是根据策略对穿越位于公网和局域网的防火墙的流量进行过滤,防火墙策略和可以基于流量的源目地址、端口号,协议,应用等定制,然后防火墙使用预先定制的策略监控出入的流量,若流量与策略匹配,则执行处理,否则拒绝
(2)iptables和firewalld都不是真正的防火墙,只是一种防火墙管理服务,服务配置好防火墙策略会交给内核来进行网络过滤
2.iptables
(1**)策略与规则链**
i.防护墙会自上而下顺序读取配置的策略规则,找到匹配后立即结束匹配,去执行相应的动作,若没匹配到则执行默认规则
ii.规则链根据数据包处理位置不同,分为:进行路由选择前处理数据包,➢ 在进行路由选择前处理数据包(PREROUTING); ➢ 处理流入的数据包(INPUT)(最多的配置就是input规则链); ➢ 处理流出的数据包(OUTPUT); ➢ 处理转发的数据包(FORWARD); ➢ 在进行路由选择后处理数据包(POSTROUTING)
iii.匹配到之后iptables服务执行的动作分别有:accept(允许流量通过)reject(拒绝,但会发出拒绝的通知)、log(记录日志信息)、drop(拒绝,但不会有任何通知)
(2)iptables基本命令参数
i.
-P 设置默认策略 -F 清空规则链 -L 查看规则链 -A 在规则链的末尾加入新规则 -I num 在规则链的头部加入新规则 -D num 删除某一条规则 -s 匹配来源地址 IP/MASK,加叹号“!”表示除这个 IP 外 -d 匹配目标地址 -i 网卡名称 匹配从这块网卡流入的数据 -o 网卡名称 匹配从这块网卡流出的数据 -p 匹配协议,如 TCP、UDP、ICMP --dport num 匹配目标端口号 --sport num 匹配来源端口号
ii .eg: 设置默认策略 iptables -P INPUT DROP ;设置允许相关协议的流量进来,iptables -I INPUT -p icmp/tcp -j ACCEPT ,执行完之后会执行iptables -L 查看;
在这里插入图片描述
iii.规则链默认的拒绝动作只能是 DROP而不能是REJECT

iv.eg:删除某个规则:iptables -D INPUT 2,以上图为例,2表示的是删除icmp协议通过的这条规则;eg:设置只允许固定网段访问某个固定端口:iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
v.规则链匹配原则,从上到下,所以允许操作一定要放在拒绝操作前面,否则一旦匹配上拒绝规则,则会被拦截,都匹配不上才会走默认策略
vi.拒绝某个端口被访问:iptables -A INPUT -p tcp --dport 8080 -j REJECT,对端口的设置,必须加上协议-p;拒绝具体ip访问具体端口 iptables -A INPUT -p tcp -s 192.168.1.100 --dport 8080 -j REJECT
vii.iptables配置每次重启都会失效**,要永久保存 需要执行 service iptables save**;如果无法执行,那需要yum install -y iptables-services
viii.iptables 总体趋势会被firewalld取代
3.firewalld
(1)firewalld是默认的防火墙配置管理工具,支持动态更新技术,并加入了区域概念,即预先准备的防火墙策略模板
(2)firewalld常用区域名以及策略规则
block:任何传入的网络连接都会被拒绝,因为IPv4和IPv6禁止使用icmp-host—消息。只有从系统内部发起的网络连接是可能的
dmz:可以公开访问,但只能有限地访问您的内部网络。只接受选定的传入连接。 drop:任何传入的网络数据包在没有任何通知的情况下被删除。
external:用于支持伪装的外部网络,特别是路由器。你不相信网络上的其他计算机不会伤害你的计算机。只接受选定的传入连接。
home:当你最信任网络上的其他电脑时,在家里使用。只接受选定的传入连接。 internal:用于在内部网络上使用,当您主要信任网络上的其他计算机时。只接受选定的传入连接。
public:用于不信任网络上的其他计算机的公共区域。只接受选定的传入连接。 trusted:接受所有网络连接 work:在工作中,你主要信任网络上的其他计算机。只接受选定的传入连接。
(3)firewalld防火墙终端管理工具 命令行firewall-cmd
i.firewall-cmd的长格式参数
在这里插入图片描述
ii防火墙配置的策略模式默认为当前生效模式,系统重启则配置失效,必须改为永久模式:用 firewall-cmd 命令正常 设置防火墙策略时添加–permanent 参数,但该命令,又必须重启才生效,那么要手动执行 firewall-cmd --reload 命令
iii.举例:eg:设置默认区域 firewall-cmd --set-default-zone=public;
查看public区域是否允许请求ssh的流量:firewall-cmd --zone=public --query-service=ssh;永久允许请求请求http协议的流量:firewall-cmd --permanent --zone=public --add-service=https ;立即生效 firewall-cmd --reload;
查看当前区域资源端口的流量控制信息:firewall-cmd --list-all ;区域添加/移除端口 firewall-cmd --zone=public --remove-port=8080/tcp,firewall-cmd --permanent --add-port=8080/tcp
iv.关闭开启防火墙:systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动 systemctl start firewalld 开启防火墙
(4)date函数的用法
i.参考: http://blog.chinaunix.net/uid-27038861-id-3534775.html
ii.基本用法:时间格式化;时间加减运算

date +%Y-%m-%d' '%H:%M:%S //格式化显示
date +%Y-%m-%d' '%H:%M:%S --date="-1 day"  //昨天
date +%Y-%m-%d' '%H:%M:%S --date="+1 day" //明天
date +%Y%m%d --date="-1 month" //显示上一月的日期
date +%Y%m%d --date="+1 month" //显示下一月的日期
date +%Y%m%d --date="-1 year" //显示前一年的日期
date +%Y%m%d --date="+1 year" //显示下一年的日期

(5)crontab创建周期定时任务
i.crontab -e 创建、编辑计划任务的命令

eg:crontab -e 回车
然后编辑输入 25 21 * * * /bin/bash /home/shtest/nginx_log_config.sh//表示在每天的21:25分定时执行sh脚本

ii.这里设置时间的格式是:
分、时、日、月、星期,对于不设置的字段应该写 *占位
在这里插入图片描述
iii.crontab -l 列出当前的计划
iv.crontab -r 删除计划删除会将任务列表清空,如果要一个个删除,那就怼任务列表进行编辑,crontab -e 然后vim编辑
九、网络配置
1基本概念
(1)网卡:计算机网络通讯的硬件设备,任何一块网卡都拥有由协会分配的唯一48位MAC地址,写在网卡的ROM中,一个网卡对应一个网络接口卡
网卡处于ISO七层模型的第二层,物理层
(2)网络接口:用来发送和接收数据包的基础硬件设备,由相应的驱动控制,虚拟网络接口是在系统内部进行数据包接受转发,不需要驱动控制
在这里插入图片描述
(3)DHCP 动态主机配置协议,在局域网中动态分配ip的协议
(4)子网掩码 子网掩码又叫地址掩码,作用是用来表示一个IP哪些位是主机所在的子网,哪些是主机的网络地址
i.A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0;默认而非必须
ii.根据IP地址和子网掩码求网段,两者化二进制之后进行与运算,结果为网络地址
(5)网关,工作在网络层;网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络A向网络B转发数据包的过程。
所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。网关的理解举例 百度百科
在这里插入图片描述
(6)广播地址:指的是同时向同一个网段的所有主机发送内容的一个ip,TCP/IP协议中规定,广博地址为主机IP的主机标识为全换成1的ip地址,eg:对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。
(7)概念参考:https://blog.csdn.net/faker_wang/article/details/80747407
2基本配置

[root@localhost network-scripts]# cat ifcfg-ens33
TYPE="Ethernet"		#网卡类型(通常是Ethemet以太网)
PROXY_METHOD="none"	#代理方式:为关闭状态
BROWSER_ONLY="no"	#只是浏览器:否
BOOTPROTO="static"	#网卡的引导协议【static:静态IP  dhcp:动态IP   none:不指定,不指定容易出现各种各样的网络受限】
DEFROUTE="yes"		#默认路由
IPV4_FAILURE_FATAL="no"		#是否开启IPV4致命错误检测
IPV6INIT="yes"		#IPV6是否自动初始化:是(现在还未用到IPV6,不会有任何影响)
IPV6_AUTOCONF="yes"	#IPV6是否自动配置:是(现在还未用到IPV6,不会有任何影响)
IPV6_DEFROUTE="yes"	#IPV6是否可以为默认路由:是(现在还未用到IPV6,不会有任何影响)
IPV6_FAILURE_FATAL="no"		#是否开启IPV6致命错误检测
IPV6_ADDR_GEN_MODE="stable-privacy"	#IPV6地址生成模型
NAME="ens33"		#网卡物理设备名称
UUID="ab60d501-535b-49f5-a76b-3336a4120f64"#通用唯一识别码,每一个网卡都会有,不能重复,否则两台linux机器只有一台可上网
DEVICE="ens33"		#网卡设备名称,必须和‘NAME’值一样
ONBOOT="yes"		#是否开机启动,要想网卡开机就启动或通过 `systemctl restart network`控制网卡,必须设置为 `yes`
IPADDR=192.168.137.129		# 本机IP
NETMASK=255.255.255.0		#子网掩码
GATEWAY=192.168.137.2		#默认网关
DNS1=8.8.8.8#
DNS2=8.8.8.5#
ZONE=public#
[root@localhost network-scripts]# service network restart	#重启网卡
Restarting network (via systemctl):                     
[root@localhost network-scripts]# 

3.配置
(1)ifconfig内容
在这里插入图片描述
(2)hostname 查看主机名,永久修改主机名:修改/etc/hostname文件
(3)将IP改为静态获取
i./etc/sysconfig/network-scripts/ifcfg-ens33文件修改以下内容


BOOTPROTO=static //这里从dhcp改为static
IPADDR=192.168.1.109 //这里加上合适的ip
NETMASK=255.255.255.0//这里加上掩码
GATEWAY=192.168.1.1 //网关必须配置,ip好像没什么规律,但是不配置的话,无法跨网段访问,比如ping 百度的ip就不行


ii.然后 systemctl restart network命令重启网络服务
iii.配置DNS,修改 /etc/resolv.conf,加入以下内容,默认使用第一个

nameserver 114.114.114.114 //移动给的dns的ip
nameserver 8.8.8.8 //谷歌的dns地址

dhcp是不用配置dns的,因为它会自动修改该文件,但如果static就需要手工修改了,该文件实时生效
十、其他
1.linux后台运行、关闭、查看后台任务常用命令
命令 &,表示一开始就将命令在后台执行;但是一但把当前控制台关掉(退出帐户时,因为平时都是远程连接linux系统的),作业的标准输出和输入就无法进行,因为标准输入和输出都是从当前控制台进行的,使用nohup解决,会在命令当前目录下生成一个nohup.out文件重定向标准输出

./catalina.sh  run &
nohup ./catalina.sh  & 

2.set 查看系统中定义的所有变量
3.windows上编辑的文件不可随意放到linux上会有问题,例如在windows下编写shell脚本,传到linux上后vim打开会有很多\r出现,这是因为两个OS对于空格和换行符的定义都是不一样的,因此不能随便在windows下编辑shell文件
十一、使用问题
1.当使用用户名通过xshell登录时显示:Could not chdir to home directory /home/zsx: Permission denied
然后登录显示的是 bash4.2$,而不是正常的用户名+hostname
这个错误是用户的目录里的.bash_profile 的拥有者和所属组的问题

 首先通过ls -la来确认是否是这种情况
-rwxrwxrwx.  1 root  root   193 618 11:03 .bash_profile
修改目录的拥有者和所属组
chown -R zsx:zsx  /home/zsx/
此时查看ls -la
-rwxrwxrwx.  1 zsx zsx   193 618 11:03 .bash_profile
再登录应该就没有问题了

2.VM ware虚拟机的三种网络模式介绍及对应配置
https://www.cnblogs.com/jpfss/p/8616517.html
3.linux上搭建vsftp的大致过程
参考:https://www.jb51.net/article/159200.htm
在linux中使用的FTP是vsftp
FTP可以有三种登入方式分别是:
匿名登录方式:不需要用户密码
本地用户登入:使用本地用户和密码登入
虚拟用户方式:也是使用用户和密码登入,但是该用户不是linux中创建的用户
(1)yum安装
yum -y install vsftpd
(2)配置文件
安装完之后在/etc/vsftpd/路径下会存在三个配置文件。
vsftpd.conf: 主配置文件
需要修改的有:

anonymous_enable=YES #允许匿名用户
local_enable=YES #允许使用本地用户账号登陆,即不用创建虚拟用户,用linux用户登录

# 是否允许监听。
# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
# 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,
# 则必须运行两套vsftpd,采用两套配置文件
# 同时确保其中有一个监听选项是被注释掉的
#listen_ipv6=YES
默认ipv6是打开的,需要注释掉,将listen=yes打开,否则下面服务启动会报错

(3)systemctl vsftpd.service start
4 linux关机、重启、退出操作

Linux中关机,重启,注销命令
关机:
  shutdown -h now  #立刻关机重启,工作中常用
  shutdown -h +1    #1分钟后关机
  init 0
  halt                        #立即停止系统,需要人工关闭电源
  halt -p                    #
  poweroff      #立即停止系统,并且关闭电源

重启:
  reboot      #工作中常用
  shutdown -r now      #工作中常用
  shutdown -r +1   #一分钟后重启
  init 6

注销:
  logout
  exit      #工作中常用
  ctrl+d     #工作中常用

5.linux中对某个进程是否运行进行监控

ps -ef|grep camera-app-tomcat|grep -v grep|wc -l 结果是0 则说明该进程没启动,是1则启动了
  1. linux中常用分析jvm内存的命令
    参考: https://zhuanlan.zhihu.com/p/92955445
    如jmap用法:
$ jmap -heap 7658
Attaching to process ID 7658, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:         # Heap堆配置信息
   MinHeapFreeRatio         = 0 # JVM堆最小空闲比率(default 40)
   MaxHeapFreeRatio         = 100  # JVM堆最大空闲比率(default 70)
   MaxHeapSize              = 536870912 (512.0MB) # 堆最大值,可以通过 -XX:MaxHeapSize 或 -Xmx设置
   NewSize                  = 44564480 (42.5MB) # 新生代大小
   MaxNewSize               = 178782208 (170.5MB) # 新生代的最大大小
   OldSize                  = 89653248 (85.5MB) # 老年代大小
   NewRatio                 = 2 # 新生代与老生代的大小比率 1:2
   SurvivorRatio            = 8 # 年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:8,表示Eden:Survivor=8:2
   MetaspaceSize            = 21807104 (20.796875MB) # jdk1.7有永久代,jdk1.8更换成了Metaspace
   CompressedClassSpaceSize = 1073741824 (1024.0MB)  # class信息存放的空间大小
   MaxMetaspaceSize         = 17592186044415 MB # Metaspace是使用的直接内存,理论上可以无限大(内存+硬盘缓冲区)
   G1HeapRegionSize         = 0 (0.0MB) # 设置的 G1 区域的大小。值是 

jps 简单的查看java进程的命令
jstack 查看每个线程状态

$ jstack [-l] <pid>
    (to connect to running process)
$ jstack -F [-m] [-l] <pid>
    (to connect to a hung process)
$ jstack [-m] [-l] <executable> <core>
    (to connect to a core file)
$ jstack [-m] [-l] [server_id@]<remote server IP or hostname>
    (to connect to a remote debug server)

# -F:强制dump线程信息 
# -m:dump虚拟机栈和本地方法栈 
# -l:长期监听,dump锁信息
$ jstack -l 7658 > thread-7658.txt

7.使用scp在linux系统之间来回传输文件

⦁	(1)scp向 系统传输文件
⦁	scp filePath username@servername:/targetPath
⦁	将本地的sbux文件传输到另一个机器上
⦁	eg: scp ./sbux.war appdeploy@ip.ip.20.16:/home/appdeploy/temp  
⦁	(2)从另一个机器上拉取文件
⦁	scp username@servername:/sourcePath   /targetPath
⦁	eg: 将16机器上的sbux.war下载到当前路径下
⦁	  scp appdeploy@ip.ip.20.16:/home/appdeploy/temp/sbux.war   ./
⦁	(3)如果出现了./sbux.war: Permission denied 则很有可能是该文件权限不够,或者目标路径权限不够
(4)传输文件夹 :scp -r 文件夹 其他一样

8.linux中的软连接和硬链接
软连接就是一个快捷方式
硬链接就是一个对同一个文件的 节点创建一个或者多个文件名,类似于拷贝
https://blog.csdn.net/dyausasd/article/details/93311401

eg:
一种用法:
ln [OPTION]... [-T] TARGET LINK_NAME   
注意默认情况下软连接的连接文件必须是不存在的,除非-f强制连接,另外,软连接的连接文件必须写绝对路径,否则连接失败
 ln -sf  qqq.txt /home/appdeploy/link22  //强制将link22连接到qqq.txt文件上

9.linux上查端口占用的方式

netstat -ntlp   //查看当前所有tcp端口
netstat -ntulp | grep 80   //查看所有80端口使用情况
netstat -ntulp | grep 3306   //查看所有3306端口使用情况


lsof -i:8080:查看8080端口占用
lsof abc.txt:显示开启文件abc.txt的进程
lsof -c abc:显示abc进程现在打开的文件
lsof -c -p 1234:列出进程号为1234的进程所打开的文件
lsof -g gid:显示归属gid的进程情况
lsof +d /usr/local/:显示目录下被进程开启的文件
lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
lsof -d 4:显示使用fd为4的进程
lsof -i -U:显示所有打开的端口和UNIX domain文件

10.⦁ chroot
⦁ (1)chroot命令:改变指令或者脚本运行的跟路径,或改变系统本身的根路径
⦁ 参考:https://www.cnblogs.com/charlieroro/p/9259675.html
⦁ 用法: chroot newroot 或者chroot newroot command

⦁ (2)chroot MyRootDir默认会执行${SHELL} -i,即MyRootDir/bin/bash,所以需要拷贝/bin/* 到指定目录的/bin/ /libs /lib64/这两个bash依赖包也要拷贝到新根路径下

⦁	eg:
⦁	 chroot /home/rootfs/ ,页面会发生变化,变成bash-*开头

在这里插入图片描述

⦁ 然后pwd 会显示/ ,说明当前目录已经成为了跟路径
⦁ chroot ./ pwd展示结果为/ 但是直接pwd 则展示当前绝对路径 ,但是并没有隔离进程和网络
11.lsof(list open file)命令列出当前系统打开文件的工具
(1)从左到右各列的意义
COMMAND:进程名,PID:进程标识符,USER:进程所有者,FD:文件描述符,应用通过文件描述符识别该文件,如cwd、txt等
TYPE: 与文件相关联的node的类型,如DIR和REG,DEVICE:指定磁盘设备的编号 ,SIZE:打开文件的大小或者文件的字节偏移量,NODE:索引节点(文件在磁盘上的标识),NAME:打开文件的确切名称
(2)FD文件描述符的结果解释
如 0r 1w等
cwd代表应用程序工作的启动目录,rtd表示根路径
txt代表的是执行的程序代码,如程序二进制文件本身,mem表示映射到内存的文件,mmap:内存映射设备,pd:parent directory
eg:012表示标准输入输出和标准错误,012后跟文件状态 u表示打开处于读写模式 r表示只读 w表示只写
(3)TYPE结果解释:REG–文件, 目录-DIR,CHR–字符,BLK–块设备,UNIX–unix域套接字、FIFO–先进先出队列,DEL表示已经被删除的linux映射文件
ps:参考man lsof 的结果解释
(4)常用参数和命令
参考:http://www.ha97.com/1029.html

i.lsof filename 显示打开指定文件的所有进程
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -p pid 显示具体进程的文件打开情况
lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 展示具体ip 端口或者主机名或者协议的文件打开情况,相当于可以查看端口占用,或者tcp连接建立情况
46 --> ipv4/6
protocol –> TCP or UDP
eg:lsof -i :80998099占用
lsof  -i  @10.118.81.114  查某个ip连接情况

出现bad interpreter:No such file or directory的原因

查看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
vim file  
set ff? 可以看到是不是dos/Unix格式,ff是查看fileformat,
window下编辑的脚本可以直接使用set ff=unix解决平台不同导致的换行符的问题 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值