######################################################################
# 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 目录中移除
网友评论