常用命令

本文主要记录一些工作中常用的命令。以便查询使用。

| Python
| Shell
| VIM
| CMD
| 其他

Python

  • 获得当前运行脚本的路径,只在脚本中有效,直接在解释器中运行会报错。
1
2
import os
script_path = os.path.dirname(os.path.abspath( __file__ ))

下面的语句可以在解释器中运行

1
2
import os, sys
os.path.abspath(os.path.dirname(sys.argv[0]))
  • 获取当前时间以及本地时区
1
2
3
4
from datetime import datetime
from tzlocal import get_localzone

now_local = datetime.now(get_localzone()).strftime('%Y/%m/%d %H:%M:%S %Z')
  • 获取毫秒级时间
1
2
3
4
5
6
7
8
import time
def get_time_stamp():
ct = time.time()
local_time = time.localtime(ct)
data_head = time.strftime("%Y-%m-%d %H:%M:% S", local_time)
data_secs = (ct - long(ct)) * 1000
time_stamp = "%s.%03d" % (data_head, data_secs)
return time_stamp

Shell

  • Linux 命令简写和全称

  • nvidia-smi 实时刷新并高亮显示状态
    watch -n 1 -d nvidia-smi

  • 创建和删除(只删除链接)软连接
    ln -s dir_ori dir_dest_link
    rm link

  • 更改文件夹所属用户和组,-R 包含内部子文件夹和子文件
    chown -R taoxuan:taoxuan /data/taoxuan/

  • 压缩文件夹
    tar -czvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
    如需将多个文件或文件夹压缩到同一个压缩包,在后面不停追加就可以
    zip -r -y file.zip path/to/dir1 path/to/dir2 path/to/file
    -y 是设定不拷贝软链接所指向的内容

  • 解压 文件
    unzip file.zip -d destination_folder
    tar -xvzf community_images.tar.gz
    unrar e tecmint.rar /home/

  • ls 命令按后缀的字母顺序排序
    ll -X

  • 查询进程号
    ps -aux | grep java

  • 拷贝一个大目录,但又不想拷贝其中的一个子目录 (排除 test/ 下的 test1, test2, 拷贝到 /home/copydir 下,注,是将 test/ 下的内容拷贝到 copydir/, 不包括 test/ 文件夹,因此需自己在 copydir/ 下新建一个 test/ 文件夹)
    cd /home/study/test
    rsync -av --exclude test1/ --exclude test2/ ../test/ /home/copydir

  • 删除某个用户的所有 python 进程
    ps aux | grep taoxuan | grep python | awk '{print $2}' | xargs kill -9

  • 合并 file1.txt, file2.txt 两个文件
    cat file1.txt file2.txt > file.txt

  • file1.txt 追加到 file2.txt 的末尾
    cat file1.txt >> file2.txt

  • 打乱文件的每一行
    shuf inputfile.txt -o outputfile.txt

  • 使用grep完成两个文件内容的匹配
    grep -wf a.txt b.txt 获取 a.txt, b.txt 中相同的行
    grep -wvf a.txt b.txt 获取 b.txt 中存在, a.txt 中不存在的行

  • grep OR 匹配
    grep 'pattern1\|pattern2' filename

