Linux Tips

linux tips

比较两个文件夹下哪些文件有差异

[user@localhost mb]$ for i in * ; do echo $i; diff -w $i ../../pipeline2/mb; done

查找文件

find ./ -name *.cpp  //查找当前目录下所有.cpp结尾的文件,自动递归查找子目录

find ./ -type f -maxdepth 2 //查找当前目录下所有文件(非文件夹),最多查找两级目录

查看文件被哪个进程占用

fuser filename  #次命令会列出占用filename文件的PID,进一步可用下面命令查看进程

ps -ef | grep PID

查找并删除文件

find ./ -name *.cpp | xargs rm -rf    //查找当前目录下所有.cpp结尾的文件,并强制删除

查找文件的内容

grep xxx ./ -rn //在当前目录及子目录查找带有xxx内容的文件,并且列出行号,(-r:文件夹递归 -n:列出行号)

git查看和历史版本的区别

git diff HEAD~2 xxx.cpp                      //查看xxx.cpp当前版本和上次提交版本的区别

ssh cloud server

ssh hw

rsync -av /tmp/test.txt hw:/tmp/text.txt

rsync -av /tmp/ hw:/tmp/

scp /tmp/dd.bin hw:/tmp/

以文件大小排序列出文件

ls -Sl  从大到小

ls -Slr 从小到大

大小写转换 gU转大写 gu转小写

gUw gUe    单词转大写

gU3w gU3e  3个单词大写

gU0 gU$     当前位置到行首、行尾转大写

2gU         当前行以及后两行转大写

gUG         当前位置到文章末尾转大写

gU5G        当前行到第5行转大写

批量重命名文件

rename txt jpg *  //将所有.txt重命名为.jpg

rename daily_srt daily_frt *.txt  //将daily_srt_20180418.txt中的srt替换掉

添加具有sudo权限用户

visudo

找到 root ALL=(ALL) ALL这行,在下面增加一行

user ALL=(ALL) NOPASSWD:ALL //NOPASSSWD指明sudo时不用输入密码

指定user可以su sg,并且不需要密码

userALL=(sg)    NOPASSWD:/bin/bash

//sudo 命令联网需要代理的情况

Defaults    env_keep += "http_proxy https_proxy ftp_proxy no_proxy DISPLAY"

修改linux(centos7)计算机名称

vi /etc/hostname

user-w530   

设置/取消代理

export http_proxy=http://*.*.*.*:8080

export https_proxy=http://*.*.*.*:8080

unset http_proxy

unset https_proxy

mount网络盘,比如群晖网络盘

sudo mkdir /software

sudo mount –o username=user,password=123456 //192.168.1.100/software /software

#CentOS8可能会报Operation not surpported错误,解决办法:

安装cifs,命令:yum install cifs-utils

安装cifs后,命令改为sudo mount -t cifs –o username=user,password=123456 //192.168.1.100/software /software,可能还会报错,继续在命令中加入版本信息即可:

sudo mount -t cifs –o username=user,password=123456,vers=1.0 //192.168.1.100/software /software

/etc/skel

/etc/skel目录下存有新建用户要拷贝的用户$HOME目录下的文件,比如.bashrc等

echo 时间

echo $(date +%F)  //2018-05-16

echo $(date +%T)  //10:23:00

echo $(date +%F%n%T)  //2018-05-16 10:23:00

启动停止http服务

service httpd start 启动

service httpd restart 重新启动

service httpd stop 停止服务

git mergetool

git mergetool,解决冲突,在下方直接修改保留需要的内容

创建文件默认权限 umask

[user@localhost ~]$umask  //查看umask值

[user@localhost ~]$0022   //新建文件默认权限是666,新建文件夹默认权限是777,要减去umask的值(按位减),如666-0022=644(rw-r--r--) 777-0022=755(rwxr-xr-x)

[user@localhost ~]$umask 0077  //修改umask值

ssh使用http代理

ssh -p 12345 49.4.0.* -o "ProxyCommand corkscrew 203.93.118.226 8080 %h %p"

提取一个文件的头尾若干行

[user@sg-server work]$ head –n 5 filename  //输出filename的头5行

[user@sg-server work]$ tail –n 5 filename    //输出filename的最后5行

[user@sg-server work]$ tail –n 5 filename > newfile    //输出filename的最后5行到新文件new file

Git回退某个版本

git log filename命令查看各提交的版本

[user@sg-server sim]$ git log exec/xxx.cpp

commit 5b0030f89d3cd617f477f106fb7b50ef0ff79c68

Author: user<user@*.com>

Date:   Fri Jun 1 17:13:12 2018 +0800

    mod

commit c5f9e08acad35e77f8354f2e009eba6b72f169c4

Author: dd <dd@*.com>

Date:   Fri May 25 18:55:59 2018 -0400

make arrival price more accurate in counting volume

然后checkout对应版本,具体命令:

git checkout c5f9e08acad35e77f8354f2e009eba6b72f169c4 exec/xxx.cpp

如果想将整个project或目录回退,则在相应目录下执行git log,找到commit标签,再git –reset –hard 标签(标签不用输全,头几位就行)

vim录制与回放操作

normal模式下按q+<x>,<x>可以是任意字母或数字,表示下面的操作用<x>来缓存,左下方显示recording表示进入录制模式,然后进行想要的操作。操作完成,按q退出录制。想要重复刚才的操作,按@+<x>即可。

MKL占用多CPU的问题

Linux部署了MKL,开发程序用到了MKL,运行程序时发现占用CPU非常高,经常占2000%,机器是20核40线程的CPU。后来发现是MKL的问题,运行export MKL_NUM_THREADS=1,后,程序占用CPU最多100%,而且运算时间并没变长,说明之前MKL自己用多核做了很多无用功。

