一些实用技巧

  • sort排序的时候要加上 LC_ALL=C, 否则排序可能不符合预期,具体请参考文章
  • 如何删除行尾的^M特殊符号:%s/\r//g
  • 如何将urlencode后的编码还原

    1
    2
    3
    from urllib import unquote
    str = '%E7%88%86%E6'
    print unquote(str)
  • 如何将在一个版本上开发的代码移植到另一个版本上

    1
    2
    3
    4
    svn diff > code.diff
    patch -p0 -i code.diff
    注意:可能会有拒绝,以.rej结尾,所有patch完之后,一定别忘了执行命令:
    find . -name "*.rej" 来合并下diff
  • sort排序指定分隔符

    1
    sort -t $'\t' : 使用-t参数, 注意是单引号
  • std::sort,cmp函数在元素相等时要返回false,否则会core掉,可以使用stable_sort

  • 求差集

    1
    2
    a-b : grep -F -v -f b a | sort | uniq
    b-a : grep -F -v -f a b | sort | uniq
  • grep

    • 忽略大小写:-i
    • 查询二进制文件:-a (相当于–binary-files=text)
  • 压缩 & 解压

    • tar

      1
      2
      3
      4
      5
      压缩:tar  -zcvf  xxx.tar.gz  yourdirectory
      解压:tar -zxvf xxx.tar.gz

      只打包不压缩 :tar -cvf xxx.tar yourdirectory
      解包:tar -xvf xxx.tar
    • zip

      1
      解压:unzip xxx.zip
    • tar.bz2

      1
      2
      bzip2 -d filename.tar.bz2, 生成filename.tar
      tar -xvf filename.tar
  • wget

    • nohup wget -r -l0 –preserve-permissions ftp_file &
    • preserve-permissions : 保存权限
    • -l0 :表示一直递归到最后一层,防止目标文件层次过多导致无法完全wget下来
    • -nH –cut-dirs=5 表示wget的时候使用目录裁剪
  • lsof

    • lsof -i:port_id : 查看端口号对应的进程id
  • 删除文件中的^@

    • ^@就是\0, 执行命令: sed -r ‘s/\x0//g’
    • 输入ctrl+V ctrl+@, 可以在vim中打出来,直接在vim中替换
  • 文档转换成unix格式, 删除文档中包含^M
    • dos2unix
  • linux安装需要注意的PATH
    • 动态链接库:LD_LIBRARY_PATH,使用的时候需要: export LD_LIBRARY_PATH = new_installed:$LD_LIBRARY_PATH
    • 可执行程序的查找路径:PATH, 使用的时候需要: export PATH = new_installed:$PATH
  • 删除源码软件安装
    • 1.找到安装目录,执行命令make uninstall
    • 2.如果第一步无法删除成功,说明不支持这种卸载方式,可以通过执行whereis查看可执行文件/lib等文件安装到了什么位置,然后执行rm删除
  • 使用python生成随机数

    1
    2
    import random
    rand_list = [ random.randint(0, 100000) for i in range(100) ]
  • 将一个文件中特定的文件拷贝到另一个文件
    比如:将a文件中所有cpp文件拷贝到b文件 使用xargs实现

    1
    find a -name "*.cpp" | xargs -i cp {} b

    其中:-i表示find传递给xargs的结果由{}来代替

  • map和unordered_map的区别
    1. map内部是红黑树实现的,内部是有序的
    2. unordered_map内部实现了一个哈希表,无序的
  • 用vector接收用户输入参数

    1
    2
    3
    int main(int argc, char** argv) {
    std::vector<std::string> args(argv, argv + argc);
    }
  • grep显示匹配行之前之后n行

    1
    2
    3
    -A n 显示匹配行和之后的n行
    -B n 显示匹配行和之前的n行
    -C n 显示匹配行之后和之后各n行
  • mount硬盘

    1
    2
    lsblk : 查看当前磁盘的情况
    mount /dev/sdb /disk : 前面是磁盘位置,后面是挂载目录
  • 多线程不要使用cout
    多线程情况下使用cout << a << endl, <<中间可能被中断掉,建议使用printf

  • linux机器登录后很快自动退出
    解决方案:/etc/profile 中设置TIMEOUT 改大一些
  • 查看进程id对应的程序路径
    ll /proc/PID
  • 修改文件夹所有权
    chown -R username:username /xxxx/xxxx/xxx
  • shell计算绝对值

    1
    ${res#-}, 解释:${var#Pattern} Remove from $var the shortest part of $Pattern that matches the front end of $var
  • shell while忽略循环条件

    1
    2
    3
    while :; do
    command
    done
  • BeautifulSoup避免标签自动转小写, 使用xml方式打开

    1
    soup = BeautifulSoup(open("test.xml"), 'xml')
  • shell多行注释

    1
    2
    <<EOF
    EOF
  • shell相等判断

    1. 整型 : eq
    2. 字符串 : =
  • shell获取日期

    1
    2
    today=`date +%Y%m%d`
    yesterday=`date -d "1 days ago $today" +%Y%m%d`
  • 将前台任务变成后台任务

    1
    2
    ctrl + z
    bg (将最近暂停的后台任务继续执行)
  • python dict 按照value排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my_dict = {"a" : 15, "b" : 5, "c" : 7}
    #<type 'dict'>
    print type(my_dict)

    sort_dict = sorted(my_dict.items(), key = lambda item : item[1])
    #<type 'list'>
    print type(sort_dict)

    #[('b', 5), ('c', 7), ('a', 15)]
    print sort_dict
  • python好用的进度条工具

    1
    2
    3
    4
    from tqdm import tqdm
    my_list = [x for x in range(1000)]
    for i in tqdm(range(len(my_list))):
    time.sleep(0.1)
  • linux文件删除后空间仍没释放

    1
    2
    找到进程后,杀死进程
    sudo /usr/sbin/lsof | grep deleted
  • python调用shell

    1
    2
    3
    参数需要用%s传递
    import os
    os.system('cat %s | sort -u > %s' %(f1, f2))
------ 本文结束 ------
k