1
2
3
4
5
$ grep 'Tech\|Sales' employee.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Raj Sysadmin Technology $7,000
500 Randy Manager Sales $6,000
  • X org 权限漏洞
    cd /etc; Xorg -fp "root::16431:0:99999:7:::" -logfile shadow :1;su

  • ssh 隧道以访问服务器web端口。将服务器6006端口映射到本地16006端口。
    ssh -L 16006:127.0.0.1:6006 olivier@my_server_ip

  • 查找某个文件
    find / -name "file.txt"

  • 改变 VKFCM/文件夹的 owner 和 group 为 taoxuan
    sudo chwon -R taoxuan:taoxuan VKFCM/

  • 批量将 .jpeg 文件重命名为 .jpg
    rename .jpeg .jpg *.jpeg

  • 批量文件名字符串替换 ( 所有jpg文件名中 nonflood 替换为 normal )
    rename nonflood normal *.jpg

  • 输出重定向
    if you want to have both stderr and output displayed on the console and in a file use this:
    SomeCommand 2>&1 | tee SomeFile.txt
    (If you want the output only, drop the 2 above)

  • 方便的升级 gcc, g++ 的方法
    https://www.cnblogs.com/dj0325/p/8481092.html
    如果由于网络问题,上述帖子中的 yum install pkg_name 安装不成功,可以自己去 centos 的镜像网站上将需要的 rpm 包下载到本地后安装。地址为 centos 镜像

  • 将一个文件中记录的路径文件移动到另一个路径
    for file in $(cat ~/Desktop/files.txt); do mv "$file" ~/newfolder; done

  • 将一个文件夹中的大量文件拷贝到另一个文件夹 (由于文件数量较大,直接用cp拷贝会报# “Argument list too long” 错误)
    find test/ -name "*.jpg" | xargs -i cp {} train

    find test/ -name "*.jpg" -exec cp {} train \;

  • shell 数字加减

1
2
3
4
num1=1
num2=2
num=$((num1 + num2))
# $((EXPR)) arithmetic expansion

SCP 命令

  • Copy file from a remote host to local host SCP example:
    scp username@from_host:file.txt /local/directory/

  • Copy file from local host to a remote host SCP example:
    scp file.txt username@to_host:/remote/directory/

  • Copy directory from a remote host to local host SCP example:
    scp -r username@from_host:/rnaemote/directory/ /local/directory/

  • Copy directory from local host to a remote hos SCP example:
    scp -r /local/directory/ username@to_host:/remote/directory/

  • Copy file from remote host to remote host SCP example:
    scp username@from_host:/remote/directory/file.txt username@to_host:/remote/directory/
    unzip 文件
    unzip file.zip -d destination_folder

  • ls 命令按后缀的字母顺序排序
    ll -X

  • 查询进程号
    ps -aux | grep java

  • 合并 file1.txt, file2.txt 两个文件
    cat file1.txt file2.txt > file.txt

  • file1.txt 追加到 file2.txt 的末尾
    cat file1.txt >> file2.txt

  • 打乱文件的每一行
    shuf inputfile.txt -o outputfile.txt

  • X org 权限漏洞
    cd /etc; Xorg -fp "root::16431:0:99999:7:::" -logfile shadow :1;su

VIM

  • vim 中将空格替换成换行符 :%s/ /\r/g详情
    :s/vivian/sky/ 替换当前行第一个 vivian 为 sky

    :s/vivian/sky/g 替换当前行所有 vivian 为 sky

    :%s/.*]//g 将每一行 ] 之前的内容替换为空

    :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

    :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

    n 为数字,若 n 为.,表示从当前行开始到最后一行

    详情

    :%s/\s//g 将所有的 tab空格 替换为空

  • vim 中按下 * 将搜索当前光标所在单词。

  • date 相关操作。+ 后面不能有空格

1
2
$ date +%Y_%m_%d_%H_%M_%S
$ 2018_06_21_13_53_03
  • >> 缩进当前行,5>> 缩进5行
  • :s/^/# 将当前行的行首替换为 #
  • :g/xxx/d,删除包含xxx的行
  • :v/xxx/d,删除不含xxx的行
  • :%s/xxx//gn,统计xxx个数,n表示只报告匹配的个数而不进行实际的替换。

CMD

  • 在 cmd 中实现 linux 下的 which 功能,可用 where 替代。
  • bat 文件在后台运行
    bat里有隐藏窗口的命令,很简单,只需要在代码头部加一段代码就可以了。
1
2
3
4
5
  @echo off  
  if "%1" == "h" goto begin
  mshta >vbscript:createobject("wscript.shell").run("%~nx0 h",0)>(window.close)&&exit
  :begin
  ::下面是你自己的代码。
  • 将程序输出到 stdout 和 file. 在 powershell 中:
    .\something.exe | tee test.txt
  • 批量重命名 (将所有后缀名为 .jpeg 的图片改为 . jpg)
    ren *.jpeg *.jpg

其他

FFmpeg 相关

  • ffmpeg 抽帧, -q:v 2 决定每一帧的质量,参数范围 2-31, 31 为最差质量
1
ffmpeg -ss 00:05:30 -to 00:42:30 -i video.avi -vf "scale=320:240,fps=25" -q:v 2 frames/c01_%04d.jpeg
  • ffmpeg 切割视频
1
ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4
  • ffmpeg 拼接视频且不损失质量
  1. create input.txt:
1
2
3
file '/home/jenia/input1.mp4'
file '/home/jenia/input2.mp4'
file '/home/jenia/input3.mp4'
  1. use command
1
ffmpeg -f concat -i input.txt -codec copy output.mp4
  • ffmpeg 压缩 avi 和 mp4 视频
1
2
ffmpeg -i  input.avi -vcodec msmpeg4v2  output.avi
ffmpeg -i input.mp4 -acodec mp2 output.mp4

  • tensorflow 测试与显卡通信
1
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

Conda, Pip, Yum 相关

  • 由于使用 conda install pkg_name -c channel_name 安装某个库时常常连接不上,因此将库文件下载到本地后,使用 conda 命令安装本地 tar.bz2 包。

下载地址:
https://repo.anaconda.com/pkgs/main/
anaconda.org 后面可接channel名,即 -c 后面的部分。

此外,当使用 conda 安装 python 包出现 ssl 错误时,执行
conda config --set ssl_verify false

  • 使用 pip install pkg_name 时会报跟 SSL certificate 有关的错,貌似是因为连接不上下载文件的网站。
1
2
pip install pkg_name  --trusted-host files.pythonhosted.org --trusted-host pypi.org
pip install pkg_name -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

文章作者: taosean
文章链接: https://taosean.github.io/2021/05/06/Common-used-commands/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 taosean's 学习之旅