zoukankan      html  css  js  c++  java
  • Linux Shell Commands 常用Linux命令行

    用户和权限相关

    增加用户, 修改密码, 增加sudo权限

    useradd [username]
    passwd [username
    /usr/sbin/visudo -f /etc/sudoers
    #增加 yourusername ALL=(ALL) ALL
    

    将某目录下的所有文件及目录修改为默认的权限

    # 设置目录为755
    sudo find . -type d -exec chmod 755 {} +
    # 设置文件为644
    sudo find . -type f -exec chmod 644 {} +
    将目录下的文件批量转码, 从gbk到utf-8
    find ./ -type f -exec iconv --verbose -f gbk -t utf-8 {} -o {}.txt \;
    

    创建用户组, 将用户加入新用户组

    # 新建用户组
    groupadd [groupname]
    # 修改用户的主组
    usermod -g [main-groupname] [username] 
    # 修改用户的附加组
    usermod -G [addon-groupname] [username] 
    

    删除用户

    # 仅删除用户
    sudo userdel someone
    # 同时删除其home目录
    sudo userdel -r someone 
    # 强制删除, 即使用户当前在登录状态
    sudo userdel -f someone
    

    文件, 查找相关

    列出目录大小占用统计, 仅列出目录下的第一层

    du -h --max-depth=1 [folder name] (打印出所有的使用量)
    

    删除指定时间以前的旧文件, +n表示n天之前, n表示n天前那天, -n表示n天前到现在, 在使用 -exec 参数时,必须以“\;”结尾, 否则命令不会执行

    # 当前时间往前推10天(10*24*3600秒)之前的文件, 将其删除
    find /appdata/dazhihui -mtime +10 -name "*.*" -exec rm -rf {} \;
    # 当前时间往前推10天开始, 至11天结束, 那24小时内的文件, 将其删除
    find /appdata/tl_info -mtime 10 -name "*.*" -exec rm -rf {} \;
    # 当前时间往前推10天之前, 大于3000KB的文件(目录不算), 将其清空
    find /appdata/cnlist -mtime +10 -type f -size +3000k -exec cp /dev/null {} \;
    

    删除/tmp/目录下(含子目录)下所有扩展名为.svn的文件

    find /tmp/ -name *.svn -exec rm -rvf {} \;
    

    查找包含字符串的文件

    find .|xargs grep -ri "the string to find"

    grep过滤空行,注释行

    cat squid.conf | grep -v '^$'|grep -v '#'
    

    #ls -sSh

    ls -sSh 可以将当前目录下的文件按照大小排序显示出来,最大的放在前面,当前目录下的最大文件立马现形,参数中的 S 即是按照大小排序,s 为顺带打印出文件大小,h 把大小显示为 xx K xx M 这样的易读格式,如果你只需要排序结果,那么 ls -S 就可以,仅适合文件夹下没有子文件夹的情况

    #du -h -a ./* | sort -rn
    du 的 -s 参数会告诉 du 只打印出每个文件或目录的总大小,而不要递归的把目录下所有文件的大小打印出来。然后再传给 sort,-n 为按照数字排序,-r 为逆序显示,这样最大的文件或者目录就列在前面了

    #find /root -maxdepth 1 -name ".*" -type d -print | xargs du -sm | sort -n | awk '{print $1"M",$2}'
    打印出指定目录下的一级目录所有隐藏目录的大小并且按M进行排序

    如果把红色部分的点去掉,就是查找所有目录

    解説:
    1、查找隐藏目录 使用find /path -name “.*” -type d -print
    2、查找一级的隐藏目录添加上 -maxdepth 1
    3、对目录进行以M兆的统计 du -sm
    4、对大小进行排序 默认以第一列 sort -nr (r是反向排序)
    5、awk 在这里进行修饰了下因为du -sm 是没有显示单位的 用du -sh 有单位但增加了排序的麻烦
    6、脚本和命令的书写区别 因为脚本用的for 语句是分条读入的所以如果把sort -n | awk ‘{print $1″M”,” “,$2}’ 放到 du -sm $i 之后不会对顺序产生变化

    因为每次就对一条进行排序肯定最后的结果是没有影响的 而命令是用管道的方式 每次都是一批处理完后交给后面进行 注意脚本和命令的区别。

    在使用-exec参数时,必须以“\;”结尾,否则命令将无法执行

    #删除10天以前文件结尾为.log的文件
    find /tmp/mydir -mtime +10 -name "*.log" -exec rm -rf {} \;
    
    #删除/tmp/目录下(含子目录)下所有扩展名为.svn的文件
    find /tmp/ -name *.svn -exec rm -rvf {} \;
    
    #清除垃圾:
    find / -name core -print -exec rm -rf {} \;
    

    查看文件的安全信息:

    ls -Z /opt/php/lib/php/extensions/no-debug-non-zts-20121212/
    -rwxr-xr-x root root user_u:object_r:usr_t memcached.so
    

    重置:

    sudo /sbin/restorecon /opt/php/lib/php/extensions/no-debug-non-zts-20121212/memcached.so
    

    系统相关

    不保留history
    除了编辑 ~/.bash_history 外, 在编辑之前, 需要将HISTFILE变量赋值到/dev/null

    export HISTFILE=/dev/null
    

    这样再编辑.bash_history后就不会留下编辑的命令记录了.


    查看系统信息

    #查看产品信息:
    dmidecode | grep "Product"
    
    #查看内存槽位,已经安装的内存情况:
    dmidecode |grep -A16 "Memory Device$"
    
    #查看机器的序列号:
    dmidecode | grep "Serial Number"
    
    #查看网卡信息
    dmesg | grep -i eth
    
    #显示CPU的详细信息:
    #注:-A42表示显示一下的行数,你可以根据自己的情况修改。
    dmidecode |grep -A42 "Processor"|more
    
    #查看系统硬盘信息和使用情况
    fdisk -l & df
    
    #查看主板信息等
    lspci
    
    #查看发行版名称及版本号
    cat /etc/issue 或 lsb_release -a
    
    #查看linux内核版本详细信息
    cat /proc/version
    
    #CPU信息
    cat /proc/cpuinfo
    
    #内存信息
    cat /proc/meminfo
    

    查看现有的 yum repositories, 命令:

    yum repolist
    

    yum update时出现这样的错误

    pre-existing rpmdb problem(s), 'yum check' output follows: glibc-2.12-1.209.el6_9.2.x86_64 is a duplicate with glibc-
    可以通过这两个命令解决

    package-cleanup --dupes

    package-cleanup --cleandupes

    格式化硬盘 mkfs.ext4

    $ mkfs.ext4 --help
    mkfs.ext4: invalid option -- '-'
    Usage: mkfs.ext4 [-c|-l filename] [-b block-size] [-C cluster-size]
    [-i bytes-per-inode] [-I inode-size] [-J journal-options]
    [-G flex-group-size] [-N number-of-inodes] [-d root-directory]
    [-m reserved-blocks-percentage] [-o creator-os]
    [-g blocks-per-group] [-L volume-label] [-M last-mounted-directory]
    [-O feature[,...]] [-r fs-revision] [-E extended-option[,...]]
    [-t fs-type] [-T usage-type ] [-U UUID] [-e errors_behavior][-z undo_file]
    [-jnqvDFSV] device [blocks-count]
    
    # 预显示格式化信息, 但是不执行格式化
    $ sudo mkfs.ext4 -n /dev/sdc1
    mke2fs 1.44.1 (24-Mar-2018)
    Creating filesystem with 244190390 4k blocks and 61054976 inodes
    Filesystem UUID: 2870d84e-9428-4613-a278-9dcd87260676
    Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848
    
    # 修改inode大小, 减小空间浪费
    $ sudo mkfs.ext4 -i 1048576 -n /dev/sdc1
    mke2fs 1.44.1 (24-Mar-2018)
    Creating filesystem with 244190390 4k blocks and 953984 inodes
    Filesystem UUID: a06135e9-a3ac-4ab4-bf30-02c3016b0e34
    Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848
    
    # 执行格式化
    $ sudo mkfs.ext4 -i 1048576 -L 2018A_1T /dev/sdc1
    mke2fs 1.44.1 (24-Mar-2018)
    Creating filesystem with 244190390 4k blocks and 953984 inodes
    Filesystem UUID: b04b21c4-9a00-4279-acef-53a47ae6e9b4
    Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848
    
    Allocating group tables: done 
    Writing inode tables: done 
    Creating journal (262144 blocks): done
    Writing superblocks and filesystem accounting information: done
    

    .

    查看日期和时间戳

    $ date --date='@1567356026'
    Mon Sep  2 00:40:26 CST 2019
    
    $ date -d @1567356026
    Mon Sep  2 00:40:26 CST 2019
    
    $ date +%s
    1567357854
    
    $ date +%Y:%m:%d
    2019:09:02
    

    网络相关

    netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
    

    会得到类似下面的结果,具体数字会有所不同:

    LAST_ACK 1
    SYN_RECV 14
    ESTABLISHED 79
    FIN_WAIT1 28
    FIN_WAIT2 3
    CLOSING 5
    TIME_WAIT 1669

    也就是说,这条命令可以把当前系统的网络连接状态分类汇总。

    下面解释一下为啥要这样写:

    一个简单的管道符连接了netstat和awk命令。

    ------------------------------------------------------------------
    先来看看netstat:

    netstat -n
    Active Internet connections (w/o servers)

    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

    你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。

    ------------------------------------------------------------------
    再来看看awk:

    /^tcp/
    滤出tcp开头的记录,屏蔽udp, socket等无关记录。

    state[]
    相当于定义了一个名叫state的数组
    NF
    表示记录的字段数,如上所示的记录,NF等于6
    $NF
    表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT
    state[$NF]
    表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数
    ++state[$NF]
    表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一
    END
    表示在最后阶段要执行的命令
    for(key in state)

    遍历数组
    print key,"\t",state[key]

    打印数组的键和值,中间用\t制表符分割,美化一下

    统计进程数
    netstat -nat|grep -i "192.168.110.11:80" |wc -l

    按HTTP连接数量对IP进行排序(显示前十)
    netstat -nt | grep localIP:80 | awk '{print $5}' | awk -F: '{print ($1>$4?$1:$4)}' | sort | uniq -c | sort -nr | head
    运行前需要将localIP替换为ifconfig中查到的服务器的本机IP地址。


    查看自己IP

    wget -qO- http://ipecho.net/plain; echo
    curl ipinfo.io
    curl ip.cn
    curl cip.cc
    curl myip.ipip.net
    

    使用socks5代理进行ssh连接

    这里要区分Centos6和Centos7, 在Centos6中, nc为netcat, 使用下面的命令进行连接

    ssh -o ProxyCommand='nc -x 192.168.104.20:1080 %h %p' git@192.168.6.10
    

     在Centos7中, netcat被替换为nmap-ncat, 命令也需要更新为

    ssh -o ProxyCommand="ncat --proxy-type socks5 --proxy 192.168.104.20:1080 %h %p" git@192.168.6.10
    

    可以使用配置 ~/.ssh/config

    Host 192.168.6.10
    RSAAuthentication yes
    IdentityFile ~/.ssh/id_rsa_tho
    User git
    ProxyCommand nc -v -x 192.168.104.20:1080 %h %p
    

      

  • 相关阅读:
    【面试题总结】第三篇
    Django 多账号登录
    Zabbix3.2 监控搭建
    2017.09.24校内训练
    2017.09.06校内训练
    tyvj P1001 第K极值
    洛谷P1020导弹拦截
    洛谷P1006传纸条
    2017.09.10校内训练
    hdu_1086 You can Solve a Geometry Problem too
  • 原文地址:https://www.cnblogs.com/milton/p/4215091.html
Copyright © 2011-2022 走看看