记录一些自己不懂得知识

以下是shell的命令记录

status/true > /dev/null 2>&1
这个命令的意思是:后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空.
所以可以看出" >/dev/null 2>&1 "常用来避免shell命令或者程序等运行中有内容输出。
grep -w

grep -w用于字符串精确匹配
若文件中的内容包括如下:
262 a3
262
26
如果 grep ‘26’ file,结果是三行全部都被显示
若要精确匹配26所在行
使用grep -w ‘26’ file
grep -v 是反向查找的意思,比如 grep -v  "grep" 就是查找不含有 grep 字段的行;   grep -v ^# /etc/profile就是不显示以#开头的行
例如   ps -ef | grep '/home/helife/tomcat-wap/' | grep -v "grep"
查看包含 '/home/helife/tomcat-wap/' 但不包含 "grep" 的进程
grep -e
显示文件中符合条件的字符
查找当前目录下所有文件中包含字符串”Linux”的文件,会将含有Linux字符串的所有文件匹配出来。
以下命令在后台执行 root 目录下的 runoob.sh 脚本:
#nohup
nohup /root/runoob.sh &
ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义 
-A 列出所有的行程 
-w 显示加宽可以显示较多的资讯 
-au 显示较详细的资讯 
-aux 显示所有包含其他使用者的行程 (常用ps aux | grep xxx)

test命令用法

功能:检查文件和比较值

  1)判断表达式
  if test  (表达式为真)
  if test !表达式为假
  test 表达式1 –a 表达式2                  两个表达式都为真
  test 表达式1 –o 表达式2                 两个表达式有一个为真

  2)判断字符串
  test –n 字符串                                   字符串的长度非零
  test –z 字符串                                    字符串的长度为零
  test 字符串1=字符串2                    字符串相等
  test 字符串1!=字符串2               字符串不等

  3)判断整数
  test 整数1 –eq 整数2                        整数相等
  test 整数1 –ge 整数2                        整数1大于等于整数2
  test 整数1 –gt 整数2                         整数1大于整数2
  test 整数1 –le 整数2                         整数1小于等于整数2
  test 整数1 –lt 整数2                          整数1小于整数2
  test 整数1 –ne 整数2                        整数1不等于整数2

  4)判断文件
  test  File1 –ef  File2                            两个文件具有同样的设备号和i结点号
  test  File1 –nt  File2                            文件1比文件2 新
  test  File1 –ot  File2                            文件1比文件2 旧
  test –b File                                           文件存在并且是块设备文件
  test –c File                                           文件存在并且是字符设备文件
  test –d File                                           文件存在并且是目录
  test –e File                                           文件存在
  test –f File                                            文件存在并且是正规文件
  test –g File                                           文件存在并且是设置了组ID
  test –G File                                           文件存在并且属于有效组ID
  test –h File                                           文件存在并且是一个符号链接(同-L)
  test –k File                                           文件存在并且设置了sticky位
  test –b File                                           文件存在并且是块设备文件
  test –L File                                           文件存在并且是一个符号链接(同-h)
  test –o File                                           文件存在并且属于有效用户ID
  test –p File                                           文件存在并且是一个命名管道
  test –r File                                            文件存在并且可读
  test –s File                                           文件存在并且是一个套接字
  test –t FD                                             文件描述符是在一个终端打开的
  test –u File                                           文件存在并且设置了它的set-user-id位
  test –w File                                          文件存在并且可写
  test –x File                                           文件存在并且可执行

sed -i.bak 备份加替换
sed -i.bak "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config  #之后会出现没有原文件config.bak(config里面的内容已经被替换了)

操作文件:sed.c
i love you
name id year
twoname id year

sed命令:

n命令-->移动到匹配行的下一行

sed -i '/i love you/{n;s/year/year1/;}' sed.c
里面的内容就会变成
i love you
name id year1
twoname id year
#------------经典shell脚本的例子----------------
#可以根据数字可以循环执行多次
#!/bin/bash
if [ 'all' == 'all' ]; then
    i=0
    while :        
    do
        if [ $i -le 20 ]; then
            sleep 0.1
            i=$[$i + 1]
            echo $i
            continue
        else
            echo $i
            echo "curl -s -d  'step=ex}}sendpost/"
        fi
    done
fi
#linux系统中let命令在bash中用于计算,变量名前不用加$,可以实现自加和自减操作
[root@linuxprobe test]# a=3
[root@linuxprobe test]# echo $a
3
[root@linuxprobe test]# b=a+4
[root@linuxprobe test]# echo $b
a+4
[root@linuxprobe test]# let b=a+4 ## let可以实现变量前不加$的计算
[root@linuxprobe test]# echo $b
7