wget下载ftp上的目录(包含子目录)

wget -nH -m --ftp-user=tom --ftp-password=123456 ftp://192.168.19.1/tom/

查看端口占用

netstat –tunlp | grep 端口号

查找并杀掉进程

ps –ef | grep 进程名字

上面命令会列出进程的PID,然后用kill 9 PID即可杀掉该进程。

setfacl给单独用户组或用户赋予文件/文件夹权限

$setfacl -R -m g:customer:r-x dirname  #赋予customer组读和执行dirname文件夹的权限,-R是递归操作。执行完成后可以通过$getfacl dirname查看文件夹的用户及组权限。如果要赋予某个用户文件夹或文件的权限,将上面命令中的g改为u即可,要删除用户组的权限,用如下命令:

$setfacl -R -x g:customer dirname

rsync在机器间同步文件

rsync -azv --progress -e ssh --delete /tmp/ user@hw:/tmp/

rsync -avz --progress --exclude={*2019*,*2020*,*2021*,*2022*} sg:/sg/data/ ./

安装cx_Oracle

$python -m pip install cx_Oracle --upgrade

$rpm –ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

$rpm –ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

暂停进程

$kill –stop PID

跟踪指定进程

$strace –p PID

Shell 输出到stdout stderr

stdout的文件描述符为1,stderr文件描述符为2

$echo ‘std msg’ > &1

定时观察

每隔1秒更新一下

$watch -n1 /tmp/rtc2 /tmp/file 000001

查看/等待文件更新

$tail –f filename –n 20 #查看文件最后20行,并等待更新

观察PID的IO情况

$iotop -p 4162

Linux远程分享屏幕

$tmux –S /tmp/bars new –s bar      //创建分享

$tmux -S /tmp/bars attach -t bar    //连接别人的分享

后台运行程序

$nohup ./test.sh

运行python程序时调试c++代码

首先c++的so要编译debug版本,python运行要加载so

p yest_uclose_prc_.mem[0]@10

info b //查看断点

dis 1 //disable 1号断点

TAR打包目录下的文件

$find /tmp/dir1 /tmp/dir2 –type f | grep –v “\.git\|\.bin\|\.swp$\|\.bak” | tar –czf backup.tgz --files-from -

注意--files-from,表示从文件中读取要压缩的文件列表,这里(-)从管道pipe中读取,也可以指定文件,比如—files-from files.txt(files.txt中的文件名以回车换行符分割)。

TAR只解压压缩包里的指定文件夹或文件

$tar xzf xxx.tgz dir1/dir2/   #只解压xxx.tgz中的dir1/dir2/文件夹下的所有文件

$tar xzf xxx.tgz dir1/test.c  #只解压xxx.tgz中的dir1/test.c这一个文件

查看内存/CPU占用最多的进程

可以使用一下命令查使用内存最多的10个进程    

$ps -aux | sort -k4nr | head -n 10

可以使用一下命令查使用CPU最多的10个进程    

$ps -aux | sort -k3nr | head -n 10

ipython中通过X11绘图

import matplotlib.pyplot as plt

plt.plot(data)

vim查找以指定字符开头和结尾的字符串

norm模式下敲“/”,比如:

搜索“spec”开头的字符串,则输入/\<spec

搜索“spec”结尾的字符串,则输入/spec\>

搜索“spec”,全匹配,则输入/\<spec\>

Shell脚本逐行读取文件

$for i in cat `cat err.2016.txt`; do echo $i;  done              #效率第一

$while read LINE; do  echo $LINE; done < err.2016.txt           #效率第二,与前者相当

$cat err.2016.txt | while read LINE ; do echo $LINE ; done      #效率第三

Shell脚本读取文件下所有内容

for i in *; do echo $i; done                                    #列出当前目录下所有内容

for i in `ls -a`; do echo $i; done                            #列出当前目录下所有内容,包含隐藏文件

for i in `ls -F | grep ".*\/$"`; do echo $i; done        #列出当前目录下所有文件夹(文件夹以/结尾)

linux异常邮件信息

/var/spool/mail/user

ls + xargs删除文件

删除当前文件夹下有后缀名但不是py和ini结尾的所有文件,保留文件夹。ls –F文件夹后面会带一个”/”。

ls -F | egrep '\w+(\.\w+)+$' | egrep -v "*.(py|ini)$" | xargs rm

如要删除所有文件,保留文件夹:

ls -F | egrep '.*?\w$' | xargs rm

nagios相关

nagios配置目录:

        /etc/nagios

nagios网页相关配置:

        /etc/nagios/cgi.cfg

        /etc/httpd/conf.d/nagios.conf

Git 远程url地址

查看url地址:$git remote –v

修改url地址:$git remote set-url origin https://xxx

命令行中设置临时环境变量

$env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:xxx <command>

防火墙打开端口

sudo firewall-cmd --query-port=8899/tcp

sudo firewall-cmd --zone=public --add-port=8899/tcp --permanent

sudo firewall-cmd --reload

Sed

Sed命令便于将相同的脚本命令应用于多个文件,例:
$sed –i ‘s/boy/girl/g’ `find . –name ‘*.txt’`   #找出当前目录下所有的txt文件,并将boy替换为girl, -i表示修改原文件
上面命令中的s是替换的意思,还有其他几种动作类型。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正规表示法。例如 1,20s/old/new/g。

$sed –i.bak ‘s/boy/girl/g’ `find . –name ‘*.txt’`  #-i后面跟了.bak,则修改文件前会备份文件为*.txt.bak

根据命令Kill进程

Kill命令中有chrome的进程

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值