韦定个人学习shell笔记

韦定个人学习shell笔记

文本搜索
grep “&&” name 在文本中搜索带有&&的行,并打印出来。区分大小写
grep -i “&&” name 不区分大小写搜索文本。-i
grep -in “&&” name 打印行,把对应的行也一起打印出来方便我们寻找 -in
grep -c “&&” name 统计带有&&的行数,如果不想打印出来,只想统计行数 -c
grep -o “&&” name 打印&&关键字,如果只想看到关键字 -o

vi 编辑模式进入文本,按下”/“键,这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。
找到相关文字以后:
(1)按下小写n,向下查找
(2)按下大写N,向上查找
退出vi
先按ESC键 跳到命令模式,然后,按 i 就可以编辑输入:
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w! 强制保存,不推出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
q: 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑

查看端口号被哪个进程ID占用
sudo netstat -anp |grep 端口号
ps -ef|grep 进程ID 即可查看进程名
查看所有端口号
sudo netstat -nultp

查看进程ID占用哪个端口号
sudo netstat -anp |grep 进程ID

删除开头的 rm -rf /home/myuser/a* 即是在/home/myuser/a开头的所有文件都会被删除*的含义表示任意字符任意长度。
使用df -h命令来查看磁盘空间使用情况

运行java jar包命令
#nohup java -jar -Xmx216m bts-console-0.0.00.01.jar > /dev/null 2>&1 &

查看磁盘空间
df -h

要仅报告指定目录的总大小,而不报告子目录的总大小,请使用以下-s选项: https://www.myfreax.com/du-command-in-linux/amp/
du -sh /var
-a : 列出所有的文件与目录容量,因为默认仅统计目录的容量而已
-h: 以人们较易读的容量格式呈现(G/M/K)显示,自动选择显示的单位大小
-s : 列出总量而已,而不列出每个个别的目录占用容量
-k : 以KB为单位进行显示
-m : 以MB为单位进行显示常用命令参考 查看当前目录大小[plain] du -sh ./

显示n级子目录的磁盘使用情况,比如1级:
du -h --max-depth=1 /var/lib

544K /var/lib/usbutils
4.0K /var/lib/acpi-support
205M /var/lib/apt
2.9G /var/lib

linux服务器查看最近重启时间
last reboot

修改防火墙配置,开放端口
sudo vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9080 -j ACCEPT
sudo service iptables restart

1.CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10