# expr可以把子字符串的转化成数字
# let只能用于计算
#!/bin/bash
for i in $(seq 1 1 9)  # seq是一个命令 1 表示i的初值 2 表示i的成长 10表示i的最大值(相当于python中的range命令)
do
	if [ $(expr $i) -lt 10 ];then
		dir_num="0${i}"
		echo $dir_num
	else
		dir_num=${i}
	fi
	mkdir -p data/preparegok/MGUserServer${dir_num}
done
#判断语句
if list then
	do something here
elif list then
	do another thing here
else
	do something else here
fi
等于(Equal):-eq;
不等于(Not Equal):-ne;
大于 (Greater Than):-gt;
小于(Lesser Than):-lt;
小于或等于(Lesser or Equal):-le;
wait和&
wait作用与解释:
等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态。如果没有制定参数,则等待所有子进程的退出,其退出状态为0.
如果是shell中等待使用wait,则不会等待调用函数中子任务。在函数中使用wait,则只等待函数中启动的后台子任务。
在shell中使用wait命令,相当于高级语言里的多线程同步。

&&&
a & b 表示a和b同时运行
a && b表示 a运行成功后再运行b
总结:使用多进程的思想进程进程的管理,辉大大减少时间消耗。而通过最少的时间消耗达到与单线程执行的同样的事情。
例子:如下(创建九个目录会减少一半的时间)
for i in $(seq 1 1 9);do
{
	if [ $(expr $i) -lt 10 ];then
		dir_num="0${i}"
		echo $dir_num
	else
		dir_num=${i}
	fi
	mkdir -p data/preparegok/MGUserServer${dir_num}
} &
done
wait
echo "over this threah!!!!"
# 变量里面有变量用eval这个命令
eval echo "数组最后一个元素为\${my_array[$len_arr]}"

# 反向查找出需要删除的文件删除
find -not -name {{typeid}}_{{jarFilename}}|grep zip|xargs rm -rf
# jinja语法中在列表中使用索引查找列表中的某一元素
{{ key.0 }}
# jinja语法中添加元素至列表
{% set t = [] %}
{% for i in rang(20) %}
	{% t.append(i) %}
{% endfor %}

kill 掉匹配的所有进程

如,要 kill 掉 swoole 相关的进程

ps aux | grep swoole |  awk '{print $2}' | xargs kill -9

shell 判断文件夹或文件是否存在

# 文件夹不存在则创建·

if [ ! -d "/data/" ];then
    mkdir /data
else
    echo "文件夹已经存在"
fi

# 文件存在则删除

if [ ! -f "/data/filename" ];then
    echo "文件不存在"
else
    rm -f /data/filename
fi

# 判断文件夹是否存在

if [ -d "/data/" ];then
    echo "文件夹存在"
else
    echo "文件夹不存在"
fi

# 判断文件是否存在

if [ -f "/data/filename" ];then
    echo "文件存在"
else
    echo "文件不存在"
fi

# 文件比较符

