美文网首页
Linux 命令

Linux 命令

作者: 暴风鱼 | 来源:发表于2017-10-29 20:10 被阅读73次
######################################################################
#                           Linux 命令                                #
######################################################################
#日常命令
    #alias可添加到 ~/.bashrc 中
    $ alias t='cat /proc/acpi/ibm/thermal | grep --color=auto temperatures'
            #给显示温度起个别名并高亮显示‘temperatures’
    $ alias c='clear'
    $ alias mountiphone='rvictl -s <UDID>'   #挂载iPhone 可截数据包
    $ alias unmountiphone='rvictl -x <UDID>' #unmount iPhone

    $ cat /proc/acpi/ibm/thermal  #显示温度
    $ cat /proc/acpi/ibm/fan      #显示风扇转速
    $ cat /proc/cpuinfo           #能显示CPU频率

    $ cd;   # cd ~

    $ <ctrl>+<r>  #在命令历史中搜索
    $ history 

    $ date  #显示日期
    $ cal   #显示日历
    $ cal 2000  #2000年的日历
    $ cal 1 2000    #2000年1月的日历
    
    $ dmesg   #显示内核启动时带有时间的输出信息

    $ grep ^s /etc/passwd     #显示以s开头的行
    $ grep -c ^s /etc/passwd  #‘-c’ 显示符合条件的结果数
    $ grep -rn "abc" *  #在当前目录下所有文件中查找字符串
        # r 递归
        # n 显示行号
                # * 当前目录下所有文件

    $ ls | grep ^s  #过滤出以s开头的行
    $ ls -d *ab #列出以'ab'为结尾的文件
            #-d 将目录当成文件列出,但不列出目录中的内容
    $ ls [dD]*  #以 d or D 开头的文件
    $ ls ????a* #第五个字母是a的文件
    $ ls *[tT][aA][bB]*   #名中含有‘tab’(不区分大小写)的文件
    $ ls *[0-9] #以数字结尾的文件
    $ ls *[!0-9]    #以非数字结尾的文件

    # 查看pid为626的进程打开的文件和socket(因为一切皆文件:))  
    $ ls -al  /proc/626/fd

#包管理
    $ apt-get update  #更新‘软件列表’
    $ apt-get upgrade   #升级软件
    $ apt-get install XXX   #安装软件包XXX
    $ apt-get remove XXX    #移除软件包XXX
    $ apt show <包名>     #显示包的信息
    $ apt-cache search <包名> #搜索包
    $ apt-cache depends <包名>   #依赖于哪些
    $ apt-cache rdepends <包名>  #被哪些依赖
    $ apt-get source <包名> #下载源代码
    $ apt-get purge XXX   #移除软件包XXX及配置文件
    #所有的包描述信息在/var/lib/dpkg/status
    $ dpkg -x 1.deb d1   #将1.deb释放到目录d1下
    $ dpkg -L <包名>      #列出属于包的文件

