美文网首页
Linux技巧

Linux技巧

作者: 右中 | 来源:发表于2019-01-05 17:46 被阅读0次

    grep

    cat file | grep -rn "string"
    grep -rn "string" file
    

    -r递归所有子目录
    -n显示行号
    -o只输出匹配的字符
    -E扩展正则表达式
    -v 反向选择

    find

    # 当前文件夹查找
    find . -name file
    find . -name "*.so"
    find . -name file | xargs  rm
    find . -name file | xargs  rm
    find . -name file | xargs  grep -rn "txt"
    find .  -maxdepth 2 -name file | xargs  grep -rn "txt"
    # 前天修改的文件
    find .  -mtime 2 -name file 
    # 近2天内(含前天)修改的文件
    find .  -mtime -2 -name file 
    # 2天前修改的文件
    find .  -mtime +2 -name file 
    # 查找并统计数量
    find .  -maxdepth 2 -name file | xargs  grep -rn "txt" | wc -l
    

    copy / mv

    -r复制文件夹
    -u只有文件不同时才复制,更新方式

    chmod

    chmod +x file增加可执行权限
    chmod 777 file所有权限
    chmod 777 -R dir所有子目录权限

    echo

    下面的特性依赖于,echo添加-e选项,意为解析字符串中的反斜杠

    e:特殊颜色

    echo -e "\e[4x;3xm string \e[0m"  
    
    • \e[0m为ANSI控制码,表示结束输出有颜色的字符
    • \e[4xm;3xm为ANSI控制码,表示开始输出有颜色的字符
    • 4x为表示背景颜的一组数字,x取值为0到7,分别代表的颜色如下:
      40表示背景为黑色
      41表示背景为红色
      42表示背景为绿色
      43表示背景为黄色
      44表示背景为蓝色
      45表示背景为紫色
      46表示背景为浅蓝色
      47表示背景为灰白色
    • 3x为表示字体颜色的一组数字,x取值为0到7,分别代表的颜色如下:
      30表示黑色
      31表示红色
      32表示绿色
      33表示黄色
      34表示蓝色
      35表示紫色
      36表示浅蓝色
      37表示灰色
    • 其它常用的ANSI控制码
      \e[1m让输出的字符高亮显式
      \e[3m输出斜体字
      \e[4m给输出的字符加上下划线
      \e[5m让输出的字符闪烁显式
      \e[7m设置反显效果,即把背景色和字体颜色反过来显示

    \e也可以用\033代替
    可以出现多次配置,如:echo -e "\e[41m\e[5m string \e[0m",红色闪烁
    清屏:echo -e "\e[2J"

    n:换行

    echo -e "line0\nline1"
    

    ln

    • ln -s src symbolic_link

    src symbolic_link需要时绝对地址,不能是相对地址
    删除符号链接只是删除了链接,文件并不会变化

    tar

    使用bzip或gzip压缩或解压

    -c新建打包文件
    -t查看打包文件的内容含有哪些文件名
    -x解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中

    -j通过bzip2的支持进行压缩/解压缩
    -z通过gzip的支持进行压缩/解压缩

    -v在压缩/解压缩过程中,将正在处理的文件名显示出来
    -f filenamefilename为要处理的文件
    -C dir指定压缩/解压缩的目录dir
    常见组合:

    • 压缩:tar cvf filename.tar 要被处理的文件或目录名称
    • 解压:tar xvf filename.tar [ -C dir]

    gcc

    -ooutput之意,用于指定生成一个可执行文件的文件名
    -c用于把源文件生成目标文件(.o),并阻止编译器创建一个完整的程序
    -I增加编译时搜索头文件的路径
    -L增加编译时搜索静态连接库的路径
    -S把源文件生成汇编代码文件
    -lm表示标准库的目录中名为libm.a的函数库
    -lpthread连接NPTL实现的线程库
    -std=用于指定把使用的C语言的版本

    whereis

    • 按系统路径查找文件
    whereis file
    

    ldd

    • 查找库依赖
    ldd exe/so
    

    历史命令

    history显示历史命令
    ctrl + r查找历史命令

    条件

    • 文件属性
      -e filename如果 filename存在,则为真
      -d filename如果 filename为目录,则为真
      -f filename如果 filename为常规文件,则为真
      -L filename如果 filename为符号链接,则为真
      -r filename如果 filename可读,则为真
      -w filename如果 filename可写,则为真
      -x filename如果 filename可执行,则为真
      -s filename如果文件长度不为0,则为真
      -h filename如果文件是软链接,则为真
      filename1 -nt filename2 如果 filename1比 filename2新,则为真。
      filename1 -ot filename2 如果 filename1比 filename2旧,则为真。

    • 整数变量表达式
      -eq等于
      -ne不等于
      -gt大于
      -ge大于等于
      -lt小于
      -le小于等于

    • 字符串变量表达式
      if [ $a = $b ]如果string1等于string2,则为真
      if [ $string1 != $string2 ]如果string1不等于string2,则为真
      if [ -n $string ]如果string 非空(非0),返回0(true)
      if [ -z $string ]如果string 为空,则为真
      if [ $sting ]如果string 非空,返回0 (和-n类似)

    • 逻辑非
      if [ ! -d $num ]如果不存在目录$num

    • 逻辑与
      if [ 表达式1 –a 表达式2 ]

    • 逻辑或
      if [ 表达式1 –o 表达式2 ]

    文件编辑器

    vi

    esc命令模式
    i编辑模式
    :wq保存并退出::
    d2d删除 2行
    G跳到最后一行

    gedit

    • 可视化编辑器

    文件比较

    • meld
    • diff

    多命令行

    • 多命令同时执行
    command1 & command2
    
    • 不管前面命令执行成功没有,后面的命令继续执行
    command1; command2
    
    • 只有前面命令执行成功,后面命令才继续执行
    command1 && command2
    
    • 只有前面命令执行失败,后面命令才执行
    command1 || command2
    

    批量重命名

    for i in `ls`; do mv -f $i `echo $i | sed 's/a/b/'`; done
    

    安装软件

    apt-get install name

    初次使用需要配置更新源,并apt-get install update

    资源查看

    # cpu占用
    top
    # 内存占用
    free
    # 进程查看
    ps -aux | grep exe
    # 磁盘占用
    df -h
    # 文件夹空间占用
    du -h --max-depth=1
    

    ssh免密操作

    apt-get install sshpass
    sshpass -p pwd ssh usr@ip
    sshpass -p pwd ssh usr@ip cmd
    sshpass -p pwd scp usr@ip:a b
    

    文件共享方式

    window与linux的文件共享

    • samba共享
    apt-get install samba
    
    echo -e "[share]\ncomment = share\npath = /\npublic = yes\nwritable = yes\nbrowseable = yes\navailable = yes\nguest ok = yes" >> /etc/samba/smb.conf
    # restart
    service smbd restart
    

    linux与linux的文件共享

    网络磁盘挂载的方式:nfs

    • 源主机开放共享权限
    apt-get install nfs-kernel-server 
    
    sed -i '/auto_test/d' /etc/exports; echo "/ 192.168.1.*(rw,sync,no_root_squash) #auto_test" >> /etc/exports
    
    # restart
    /etc/init.d/nfs-kernel-server restart
    
    • 目标主机挂载
    mount -n -o nolock 192.168.1.111:/root/ /mnt/`
    # 退出挂载
    umount /mnt/
    

    拷贝的方式:scp

    scp usr@ip:a b
    scp -r usr@ip:dir_a dir_b
    

    计时

    time

    • 单命令执行实行
    time sleep 1
    ```shell
    
    ### 仿MATLAB的Shell计时方法
    * 创建文件TIC,内容如下
    ```shell
    #! /bin/bash
    
    echo -e "#! /bin/bash\necho it takes:\`echo \$(date +%s%N) $(date +%s%N) | awk '{ print (\$1 - \$2) / 1000000}'\` ms" >TOC; chmod +x TOC
    

    如有必要,需执行chmod +x TIC

    • 使用方式
    ./TIC
    sleep 1
    ./TIC
    

    常见问题

    Bad interpreter

    • 检查文件开始的#! /bin/bash,注意!后的空格
    • 文件格式,用dos2unix filename转换
    • 文件可能正在被读写

    相关文章

      网友评论

          本文标题:Linux技巧

          本文链接:https://www.haomeiwen.com/subject/pcwrrqtx.html