-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新  [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧  [ "/data/file1" -ot "/data/file2" ]

逻辑判断‘和’与‘或’

# 和
if [ ! $1 == 1 ] && [ $2 ==2 ] ; then
	echo “OK!fi
if [ ! $1 == 1 -a $2 ==2 ] ; then
	echo “OK!fi
# 或
if [ ! $1 == 1 ] || [ $2 ==2 ] ; then
	echo “OK!fi
if [ ! $1 == 1 -o $2 ==2 ] ; then
	echo “OK!fi
Linux打印显示时间具体使用参数如下:
1、输出当前年月日
echo $(date +%F)

2、输出当前时间(时分)
echo $(date +%R)

3、输出当前时间(时分秒)
echo $(date +%T)

4、输出星期
echo $(date +%A)

5、组合输出日期时间
5.1
echo $(date +%Y/%m/%d)

5.2输出时分秒
echo $(date +%H:%M:%S)

5.3输出年月日时分秒
echo $(date +%F%n%T)
# sed各种例子
sed -i '/index.php/c\    {{DisplayModule}};' ./XXX.conf # 替换index.php那一行的内容
sed -i -e '/string/{n;d}' file# 删除匹配行的上一行(string为匹配字符串)
sed -i -e '$!N;/\n.*string/!P;D' file # 删除匹配行的下一行:

字符串截取
在这里插入图片描述

python

os.getenv('PYTHONPATH') # 获取机器环境上的变量
1、获取当前目录,相当于shell中的pwd命令

>>> os.getcwd()
'/private/var/root'
2、改变当前脚本目录,相当于shell中的cd命令

>>> os.chdir('/tmp/')
>>> os.getcwd()
'/private/tmp'
3、创建目录,相当于shell中的mkdir -p命令,我们可以看到当我们创建了目录之后,就可以直接使用chdir切换到刚才的目录下面了。

>>> os.makedirs('/tmp/yeyz/test')
>>> os.chdir('/tmp/yeyz/test')
>>> os.getcwd()
'/private/tmp/yeyz/test'
当然,还有一个os.mkdir()的命令,这个命令相当于shell中没有使用-p参数时候的情况,如果该目录存在,则无法创建成功。

4、递归删除,相当于rm -rf 命令

>>> os.removedirs('/tmp/yeyz/test')
>>> os.chdir('/tmp/yeyz/test')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '/tmp/yeyz/test'
>>> os.chdir('/tmp/yeyz/')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '/tmp/yeyz/'
>>> os.chdir('/tmp/')
>>> os.getcwd()
'/private/tmp'
   我们可以看到,当我们删除掉之后,再想进入之前的目录,就会报错了。

5、列举当前目录下的所有文件,类似于shell中的ls命令

>>> os.listdir('.')
['.keystone_install_lock', 'com.apple.launchd.Haenu0YBGr', 'com.google.Keystone', 'powerlog', 'KSDownloadAction.kArMUqmIGL', 'KSInstallAction.XG3CXseysP', 'com.apple.launchd.ImXO2x8tjW', 'com.sogou.inputmethod', 'KSOutOfProcessFetcher.u4BE7MILoK']
  可以看到,返回的值是一个list,拿到这个list之后,我们可以使用代码对它进行循环,然后依次进行处理

6、当然,我们可以使用os.system直接执行shell命令,如下的方法,我们使用system的方法直接执行pwd命令,和我们使用getcwd的方法的结果是一样的。

>>> os.system('pwd')
/private/tmp
0
>>> os.getcwd()
'/private/tmp'
大家可能还注意到了,返回了一个多余的0,它的意思是该命令执行成功,如果执行不成功,则会返回一个错误的code

>>> os.system('pwdddd')
sh: pwdddd: command not found
32512
7、文件名称改动,类似于shell中的mv 操作

>>> os.system('touch aaa.txt')
0
>>> os.system('ls')
aaa.txt                    powerlog
0
>>> os.system('pwd')
/private/tmp
0
>>> os.rename('aaa.txt','bbb.txt')
>>> os.system('ls')
bbb.txt                    powerlog
0
8、将目录和文件拆分成一个二元组,os.psth.split

>>> path = os.getcwd()
>>> print(os.path.split(path))
('/private', 'tmp')
   这个功能还是很实用的,如果你的目录是个文件,就可以很方便的拿到这个文件的上级目录

   os.path还有其他的一些函数,例如:

os.path.exists()方法可以判断当前的目录是否存在,

os.path.dirname()方法,其实就是split方法的第一个元素

os.path.isfile()方法,可以判断路径是否是一个文件

os.path.isdir()方法,可以判断给的路径是否是一个文件夹

9、sys.exit(n)方法,相当于shell中异常退出的exit 1命令

在Python中,正常退出可以不用写代码,执行完毕退出的时候,exit的值就是0,当遇到异常的时候,就可以使用sys.exit(1)的方法告诉程序当前执行过程中出现了问题。

获取本机IP

#coding=utf-8
import socket

def get_host_ip():
    """
    查询本机ip地址
    :return:
    """
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

if __name__ == '__main__':
    print(get_host_ip())

python调用shell命令

subprocess.call(["sed -i 's/hello/hi/g' /home/b.sh"], shell=True)
# 官方推荐 subprocess模块,os.system(command) 这个废弃了
# 亲测 os.system 使用sed需要进行字符转义,非常麻烦

python用类似正则匹配出需要的值

# 筛选出data_list中所有的dog并保存在new_data_list中
import re

data_list = ['cat_1', 'dog_1', 'dog_2', 'cat_2', 'dog_3', 'cat_3']  # 原列表中既有dog也有cat, 并且无规律

new_data_list = []  # 保存筛选出来dog的列表

for data in data_list:  # 遍历列表
    if  re.match('dog.*', data) != None:  # 如果正则匹配出的数据不为None, 就将此数据添加到新列表中
        new_data_list.append(data)

print(new_data_list)

python的key使用正则

from re import search, I

class RegexMap:
    def __init__(self, n_dic, val):
        self._items = n_dic
        self.__val = val

    def __getitem__(self, key):
        for regex in self._items.keys():
            if search(regex, key, I):
                return self._items[regex]
        return self.__val

#例子
fee_dic = {r'.*?美.*?元.*?': 'USD'}
reg_fee_dic = RegexMap(fee_dic, None) 
print(reg_fee_dic['*美元'])
print(reg_fee_dic['美^元'])
print(reg_fee_dic['美元%'])
print(reg_fee_dic['人民币'])
# 输出: 
'USD'
'USD'
'USD'
None

数字金字塔
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值