#文件操作
    $ cp  /x/x/f1 /y/y/f2    #将f1复制到f2
    $ scp /x/f1   host:/x    #secure copy (remote file copy program)
    $ scp b@192.168.1.1:/etc/nginx/nginx.conf ./       #复制远程文件到本地
    $ scp nginx.conf b@192.168.1.1:/home/b/nginx.conf  #复制本地文件到远程

    $ chown <属主>:<属组> file   #改变file的 属主 和 属组

    $ cut -d: -f1,6 /etc/passwd  #‘-d:’分界符为‘:’ ‘-f1,6’显示第1,6列
    $ head -n 3 /etc/passwd  #显示文件‘头部’3行 
    $ tail -n 3 /etc/passwd  #显示文件‘尾部’3行

    $ sort /etc/passwd  #以字母顺序 显示文件内容

    $ xxx | wc -l   #传给wc数行数

    $ xev  #print contents of X events
        #显示按了哪个键 以及键的信息

    $ dd if=/dev/zero of=EmptyFloppy.img bs=512 count=2880  #创建空白软盘(1.44MB)镜像

    $ df -h  # disk free 查看盘上还有多少空间可用 -h :以人类易读的方式
    $ du -hd1    # disk space usage  文件及目录的大小
                #‘-h’ 以人类易读的方式
                #‘-d1’ 一级子目录
    $ du -md1 | sort -n  #输出所有一级子目录的大小并排序  ‘m’以兆为单位
                        #‘-n’ --numeric-sort 根据字符串数值比
    $ du -sh  #显示当前文件夹大小 ‘s’ summarize
    $ dstat  #磁盘 IO 状态 信息
    $ dstat -D sda,sdb  #显示sda,sdb的IO状态信息 
    $ dstat -m  #显示内存使用情况 

    $ iotop  #进程级的 IO 状态信息

    $ diff  file1 file2  #显示文件间的不同

    $ fdisk  #创建分区
    $ fdisk -l  #列出磁盘信息 分区情况

    $ find .
    $ find . -name "*.rpm" -print  #在当前目录查找 文件名后缀为".rpm"的文件
    $ find /usr/ -user b  #/usr 目录下 所有属于b的文件
    $ find /home -mtime -1 -print > list 
                #'-mtime -1' 最后修改日期为昨天的文件列表 写入list
    $ find / -type d >X 2>/dev/null &   #搜索/下的所有目录写入文件X 
                                        #错误信息定向到/dev/null  并在后台运行
    $ find . -name "*.pro*" | xargs grep "str"  #查找当前目录下文件名包含“.pro”的文件
                                                #过滤出包含子串“str”的行

    #删除当前目录中下级目录里的 .git 文件夹
    $ find . -mindepth 2  -maxdepth 2 -name .git -exec rm -fr {} \;
            # 最小深度      最大深度       名字      对find到的结果执行的命令
    #删除当前目录下任意深度的所有.release 和 .cache 文件夹
    $ find . \( -name '.cache' -o -name '.release' \) -exec rm -fr {} \;

    $ locate  # find files by name 直接读取数据库(/var/lib/mlocate/mlocate.db) 速度快
    $ updatedb #更新mlocata.db信息
    $ locate /etc/sh  #搜索完整档案名中包含‘/etc/sh’的文件 例如:/etc/shadow  /home/b/etc/sh1 等
    $ locate -i /etc/sh #‘-i’忽略大小写

    $ whereis xxx #locate the binary, source, and manual page files for a command
    $ which xxx # locate a command 定位一个命令 

    $ find . | cpio -o > ../initrd.img   #将当前目录下的文件归档为上层目录下的 initrd.img 文件
    $ cpio -idu < X  #将X档中的释放出来


    $ ln file1 link1   #建立file1的硬链link1
    $ ln -s file1 link1 #建立file1的软链 link1

    $ file xx # determine file type 判断文件xx的类型

    $ gzip <file>  #将file压缩为file.gz
    $ zcat <file>  #查看压缩文件的内容
    $ gunzip <file.gz> #将file.gz解压文件file
    $ xz   #压缩或解压缩 .xz 格式的文件
    $ tar -czvf hi.tar.gz hi/       #将目录hi下的文档归档并压缩到 hi.tar.gz
                    # c(creat)z(.gz)v(verbose)f(filelist) 
                    #前三个参数顺序可变 f后要跟着文件名列表,so,f只能放在最后
    $ tar -tvf <文件名>  #t(list) 列出里面的内容
    $ tar -cvT list -f x.tar #T('文件列表'文件list) -f(输出文件)
                            #将文件列表中的文件归档为x.tar

    $ mkdir -p ~/x/x/x/x    #需要时自动创建上层目录

    $ rm -r ./*  #清空当前目录

    $ touch a  #建立空文件a OR 更新已有文件的最后修改时间为现在

    $ umask #set file mode creation mask
        #创建新文件时的掩码 比如值为:022 (000 010 010) rwx r-x r-x
        #即:除了所有者外,其他用户没有写权限
#网络
    $ curl [URL] > [保存到本地的文件名]
    
    $ wget https://x.com/x.xz  #下载文件

    $ ifconfig  #显示IP等信息
    $ route -e  #显示网关信息
    $ dig #能显示出根域名解析服务器  <DNS>
    $ dig sohu.com +trace #显示域名解析过程
    $ dig @8.8.8.8 google.com  #从8.8.8.8 解析域名 google.com

    $ host sohu.com #查询ip和mail服务器
    $ host 8.8.4.4 #通过ip查主机名
            # DNS查询 4.4.8.8.in-addr.arpa 来解析其主机名

    # DNS查询类型:
    #      A   查询名字对应的ip地址
    #     PTR  查询ip地址对应的域名
    #    CNAME 规范名
    #    HINFO 主机信息
    #     MX   邮件交换记录
    #     NS   一个域的授权名字服务器
    $ host -t  a    www.163.com  # 通过指定类型进行查询
    $ host -t ptr   www.163.com
    $ host -t cname www.163.com
    $ host -t  mx   163.com
    $ host -t  ns   163.com

    $ traceroute -n -w 2 -q 2 -m 30 8.8.8.8  #跟踪到8.8.8.8的路由路径 <DNS>
                #-n 打印节点的数字地址
                #   -w 等待的秒数
                #        -q 每次查询发两个查询请求
                #             -m 最大跳数

    $ nmap -sn 192.168.1.1/24  #对192.168.1.0-255 进行ping
    # -sn: Ping Scan - disable port scan  只进行ping 不进行端口扫描
    # 24 : 24位掩码 即前3个字节不变 [x.x.x.0 ~ x.x.x.255]
        # 16: 16位掩码 即前2个字节不变 [x.x.0.0 ~ x.x.255.255]
        # 8 : 8位掩码 即前1个字节不变 [x.0.0.0 ~ x.255.255.255]
        # 0 : 0位掩码 即前0个字节不变 [0.0.0.0 ~ 255.255.255.255]

    $ telnet <IP> <PORT>  #尝试使用TCP连接某端口

    $ arp -al #显示arp转换表信息
        #a : The program displays or deletes all of the current ARP entries.
        #l : 链路层可到达情况
    $ netstat -at #显示端口信息 a:all t:tcp
    $ netstat -au # u:udp
    $ netstat -anut
    $ netstat -ant # n:端口号
    $ netstat -r # 显示路由表
    $ netstat -rn # 已数字地址的形式显示路由表

        # Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
        # default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
        # 172.17.0.0      *               255.255.0.0     U         0 0          0 docker0
        # 192.168.1.0     *               255.255.255.0   U         0 0          0 eth0

        # Destination        Gateway            Flags        Refs      Use   Netif Expire
        # default            192.168.1.1        UGSc          160        0     en0
        # 127                127.0.0.1          UCS             1        0     lo0
        # 127.0.0.1          127.0.0.1          UH             17     7458     lo0

        # Flags <U> 该路由可以使用
        #        U   RTF_UP           Route usable
        #       <G> 该路由是一个网关。 没有此标志表示目的地是直接相连的。
        #        G   RTF_GATEWAY      Destination requires forwarding by intermediary
        #       <H> 该路由是到一个主机。 没有此标志表示带一个网络。
        #        H   RTF_HOST         Host entry (net otherwise)
        #       <D> 该路由由重定向报文创建
        #        D   RTF_DYNAMIC      Created dynamically (by redirect)
        #       <M> 被重定向报文修改
        #        M   RTF_MODIFIED     Modified dynamically (by redirect)
        #        m   RTF_MULTICAST    The route represents a multicast address

        # Refs   Reference Count 正在使用路由的活动进程数

        # Use    使用这条路由发送的数据包数量
    $ netstat -nia #可以看到ip为224.0.0.1的多播组
            # n 以数字形式显示IP
            # i 显示接口的统计结果
            # a 显示所有的借口

    $ fuser -n tcp <端口号>  #哪个进程在使用这个端口
    $ fuser -n udp <端口号>  # 再用 ps ax | grep [pid] 进行查看
    $ lsof -i :<端口号> # OSX 查看端口被哪个进程使用

    #打开某个端口监听 向某个端口写数据 (Linux OSX 的参数格式会不同)
    # 可指定 tcp | udp 以及发送的数据
    $ nc -l 1234  #监听1234端口
    $ nc 127.0.0.1 1234 < data #将当前目录下的data文件写向 
            #本机的1234端口
    $ nc -u 127.0.0.1 1234 < data
        #-u UDP   
    $ nc -zv 192.168.1.1 1-10  #扫描1.1的1-10端口
        #z 不发送任何数据只建立链接
        #v verbos
    $ echo -ne "GET / HTTP/1.0\r\n\r\n" | nc 192.168.1.1 8080 #GET8080端口上的内容
    $ iftop  #查看网络接口的流量 很好用:)
        #TX:发送流量
        #RX:接收流量
        #TOTAL:总流量
        #Cumm:运行iftop到目前时间的总流量
        #peak:流量峰值
        #rates:分别表示过去 2s 10s 40s 的平均流量


#任务管理
    $ killall cat #杀死所有的cat  kill processes by name 
    $ jobs    #显示后台作业
    $ <命令>   &   #将命令放到后台执行
    $ fg [作业号]  #将作业调到前台
    $ bg [作业号]  #将作业调回后台
    $ ps aux | egrep "u1|u2"   #过滤出用户u1或u2的进程
    $ pstree #进程树
    $ top #'s':刷新间隔
        #'f':选择显示哪些字段,及按哪个字段排序
        #'P':按CPU占用率排序
        #'M':按内存占用排序
        #'T':按时间排序
        #'V':切换为树视图
    $ ps aux | egrep "u1|u2"   #过滤出用户u1或u2的进程

    $ service --status-all   # 所有service的运行状态

#用户管理
    $ users  #显示当前已登录的用户
    # useradd is a low level utility for adding users. 
    # 用adduser 更方便些
    $ useradd -m user1 #创建用户use1,并建立home目录
    $ useradd -m user1 -p <加密后的密码(将直接写入/etc/shadow中)> #创建用户use1,并建立home目录         
    $ cat /etc/passwd #有所有用户的信息
    $ cat /etc/shadow
    $ cat /etc/group #所有组的信息
    $ groups #print the groups a user is in
            #显示当前用户所在组
    $ groups <用户名> #显示用户所在的组
    $ groupadd name #添加一个组
    $ adduser USER GROUP #将用户添加到组中

    $ usermod <用户名> -g GROUP   #强制使用 GROUP 为新主组
    $ usermod <用户名> -aG <组名> #将用户追加到组中
    $ usermod <用户名> -G <新的组名列表> #指定用户所在的所有组
    $ userdel -r <用户名> #删除用户及其主目录
            #-r, --remove 删除主目录和邮件池
    $ groupdel <组名>  #删除组
    $ chgrp <组名> <文件或目录>  #更改文件的所属组
    $ gpasswd
        #用法:gpasswd [选项] 组
        #选项:
        #  -a, --add USER                向组 GROUP 中添加用户 USER
        #  -d, --delete USER             从组 GROUP 中添加或删除用户
        #  -r, --remove-password         移除组 GROUP 的密码
        #  -R, --restrict                向其成员限制访问组 GROUP
        #  -M, --members USER,...        设置组 GROUP 的成员列表
        #  -A, --administrators ADMIN,...   设置组的管理员列表
    $ last | more   #显示登录信息
    $ last <用户名>  #用户的登录记录
    $ last tty1     #在tty1上的登录记录
    $ lastlog       #报告用户的登录情况

    $ w #显示who登录并在做什么
    $ who   #显示who登录了
    $ whoami  #我是谁

    $ mesg y  #接收消息
    $ mesg n  #不接受消息
    $ write u #给用户u写消息
    $ wall    #给所有用户写消息

    $ passwd    #改密码

#其他
    $ bash -x domains.sh
        # -x 进入跟踪方式,显示所执行的每一条命令

    $ ldconfig      # scan the lin change again

    $ lsmod    #显示内核中模块的状态
    $ modprobe #增删模块Add and remove modules from the Linux Kernel
    $ depmod   #Generate modules.dep and map files. 里面有模块的相关性描述
    $ modinfo  XXX   #显示模块XXX的信息

    $ lshw      #列出系统中的硬件
    $ dmidecode #查看dmi信息 SMBIOS信息 硬件信息
                #详见 man dmidecode
    
    $ python 回车 9999999**9999999 #我喜欢这样跑cpu到100%

    $ type <命令>  #显示<命令>是build-in,还是外部的

#文档手册
    $ man   #快捷键 : vi风格的
            #</> 搜索
            #   <n> 搜索下一个
            #   <shift>+<n> 搜索上一个

    $ man ascii  #显示ascii表
    $ man -k xxx #等同于 apropos
    $ apropos xxx  #搜索手册页名称和描述

#文件系统
    $ mkinitramfs -v  3.14.2bfy -o /boot/initrd.img-3.14.2bfy
                #制作initrd.img :init ram disk

    $ mount #显示已挂载的分区
    $ mount -t ntfs /dev/sda1 ~/C #挂载ntfs类型的sda1分区
    $ mount -t iso9660  <iso文件> ~/iso #挂载iso类型的文件
    $ umount ~/C  #卸载挂载到~/C上的分区

    $ od /bin/ls  #以八进制形式显示文件内容
    $ strings /bin/ls  #列出文件中的字符串 例如:可执行文件中的字符串
    
    $ swapoff /dev/sdax #关闭swap 
    $ cat /proc/swaps   #查看swap在哪个分区
    $ swapon /dev/sdax  #启用swap

    $ sync  # flush file system buffers 
            # 将暂存在内存中的数据写回磁盘 

#linux kernel
    $ patch -s -p1 < ../3.14.3-1.patch   #打补丁
    $ patch -sR -p1 < ../3.14.3-1.patch  #反向取消已打的补丁
                                        #s: silent until erro occur

    $ uname -a #print system information  -a:所有的
        #什么 内核名 内核版本 机器名 什么的都有

#shasowsockets
    $ sslocal -s 10.2.2.1 -p 52361 -k 95602 -b 127.0.0.1 -l 1080 --fast-open  
        #shadowSocks 命令
            #optional arguments:
            #  -s SERVER_ADDR        server address
            #  -p SERVER_PORT        server port, default: 8388
            #  -b LOCAL_ADDR         local binding address, default: 127.0.0.1
            #  -l LOCAL_PORT         local port, default: 1080
            #  -k PASSWORD           password
            #  -m METHOD             encryption method, default: aes-256-cfb
            #  --fast-open           use TCP_FASTOPEN, requires Linux 3.7+

#SSH
    $ ssh-add <fileName>    #adds private key identities to the authentication agent 
                            #添加SSH私钥

#管理操作
    $ su <用户名>   #切换用户,但保留了当前的环境
    $ su - <用户名> #切换用户,并初始化用户环境
    $ sysctl kernel.sched_rr_timeslice_ms=100  #configure kernel parameters at runtime
                                            #配置内核参数

    $ reset #terminal initialization

    $ runlevel #显示上一个和当前的runlevel
    $ init N   #改变runlevel到N
    $ init 0   # 关机
    $ init 6   # 重起

    $ sudo update-rc.d shadowsocks-local remove
        # 将shadowsocks-local的脚本从所有rc.d 目录中移除

相关文章

网友评论

      本文标题:Linux 命令

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