使用命令查使用内存最多进程排行
top
然后按下大写M
查看指定一个java进程的具体的对象数目和占用内存大小,从而定位代码。
jmap -histo:live [pid] | head -n 100
#instance 是对象的实例个数
#bytes 是总占用的字节数
class name 对应的就是 Class 文件里的 class 的标识
B 代表 byte
C 代表 char
D 代表 double
F 代表 float
I 代表 int
J 代表 long
Z 代表 boolean
前边有 [ 代表数组, [I 就相当于 int[]
对象用 [L+ 类名表示

查看进程下的线程情况
可以执行ps p 9534 -L -o pcpu,pmem,pid,tid,time,tname,cmd |wc -l 来查具体有多少线程 (不带 |wc -l则详细列出线程)
将PID为9534的堆栈信息打印到jstack.log中,命令:jstack -l 9534 > /home/zheren/jstack.log
查看日志,好多waiting的,具体需要开发查看代码,为何这么多线程等待
此时线程状态大致为以下几种:
java.lang.Thread.State: WAITING (parking):一直等那个条件发生;
java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定时的,那个条件不到来,也将定时唤醒自己。

转十六进制
printf “%x\n” PID

#cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息)

检查日志发现那些做了su切换的日志信息。
#grep su /var/log/secure | grep -v sudo

列出谁在使用某个端口
lsof -i :3306

修改/home 文件夹以及下面的所有文件的所属用户为 fan
-R 为递归
sudo chown -R fan /home

配置开机启动项
设置可执行权限
#chmod +x /etc/rc.d/rc.local
然后在/etc/rc.d/rc.local下追加脚本内容
su - 用户名 -c “/app/start.sh”

安装完centos7.6系统,发现系统时间比当前时间晚整整12小时,且时区为EDT(北美东部夏令时间),可以通过执行以下命令把时区改为CST(中国标准时间):
[root@localhost /]# date
Wed Jul 24 02:54:16 EDT 2019
[root@localhost /]# mv /etc/localtime /etc/localtime.bak
[root@localhost /]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@localhost /]# date

CentOS 8系统做了不少更新,例如 nftables代替iptables、dnf代替yum成为默认包管理工具

tcpdump -i eth0 -c 8 -s 0 -w /mnt/sdcard/dhcp.pcap ‘udp and port 67 and port 68’ &

-i 选择网卡
-c 数据包个数
-s 数据包长度,0代表完整数据包
-w 写入文件
DHCP使用67和68端口
&使进程后台运行

查看centos内核版本
cat /proc/version

centos 查看所有运行中的服务ip和端口信息
netstat -tunpl
常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER

查看文件大小
du -sh a.txt

sudo tcpdump -i ens192 tcp port 10054 -w /app/log/aw/xm2/temp/b.txt

—sqlserver占用cpu过高
—使用下面语句看一下各项指标是否正常,是否有阻塞,这个语句选取了前10个最耗CPU时间的会话
SELECT TOP 10
[session_id],
[request_id],
[start_time] AS ‘开始时间’,
[status] AS ‘状态’,
[command] AS ‘命令’,
dest.[text] AS ‘sql语句’,
DB_NAME([database_id]) AS ‘数据库名’,
[blocking_session_id] AS ‘正在阻塞其他会话的会话ID’,
[wait_type] AS ‘等待资源类型’,
[wait_time] AS ‘等待时间’,
[wait_resource] AS ‘等待的资源’,
[reads] AS ‘物理读次数’,
[writes] AS ‘写次数’,
[logical_reads] AS ‘逻辑读次数’,
[row_count] AS ‘返回结果行数’
FROM sys.[dm_exec_requests] AS der
CROSS APPLY
sys.dm_exec_sql_text AS dest
WHERE [session_id]>50 AND DB_NAME(der.[database_id])=‘gposdb’
ORDER BY [cpu_time] DESC

linux学习日记20201022:
#脚本功能是循环获取start.sh的每一行,写入传递文件里面
#!/usr/bin/bash
#将这个语句加入到脚本中,告诉bash shell在数据值中忽略空格和制表,使其只能识别换行符!
IFS=$’\n’

for line in cat /app/start.sh
do
echo $line >> $1
done

linux中分隔符IFS
在linux中IFS是分隔符的意思,linux中变量分两种,全局变量env和局部变量set,set中包含了env的全部变量,我们查看IFS的值发现env | grep IFS为空,而set | grep IFS有值,说明IFS是局部变量,
gl@gl:~$ set | grep ^IFS
IFS=$’ \t\n’
从上面可以看出,IFS是已空格、制表符、换行符来进行分隔的。

/dev/tty表示当前终端
tty是Teletype的缩写,代表各种类型的终端设备.tty1-tty6 是 虚拟终端 的意思,分别代表6个虚拟终端。
而 tty0 就是 当前正在使用的虚拟终端的别名。
如果希望和哪个用户发消息就可以直接 将输出重定向到对应终端即可, 如echo “hello” > /dev/tty1

linux学习日记20201023
linux操作系统利用find 命令查找某个目录位置方式如下:
find /home/ubuntu -type d -name test

repo文件:
local.repo:这个源文件的名字,这个根据实际的使用自己定义
[local]:repositry的名字,必须是独一无二的,不能和其他源文件冲突
name=local:对于[local]的具体描述,这个可以根据具体使用描述
baseurl:这个是非常重要的一环,表明了repositry的地址,支持ftp协议,http协议和file协议;
enabled=0/1:只有两个值,为1时表示repositry可以获取,0表示关闭
gpgcheck=0/1:有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的
gpgkey=url:后面接的是gpgkey的地址,如果前面定义gpgcheck=1的话。

镜像加速
{
“registry-mirrors”: [
“https://registry.cn-hangzhou.aliyuncs.com”
]
}
运行容器,run命令。-i表示交互式操作,-t表示终端 --rm表示退出容器后删除容器,可避免浪费空间。指定bash作为交互接口程序shell
docker run -it --rm ubuntu:14.04 bash

linux学习日记20201025
ls -lh 查看目录下所有文件的属性
ln -s a.txt b.txt 意思是创建a.txt的链接文件b.txt,类似windows里面的快捷方式
echo -e 是把后面的内容里面如\n等当成正则表达式字符
echo -e ${PATH//😕’\n’}

linux学习日记20201027
注意字符集,exportLC_All=C:无论何时,做何事都要注意字符集

linux学习日记20201028
unset 命令删除定义的变量或者函数,删除函数需要加上条件 -f
函数的return只能返回0-255之间的整数
test 可以用于检查文件属性,如果满足条件,test会返回0

linux学习日记20201029
UNIX Shell 里面比较字符写法:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
= 两个字符相等
!= 两个字符不等
-n 非空串

xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。如:
ls | grep “bbb” | xargs chmod +x
意思是列举当前目录下文件名包含bbb的文件,并给它们可执行属性

linux学习日记20201030
用管道符传输到xargs,并为每个参数运行touch命令,-t表示在执行之前先打印,创建三个文件:
[root@localhost ~]# echo “file1 file2 file3”|xargs -t touch
touch file1 file2 file3
如何限制参数的数量
默认情况下,传递给命令的参数数量由系统限制决定。-n选项指定要传递给命令的参数个数。xargs根据需要多次运行指定的命令,直到所有参数都用完为止。
下面例子指定每次传递一个参数:
[root@localhost ~]# echo “file1 file2 file3”|xargs -n1 -t touch
touch file1
touch file2
touch file3
如何运行多个命令
要使用xargs运行多个命令,请使用-i或者-I选项。在-i或者-I后面自定义一个传递参数符号,所有匹配的项都会替换为传递给xargs的参数。
下面例子时xargs运行两条命令,先touch创建文件,然后ls列出来:
[root@localhost ~]# echo “file1 file2 file3”|xargs -t -I % sh -c ‘touch %;ls -l %’
sh -c touch file1 file2 file3;ls -l file1 file2 file3
-rw-r–r--. 1 root root 0 Jan 30 00:18 file1
-rw-r–r--. 1 root root 0 Jan 30 00:18 file2
-rw-r–r--. 1 root root 0 Jan 30 00:18 file3

eog、xdg-open都是linux自带图片编辑器
下载rpmfusion
安装
dnf loclalinstall rpmfusion-free-release-8.noarch.rpm
安装依赖
dnf --enablerepo=PowerTools install enca
安装
sudo dnf install mplayer
安装
sudo dnf install smplayer
mplayer快速声音失真
安装vlc
sudo dnf install vlc

安装完了之后,播放视频报错。重启可解决

linux学习日记20201031
正则表达式
\bhi\b表示精确查找hi字符串
0\d\d-\d\d\d表示找0开头,然后是两个数字,中间是-然后接着是三个数字。\d是一个元字符,表示一个数字。简化写法是0\d{2}-\d{3}

正则表达式是描述复杂规则进行文本查找的工具。
在[]方括号中,所有元字符都会失去其特殊意义
ab{3}c 表示a和c之间的b要出现3次,即abbbc ERE写法是 ls | grep -E “ab{1}c” 或者BRE写法ls | gerp “ab{3}c”
ab{3,}c 表示a和c之间的b要至少出现3次,即abbbc,或abbbbc,或abbbbbbc
ab{3,5}c 表示a和c之间的b要出现3到5次

linux学习日记20201101
(1).POSIX BRE与ERE中都有的meta字符:
\ : 通常用于打开或关闭后续字符的特殊含义,如(…)与{…}
. : 匹配任何单个字符(除NULL)

  • : 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度
    ^ : 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
    $ : 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
    [] : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
    (2).POSIX BRE中才有的字符:
    {n,m} : 区间表达式,匹配在它前面的单个字符重现的次数区别。{n}指重现n次;{n,m}指重现n至m次;
    ( ) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如(ab).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。
    \n : 重复在(与)方括号内第n个子模式至此点的模式。
    (3).POSIX ERE中才有的字符:
    {n,m} : 与BRE的{n,m}功能相同
  • : 匹配前面正则表达式的一个或多个扩展
    ? : 匹配前面正则表达式的零个或一个扩展
    | : 匹配|符号前或后的正则表达式.交替,使用管道符号隔开
    ( ) : 匹配方括号括起来的正则表达式群
    (4). 方括号([])表达式
    4.1.字符集 [: :]

后向引用如ls | grep "(c).*\1"意思是查找前后出现两次c的内容 \1意思是第一个正则表达式

linux学习日记20201102
echo “MCMLXXXX” | grep -E "[[:digit:]]M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?X?)$"
[1]
是表示零个或者多个非数字字符
管道把一端的输出变成另一端的输入,可以让多个工具协同工作,效率更高
sort -t: -nk 3r group sort排序命令。-t是以:作为分隔符,-k是告诉sort命令要比较的字段,这里是3,-n是按数值(而非字符)进行比较,-u去除重复选项(只对键值字段做判断),r表示倒序
sort -r 是降序排列

linux学习日记20201103
uniq 去除重复。报告或删除文本中完全相同的行。 使用此命令前,通常要先使用sort排序
如sort -t ’ ’ -k 3 sortuniq.sh | uniq -c | head -3
-c 在输出的行 前面加上此行出现在文本的次数。
-d 仅仅显示重复行
-u 仅仅显示不重复的行
grep bash /etc/passwd | wc -l 作用是找出/etc/passwd里面启动的shell为bash的个数
…| grep str | wc -l 有更简便的写法grep -c bash /etc/passwd 通过-c实现
格式化文本命令有pr,fmt,fold
pr -c2 -h “tillte” a.txt 分2列打印,-h设定标题为tillte
pr -c2 -t a.txt 分2列打印,-t不显示标题

cat a.txt | grep fmt -w 50 -s 作用是限定输出的每行最大字符长度为50,如果在末尾某个单词不能完全显示,那么fmt将它放到下一行
fold -w 50 a.txt 作用是限定输出的每行最大字符长度为50,如果在末尾某个单词不能完全显示,那么fold会将它拦腰折断

head 默认打印文件的前10行
tail 默认打印文件的末尾10行

cut -d ‘:’ -f 1,7 /etc/passwd | grep bash cut命令必须指定-b,-c,-f格式之一。命令退出状态:成功会返回0,失败大于0

linux学习日记20201104
join 命令 join a.txt b.txt -a1 跟左连接类似, join a.txt b.txt -a2 跟右连接类似。命令退出状态:成功会返回0,失败大于0

tr命令替换字符,如echo $PATH | tr “:” “\n” 命令退出状态:成功会返回0
tr “A-Z” “a-z” <ccaogao.txt >cca.txt 这里tr从重定向<获取ccaogao.txt内容,把里面的大写字母转换成小写,输出到cca.txt里面

linux学习日记20201106
chown 改变文件所属用户, chgrp 改变文件所属用户组。如 chwon weiding a.txt 命令退出状态:成功会返回0,失败大于0
umask 默认权限屏蔽位。如umask 0002 是屏蔽 其他用户的读权限,umask 777是屏蔽 所有权限。用户登录系统时,环境变量自动执行umask决定权限屏蔽位
touch 命令退出状态:成功会返回0,失败大于0
find . -name “*.txt” -exec cp {} ~/study/test/ ; 查找.目录即当前目录下所有.txt结尾的文件名,并复制到~/study/test/目录下
-exec 会为每一个匹配到的文件创建一个相应的进程,在某些情况下出现进程过多、系统性能下降的问题,因而此时应该使用xargs命令
ls | xargs chmod u+x 文件权限三个组:所属用户OWNER,所属用户组GROUP,其他用户OTHER,chmod 命令中以u,g,o代表

linux 如何不断地执行某个.sh文件:将脚本托管给 crond 服务进行管理,也就是设定计划任务,定时执行

linux学习日记20201107
comm 命令比较文件
diff 命令比较文件 log2013.log log2014.log -y -W -y并排输出,-w忽略空白和制表符 命令退出状态:未找到不同返回0,有不同=1,失败大于1

linux学习日记20201108
操作系统将一个或多个硬盘进行逻辑分区,将每个逻辑分区视作独立的磁盘
硬盘的分区主要分为主分区和扩展分区两种。主分区和扩展分区的数目之和不能大于四个,且基本(主)分区可以马上别使用,但不能再分区。
扩展分区必须再进行分区后才能使用,也就是它必须还要进行二次分区。那么有扩展分区再分下去的是什么呢?它就是逻辑分区,而且逻辑分区没有数量上的限制。
对于Windows来说,有几个分区就有几个驱动器,并且每个分区都会获得一个字母标识符,然后就可以选用这个字母来指定在这个分区上的文件和目录,它们的文件结构都是独立的,非常好理解。
boot这个目录究竟是硬盘中的那个分区挂载的 df /boot/
附录一、linux下各目录的作用
[cc]- swap类似于windows的虚拟内存文件
/ 根目录,根目录下最好只有目录,文件放在目录下,不要放在根目录中。
/boot 包括操作系统的内核和启动过程需要用的文件
/root 超级管理员的家目录
/home 家目录,用来存放用户文件
/etc 大部分的配置文件默认都放在这里
/dev linux系统中,所有的硬件都以文件的形式放在这个目录中
/lost+found 突然停电或者非正常关机,存放临时文件
/sbin 管理员才能运行的一些程序
/opt 存储第三方软件的目录
/proc 存储进程相关的信息,用于方便的访问进程信息,伪文件系统,所有的内容都存储在内存中
/mnt 一般我们将手动挂载的分区放在这里(例如新加一款硬盘,可以挂载在这里)
/media 系统自动挂载的分区放在这里
/lib 用于存放库文件
/usr 此目录通常很大,因为所有程序都安装在这里
/usr/lib 同/lib
/usr/sbin 同/sbin
/usr/local/bin 系统实用程序
/usr/local/sbin 同/sbin
/usr/local/lib 同/lib[/cc]
/var 包含会改变的文件,如spool目录、log目录等

df -T 查看linux分区格式。

linux学习日记20201109
fdisk -l 查看系统的分区表
df -h pwd 查看当前目录所属分区
有tmpfs字样的是临时文件系统,系统断电后数据不保存

/dev/mapper目录的解释

为了方便叙述,假设一台服务器有三块硬盘分别为a,b,c,每块硬盘的容量为1T。在安装Linux的时候,先根据系统及自身的需要建立基本的分区,
假设对硬盘a进行了分区,分出去了0.1T的空间挂载在/boot目录下,其他硬盘未进行分区。系统利用Device mapper机制建立了一个卷组(volume group,VG),
你可以把VG当做一个资源池来看待,最后在VG上面再创建逻辑卷(logical volume,LV)。若要将硬盘a的剩余空间、硬盘b和硬盘c都加入到VG中,
则硬盘a的剩余空间首先会被系统建立为一个物理卷(physical volume,PV),并且这个物理卷的大小就是0.9T,之后硬盘a的剩余的空间、硬盘b和硬盘c以PV的身份加入到VG这个资源池中,
然后你需要多大的空间,就可以从VG中划出多大的空间(当然最大不能超过VG的容量)。比如此时池中的空间就是2.9T,此时你就可以建立一个1T以上的空间出来,而不像以前最大的容量空间只能为1T。
/dev/mapper/Volume-lv_root的意思是说你有一个VG (volume group卷组)叫作Volume, 这个Volume里面有一个LV叫作lv_root。其实这个/dev/mapper/Volume-lv_root文件是一个连接文件,
是连接到/dev/dm-0的,你可以用命令ll /dev/mapper/Volume-lv_root进行查看。
其实在系统里/dev/Volume/lv_root 和 /dev/mapper/Volume-lv_root以及/dev/dm-0都是一个东西,都可当作一个分区来对待。
若要了解硬盘的具体情况,可通过fdisk或者pvdisplay命令进行查看。
若你想要重装系统到/dev/sda下,且安装时有些东西不想被格式化想转移到/dev/sdb下,但此时/dev/sda和/dev/sdb被放到VG中了,那该如何解决该问题呢?
这种情况下,由于此时根本没办法确定数据在哪一个硬盘上,因为这两个硬盘就如同加到池里,被Device mapper管理,所以解决方案就是再建个逻辑卷出来,
把数据移到新的卷里,这样你就可以重装系统时只删掉之前分区里的东西,而新的卷里的东西不动,就不会丢失了。

注意:硬盘的读写是以sector扇区为单位,1扇区是512bytes;操作系统是对硬盘的读写是以block块为单位 1块是 8 * 512bytes = 4K

/proc/uptime 第一列记录系统启动至今的时间(单位为秒),第二列为系统空闲时间(单位为秒)。空闲率等于 空闲时间/(启动时间*N),N是CPU的个数

linux buff/cache 过高问题。当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放
注意:执行以下操作,可能会影响数据库服务(重启即可恢复正常运行)。建议最好做好数据库的备份。
手动执行以下shell命令,手动清除缓存即可。

#清除pagecache
echo 1 > /proc/sys/vm/drop_caches
#清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。#slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache。
echo 2 > /proc/sys/vm/drop_caches
#两者都清除,pagecache和slab分配器中的缓存对象。
echo 3 > /proc/sys/vm/drop_caches

swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。

查看物理卷信息pvs

linux学习日记20201115
which automake 命令查看automake安装的位置
[root@localhost /]# which ksh
/usr/bin/which: no ksh in (/app/java/jdk1.8.0_191/bin:/app/java/jdk1.8.0_191/jre/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
应该是这个命令没有加入环境变量的意思
yum clean all yum会把下载的软件包和header存储在cache中,而不自动删除。如果觉得占用磁盘空间,可以使用yum clean指令进行清除,更精确 的用法是yum clean headers清除header
yum makecache
就是把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度。

在mysql命令加上选项-U后,当发出没有WHERE或LIMIT关键字的UPDATE或DELETE时,MySQL程序就会拒绝执行。
在命令行会话设置alias mysql='mysql -U’之后,只能在当前会话有效,关闭当前连接服务器的命令行之后,会话失效,则别名设置也会随之失效。
如果想关闭连接服务器的会话终端,别名设置仍然有效,或者多个会话都能够使用这个别名来操作数据库,则我们可以将设置别名的命令添加到/etc/profile系统环境变量中,如下所示。
[root@binghe~]# echo “alias mysql=‘mysql -U’” >>/etc/profile
[root@binghe~]# . /etc/profile
[root@binghe~]# tail -1 /etc/profile
alias mysql=‘mysql -U’

linux学习日记20201116
白天安装Oracle时修改了/etc/profile,导致晚上再打开虚拟机时,Terminal打不开。用winscp连上centos(猜IP),把文件里面多配置的东西去掉

linux学习日记20201117
awk ‘$2==“o” {print}’ a.txt 找出第二列是o的行
删除应答文件中的注释行

sed -i ‘s/^#.*$//g’ db_install.rsp

删除没有内容的空行

sed -i ‘/^$/d’ db_install.rsp

linux学习日记20201125
fdisk 工具只能root用户使用,只能对小于2TB文件系统进行分区,大于2TB使用partted(gpt)

linux学习日记20201126
find -newerXY file/time:XY为占位符,a、B、m、c、t分别代表上次访问时间、创建时间、上次modify时间、上次索引节点改变时间和绝对时间;
find根据Y的值来计算file的某个时间戳,然后根据X的值来做匹配。t不能做X。

linux学习日记20201129
cat a.txt | grep 2*$ 查找只有多个空格的行

sed [-hnV][-e

-e

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

sed命令的语法格式:https://www.cnblogs.com/ctaixw/p/5860221.html

sed的命令格式: sed [option] 'sed command’filename
sed的脚本格式:sed [option] -f 'sed script’filename

sed命令的选项(option):

-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容

sed ‘1,10/s/power/abc/g’ a.txt #地址空间+替换操作,把第1行至第10行的power替换成abc,s的意思是替换,末尾的g表示全局替换,如果不加g,则只替换 每行 第一个匹配到的power
sed ‘/main[[:space:]]/,/^}/s/power/abc/g’ a.txt #地址空间+替换操作,把main函数里面的power替换成abc
sed还有一个妙处是/符号可以用其他符号代替其功能,如上面语句可以写成sed '/main[[:space:]]
/,/^}/s:power🔤g’ a.txt
sed -n ‘1p;4p’ a.txt #指定打印第1行和第4行内容

ls | xargs grep -Rl “add” grep查找包含 add 的文件并只输出文件名,-R排除目录,-l只打印文件名不打印内容

linux学习日记20201130
通常情况下 shell 变量调用需要加 $,但是 for 的 (()) 中不需要,下面来看一个例子:

#!/bin/bash
for((i=1;i<=5;i++));do
echo “这是第 $i 次调用”;
done;

与 C 中相似,赋值和下一步执行可以放到代码之前循环语句之中执行,这里要注意一点:如果要在循环体中进行 for 中的 next 操作,记得变量要加 $,不然程序会变成死循环。

find ./ -type f -size +1k 查找大小超过1k的普通文件
find ./ -type f -size +10k | xargs -n 1 -t -I {} mv {} /tmp/ 查找大小超过1k的普通文件,并移动到/tmp/下。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替

linux学习日记20201201
Linux是内核:它是为你运行的其他程序分配计算机资源的程序。内核是操作系统的基本部分,但是它自己并无用处;
它只能在完整的操作系统框架下才能发挥作用。Linux一般和GNU操作系统一起使用:整个系统基本上就是GNU加上Linux,或叫GNU/Linux。
所有被叫做“Linux”的发行版实际上是GNU/Linux发行版。
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

[root@localhost etc]# cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01-40/2 * * * * root date >> /home/weiding/study/a.txt #定时任务,crond服务,编辑/etc/crontab文件,重启服务生效
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

星号():代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如
/10,如果用在minute字段,表示每十分钟执行一次。

linux学习日记20201202
sed -n ‘/add/,/Dec/p’ a.txt 打印包含add字符的行开始,到包含Dec的行结束,这两行也打印
more +4 a.txt 从第四行开始打印内容
more -4 a.txt 每页打印4行

declare -i a=2 #数字在范围内自增
declare -i b=10
for i in $(seq $a $b)
do
echo $i
done

linux学习日记20201204
sed 使用 a 表 示 文 本 末 尾 行 s e d ′ a表示文本末尾行 sed ' aseda\the end’ a.txt 表示在最后一行添加the end

awk -F"[\t ]+ " 显式指定分割符,\t表示制表符,后面还有个空格,[]后面的+表示匹配前一个符号的一个或多个数量。最简单的指定如: awk -F":"指定:为分隔符

linux学习日记20201206
提取子字符串
1:4 从第2个开始 往后截取4个字符
::4 从第一个字符开始 往后截取4个字符
name=“this is my name”;
echo ${name:1:4} #输出 is i
echo ${name::4} #输出 this

linux学习日记20201208
awk 对大小写敏感,变量必须以下划线或字母开始,然后接上字母或下划线或数字
awk 变量名和数组名不能一样
awk 默认把一行当成一条记录处理,
BEGIN {
FS="\n"
RS="" #RS告诉awk空白行作为 记录分隔符
} # 作用是FS告诉awk 把\n换行符当成分隔符,
RS:Record Separator,记录分隔符
ORS:Output Record Separate,输出当前记录分隔符,默认为\n换行
FS:Field Separator,字段分隔符,默认为制表符空格符
OFS:Out of Field Separator,输出字段分隔符

awk -F ’ ’ ‘$2~/122/{ print $0 }’ a.sh 查找第二列为122的行
sed -n -e ‘s/[[:space:]][[:space:]]*/ /g;1p’ a.sh sed 将多个连续空格折叠成1个空格

( ( (( ((i%$j)) 比 expr $i % $j 效率高出指数级别
------各种符号
在 bash shell 中, ( ) 与 ‘ ‘ ( 反 引 号 ) 都 可 用 做 命 令 替 换 用 , ( ) 与` ` (反引号) 都可用做命令替换用, ()()()并不是所有shell都支持
用 于 变 量 替 换 。 一 般 {}用于变量替换。一般 var 与${var}没有什么不一样,但是用 会 比 较 精 确 的 界 定 变 量 名 称 的 范 围 。 { } 会比较精确的界定变量名称的范围。 { }的模式匹配功能:# 是去掉左边(在键盘上#在 之 左 边 ) ; 之左边);% 是去掉右边(在键盘上%在 )之右边);#和%中的单一符号是最小匹配,两个相同符号是最大匹配。
[ ] 和 []和 [](())都是进行数学运算的。支持+ - * / %(“加、减、乘、除、取模”)。但注意,bash只能作整数运算,对于浮点数是当作字符串处理的。在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用
[ ] 为test命令的另一种形式,但要注意:1.必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。2.test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。3.大于符号或小于符号必须要转义,否则会被理解成重定向。

vim 下。
1) 将shutdown字符串全部替换成reboot
:%s/shutdown/reboot/g # 符号%表示整篇文本,也可以用[1,7]指定第1行到第7行
2) 清空所有字符
:%d

linux学习日记20201210
菲波那契数组实现–优化算法.算法里面,有时使用数组(地址传递)比变量(值传递)高效很多
mysql 数组取值的实现
DROP FUNCTION if EXISTS Get_StrArrayLength;
CREATE FUNCTION Get_StrArrayLength(str varchar(1024),split varchar(10),i BIGINT) returns varchar(1024)
begin
DECLARE entry varchar(1024);
DECLARE num BIGINT;

set i=i-1;

set num= if(length(str)=0,0,length(str) - length(replace(str,split,’’))+1) -i;
if num<=0 then
set entry= -1;
ELSE
set entry=substring_index(SUBSTRING_INDEX(str,split,-num),split,1);
END if;

return entry;
end

set @entry = ‘18831, 18832, 18834, 18835, 18836, 19044’;
set @item = ‘61002, 61001, 61005, 61006, 61007’;
set @split = ‘,’;

SELECT Get_StrArrayLength(@item,@split,4)

DECLARE i BIGINT;
DECLARE cou BIGINT;
set i=1
set cou= if(length(@entry)=0,0,length(@entry) - length(replace(@entry,@split,’’))+1)
while (i<=cou) do

INSERT INTO creature_loot_template VALUES
( Get_StrArrayLength(@entry,@split,i), Get_StrArrayLength(@item,@split,i), 0, 100, 0, 1, 0, 1, 1, NULL);

end while;

echo “1” | awk ‘{printf("|%10s|\n",“weiding”)}’ 右对齐是awk的默认输出方式,%加一个字符表示输出类型,10表示输出的长度,不够的地方用空格填充
$ echo “1” | awk ‘{printf("|%10x|\n",“10”)}’ 如x表示16进制
| a|
$ echo “1” | awk ‘{printf("|%-10x|\n",“10”)}’ 10前面的-表示把右对齐改成左对齐,-是修饰符,另外的修饰符还有#,+,0
|a |

linux学习日记20201211
awk 内置函数index()的起始位是1
scp 文件名 主机IP:目录
rpm -ivh 安装包.rmp 安装rpm包命令
echo “1.fradjsfra fra” | awk ‘{ gsub(/fra/,“dddd”,$2);print }’ awk的替换函数sub默认只替换第一个,gsub表示全局替换,$2不指定的话就表示在整行进行
特别注意的是字符&无论在sub或gsub都会被全局替换,关闭此功能使用&
awk 数组打印或者调用时,需要加双引号如 print arry[“s1”],除非数组键是传递的参数如print arry[$1]
awk substr(reg,pos,len) 返回reg字符串从pos位置开始的len个字符

linux学习日记20201212
awk 里面变量总数不是$#,而是NF
BEGIN {
FS=":"
OFS=" "
}

 {
    if (NF!=7 ) print NR,NF,"invalied"
	 if ($2!="x")  print NR,$2,"invalied"             # 第二个字段是否包含数字或者英文
	 if  ($1 !~ /[A-Za-z0-9]/) print NR,$1,"invalied"

} # 判断passwd内容是否合规

sed = a.txt | sed ‘N;s/\n/ /g’ 使用sed在文本内容每行前面加上行号
sed N的用法
echo -e “1\n2\n3\n4” | sed -n ‘N;s/\n/ /;p’
sed先读入第一行到pattern space,然后执行N命令,将第二行追加进pattern space
这时pattern space里面就是1\n2,然后执行s/\n/ /,将换行符替换成空格,最后打印。
echo -e “1\n2\n3\n4” | sed -n ‘n;s/\n/ /;p’
sed先读入第一行到pattern space,然后执行n命令,用第二行覆盖pattern space
这时pattern space里面就是2,然后执行s/\n/ /,因为pattern space里没有\n,所以不做任何替换,直接打印

[root@Mylinux tmp]# echo -e “1\n2” |sed -n ‘n;p’
2
[root@Mylinux tmp]# echo -e “1\n2” |sed -n ‘N;p’
1
2

seq 1 100|sed -n ‘p;n’ 奇数
seq 1 100|sed -n ‘n;p’ 偶数
seq 1 100|sed -n ‘p;n;n;n’
seq 1 100|sed -n ‘p;n;n;n;n’

如果sed的模式空间对应awk的$0
N相当于awk的{v=$0;next;$0=v"\n"$0}
n相当于awk的next

用shell来比喻的话
N是: echo 下一行内容>>模式空间
n是: echo 下一行内容>模式空间

jobs 显示当前会话的作业状态 , bg是把前台进程转到后台运行,fg是把后台进程转到前台进行,
ctrl+Z不会停止命令的执行,只是将它挂起,暂停运行,等待bg或者其他命令
ctrl+\杀死前台进程
ctrl+C中断进程

linux学习日记20201213
scp /root/.ssh/authorized_keys 192.168.255.131:/root/.ssh/ CentOS 8 使用scp命令传普通文件
传输文件夹报错not a regular file 解决方法是加上-r
使用ssh-keygen -t rsa生成A机密钥,在/user/.ssh/目录下出现两个文件
-rw------- 1 root root 2622 Dec 13 17:09 id_rsa #私钥
-rw-r–r-- 1 root root 580 Dec 13 17:09 id_rsa.pub #公钥
然后把id_rsa.pub的内容发给B机添加到文件里面/root/.ssh/authorized_keys,这样A机访问B机就无需验证
服务器端更改IP地址后,秘钥不需更新

linux学习日记20201214
会话(session)是一个若干进程组的集合,同样的,系统中每一个进程组也都必须从属于某一个会话;一个会话只拥有最多一个控制终端(也可以没有),该终端为会话中所有进程组中的进程所共用
PPID 指父进程 id;PID 指进程 id;PGID 指进程组 id
SID 指会话 id;TTY 指会话的控制终端设备;COMMAND 指进程所执行的命令
TPGID 指前台进程组的 PGID。

按年月日时分秒格式输出当前时间date +%Y%m%d%H%M%S 获取结果赋值到变量方式$(date +%Y%m%d%H%M%S)
du -ms /home/weiding/study/ 统计目录总大小,m表示以MB为单位,s表示总计
/proc/cpuinfo展示CPU的硬件信息,实时信息在/proc/stat:
有以上信息可以得出 cpu是4核的,cpu这项对应信息如下
cpu user nice system idle iowait irq softirq steal guest guest_nice
user:用户态的CPU时间
nice:低优先级程序所占用的用户态的cpu时间。
system:系统态的CPU时间
idle:CPU空闲的时间(不包含IO等待)
iowait:等待IO响应的时间
irq:处理硬件中断的时间
softirq:处理软中断的时间
steal:其他系统所花的时间(个人理解是针对虚拟机)
guest:运行时间为客户操作系统下的虚拟CPU控制(个人理解是访客控制CPU的时间)
guest_nice:低优先级程序所占用的用户态的cpu时间。(访客的)

intr 这行展示系统中断的信息,第一个为自系统启动依赖,发生的所有中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
ctxt 这行展示自系统启动以来CPU发生的上下文交互的次数
btime 这行展示从系统启动到现在为止的时间(以UTC时间开始计算,单位为秒)
processes 这行展示自系统启动以来所创建的任务的个数
procs_runnig 这行显示当前运行队列的任务数目
procs_blocked 这行显示当前被阻塞的任务数目
spftirq 这行显示软中断的情况

systemctl命令兼容了service,即systemctl也会去/etc/init.d目录下,查看,执行相关程序
systemctl命令管理systemd的资源Unit systemd的Unit放在目录/usr/lib/systemd/system(Centos)

centos stream8下载地址:
http://mirrors.163.com/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-20201211-dvd1.iso

20210118
apache各种资源包下载地址
http://archive.apache.org/dist/apr/
http://mirror.bit.edu.cn/apache/
https://buildlogs.centos.org/c7.1810.u.x86_64/kernel/


  1. :digit: ↩︎

  2. [:space:] ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值