笔记持续更新中~~~~~
1.查找tmp目录下 内容包含123的txt文件
find命令
- find ./ -type f -mtime +1:查找今天之前修改过的文件。
- find ./ -type f -mtime -1:查找今天之内修改过的文件。
注意,**-mtime** 参数用于指定文件的修改时间,**+** 表示大于指定天数,**-** 表示小于指定天数,而没有符号表示刚好指定天数。如果需要精确到天数,可以使用 **0** 表示当天。例如 **-mtime 0** 表示查找今天修改过的文件。
删除/tmp目录下一天前的文件
find /tmp -type f -mtime +1 -exec rm {} \;
find `grep -lR '123' /tmp` -name '*.txt'
#在n天之前的”那一天之内“被更改过内容的文件
find /tmp -mtime n
#列出在n天之前(不含n天本身)被更改过内容的文件名
find /tmp -mtime +n
#列出在n天之内(含n天本身)被更改过的文件名
find /tmp -mtime -n
#查询当前目录下名字以foo开头(foo后可跟任意字符串)后缀为.txt的文件、此时*的作用与使用grep时不同
find ./ -name "foo*.txt"
2.查找tmp目录下 内容包含abc的文件,并将匹配到的每一个文件里内容123替换成456(#为分隔符)
grep -lR命令中的l代表只打印匹配到的文件名不打印匹配的行、R代表递归查找
for var in `grep -lR abc /tmp`; do sed -i s#'123'#'456'#g $var; done
#使用正则表达式匹配身份证号,第一位为1-9数,参数E表示使用正则表达式,参数o表示只输出匹配到的文本
cat test.txt | grep -Eo '[1-9][0-9]{16}[0-9xX]'
grep -l "abc" /tmp/* | xargs sed -i 's/123/456/g'
# foo*表示匹配以fo开头后面跟着零个或多个o的字符串 # 这个命令将从test.txt文件中搜索到包含fo,foo,fooo,foooo等字符串
grep 'foo*' test.txt
# -a参数强制将文件视为文本文件而不是二进制文件
grep -a 'adb' test.log
# 将test.txt文件中的每一行第一次匹配到的def替换为abc
#文件内容假设为 #123def456def #abcdef789def
#执行命令后为 #123abc456def #abcabc789def
sed -i 's/def/abc/' test.txt
#将每一行匹配到的第二个及以后的def替换为***
#文件内容假设为 #123def456defabcdef #abcdef789defqwedef
#执行命令后 #123def456***abc*** #abcdef789***qwe***
sed -i 's/def/abc/2g' test.txt
#将test.txt文件中所有的123全部替换为abc
sed -i 's/123/abc/g' test.txt
#在匹配到123所在行的下一行添加内容qwer(若存在多行包含abc的字符串内容那么就会添加多个)
sed -i '/123/a\qwer'
#将匹配到的字符串abc删除掉(原文件内容假设为123abcdef执行命令后为123def)
sed -i 's/abc//g' test.txt
#这条命令代表将fo.txt文件中每一个字符都用[]括起来、 #这条命令中的.用于匹配每一个字符&代表匹配到的字符g代表全局替换
sed -i 's/./[&]/g' fo.txt
#下面这条命令可以再将上面命令生成的[]去掉
sed -i 's/\[//g;s/\]//g' fo.txt
3.查询端口8080被哪个进程占用
lsof -i:8080
4.查询所有端口
netstat -nlpt netstat -nlpt | grep 8080
# 查看该进程网络信息
netstat -anp | grep 进程号
5.查询Java进程
ps -ef | grep java
# 查看所有进程
ps aux
# 查询有多少个java进程
ps -ef | grep java | wc -l
6.查询出Java进程的进程号并杀死该进程
# awk '{print $2}' 表示打印出第二列的内容。 xargs 表示将前面执行的结果作为参数传给下一条命令
ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
7.将该文件夹以及文件夹下的所有文件权限设置为任何人都可以读写执行
chmod -R 777 test
8.将test文件的属主改为张三
chown zhangsan test
9.将test文件的属组改为gp
chgrp gp test
10.将test文件打包压缩为test.tar.gz
tar -zcvf test.tar.gz test
11.将test.tar.gz文件解压到tmp目录下
tar -zxvf test.tar.gz -C /tmp
12.显示当前目录占用磁盘空间大小
du -sh
13.查看磁盘使用情况
df -h
#查看/tmp目录所占磁盘空间大小
du -sh /tmp
#查看当前目录下所有目录及其子目录的大小,并按照从大到小排序
du -h --max-depth=1 | sort -h -k1
14.查看设备挂载情况
lsblk -f
15.将光驱挂载到/mnt/cdrom
mount /dev/cdrom /mnt/cdrom/
# 卸载
umount /mnt/cdrom
16.磁盘分区
# 查看当前磁盘分区情况
fdisk -l
17.定时任务
# 编辑定时任务
crontab -e
# 查询定时任务
crontab -l
# 删除定时任务
crontab -r
#当出现不能执行crontab命令时,编辑/etc/crontab.allow,将用户名添加进去
sudo echo "当前用户名" >> /etc/crontab.allow
18.实时监控文件变化
tail -f 123.txt
#每隔一秒执行一次ls -rth命令
watch -n 1 ls -rth
19.yum
# 安装
yum install 软件包
# 更新
yum update 软件包
# 删除指定的软件包
yum remove 软件包
#修改yum源配置文件/etc/yum.repos.d/CentOS-Base.repo
20.rpm
# 查询所安装的所有软件包
rpm -qa
# 卸载软件包
rpm -e 软件包
# 安装软件包
rpm -ivh 软件包
21.shell脚本
# shell脚本第一行
#!/bin/bash
# $0代表脚本文件名 $1-9代表第1-9个参数 第10个以上参数需要使用${10}
# $#统计参数的个数
# $*代表命令行中所有的参数,将所有参数看成一个整体
# $@代表命令行中所有的参数,将所有参数区分对待
# $?上一次执行命令的返回状态(0是正常、其他都是错误)
# 进行运算格式
echo $[1+2]
echo $[2*5]
echo $[(2+3)*5]
# test 条件判断 使用格式
# 判断a的值是否是hello
test $a='hello'
# 如果a='hello' 那么$?的值为0、否则不为0
# 简写方式 中括号里面的表达式前后一定要有空格
[ $a='hello' ]
# 整数进行比较
-eq 等于 -ne 不等于 -lt 小于 -gt 大于 -le 小于等于 -ge 大于等于
[ 2 -eq 8 ]
# 文件 -r 可读 -w可写 -x可执行
[ -r test.sh ] -e 文件是否存在 -f 是否是常规文件 -d 是否是目录
[-e test.sh ]
# 多条件判断
&& 表示前一条命令执行成功才会执行下一条命令 ||表示前一条命令执行失败才会执行下一条命令
22.if流程控制
#!/bin/bash
if [ $1 = 'linux' ]
then
echo 'this word is linux'
elif [ $1 = 'java' ]
then
echo 'this word is java'
else
echo 'word error'
fi
23.case
#!/bin/bash
case $1 in
1)
echo 'one'
;;
2)
echo 'two'
;;
'six')
echo '666'
;;
*) #相当于java中的default
echo 'very good!'
esac
24.for
#!/bin/bash
#第一种用法
if [ $1 -le 100 ]
then
for((i=1;i <= $1;i++))
do
sum=$[$sum+$i]
done
echo $sum
else
echo "$1 > 100"
fi
25.while
#!/bin/bash
a=$1
while [ $a -le 100 ]
do
sum=$[$sum+$a]
a=$[$a+1]
done
echo $sum
26.read读取控制台输入
read (选项) (参数)
选项
-p:指定读取时的提示信息
-t:指定读取时等待的时间
参数
变量:指定读取值的变量名
#!/bin/bash
read -t 5 -p 'please tell me your name:' name
echo "hello,$name"
27.basename、dirname
basename /tmp/script/123.txt .txt
执行结果 123
dirname /tmp/script/123.txt
执行结果 /tmp/script
28.自定义函数
#!/bin/bash
function add(){
sum=$[$1 + $2]
echo $sum
}
read -p '请输入第一个数:' a
read -p '请输入第二个数:' b
echo $(add $a $b)
#调用函数
add
#获取函数返回结果、echo就是返回结果
ret=$(add)
#!/bin/bash
function test {
echo -n "是否需要往下执行?(y/n):"
read -r continue
if [ "$continue" == "y" ]
then
echo "往下执行啦!!!"
#这里的$1为该函数的第一个参数、而不是脚本的第一个参数
echo "参数为:$1"
elif [ "$continue" == "n" ]
then
echo "取消执行啦!!!"
else
echo "您输入的指令不正确、请重新输入(y/n):"
test
fi
}
num=$(($1 + 2))
test $num
29.cut
# 截取文件第一列内容以空格作为分隔符
cut -d " " -f 1 test_awk.txt
30.awk
# 搜索passwd文件以root关键字开头的所有行,并输出该行的第一列和第七列,中间以","分隔
awk -F : '/^root/{print $1","$7}' /etc/passwd
#搜索passwd文件所有行,并输出该行的第一列和第七列,中间以","分隔,在输出前先输出begin,输出后输出end
awk -F : 'BEGIN{print "begin"}{print $1","$7}END{print "end"}' /etc/passwd
31.firewalld和iptables开放指定端口
#firewalld开放指定端口
firewall-cmd --zone=public --add-port=1935/tcp --permanent
#命令含义:
--zone #作用域
--add-port=1935/tcp
#添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
#iptables
#查询iptables状态
systemctl status iptables
#清除默认配置
iptables -F
#禁用8081端口
iptables -A INPUT -p tcp --dport 8081 -j DROP
#删除这条规则
iptables -D INPUT -p tcp --dport 8081 -j DROP
#开放8080端口
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
#向指定ip开放指定端口(向192.168.1.1开放3306端口)
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.1 -j ACCEPT
#保存配置设置开机自启即可保存
service iptables save
systemctl enable iptables
#查看iptables已配置规则
iptables -L INPUT -n
#其中INPUT 链:控制进入本地系统的数据包。这里的规则允许已建立的连接和相关的数据包,允许ICMP请求,允许所有数据包,允许新建的SSH连接,拒绝其他数据包,以及允许特定目标端口的TCP连接。
#FORWARD 链:用于控制数据包在系统上进行转发(通常用于路由器或网关)。在这个例子中,所有的转发数据包都被拒绝。
#OUTPUT 链:控制从本地系统出去的数据包。默认情况下,所有类型的数据包都被允许通过。
32.关闭selinux
#临时关闭
setenforce 0
#永久关闭
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
33.修改hostname主机名
#将主机名修改为test01
hostnamectl set-hostname test01
34.字符串截取
usage=80% value=${usage%\%}
#value=80
echo "$value"
35.字符串转换为数字
usage=80% value=${usage%\%}
#此时的value为字符串
num=$((value)) #num为数字
36.实时查询带宽使用情况
# -B显示单位,设置显示单位,如b,kb,Mb
iftop -B
37.script记录终端会话
#将引号中的命令以及控制台打印的结果放到test.txt中
script -c "" test.txt
#适用于数据是通过终端输出的:有些命令会直接将数据打印到终端上,
#而不是通过标准输出流输出。
#这种情况下,无法使用管道符或重定向将数据过滤或重定向到文件中。
#就可以使用script来获取输出结果
38.top查看系统资源
top
#按数字1可查看每一个cpu的使用情况
#按P可查看使用占用cpu最高的进程
#按M可查看占用内存最高的进程
#按c可查看启动进程的完整命令
#只查看root用户的进程
top -u root
39.shell脚本中判断变量是否为空
#!/bin/bash
username=$1
userexist=$(awk -F':' '{print $1}' /etc/passwd|grep "$username")
# -z用于判断字符串是否为空,若为空则返回true
# -n用于判断字符串是否非空,若非空则返回true
if [ -z "$userexist" ]
then
echo "用户不存在,添加用户,信息如下:"
useradd "$username"
echo "123456"|passwd $username --stdin
id "$username"
else
echo "用户已存在,用户信息如下:"
id "$username"
fi
40.配置登录提示信息
#将需要提示的信息保存到/etc/motd文件中
vim /etc/motd
41.命令设置别名
#若只配置当前用户生效,则在当前用户的家目录下.bashrc文件中添加
#若所有用户都生效则需要在/etc/bashrc文件中添加
#例如,添加如下内容
alias vims='vim'
source ~/.bashrc
source /etc/bashrc
42.查看系统版本
#各个类型的Linux版本都可以查看
cat /etc/os-release lsb_release -a
#centos系统的版本
cat /ets/redhat-release
#查看内核版本
uname -a
43.解压jar包到指定目录,将解压后的目录压缩为jar包
unzip app.jar -d /app
cd /app
zip -r app.jar ./*
44.修改docker网段
#当网段冲突时,需要修改docker网络,可以修改/etc/docker/daemon.json,如果没有这个文件可以直接创建
#添加以下内容,ip地址为你需要修改为的地址,这里拿173.17.0.1举例
{
"bip": "173.17.0.1/16"
}
#修改后需要重启docker,
systemctl restart docker
45.setfacl(灵活设置权限)
#下面命令含义,赋予tiansl用户test.txt文件的读写权限,不影响其他人的权限。-m代表修改
setfacl -m u:tiansl:rw test.txt
#去除tiansl用户对test.txt文件的操作权限
setfacl -x u:tiansl test.txt
#清空test.txt文件所有的acl权限
setfacl -b test.txt
#下面这条命令含义,查看有哪些客户可以对test.txt文件操作
getfacl test.txt
#下面是命令执行结果,其中mask代表的含义是除了所有者和other以外的人的最大权限
# file: test.txt
# owner: root
# group: root
user::rw-
user:tiansl:rw-
group::r--
mask::rw-
other::r--