## 简述
每个程序员基本都应该用过Linux操作系统,有的用来搭建服务器,有的用来安装前端扩展插件工具等等,但是无一例外都是需要操作Linux,所以我这次分享一些常见的实用的命令。
本文将持续更新...
## chkconfig
chkconfig命令用于检查,设置系统的各种服务。
chkconfig 可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。
语法
~~~
chkconfig [--add][--del][--list][系统服务]
或
chkconfig [--level <等级代号>][系统服务][on/off/reset]
~~~
参数:
* --add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
* --del 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
* --level 指定读系统服务要在哪一个执行等级中开启或关毕。
实例列出chkconfig所知道的所有命令。
~~~
# chkconfig -list
~~~
开启服务。
~~~
//列出chkconfig所知道的所有的服务的情况
# chkconfig -list
//开启Telnet服务
# chkconfig telnet on
~~~
关闭服务
~~~
//列出chkconfig所知道的所有的服务的情况
# chkconfig -list
//关闭Telnet服务
# chkconfig telnet off
~~~
## hostname
这个命令主要是用来查看机器的域名活IP地址的。
* hostname 没有选项,显示主机名字
* hostname –d 显示机器所属域名
* hostname –f 显示完整的主机名和域名
* hostname –i 显示当前机器的ip地址
## ping
ping 命令将数据包发向用户指定地址。当包被接收。目标机器发送返回数据包。
ping 主要有两个作用
1. 用来确认网络连接是畅通的。
2. 用来查看连接的速度信息。
如果你 ping www.yahoo.com 它将返回它的ip地址 。你可以通过 ctrl+C 来停止命令。
## ifconfig
Linux中 ifconfig 命令用于显示或设置网络设备。
ifconfig 可设置网络设备的状态,或是显示目前的设置。
案例:
1、显示网络设备信息:ifconfig
~~~
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
~~~
2、启动关闭指定网卡:
~~~
ifconfig eth0 down(关)
ifconfig eth0 up(开)
~~~
3、为网卡配置和删除IPv6地址:
~~~
ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //为网卡诶之IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //为网卡删除IPv6地址
~~~
4、用ifconfig修改MAC地址
~~~
ifconfig eth0 down //关闭网卡
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
ifconfig eth0 up //启动网卡
ifconfig eth1 hw ether 00:1D:1C:1D:1E //关闭网卡并修改MAC地址
ifconfig eth1 up //启动网卡
~~~
5、配置IP地址
~~~
//给eth0网卡配置IP地址
ifconfig eth0 192.168.1.56
// 给eth0网卡配置IP地址,并加上子掩码
ifconfig eth0 192.168.1.56 netmask 255.255.255.0
// 给eth0网卡配置IP地址,加上子掩码,加上个广播地址
ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
~~~
6、启用和关闭ARP协议
~~~
ifconfig eth0 arp //开启
ifconfig eth0 -arp //关闭
~~~
7、设置最大传输单元
~~~
//设置能通过的最大数据包大小为 1500 bytes
ifconfig eth0 mtu 1500
~~~
## nslookup
nslookup命令是常用域名查询工具,就是查DNS信息用的命令。
nslookup 这个命令在 有ip地址时,可以用这个命令来显示主机名,可以找到给定域名的所有ip地址。(必须连接到互联网才能使用这个命令)
例子:nslookup www.baidu.com
你也可以使用 nslookup 从ip获得主机名或从主机名获得ip。
【系统没有nslookup命令?】
如果你的Linux系统没有nslookup命令,那么八成是你没有安装bind-utils包。
直接yum install bind-utils就可以解决问题了。
## netstat
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
netstat是发现主机连接最有用最通用的Linux命令。
你可以使用"netstat -g"查询该主机订阅的所有多播组(网络)。
~~~
netstat -nap | grep port //将会显示使用该端口的应用程序的进程id
netstat -a or netstat –all //将会显示包括TCP和UDP的所有连接
netstat --tcp or netstat –t //将会显示TCP连接
netstat --udp or netstat –u //将会显示UDP连接
netstat -g //将会显示该主机订阅的所有多播网络。
~~~
## chmod
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。
利用 chmod 可以藉以控制文件如何被他人所调用。
使用权限 : 所有使用者
语法:
~~~
chmod [-cfvR] [--help] [--version] mode file...
~~~
参数说明:
~~~
mode : 权限设定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
~~~
实例:
将文件 file1.txt 设为所有人皆可读取 :
~~~
chmod ugo+r file1.txt
~~~
将文件 file1.txt 设为所有人皆可读取 :
~~~
chmod a+r file1.txt
~~~
将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
~~~
chmod ug+w,o-w file1.txt file2.txt
~~~
将 ex1.py 设定为只有该文件拥有者可以执行 :
~~~
chmod u+x ex1.py
~~~
将目前目录下的所有文件与子目录皆设为任何人可读取 :
~~~
chmod -R a+r *
~~~
此外chmod也可以用数字来表示权限如 :
~~~
chmod 777 file
~~~
语法为:
~~~
chmod abc file
~~~
~~~
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
效果相同
~~~
若用chmod 4755 filename可使此程序具有root的权限。
## find
find 命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名。
如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
~~~
find path -option [ -print ] [ -exec -ok command ] {} ;
~~~
参数说明 :
~~~
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。
如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去 n 天过读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去 n 天过修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
~~~
实例:
将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
~~~
find . -name "*.c"
~~~
将目前目录其其下子目录中所有一般文件列出
~~~
find . -ftype f
~~~
将目前目录及其子目录下所有最近 20 分钟内更新过的文件列出
~~~
find . -ctime -20
~~~
查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
~~~
find /var/logs -type f -mtime +7 -ok rm { } ;
~~~
查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
~~~
find . -type f -perm 644 -exec ls -l { } ;
~~~
为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
~~~
find / -type f -size 0 -exec ls -l { } ;
~~~
查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
~~~
find /var/logs -type f -mtime +7 -ok rm { } ;
~~~
## mv
mv 命令用来为文件或目录改名、或将文件或目录移入其它位置。
语法:
~~~
mv [options] source dest
mv [options] source... directory
~~~
参数说明:
~~~
-i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
-f: 在mv操作要覆盖某已有的目标文件时不给任何指示;
~~~
mv参数设置与运行结果
命令格式 运行结果
mv 文件名 文件名 将源文件名改为目标文件名
mv 文件名 目录名 将文件移动到目标目录
mv 目录名 目录名 目标目录已存在,将源目录
移动到目标目录;目标
目录不存在则改名
mv 目录名 文件名 出错
实例:
将文件 aaa 更名为 bbb :
~~~
mv aaa bbb
~~~
将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。
~~~
mv info/ logs
~~~
再如将/usr/student下的所有文件和目录移到当前目录下,命令行为:
~~~
mv /usr/student/*
~~~
## cp
cp命令主要用于复制文件或目录。
语法
~~~
cp [options] source dest
~~~
或
~~~
cp [options] source... directory
~~~
参数说明:
~~~
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
~~~
实例:
~~~
// 使用指令"cp"将当前目录"test/"下的所有文件复制到新目录"newtest"下,输入如下命令:
cp –r test/ newtest
~~~
注意:用户使用该指令复制目录时,必须使用参数"-r"或者"-R"。
## awk
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。
语法
~~~
awk [选项参数] 'script' var=value file(s)
~~~
或
~~~
awk [选项参数] -f scriptfile var=value file(s)
~~~
选项参数说明:
~~~
// 指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-F fs or --field-separator fs
// 赋值一个用户定义变量。
-v var=value or --asign var=value
// 从脚本文件中读取awk命令。
-f scripfile or --file scriptfile
// 对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。
// 这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
-mf nnn and -mr nnn
// 在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
-W compact or --compat, -W traditional or --traditional
// 打印简短的版权信息。
-W copyleft or --copyleft, -W copyright or --copyright
// 打印全部awk选项和每个选项的简短说明。
-W help or --help, -W usage or --usage
// 打印不能向传统unix平台移植的结构的警告。
-W lint or --lint
// 打印关于不能向传统unix平台移植的结构的警告。
-W lint-old or --lint-old
// 打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W posix
// 允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W re-interval or --re-inerval
// 使用program-text作为源代码,可与-f命令混用。
-W source program-text or --source program-text
// 打印bug报告信息的版本。
-W version or --version
~~~
基本用法:
log.txt文本内容如下:
~~~
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
~~~
用法一:
~~~
awk '{[pattern] action}' {filenames} // 行匹配语句 awk '' 只能用单引号
~~~
实例:
// 每行按空格或TAB分割,输出文本中的1、4项
~~~
awk '{print $1,$4}' log.txt
~~~
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
~~~
// 格式化输出
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
~~~
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
用法二:
~~~
awk -F // -F相当于内置变量FS, 指定分割字符
~~~
实例:
// 使用","分割
~~~
awk -F, '{print $1,$2}' log.txt
~~~
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
~~~
// 或者使用内建变量
awk 'BEGIN{FS=","} {print $1,$2}' log.txt
~~~
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
~~~
// 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
awk -F '[ ,]' '{print $1,$2,$5}' log.txt
~~~
---------------------------------------------
2 this test
3 Are awk
This's a
10 There apple
用法三:
~~~
awk -v // 设置变量
~~~
实例:
~~~
awk -va=1 '{print $1,$1+a}' log.txt
~~~
---------------------------------------------
2 3
3 4
This's 1
10 11
~~~
awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
~~~
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
用法四:
~~~
awk -f {awk脚本} {文件名}
~~~
实例:
~~~
awk -f cal.awk log.txt
~~~
* 关于awk命令的详情:[http://www.runoob.com/linux/linux-comm-awk.html](http://www.runoob.com/linux/linux-comm-awk.html)