root帐号的一些操作:
1.重新设置 root 的密码:
$sudo passwd root #按照提示输入两次新的密码,并加以确认。
2.启用root用户登录:
$sudo vi /etc/gdm/gdm.conf #
打开gnome的配置文件,在末行模式中输入:AllowRoot回车,找到AllowRoot=false,把false改为true,保存后退出。
之后,重启系统时,就可以用 root 登录了。如果你想要禁用 root 帐号,则执行下列命令:
$sudo passwd -l root
Ubuntu 中的 root 帐号默认是被禁用了的。在这种情况之下,如果你想要使用 root 的权限来干些事情,就需要 sudo指令。对某些朋友来说,他们可能需要激活 Ubuntu 中的 root 帐号
部分技巧:
++实现RedHat非正常关机的自动磁盘修复
先登录到服务器,然后在/etc/sysconfig里增加一个文件autofsck,内容如下:
AUTOFSCK_DEF_CHECK=yes
PROMPT=yes
先登录到服务器,然后在/etc/sysconfig里增加一个文件autofsck,内容如下:
AUTOFSCK_DEF_CHECK=yes
PROMPT=yes
++改变文件或目录之最后修改时间(变为当前时间)
执行格式:touch name ( name 可为文件或目录名称。)
执行格式:touch name ( name 可为文件或目录名称。)
++如何设置login后欢迎信息
修改/etc/motd,往里面写入文本即可。
修改/etc/motd,往里面写入文本即可。
++如何设置login前欢迎界面
修改/etc/issue或者issue.net,往里面写入文本。
issue的内容是出现在本机登录的用户界面上,而issue.net则是在用户通过网络telnet的时候出现。
修改/etc/issue或者issue.net,往里面写入文本。
issue的内容是出现在本机登录的用户界面上,而issue.net则是在用户通过网络telnet的时候出现。
++如何修改网卡MAC地址
首先必须关闭网卡设备,否则会报告系统忙,无法更改。
命令是: /sbin/ifconfig eth0 down
修改 MAC 地址,这一步较 Windows 中的修改要简单。
命令是:/sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
重新启用网卡 /sbin/ifconfig eht0 up
网卡的 MAC 地址更改就完成了
首先必须关闭网卡设备,否则会报告系统忙,无法更改。
命令是: /sbin/ifconfig eth0 down
修改 MAC 地址,这一步较 Windows 中的修改要简单。
命令是:/sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
重新启用网卡 /sbin/ifconfig eht0 up
网卡的 MAC 地址更改就完成了
++建立别名/删除别名
alias cp='cp -i'
unalias cp
alias cp='cp -i'
unalias cp
++如何知道某个命令使用了什么库文件
例如要知道ls使用了什么库文件,可以使用:
$ ldd /bin/ls
例如要知道ls使用了什么库文件,可以使用:
$ ldd /bin/ls
++如何使一个用户进程在用户退出系统后仍然运行
使用nohup command &,比如:nohup wget -cftp://test.com/test.iso
#这样即使用户退出系统,wget进程仍然继续运行直到test.iso下载完成为止
使用nohup command &,比如:nohup wget -cftp://test.com/test.iso
#这样即使用户退出系统,wget进程仍然继续运行直到test.iso下载完成为止
++如何限制用户的最小密码长度
修改/etc/login.defs里面的PASS_MIN_LEN的值。比如限制用户最小密码长度是8:
PASS_MIN_LEN 8
修改/etc/login.defs里面的PASS_MIN_LEN的值。比如限制用户最小密码长度是8:
PASS_MIN_LEN 8
++如何取消root命令历史记录以增加安全性
为了设置系统不记录每个人执行过的命令,就在/etc/profile里设置:
HISTFILESIZE=0
HISTSIZE=0
或者:
ln -s /dev/null ~/.bash_history
为了设置系统不记录每个人执行过的命令,就在/etc/profile里设置:
HISTFILESIZE=0
HISTSIZE=0
或者:
ln -s /dev/null ~/.bash_history
++如何测试硬盘性能
使用hdparm -t -T /dev/hdX就可以测试硬盘的buffer-cache reads和buffered disk reads两个数据,可以用来当作硬盘性能的参考。
同时使用hdparm -c3 /dev/hdaX还能设置硬盘以32bit传输,以加快数据传输的速度。
使用hdparm -t -T /dev/hdX就可以测试硬盘的buffer-cache reads和buffered disk reads两个数据,可以用来当作硬盘性能的参考。
同时使用hdparm -c3 /dev/hdaX还能设置硬盘以32bit传输,以加快数据传输的速度。
++如何列出一个目录占用的空间
du或du -s或du -k
du -S | sort -n 可以迅速发现那个目录是最大的。
用df可以看到已安装的文件系统的空间大小及剩余空间大小。
quota -v查看用户的磁盘空间信息,如果你用quota限制了用户空间大小的话。
du或du -s或du -k
du -S | sort -n 可以迅速发现那个目录是最大的。
用df可以看到已安装的文件系统的空间大小及剩余空间大小。
quota -v查看用户的磁盘空间信息,如果你用quota限制了用户空间大小的话。
++如何使新用户首次登陆后强制修改密码
#useradd -p ‘’ testuser; chage -d 0 testuser
#useradd -p ‘’ testuser; chage -d 0 testuser
++在Linux中有时开机不自动检查新硬件,新安装的网卡找不到。请问怎么解决?
答:自动检查新硬件的服务是Kudzu,用户可以用“ntsysv”命令启动该服务。下次重启就会找到用户的新网卡。
答:自动检查新硬件的服务是Kudzu,用户可以用“ntsysv”命令启动该服务。下次重启就会找到用户的新网卡。
++从台湾省的一个 网站找到的,如何让系统密码和samba密码一致,并可以让用户自行修改他们的密码.
使用web界面來同步更改system passwd 及 samba password
下载 http://changepassword.sourceforge.net/
安装就可以了.先看README哈.
附加:
将系统用户批量倒成samba用户.
less /etc/passwd | mksmbpasswd.sh >; /etc/samba/smbpasswd
使用web界面來同步更改system passwd 及 samba password
下载 http://changepassword.sourceforge.net/
安装就可以了.先看README哈.
附加:
将系统用户批量倒成samba用户.
less /etc/passwd | mksmbpasswd.sh >; /etc/samba/smbpasswd
++更改Linux启动时用图形界面还是字符界面
cd /etc
vi inittab
将id:5:initdefault: 其中5表示默认图形界面
改id:3: initdefault: 3表示字符界面
cd /etc
vi inittab
将id:5:initdefault: 其中5表示默认图形界面
改id:3: initdefault: 3表示字符界面
++配置smb可以被哪些IP所用.
cd /etc/samba
Vi smb.conf
找到hosts allow = 192.168.1. 192.168.2. 127.
修改其为哪些机器所用,注意IP之间用逗号分开
举例:
hosts allow =192.168.1.110,192.168.1.120
cd /etc/samba
Vi smb.conf
找到hosts allow = 192.168.1. 192.168.2. 127.
修改其为哪些机器所用,注意IP之间用逗号分开
举例:
hosts allow =192.168.1.110,192.168.1.120
++禁止在后台使用CTRL-ALT-DELETE重起机器
cd /etc/inittab
vi inittab 在文件找到下面一行
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now (注释掉这一行)
如: # Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
cd /etc/inittab
vi inittab 在文件找到下面一行
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now (注释掉这一行)
如: # Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
++修改主机名
vi /etc/sysconfig/network
修改HOSTNAME一行为HOSTNAME=主机名
vi /etc/sysconfig/network
修改HOSTNAME一行为HOSTNAME=主机名
++查看开机检测的硬件
dmesg | more
dmesg | more
++查看硬盘使用情况
df –m
df –m
++查看目录的大小
du –sh dirname
du –sh dirname
++解压小全
tar xvfj lichuanhua.tar.bz2
tar xvfz lichuanhua.tar.gz
tar xvfz lichuanhua.tgz
tar xvf lichuanhua.tar
unzip lichuanhua.zip
注:压缩 tar cvfz FileName.tar.gz DirName
tar xvfj lichuanhua.tar.bz2
tar xvfz lichuanhua.tar.gz
tar xvfz lichuanhua.tgz
tar xvf lichuanhua.tar
unzip lichuanhua.zip
注:压缩 tar cvfz FileName.tar.gz DirName
++显示内存使用情况
free –m
free –m
++显示系统运行了多长时间
uptime
uptime
++显示开机自检的内容命令
dmesg
dmesg
++端口的详细列表
/etc/services
/etc/services
++查看物理信息
lspci
lspci
++文本截面的中文支持
RH 9.0自带安装包 zhcon_0.2.3_1.rh9.i386.rpm
安装完成后,执行: zhcon 就可以支持中文了
RH 9.0自带安装包 zhcon_0.2.3_1.rh9.i386.rpm
安装完成后,执行: zhcon 就可以支持中文了
++linux 控制 windows
(1)用RH9.0自己带rdesktop,版本是1.2.0
命令:rdesktop –u user –f 192.168.1.70 色默认的是8位
(2)要达到16色,就要下载新版本1.3.0
rdesktop –a 16 –u lichuanhua –g 800*600 192.168.1.70
(1)用RH9.0自己带rdesktop,版本是1.2.0
命令:rdesktop –u user –f 192.168.1.70 色默认的是8位
(2)要达到16色,就要下载新版本1.3.0
rdesktop –a 16 –u lichuanhua –g 800*600 192.168.1.70
++不让显示器休眠
setterm –blank 0
setterm –blank 0
++显示最后一个登录到系统的用户
last
last
++查看所有帐号的最后登录时间
lastlog /var/log/lastlog
lastlog /var/log/lastlog
++查看系统自开通以来所有用户的登录时间和地点
cat /var/log/secure
cat /var/log/secure
++显示当前用户所属信息
id
id
++如何知道Apache的连接数目
ps -ef|grep httpd|wc -l #其它服务可以类推
netstat -nat|grep -i “80″|wc -l # 以上结果再减1吧
ps -ef|grep httpd|wc -l #其它服务可以类推
netstat -nat|grep -i “80″|wc -l # 以上结果再减1吧
++删除用户帐号的同时,把用户的主目录也一起删除
userdel -r 用户名
userdel -r 用户名
++修改已有用户的信息
usermod [参数] 用户名
参数: -c, -d, -m, -g, -G, -s, -u以及-o与adduser参数意义相同
新参数: -l 新用户名(指定一个新的账号,即将原来的用户名改为新的用户名)
usermod [参数] 用户名
参数: -c, -d, -m, -g, -G, -s, -u以及-o与adduser参数意义相同
新参数: -l 新用户名(指定一个新的账号,即将原来的用户名改为新的用户名)
++改变redhat的系统语言/字符集
改 /etc/sysconfig/i18n 文件,如
LANG=”en_US”,xwindow会显示英文界面,
LANG=”zh_CN.GB18030″,xwindow会显示中文界面。
还有一种方法
cp /etc/sysconfig/i18n HOME/.i18n 文件,如
LANG=”en_US”,xwindow会显示英文界面,
LANG=”zh_CN.GB18030″,xwindow会显示中文界面。
这样就可以改变个人的界面语言,而不影响别的用户
vi .bashrc
export LANG=zh_CN.GB2312
export LC_ALL=zh_CN.GB2312
改 /etc/sysconfig/i18n 文件,如
LANG=”en_US”,xwindow会显示英文界面,
LANG=”zh_CN.GB18030″,xwindow会显示中文界面。
还有一种方法
cp /etc/sysconfig/i18n HOME/.i18n 文件,如
LANG=”en_US”,xwindow会显示英文界面,
LANG=”zh_CN.GB18030″,xwindow会显示中文界面。
这样就可以改变个人的界面语言,而不影响别的用户
vi .bashrc
export LANG=zh_CN.GB2312
export LC_ALL=zh_CN.GB2312
++cd光盘做成iso文件
cp /dev/cdrom xxxx.iso
cp /dev/cdrom xxxx.iso
++快速观看开机的硬件检测
dmesg | more
dmesg | more
++查看硬盘的使用情况
df -k 以K为单位显示
df -h 以人性化单位显示,可以是b,k,m,g,t..
df -k 以K为单位显示
df -h 以人性化单位显示,可以是b,k,m,g,t..
++查看目录的大小
du -sh dirname
-s 仅显示总计
-h 以K、M、G为单位,提高信息的可读性。KB、MB、GB是以1024为换算单 位, -H以1000为换算单位。
du -sh dirname
-s 仅显示总计
-h 以K、M、G为单位,提高信息的可读性。KB、MB、GB是以1024为换算单 位, -H以1000为换算单位。
++查找或删除正在使用某文件的进程
fuser filename
fuser -k filename
fuser filename
fuser -k filename
++linux中让用户的密码必须有一定的长度,并且符合复杂度
vi /etc/login.defs,改PASS_MIN_LEN
vi /etc/login.defs,改PASS_MIN_LEN
++以不同的用户身份运行程序
su - username -c “/path/to/command”
有时候需要运行特殊身份的程序, 就可以让su来做
su - username -c “/path/to/command”
有时候需要运行特殊身份的程序, 就可以让su来做
++ adduser m -g cvsroot -s /bin/false
添加用户m,参数-s /bin/false表示不允许用户直接登录服务器
id m
显示m用户的uid和gid号。
添加用户m,参数-s /bin/false表示不允许用户直接登录服务器
id m
显示m用户的uid和gid号。
++ 强制卸载rpm包
rpm -e –nodeps 包名称
#个别不正常情况下:
rm -f /var/lib/rpm/__*
rpm –rebuilddb
rpm -e –nodeps 包名称
#个别不正常情况下:
rm -f /var/lib/rpm/__*
rpm –rebuilddb
++拒绝除root用户的其它用户登陆
touch /etc/nologin
也可以在/etc/passwd中加!对指定用户限制登陆
touch /etc/nologin
也可以在/etc/passwd中加!对指定用户限制登陆
++检查自己所属之群组名称
执行格式:groups
执行格式:groups
++修改文件/文件夹所属用户组(支持-R)
chown .组名 文件名(注:组名名勿忘”.”,“:”也可)
也可chgrp 组名 文件名
chown 用户名.组名 文件名(同时修改所属用户及用户组)
chown .组名 文件名(注:组名名勿忘”.”,“:”也可)
也可chgrp 组名 文件名
chown 用户名.组名 文件名(同时修改所属用户及用户组)
++用fuser命令查看一下是哪些进程使用这个分区上的文件:
fuser –v –m /usr
如果没有什么重要的进程,用以下命令停掉它们:
fuser -k –v –m /usr
然后就可以重新挂载这些文件系统了。
fuser –v –m /usr
如果没有什么重要的进程,用以下命令停掉它们:
fuser -k –v –m /usr
然后就可以重新挂载这些文件系统了。
++网络唤醒主机
ether-wake 目标网卡MAC
ether-wake 目标网卡MAC
++如何查找大小为500K到1000K之间的文件
find / -type f -size +500k -and -size -1000k
find / -type f -size +500k -and -size -1000k
++让主机不响应ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
若想恢复就用
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#必须是用命令改,不能是vi修改
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
若想恢复就用
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#必须是用命令改,不能是vi修改
++自动注销ROOT
编辑你的配置文件”vi /etc/profile”,在"HISTSIZE="后面加入下面这行:
TMOUT=300
#300,表示300秒
编辑你的配置文件”vi /etc/profile”,在"HISTSIZE="后面加入下面这行:
TMOUT=300
#300,表示300秒
++ls只列出目录
ls -lF | grep ^d
ls -lF | grep /
ls -lF | grep ^d
ls -lF | grep /
++让cron任务不回馈信息
* * * * * cmd > /dev/null 2>&1
* * * * * cmd > /dev/null 2>&1
++lsof(list open files)用法
lsof -i :xx
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c nsd 显示nsd进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsof -i :xx
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c nsd 显示nsd进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
++改变sshd 的端口
在/etc/ssh/sshd_config 中加入一行:Port 2222,/etc/init.d/sshd restart 重启守护进程
在/etc/ssh/sshd_config 中加入一行:Port 2222,/etc/init.d/sshd restart 重启守护进程
++防止任何人使用su 命令成为root
vi /etc/pam.d/su,在开头添加下面两行:
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/Pam_wheel.so group=wheel
然后把用户添加到“wheel”组:chmod -G10 username
vi /etc/pam.d/su,在开头添加下面两行:
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/Pam_wheel.so group=wheel
然后把用户添加到“wheel”组:chmod -G10 username
++如何让ssh 只允许指定的用户登录
方法1:在/etc/pam.d/sshd 文件中加入
auth required pam_listfile.so item=user sense=allow file=/etc/sshusers nerr=fail
然后在/etc 下建立sshusers 文件,加入允许使用ssh 服务的用户名(每一个用户名都要单独一行),重新起动sshd
方法1:在/etc/pam.d/sshd 文件中加入
auth required pam_listfile.so item=user sense=allow file=/etc/sshusers nerr=fail
然后在/etc 下建立sshusers 文件,加入允许使用ssh 服务的用户名(每一个用户名都要单独一行),重新起动sshd
++利用ssh 复制文件
1、从A 复制B(推过去) #scp -rp /path/filenameusername@remoteIP:/path
2、从B 复制到A(拉过来)#scp -rpusername@remoteIP:/path/filename/path
1、从A 复制B(推过去) #scp -rp /path/filenameusername@remoteIP:/path
2、从B 复制到A(拉过来)#scp -rpusername@remoteIP:/path/filename/path
++linux机器挂载windows上的共享文件
windows IP:192.168.1.1
mount -t smbfs -o username=massky,password=massky //192.168.1.1/dbf /mnt/share
如想机器重启自动挂载,vi /etc/fstab最后加入:
//192.168.1.1/dbf /mnt/share smbfs defaults,auto,username=massky,password=massky 0 0
windows IP:192.168.1.1
mount -t smbfs -o username=massky,password=massky //192.168.1.1/dbf /mnt/share
如想机器重启自动挂载,vi /etc/fstab最后加入:
//192.168.1.1/dbf /mnt/share smbfs defaults,auto,username=massky,password=massky 0 0
++定制linux 提示符
在bash 中提示符是通过一个环境变量PS1 查看现在的值,比较直
观常用的提示符可以设定为export PS1=“[/u@/h /W]/则显示$,root 用户显示#。
在bash 中提示符是通过一个环境变量PS1 查看现在的值,比较直
观常用的提示符可以设定为export PS1=“[/u@/h /W]/则显示$,root 用户显示#。
++清空文件
[echo] > 文件名
[echo] > 文件名
++DNS相关
host -a domain.com #显示相关资讯都列出来
host domain.com 202.106.0.20 #用202.106.0.20这台DNS服务器查询domain.com
host -a domain.com #显示相关资讯都列出来
host domain.com 202.106.0.20 #用202.106.0.20这台DNS服务器查询domain.com
++前后台任务相关
jobs 列出属于当前用户的进程
bg 将进程搬到后台运行(Background)
fg 将进程搬到前台运行(Foreground)
万一你运行程序时忘记使用“&”了,又不想重新执行。可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。
jobs 列出属于当前用户的进程
bg 将进程搬到后台运行(Background)
fg 将进程搬到前台运行(Foreground)
万一你运行程序时忘记使用“&”了,又不想重新执行。可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。
++查找当前目录下七天前的文件,并删除
find ./ -mtime +7 -type f -exec rm {} /;
find ./ -mtime +7 -type f -exec rm {} /;
++产生指定大小的文件(bs*count)
dd if=/dev/zero f=filename bs=1000000 count=10
dd if=/dev/zero f=filename bs=1000000 count=10
++查找当前目录下文件并更改扩展名
更改所有.ss文件为.aa
# find ./ -name "*.ss" -exec rename .ss .aa '{}' /;
更改所有.ss文件为.aa
# find ./ -name "*.ss" -exec rename .ss .aa '{}' /;
++修改系统时间
date -s "2005-6-4 17:26"
date -s "2005-6-4 17:26"
++让服务器自动同步时间
0 1 * * * /usr/sbin/ntpdate 210.72.145.44
或 0 1 * * * rdate -s time.nist.gov
0 1 * * * /usr/sbin/ntpdate 210.72.145.44
或 0 1 * * * rdate -s time.nist.gov
++解决打开文件过多的问题
在etc/security/limits.conf 配置文件中设置进程文件描述符极限:
* soft nofile 2048
* hard nofile 4096
系统级文件描述符极限及timeout时间修改,添加如下两行到 /etc/rc.d/rc.local 启动脚本中:
# Increase system-wide file descriptor limit.
echo 65536 > /proc/sys/fs/file-max
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
#一般情况下,最大打开文件数比较合理的设置为每4M物理内存256,比如1G内存可以设为65536,
#而最大的使用的i节点的数目应该是最大打开文件数目的3倍到4倍
在etc/security/limits.conf 配置文件中设置进程文件描述符极限:
* soft nofile 2048
* hard nofile 4096
系统级文件描述符极限及timeout时间修改,添加如下两行到 /etc/rc.d/rc.local 启动脚本中:
# Increase system-wide file descriptor limit.
echo 65536 > /proc/sys/fs/file-max
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
#一般情况下,最大打开文件数比较合理的设置为每4M物理内存256,比如1G内存可以设为65536,
#而最大的使用的i节点的数目应该是最大打开文件数目的3倍到4倍
++如何用tar打包一个目录时,去掉其中的某些子目录或指定文件
加参数 –exclude 即可, 可加文件名或目录名, 可多写
tar cvf –exclude {dirname,filename} #dirname不要加/
加参数 –exclude 即可, 可加文件名或目录名, 可多写
tar cvf –exclude {dirname,filename} #dirname不要加/
++终端下修改服务器时区
/usr/sbin/timeconfig
或直接#/etc/sysconfig/clock
/usr/sbin/timeconfig
或直接#/etc/sysconfig/clock
++关闭启动时的内存不足256M提示
#vi /etc/rc.sysinit #把最后六行注释掉
或#vi /var/lib/supportinfo
把其中的 MinRAM: 256M 这个值调低点.
#vi /etc/rc.sysinit #把最后六行注释掉
或#vi /var/lib/supportinfo
把其中的 MinRAM: 256M 这个值调低点.
++在多层目录中查找到某一指定"字符串"
grep string -R /etc/sysconfig/
find ./pathname/ -name '*' | xargs grep 'string'
grep string -R /etc/sysconfig/
find ./pathname/ -name '*' | xargs grep 'string'
++占用CPU的一个命令
#yes string #有时候测试用得上。狂占CPU
#yes string #有时候测试用得上。狂占CPU
++Kill相关
kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。
kill -STOP [pid]
发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]
发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]
发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1
终止你拥有的全部进程。
++在当前目录下建个bak目录,然后 cp * bak,会提示略过bak,有其它办法可以排除指定文件(夹)?
ls -F|grep -v //|xargs -i cp {} bak #推荐
或 find ! -name "./bak"
ls -F|grep -v //|xargs -i cp {} bak #推荐
或 find ! -name "./bak"
++根据进程名显示进程号
# pidof httpd
1846 1845 1844 1843 1842 1841 1840 1839 1820
# pidof httpd
1846 1845 1844 1843 1842 1841 1840 1839 1820
++e2fsck
检查使用 Linux ext2 档案系统的 partition 是否正常工作,检查 /dev/hda5 是否正常,如果有异常便自动修复,并且设定若有问答,均回答[是] :
e2fsck -a -y /dev/hda5
检查使用 Linux ext2 档案系统的 partition 是否正常工作,检查 /dev/hda5 是否正常,如果有异常便自动修复,并且设定若有问答,均回答[是] :
e2fsck -a -y /dev/hda5
++反向输出
rev 反向输出(以行为单位)
tac 反向输出(全文)
rev 反向输出(以行为单位)
tac 反向输出(全文)
++显示终端号
tty
tty
++文件行数/字数统计
wc –l file 计算文件行数
wc -w file 计算文件中的单词数
wc -c file 计算文件中的字符数
wc –l file 计算文件行数
wc -w file 计算文件中的单词数
wc -c file 计算文件中的字符数
++出每行第5个到第9个字符
cut -b5-9 file.txt
cut -b5-9 file.txt
++删除文本文件中出现的行列
uniq
uniq
++返回文件所在路径
dirname /bin/tux #将返回 /bin
dirname /bin/tux #将返回 /bin
++fcitx在英文环境下正常使用
#vi ~/.bashrc
xport LC_CTYPE="zh_CN.UTF-8"
export XMODIFIERS="@im=fcitx"
export XIM=fcitx
export XIM_PROGRAM=fcitx
#gnome-session-properties可以把fctix加入登入后自启动
#vi ~/.bashrc
xport LC_CTYPE="zh_CN.UTF-8"
export XMODIFIERS="@im=fcitx"
export XIM=fcitx
export XIM_PROGRAM=fcitx
#gnome-session-properties可以把fctix加入登入后自启动
++split分割合并文件
split -b1440k a_whopping_big_file chunk #拆
cat chunk* > a_whopping_big_file #合
split -b1440k a_whopping_big_file chunk #拆
cat chunk* > a_whopping_big_file #合
linux /proc目录下的东西
/proc/net子目录
此目录下的文件描述或修改了联网代码的行为。可以通过使用arp,netstat,route和ipfwadm命令设置或查询这些特殊文件中的许多文件。
示例:
[root@localhost /]# ls /proc/net
anycast6 ip_conntrack mcfilter6 rt6_stats tcp
arp ip_conntrack_expect netlink rt_acct tcp6
dev ip_mr_cache netstat rt_cache udp
dev_mcast ip_mr_vif packet snmp udp6
dev_snmp6 ip_tables_matches psched snmp6 unix
if_inet6 ip_tables_names raw sockstat wireless
igmp ip_tables_targets raw6 sockstat6
igmp6 ipv6_route route softnet_stat
ip6_flowlabel mcfilter rpc stat
--------------------------------------------------------------------------------
[root@localhost /]# ls /proc/net
anycast6 ip_conntrack mcfilter6 rt6_stats tcp
arp ip_conntrack_expect netlink rt_acct tcp6
dev ip_mr_cache netstat rt_cache udp
dev_mcast ip_mr_vif packet snmp udp6
dev_snmp6 ip_tables_matches psched snmp6 unix
if_inet6 ip_tables_names raw sockstat wireless
igmp ip_tables_targets raw6 sockstat6
igmp6 ipv6_route route softnet_stat
ip6_flowlabel mcfilter rpc stat
--------------------------------------------------------------------------------
以下摘要介绍此目录下文件的功能:
arp
转储每个网络接口的arp表中dev包的统计
转储每个网络接口的arp表中dev包的统计
dev
来自网络设备的统计
来自网络设备的统计
dev_mcast
列出二层(数据链路层)多播组
列出二层(数据链路层)多播组
igmp
加入的IGMP多播组
加入的IGMP多播组
netlink
netlink套接口的信息
netlink套接口的信息
netstat
网络流量的多种统计。第一行是信息头,带有每个变量的名称。接下来的一行保存相应变量的值
网络流量的多种统计。第一行是信息头,带有每个变量的名称。接下来的一行保存相应变量的值
raw
原始套接口的套接口表
原始套接口的套接口表
route
静态路由表
静态路由表
rpc
包含RPC信息的目录
包含RPC信息的目录
rt_cache
路由缓冲
路由缓冲
snmp
snmp agent的ip/icmp/tcp/udp协议统计;各行交替给出字段名和值
snmp agent的ip/icmp/tcp/udp协议统计;各行交替给出字段名和值
sockstat
列出使用的tcp/udp/raw/pac/syc_cookies的数量
列出使用的tcp/udp/raw/pac/syc_cookies的数量
tcp
TCP连接的套接口
TCP连接的套接口
udp
UDP连接的套接口表
UDP连接的套接口表
unix
UNIX域套接口的套接口表
--------------------------------------------------------------------------------
UNIX域套接口的套接口表
--------------------------------------------------------------------------------
示例:[root@localhost /]# cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
eth0 0035C2DA 00000000 0001 0 0 0 80FFFFF0
eth0 0000FEA9 00000000 0001 0 0 0 0000FFF0
eth0 00000000 0135C2DA 0003 0 0 0 00000000
--------------------------------------------------------------------------------
[root@localhost /]# cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:8000 00000000:0000 0A 00000000:00000000 00:00000000 00000000 29 0 9525 1 0dde7500 3000 0 0 2 -1
1: 00000000:006F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 9484 1 0dde79e0 3000 0 0 2 -1
2: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 10049 1 0a8e3a00 3000 0 0 2 -1
3: 0100007F:14D7 00000000:0000 0A 00000000:00000000 00:00000000 00000000 99 0 9847 1 0dde7020 3000 0 0 2 -1
4: 0100007F:0019 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 10286 1 0a8e3520 3000 0 0 2 -1
--------------------------------------------------------------------------------
[root@localhost /]# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
218.194.53.1 0x1 0x2 00:0D:BC:78:07:3F * eth0
--------------------------------------------------------------------------------
[root@localhost /]# cat /proc/net/udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:8000 00000000:0000 07 00000000:00000000 00:00000000 00000000 29 0 9520 2 0b4ef7c0
105: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 99 0 10284 2 0b4ef040
111: 00000000:006F 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 9483 2 0b4efcc0
116: 00000000:02F4 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 9511 2 0b4efa40
119: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 10050 2 0b4ef2c0
--------------------------------------------------------------------------------
/proc/scsi子目录
此目录下包含一个列出了所有检测到的SCSI设备的文件,并且为每种控制器驱动程序提供一个目录,在这个目录下又为已安装的此种控制器的每个实例提供一个子目录。
示例:
由于本人的机器没有SCSI设备,顾暂时无法提供示例。
--------------------------------------------------------------------------------
由于本人的机器没有SCSI设备,顾暂时无法提供示例。
--------------------------------------------------------------------------------
/proc/sys子目录
在此目录下有许多子目录。此目录中的许多项都可以用来调整系统的性能。这个目录包含信息太多,无法介绍全部。只在示例中展示目录下的一些文件。
示例:[root@localhost /]# ls /proc/sys
debug dev fs kernel net proc sunrpc vm
--------------------------------------------------------------------------------
[root@localhost ~]# ls /proc/sys/fs
aio-max-nr dentry-state file-nr lease-break-time overflowgid
aio-nr dir-notify-enable inode-nr leases-enable overflowuid
binfmt_misc file-max inode-state mqueue quota
--------------------------------------------------------------------------------
[root@localhost ~]# ls /proc/sys/kernel
acct hotplug panic sem
cad_pid modprobe panic_on_oops shmall
cap-bound msgmax pid_max shmmax
core_pattern msgmnb print-fatal-signals shmmni
core_uses_pid msgmni printk sysrq
ctrl-alt-del ngroups_max printk_ratelimit tainted
domainname osrelease printk_ratelimit_burst threads-max
exec-shield ostype pty vdso
exec-shield-randomize overflowgid random version
hostname overflowuid real-root-dev
--------------------------------------------------------------------------------
[root@localhost ~]# ls /proc/sys/net
core ethernet ipv4 ipv6 unix
--------------------------------------------------------------------------------
debug dev fs kernel net proc sunrpc vm
--------------------------------------------------------------------------------
[root@localhost ~]# ls /proc/sys/fs
aio-max-nr dentry-state file-nr lease-break-time overflowgid
aio-nr dir-notify-enable inode-nr leases-enable overflowuid
binfmt_misc file-max inode-state mqueue quota
--------------------------------------------------------------------------------
[root@localhost ~]# ls /proc/sys/kernel
acct hotplug panic sem
cad_pid modprobe panic_on_oops shmall
cap-bound msgmax pid_max shmmax
core_pattern msgmnb print-fatal-signals shmmni
core_uses_pid msgmni printk sysrq
ctrl-alt-del ngroups_max printk_ratelimit tainted
domainname osrelease printk_ratelimit_burst threads-max
exec-shield ostype pty vdso
exec-shield-randomize overflowgid random version
hostname overflowuid real-root-dev
--------------------------------------------------------------------------------
[root@localhost ~]# ls /proc/sys/net
core ethernet ipv4 ipv6 unix
--------------------------------------------------------------------------------
[root@localhost sys]# ls /proc/sys/vm
block_dump laptop_mode nr_pdflush_threads
dirty_background_ratio legacy_va_layout overcommit_memory
dirty_expire_centisecs lower_zone_protection overcommit_ratio
dirty_ratio max_map_count page-cluster
dirty_writeback_centisecs min_free_kbytes swappiness
hugetlb_shm_group nr_hugepages vfs_cache_pressure
--------------------------------------------------------------------------------
block_dump laptop_mode nr_pdflush_threads
dirty_background_ratio legacy_va_layout overcommit_memory
dirty_expire_centisecs lower_zone_protection overcommit_ratio
dirty_ratio max_map_count page-cluster
dirty_writeback_centisecs min_free_kbytes swappiness
hugetlb_shm_group nr_hugepages vfs_cache_pressure
--------------------------------------------------------------------------------
[root@localhost sys]# ls /proc/sys/net/ipv4
conf tcp_fack
icmp_echo_ignore_all tcp_fin_timeout
icmp_echo_ignore_broadcasts tcp_frto
icmp_ignore_bogus_error_responses tcp_keepalive_intvl
icmp_ratelimit tcp_keepalive_probes
icmp_ratemask tcp_keepalive_time
igmp_max_memberships tcp_low_latency
igmp_max_msf tcp_max_orphans
inet_peer_gc_maxtime tcp_max_syn_backlog
inet_peer_gc_mintime tcp_max_tw_buckets
inet_peer_maxttl tcp_mem
inet_peer_minttl tcp_moderate_rcvbuf
inet_peer_threshold tcp_no_metrics_save
ip_autoconfig tcp_orphan_retries
ip_conntrack_max tcp_reordering
ip_default_ttl tcp_retrans_collapse
ip_dynaddr tcp_retries1
ip_forward tcp_retries2
ipfrag_high_thresh tcp_rfc1337
ipfrag_low_thresh tcp_rmem
ipfrag_secret_interval tcp_sack
ipfrag_time tcp_stdurg
ip_local_port_range tcp_synack_retries
ip_nonlocal_bind tcp_syncookies
ip_no_pmtu_disc tcp_syn_retries
neigh tcp_timestamps
netfilter tcp_tso_win_divisor
route tcp_tw_recycle
tcp_abort_on_overflow tcp_tw_reuse
tcp_adv_win_scale tcp_vegas_alpha
tcp_app_win tcp_vegas_beta
tcp_bic tcp_vegas_cong_avoid
tcp_bic_fast_convergence tcp_vegas_gamma
tcp_bic_low_window tcp_westwood
tcp_dsack tcp_window_scaling
tcp_ecn tcp_wmem
--------------------------------------------------------------------------------
conf tcp_fack
icmp_echo_ignore_all tcp_fin_timeout
icmp_echo_ignore_broadcasts tcp_frto
icmp_ignore_bogus_error_responses tcp_keepalive_intvl
icmp_ratelimit tcp_keepalive_probes
icmp_ratemask tcp_keepalive_time
igmp_max_memberships tcp_low_latency
igmp_max_msf tcp_max_orphans
inet_peer_gc_maxtime tcp_max_syn_backlog
inet_peer_gc_mintime tcp_max_tw_buckets
inet_peer_maxttl tcp_mem
inet_peer_minttl tcp_moderate_rcvbuf
inet_peer_threshold tcp_no_metrics_save
ip_autoconfig tcp_orphan_retries
ip_conntrack_max tcp_reordering
ip_default_ttl tcp_retrans_collapse
ip_dynaddr tcp_retries1
ip_forward tcp_retries2
ipfrag_high_thresh tcp_rfc1337
ipfrag_low_thresh tcp_rmem
ipfrag_secret_interval tcp_sack
ipfrag_time tcp_stdurg
ip_local_port_range tcp_synack_retries
ip_nonlocal_bind tcp_syncookies
ip_no_pmtu_disc tcp_syn_retries
neigh tcp_timestamps
netfilter tcp_tso_win_divisor
route tcp_tw_recycle
tcp_abort_on_overflow tcp_tw_reuse
tcp_adv_win_scale tcp_vegas_alpha
tcp_app_win tcp_vegas_beta
tcp_bic tcp_vegas_cong_avoid
tcp_bic_fast_convergence tcp_vegas_gamma
tcp_bic_low_window tcp_westwood
tcp_dsack tcp_window_scaling
tcp_ecn tcp_wmem
--------------------------------------------------------------------------------
[root@localhost sys]# cat /proc/sys/kernel/shmall
2097152
--------------------------------------------------------------------------------
[root@localhost sys]# cat /proc/sys/kernel/osrelease
2.6.9-1.667
2097152
--------------------------------------------------------------------------------
[root@localhost sys]# cat /proc/sys/kernel/osrelease
2.6.9-1.667
--------------------------------------------------------------------------------
总结:/proc文件系统包含了大量的有关当前系统状态的信息。proc的手册页中也有对这些文件的解释文档。把文件和分析这些文件的工具产生的输出进行比较能够更加清晰地了解这些文件。
2013/10/29
有趣的Linux命令:
1. sudo !!命令
没有特定输入sudo命令而运行,将给出没有权限的错误。那么,你不需要重写整个命令,仅仅输入'!!'就可以抓取最后的命令。
$ apt-get update
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
$ sudo !!
sudo apt-get update
[sudo] password for server:
…
..
Fetched 474 kB in 16s (28.0 kB/s)
Reading package lists... Done
server@localhost:~$
2. python命令
下面的命令生产一个通过HTTP显示文件夹结构树的简单网页,可以通过浏览器在端口8000访问,直到发出中断信号。
# python -m SimpleHTTPServer
3. mtr命令
我们大多数都熟悉ping和traceroute。那对于把两个命令的功能合二为一的mtr命令呢。如果mtr没在你的机子上安装,apt或者yum需要的包。
$ sudo apt-get install mtr (On Debian based Systems)
# yum install mtr (On Red Hat based Systems)
现在运行mtr命令,开始查看mtr运行的主机和google.com直接的网络连接。
# mtr google.com
mtr命令
4. Ctrl+x+e命令
这个命令对于管理员和开发者非常有用。为了使每天的任务自动化,管理员需要通过输入vi、vim、nano等打开编辑器。
仅仅从命令行快速的敲击“Ctrl-x-e”,就可以在编辑器中开始工作了。
5. nl命令
“nl命令”添加文件的行数。一个叫做'one.txt'的文件,其每行的内容是(Fedora、Debian、Arch、Slack和Suse),给每行添加行号。首先使用cat命令显示“one.txt”的文件内容。
# cat one.txt
fedora
debian
arch
slack
suse
现在运行“nl命令”,以添加行号的方式来显示。
# nl one.txt
1 fedora
2 debian
3 arch
4 slack
5 suse
6. shuf命令
“Shuf”命令随机从一个文件或文件夹中选择行/文件/文件夹。首先使用ls命令来显示文件夹的内容。
# ls
Desktop Documents Downloads Music Pictures Public Templates Videos
# ls | shuf (shuffle Input)
Music
Documents
Templates
Pictures
Public
Desktop
Downloads
Videos
# ls | shuf -n1 (pick on random selection)
Public
# ls | shuf -n1
Videos
# ls | shuf -n1
Templates
# ls | shuf -n1
Downloads
注意:你可以把‘ n1’替换成‘ n2’来输出两个随机选择或者使用 n3、 n4等数字输出其他任意的随机选择。
7. ss命令
ss”表示socket统计。这个命令调查socket,显示类似netstat命令的信息。它可以比其他工具显示更多的TCP和状态信息。
# ss
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.1.198:41250 *.*.*.*:http
CLOSE-WAIT 1 0 127.0.0.1:8000 127.0.0.1:41393
ESTAB 0 0 192.168.1.198:36239 *.*.*.*:http
ESTAB 310 0 127.0.0.1:8000 127.0.0.1:41384
ESTAB 0 0 192.168.1.198:41002 *.*.*.*:http
ESTAB 0 0 127.0.0.1:41384 127.0.0.1:8000
8. last命令
“last”命令显示的是上次登录用户的历史信息。这个命令通过搜索文件“/var/log/wtmp”,显示logged-in和logged-out及其tty‘s的用户列表。
# last
server pts/0 :0 Tue Oct 22 12:03 still logged in
server tty8 :0 Tue Oct 22 12:02 still logged in
…
...
(unknown tty8 :0 Tue Oct 22 12:02 - 12:02 (00:00)
server pts/0 :0 Tue Oct 22 10:33 - 12:02 (01:29)
server tty7 :0 Tue Oct 22 10:05 - 12:02 (01:56)
(unknown tty7 :0 Tue Oct 22 10:04 - 10:05 (00:00)
reboot system boot 3.2.0-4-686-pae Tue Oct 22 10:04 - 12:44 (02:39)
wtmp begins Fri Oct 4 14:43:17 2007
9. curl ifconfig.me
那么如何得到你的外部IP地址呢?使用google?那么这个命令就在你的终端输出你的外部IP地址。
# curl ifconfig.me
注意:你可能没有按照curl包,你需要 apt/yum来按照包。
10. tree命令
以树式的格式得到当前文件夹的结构。
# tree
.
|-- Desktop
|-- Documents
| `-- 37.odt
|-- Downloads
| |-- attachments.zip
| |-- ttf-indic-fonts_0.5.11_all.deb
| |-- ttf-indic-fonts_1.1_all.deb
| `-- wheezy-nv-install.sh
|-- Music
|-- Pictures
| |-- Screenshot from 2013-10-22 12:03:49.png
| `-- Screenshot from 2013-10-22 12:12:38.png
|-- Public
|-- Templates
`-- Videos
10 directories, 23 files
11. pstree
这个命令显示当前运行的所有进程及其相关的子进程,输出的是类似‘tree’命令的树状格式。
# pstree
init─┬─NetworkManager───{NetworkManager}
├─accounts-daemon───{accounts-daemon}
├─acpi_fakekeyd
├─acpid
├─apache2───10*[apache2]
├─at-spi-bus-laun───2*[{at-spi-bus-laun}]
├─atd
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord───{colord}
├─colord-sane───2*[{colord-sane}]
├─console-kit-dae───64*[{console-kit-dae}]
├─cron
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─dovecot─┬─anvil
│ ├─config
│ └─log
├─exim4
├─gconfd-2
├─gdm3─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─x-session-manag─┬─evolution-a+
│ │ │ │ ├─gdu-notific+
│ │ │ │ ├─gnome-scree+
│ │ │ │ ├─gnome-setti+
│ │ │ │ ├─gnome-shell+++
│ │ │ │ ├─nm-applet──+++
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─tracker-min+
│ │ │ │ ├─tracker-sto+
│ │ │ │ └─3*[{x-sessi+
│ │ │ └─2*[{gdm-session-wor}]
│ │ └─{gdm-simple-slav}
│ └─{gdm3}
├─6*[getty]
├─gnome-keyring-d───9*[{gnome-keyring-d}]
├─gnome-shell-cal───2*[{gnome-shell-cal}]
├─goa-daemon───{goa-daemon}
├─gsd-printer───{gsd-printer}
├─gvfs-afc-volume───{gvfs-afc-volume}
强大的find和xargs命令:
1.find
由于find具有强大的功能,选项也很多,大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( N F S ),find命令在该文件系统中同样有效,只要你具有相应的权限。
由于find具有强大的功能,选项也很多,大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( N F S ),find命令在该文件系统中同样有效,只要你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指3 0 G字节以上的文件系统)。
find命令的一般形式为:
find pathname -options [-print -exec -ok ...]
让我们来看看该命令的参数:
pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为' command' { } ;,注意{ }和;之间的空格。
-ok: 和- e x e c的作用相同,只不过以一种更为安全的模式来执行该参数所给出的s h e l l命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为' command' { } ;,注意{ }和;之间的空格。
-ok: 和- e x e c的作用相同,只不过以一种更为安全的模式来执行该参数所给出的s h e l l命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
find命令选项:
-name:按照文件名查找文件。
-perm:按照文件权限来查找文件。
在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666
-perm mode:文件许可正好符合mode
-perm +mode:文件许可部分符合mode
-perm -mode: 文件许可完全符合mode
-perm +mode:文件许可部分符合mode
-perm -mode: 文件许可完全符合mode
-prune:使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user: 按照文件属主来查找文件。
-group:按照文件所属的组来查找文件。
-mtime -n +n:按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。
find命令还有-atime和-ctime选项,但它们都和-mtime选项。
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变文件状态的文件
-ctime n
查找系统中最后n*24小时被改变文件状态的文件
-mmin n
查找系统中最后N分钟被改变文件数据的文件
-mtime n
查找系统中最后n*24小时被改变文件数据的文件
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变文件状态的文件
-ctime n
查找系统中最后n*24小时被改变文件状态的文件
-mmin n
查找系统中最后N分钟被改变文件数据的文件
-mtime n
查找系统中最后n*24小时被改变文件数据的文件
-nogroup:查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
使用exec或ok来执行shell命令
-nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
使用exec或ok来执行shell命令
使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,
(在有些操作系统中只允许-exec选项执行诸如ls或ls -l这样的命令)。大多数用户使用这一选项是为了查找旧文件并删除它们。
(在有些操作系统中只允许-exec选项执行诸如ls或ls -l这样的命令)。大多数用户使用这一选项是为了查找旧文件并删除它们。
建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格,
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格,
例如:
找到当前目录中含有app目录并列举里面的文件
find -name "app" -exec ls -l {} \;
[sem@host8131 ~]$ find -name "app" -exec ls -l {} \; total 4 -rw-r--r-- 1 sem sem 1186 Dec 3 11:07 login-success.jsp total 100356 drwxr-xr-x 9 sem sem 4096 Dec 11 18:29 apache-tomcat-7.0.32 -rw-rw-r-- 1 sem sem 7544023 Dec 11 18:26 apache-tomcat-7.0.32.tar.bz2 drwxrwxr-x 8 sem sem 4096 Dec 11 18:34 dspDaily -rw-rw-r-- 1 sem sem 95170961 Dec 23 17:01 dspDaily.tar.bz2 drwxr-xr-x 8 sem sem 4096 Mar 27 2013 jdk1.6.0_45 drwxrwxr-x 5 sem sem 4096 Sep 3 11:22 libevent drwxrwxr-x 6 sem sem 4096 Sep 11 11:19 maven drwxrwxr-x 5 sem sem 4096 Sep 3 11:31 memcached drwxrwxr-x 6 sem sem 4096 Sep 3 13:39 openssl drwxrwxr-x 5 sem sem 4096 Sep 10 14:55 protobuf drwxr-xr-x 4 sem sem 4096 Nov 29 19:19 python lrwxrwxrwx 1 sem sem 34 Dec 11 18:30 tomcat -> /home/sem/app/apache-tomcat-7.0.32 drwxrwxr-x 5 sem sem 4096 Sep 3 13:35 zlib total 8 -rw-r--r-- 1 sem sem 5024 Aug 21 2010 Scores.java
或者:找出所有含有app的目录并列举出其中含有的文件
find -name "app" -exec ls -l {} +
[sem@host8131 ~]$ find -name "app" -exec ls -l {} + ./app: total 100356 drwxr-xr-x 9 sem sem 4096 Dec 11 18:29 apache-tomcat-7.0.32 -rw-rw-r-- 1 sem sem 7544023 Dec 11 18:26 apache-tomcat-7.0.32.tar.bz2 drwxrwxr-x 8 sem sem 4096 Dec 11 18:34 dspDaily -rw-rw-r-- 1 sem sem 95170961 Dec 23 17:01 dspDaily.tar.bz2 drwxr-xr-x 8 sem sem 4096 Mar 27 2013 jdk1.6.0_45 drwxrwxr-x 5 sem sem 4096 Sep 3 11:22 libevent drwxrwxr-x 6 sem sem 4096 Sep 11 11:19 maven drwxrwxr-x 5 sem sem 4096 Sep 3 11:31 memcached drwxrwxr-x 6 sem sem 4096 Sep 3 13:39 openssl drwxrwxr-x 5 sem sem 4096 Sep 10 14:55 protobuf drwxr-xr-x 4 sem sem 4096 Nov 29 19:19 python lrwxrwxrwx 1 sem sem 34 Dec 11 18:30 tomcat -> /home/sem/app/apache-tomcat-7.0.32 drwxrwxr-x 5 sem sem 4096 Sep 3 13:35 zlib ./app/jdk1.6.0_45/db/demo/programs/scores/java/client/org/apache/derbyDemo/scores/app: total 8 -rw-r--r-- 1 sem sem 5024 Aug 21 2010 Scores.java ./emarbox-admin/WEB-INF/jsp/app: total 4 -rw-r--r-- 1 sem sem 1186 Dec 3 11:07 login-success.jsp
找出更改时间在五天前的文件并删除它们
find -type f -mtime +5 -exec rm {} \;
记住,在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如m v或r m命令时,可以使用-exec选项的安全模式。
它将在对每个匹配到的文件进行操作之前提示你。
在下面的例子中, find命令在当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
$ find . -name "*.log" -mtime +5 -ok rm {} \;
在下面的例子中, find命令在当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
$ find . -name "*.log" -mtime +5 -ok rm {} \;
查找当前用户主目录下的所有文件,下面两种方法都可以使用:
find $HOME -print
find ~ -print
在当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
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 {} \;
2)。xargs:
使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,
这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,
特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。
这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;
这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,
以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
ex:
查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
find . -type f | xargs file | less
当前中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中
find . -name "file*" -print &line; xargs echo "" > /tmp/core.log
cat /tmp/core.log
当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
find . -perm 777 -print | xargs chmod a-w
用grep命令在所有的普通文件中搜索hostname这个词:
find . -type f | xargs grep "hostname"
find /path -type f -print0 | xargs -0 rm
-print0:
print the full file name on the standard output, followed by a null character (instead of the newline character that ‘-print’ uses). This
allows file names that contain newlines or other types of white space to be correctly interpreted by programs that process the find output. This
option corresponds to the ‘-0’ option of xargs
allows file names that contain newlines or other types of white space to be correctly interpreted by programs that process the find output. This
option corresponds to the ‘-0’ option of xargs
输出完整文件名,以null结尾,允许文件名含有换行符和其他空白字符,这些可以被find正确解析出来,通常搭配xargs的-0使用
-print:输出完整文件名,以换行结尾
xargs: -0选项:
Input items are terminated by a null character instead of by whitespace, and the quotes and backslash are not special (every character is taken
literally). Disables the end of file string, which is treated like any other argument. Useful when input items might contain white space, quote
marks, or backslashes. The GNU find -print0 option produces input suitable for this mode
literally). Disables the end of file string, which is treated like any other argument. Useful when input items might contain white space, quote
marks, or backslashes. The GNU find -print0 option produces input suitable for this mode
以null结尾而不是空白,双引号和反斜杠以普通字符对待。当输入文档含有空格/双引号/反斜杠时,和find命令的-print0搭配使用很有用
3).find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令
在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录
在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。
如果希望在/ a p p s目录下查找文件,但不希望在/ a p p s / b i n目录下查找,可以用:
$ find /apps -path "/apps/bin" -prune -o -print
$ find /apps -path "/apps/bin" -prune -o -print
比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件:
find /usr/sam -path "/usr/sam/dir1" -prune -o -print
find /usr/sam -path "/usr/sam/dir1" -prune -o -print
find [-path ..] [expression] 在路径列表的后面的是表达式
-path "/usr/sam" -prune -o -print 是 -path "/usr/sam" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,
与 shell 的 && 和 || 类似如果 -path "/usr/sam" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;
否则不求值 -prune,与逻辑表达式为假。
如果 -path "/usr/sam" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;
否则不求值 -print,或逻辑表达式为真
按照修改时间进行查找:
如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,
很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
$ find / -mtime -5 -print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
$ find /var/adm -mtime +3 -print
查找比某个文件新或旧的文件
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:
newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:
newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
查找更改时间比文件sam新但比文件temp旧的文件:
find . -newer sam ! temp
Linux的内置变量:
脚本内容如下:
#!/bin/sh
echo "number:0"
echo "first :2"
echo "argume:$@"
echo "first :2"
echo "argume:$@"
echo "show parm list:$*"echo "show process id:$$"
echo "show precomm stat: $?"
保存退出
赋予脚本执行权限
# chmod +x variable
执行脚本
# ./variable aa bb
number:2
scname:./variable
first:aa
second:bb
argume:aa bb
scname:./variable
first:aa
second:bb
argume:aa bb
show parm list:aa bb
show process id:24544
show process id:24544
show precomm stat:0
通过显示结果可以看到:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
vi / vim小技巧:
替换查找:
vi/vim 中可以使用 :s 命令来替换字符串
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
1.
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
2.
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
3.
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
4.
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
5.
删除文本中的^M
问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
· 使用命令:cat filename1 | tr -d “^V^M” > newfile;
· 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。
· :%s/^M$//g
如果上述方法无用,则正确的解决办法是:
· tr -d "\r" < src >dest
· tr -d "\015" dest
· strings A>B
6.
其它
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
多行复制:
1、命令行模式下输入
:5,10 co 12
2、标签
光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc
然后 :'a,'b co 'c
把 co 改成 m 就成剪切了
3、文件间也可以把大量的代码保存到一个文件,然后在另一个文件里打开需要拷贝的代码。
在文件一:
光标移到起始行,输入ma
光标移到结束行,输入mb
然后:'a, 'b w filename
在文件二:
光标移到需要赋值的行,输入:
:r filename
:5,10 co 12
2、标签
光标移到起始行,输入ma
光标移到结束行,输入mb
光标移到粘贴行,输入mc
然后 :'a,'b co 'c
把 co 改成 m 就成剪切了
3、文件间也可以把大量的代码保存到一个文件,然后在另一个文件里打开需要拷贝的代码。
在文件一:
光标移到起始行,输入ma
光标移到结束行,输入mb
然后:'a, 'b w filename
在文件二:
光标移到需要赋值的行,输入:
:r filename
awk的使用技巧:
from:
http://blog.csdn.net/ponky/article/details/6211516
- $ cat file1
- 23 中西
- 98 红
- 34 西瓜
- 53 巴巴
- $ cat file2
- 巴巴 c
- 红 b
- 西瓜 d
- 中西 f
得到
- 23 f
- 98 b
- 34 d
- 53 c
- awk 'NR==FNR{a[2}NR>FNR{print 2]}' file2 file1g了一下,
明白是awk是顺序处理file1、file2、file3...
所以新手来解释下高手ywlscpl代码
所以新手来解释下高手ywlscpl代码
- awk 'NR==FNR{a[2}NR>FNR{print 2]}' file2 file1
1、NR=已处理的记录数;FNR= 当前文件处理的记录数,明确了这个,那么处理第一个文件时,NR是等于FNR的,处理第二个文件时,NR>FNR
2、所以高手ywlscpl的代码处理第一个文件file2时,只是数组赋值,因为此时NR没有>FNR,即为:
a[巴巴]=c
a[红]=b
a[西瓜]=d
a[中西]=f
3、继续处理第二个文件file1,这时满足NR>FNR的判断条件,所以打印print 2],即为:
print 23,a[中西],a[中西]=d,所以输出是23,f
print 98,a[红],a[红]=b,所以输出是98,b
....................................................34,d
.....................................................53,c
2、所以高手ywlscpl的代码处理第一个文件file2时,只是数组赋值,因为此时NR没有>FNR,即为:
a[巴巴]=c
a[红]=b
a[西瓜]=d
a[中西]=f
3、继续处理第二个文件file1,这时满足NR>FNR的判断条件,所以打印print 2],即为:
print 23,a[中西],a[中西]=d,所以输出是23,f
print 98,a[红],a[红]=b,所以输出是98,b
....................................................34,d
.....................................................53,c
关于awk的多文件处理:
awk的数据输入有两个来源,标准输入和文件,后一种方式支持多个文件,如
1、shell的Pathname Expansion方式:awk '{...}' *.txt # *.txt先被shell解释,替换成当前目录下的所有*.txt,如当前目录有1.txt和2.txt,则命令最终为awk '{...}' 1.txt 2.txt
2、直接指定多个文件: awk '{...}' a.txt b.txt c.txt ...
awk对多文件的处理流程是,依次读取各个文件内容,如上例,先读a.txt,再读b.txt....
那么,在多文件处理的时候,如何判断awk目前读的是哪个文件,而依次做对应的操作呢?
1、当awk读取的文件只有两个的时候,比较常用的有两种方法
一种是awk 'NR==FNR{...}NR>FNR{...}' file1 file2 或awk 'NR==FNR{...}NR!=FNR{...}' file1 file2
另一种是 awk 'NR==FNR{...;next}{...}' file1 file2
了解了FNR和NR这两个awk内置变量的意义就很容易知道这两种方法是如何运作的
awk的数据输入有两个来源,标准输入和文件,后一种方式支持多个文件,如
1、shell的Pathname Expansion方式:awk '{...}' *.txt # *.txt先被shell解释,替换成当前目录下的所有*.txt,如当前目录有1.txt和2.txt,则命令最终为awk '{...}' 1.txt 2.txt
2、直接指定多个文件: awk '{...}' a.txt b.txt c.txt ...
awk对多文件的处理流程是,依次读取各个文件内容,如上例,先读a.txt,再读b.txt....
那么,在多文件处理的时候,如何判断awk目前读的是哪个文件,而依次做对应的操作呢?
1、当awk读取的文件只有两个的时候,比较常用的有两种方法
一种是awk 'NR==FNR{...}NR>FNR{...}' file1 file2 或awk 'NR==FNR{...}NR!=FNR{...}' file1 file2
另一种是 awk 'NR==FNR{...;next}{...}' file1 file2
了解了FNR和NR这两个awk内置变量的意义就很容易知道这两种方法是如何运作的
QUOTE:
FNR The input record number in the current input file. #已读入当前文件的记录数
NR The total number of input records seen so far. #已读入的总记录数
next Stop processing the current input record. The next input record is
read and processing starts over with the first pattern in the AWK
program. If the end of the input data is reached, the END block(s),
if any, are executed.
NR The total number of input records seen so far. #已读入的总记录数
next Stop processing the current input record. The next input record is
read and processing starts over with the first pattern in the AWK
program. If the end of the input data is reached, the END block(s),
if any, are executed.
对于awk 'NR==FNR{...}NR>FNR{...}' file1 file2
读入file1的时候,已读入file1的记录数FNR一定等于awk已读入的总记录数NR,因为file1是awk读入的首个文件,故读入file1时执行前一个命令块{...}
读入file2的时候,已读入的总记录数NR一定>读入file2的记录数FNR,故读入file2时执行后一个命令块{...}
对于awk 'NR==FNR{...;next}{...}' file1 file2
读入file1时,满足NR==FNR,先执行前一个命令块,但因为其中有next命令,故后一个命令块{...}是不会执行的
读入file2时,不满足NR==FNR,前一个命令块{..}不会执行,只执行后一个命令块{...}
2、当awk处理的文件超过两个时,显然上面那种方法就不适用了。因为读第3个文件或以上时,也满足NR>FNR (NR!=FNR),显然无法区分开来。
所以就要用到更通用的方法了:
1、ARGIND 当前被处理参数标志: awk 'ARGIND==1{...}ARGIND==2{...}ARGIND==3{...}... ' file1 file2 file3 ...
2、ARGV 命令行参数数组: awk 'FILENAME==ARGV[1]{...}FILENAME==ARGV[2]{...}FILENAME==ARGV[3]{...}...' file1 file2 file3 ...
3、把文件名直接加入判断: awk 'FILENAME=="file1"{...}FILENAME=="file2"{...}FILENAME=="file3"{...}...' file1 file2 file3 ... #没有前两种通用
awk内置变量:
from:
http://www.cnblogs.com/chengmo/archive/2010/10/06/1844818.html
awk是个优秀文本处理工具,可以说是一门程序设计语言。下面是awk内置变量。
一、内置变量表
| 属性 | 说明 |
| $0 | 当前记录(作为单个变量) |
| n | $1-$n:当前记录的第n个字段,字段间由FS分隔 |
| FS | 输入字段分隔符 默认是空格 |
| NF | 当前记录中的字段个数,就是有多少列 |
| NR | 已经读出的记录数,就是行号,从1开始 |
| RS | 输入的记录他隔符默 认为换行符 |
| OFS | 输出字段分隔符 默认也是空格 |
| ORS | 输出的记录分隔符,默认为换行符 |
| ARGC | 命令行参数个数 |
| ARGV | 命令行参数数组 |
| FILENAME | 当前输入文件的名字 |
| IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
| ARGIND | 当前被处理文件的ARGV标志符 |
| CONVFMT | 数字转换格式 %.6g |
| ENVIRON | UNIX环境变量 |
| ERRNO | UNIX系统错误消息 |
| FIELDWIDTHS | 输入字段宽度的空白分隔字符串 |
| FNR | 当前记录数 |
| OFMT | 数字的输出格式 %.6g |
| RSTART | 被匹配函数匹配的字符串首 |
| RLENGTH | 被匹配函数匹配的字符串长度 |
| SUBSEP | \034 |
2、实例
1、常用操作[chengmo@localhost ~]0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash/^root/ 为选择表达式,$0代表是逐行
2、设置字段分隔符号(FS使用方法)[chengmo@localhost ~]1,$NF}' /etc/passwd
root /bin/bashFS为字段分隔符,可以自己设置,默认是空格,因为passwd里面是”:”分隔,所以需要修改默认分隔符。NF是字段总数,1-$n是当前行,各个字段对应值。
3、记录条数(NR,FNR使用方法)[chengmo@localhost ~]1,$NF}' /etc/passwd
1 root /bin/bash
2 bin /sbin/nologin
3 daemon /sbin/nologin
4 adm /sbin/nologin
5 lp /sbin/nologin
6 sync /bin/sync
7 shutdown /sbin/shutdown
……NR得到当前记录所在行
4、设置输出字段分隔符(OFS使用方法)[chengmo@localhost ~]1,$NF}' /etc/passwd
1^^root^^/bin/bashOFS设置默认字段分隔符
5、设置输出行记录分隔符(ORS使用方法)[chengmo@localhost ~]1,$NF}' /etc/passwd
1 root /bin/bash^^2 bin /sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin从上面看,ORS默认是换行符,这里修改为:”^^”,所有行之间用”^^”分隔了。
6、输入参数获取(ARGC ,ARGV使用)[chengmo@localhost ~]$ awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' /etc/passwd
ARGC=2
0=awk
1=/etc/passwdARGC得到所有输入参数个数,ARGV获得输入参数内容,是一个数组。
7、获得传入的文件名(FILENAME使用)[chengmo@localhost ~]$ awk 'BEGIN{FS=":";print FILENAME}{print FILENAME}' /etc/passwd/etc/passwdFILENAME,N,NF 不能使用在BEGIN中,BEGIN中不能获得任何与文件记录操作的变量。
8、获得linux环境变量(ENVIRON使用)[chengmo@localhost ~]$ awk 'BEGIN{print ENVIRON["PATH"];}' /etc/passwd
/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/lib/icecc/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/java/jdk1.5.0_17/bin:/usr/java/jdk1.5.0_17/jre/bin:/usr/local/mysql/bin:/home/web97/binENVIRON是子典型数组,可以通过对应键值获得它的值。
9、输出数据格式设置:(OFMT使用)[chengmo@localhost ~]$ awk 'BEGIN{OFMT="%.3f";print 2/3,123.11111111;}' /etc/passwd
0.667 123.111OFMT默认输出格式是:%.6g 保留六位小数,这里修改OFMT会修改默认数据输出格式。
10、按宽度指定分隔符(FIELDWIDTHS使用)[chengmo@localhost ~]1"-"3,5":"$6}'
2010-01-17 05:49:32FIELDWIDTHS其格式为空格分隔的一串数字,用以对记录进行域的分隔,FIELDWIDTHS="4 2 2 2 2 2"就表示2是2,$3是2 .... 。这个时候会忽略:FS分隔符。
11、RSTART RLENGTH使用[chengmo@localhost ~]awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }'
0 0 –1RSTART 被匹配正则表达式首位置,RLENGTH 匹配字符长度,没有找到为-1.
以上是:awk的一些内置变量使用,希望有什么问题可以与我交流。
awk正则表达式使用:
from:
http://www.cnblogs.com/chengmo/archive/2010/10/11/1847772.html
前言:使用awk作为文本处理工具,正则表达式是少不了的。 要掌握这个工具的正则表达式使用。其实,我们不必单独去学习它的正则表达式。正则表达式就像一门程序语言,有自己语法规则已经表示意思。 对于不同工具,其实大部分表示意思相同的。在linux众多文本处理工具(awk,sed,grep,perl)里面用到正则表达式。其实就只有3种类型。详细可以参考:linux shell 正则表达式(BREs,EREs,PREs)差异比较 。只要是某些工具是属于某种类型的正则表达式。那么它的语法规则基本一样。 通过那篇文章,我们知道awk的正则表达式,是属于:扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)。
一、awk Extended Regular Expression (ERES)基础表达式符号介绍
| 字符 | 功能 |
|---|---|
| + | 指定如果一个或多个字符或扩展正则表达式的具体值(在 +(加号)前)在这个字符串中,则字符串匹配。命令行:
awk '/smith+ern/' testfile
将包含字符 smit,后跟一个或多个 h 字符,并以字符 ern 结束的字符串的任何记录打印至标准输出。此示例中的输出是:
smithern, harry smithhern, anne
|
| ? | 指定如果零个或一个字符或扩展正则表达式的具体值(在 ?(问号)之前)在字符串中,则字符串匹配。命令行:
awk '/smith?/' testfile
将包含字符 smit,后跟零个或一个 h 字符的实例的所有记录打印至标准输出。此示例中的输出是:
smith, alan smithern, harry smithhern, anne smitters, alexis
|
| | | 指定如果以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。命令行:
awk '/allen | alan /' testfile
将包含字符串 allen 或 alan 的所有记录打印至标准输出。此示例中的输出是:
smiley, allen smith, alan
|
| ( ) | 在正则表达式中将字符串组合在一起。命令行:
awk '/a(ll)?(nn)?e/' testfile
将具有字符串 ae 或 alle 或 anne 或 allnne 的所有记录打印至标准输出。此示例中的输出是:
smiley, allen smithhern, anne
|
| {m} | 指定如果正好有 m 个模式的具体值位于字符串中,则字符串匹配。命令行:
awk '/l{2}/' testfile
打印至标准输出
smiley, allen
|
| {m,} | 指定如果至少 m 个模式的具体值在字符串中,则字符串匹配。命令行:
awk '/t{2,}/' testfile
打印至标准输出:
smitters, alexis
|
| {m, n} | 指定如果 m 和 n 之间(包含的 m 和 n)个模式的具体值在字符串中(其中m<= n),则字符串匹配。命令行:
awk '/er{1, 2}/' testfile
打印至标准输出:
smithern, harry smithern, anne smitters, alexis
|
| [String] | 指定正则表达式与方括号内 String 变量指定的任何字符匹配。命令行:
awk '/sm[a-h]/' testfile
将具有 sm 后跟以字母顺序从 a 到 h 排列的任何字符的所有记录打印至标准输出。此示例的输出是:
smawley, andy
|
| [^ String] | 在 [ ](方括号)和在指定字符串开头的 ^ (插入记号) 指明正则表达式与方括号内的任何字符不匹配。这样,命令行:
awk '/sm[^a-h]/' testfile
打印至标准输出:
smiley, allen smith, alan smithern, harry smithhern, anne smitters, alexis
|
| ~,!~ | 表示指定变量与正则表达式匹配(代字号)或不匹配(代字号、感叹号)的条件语句。命令行:
awk '$1 ~ /n/' testfile
将第一个字段包含字符 n 的所有记录打印至标准输出。此示例中的输出是:
smithern, harry smithhern, anne
|
| ^ | 指定字段或记录的开头。命令行:
awk '$2 ~ /^h/' testfile
将把字符 h 作为第二个字段的第一个字符的所有记录打印至标准输出。此示例中的输出是:
smithern, harry
|
| $ | 指定字段或记录的末尾。命令行:
awk '/' testfile
将把字符 y 作为第二个字段的最后一个字符的所有记录打印至标准输出。此示例中的输出是:
smawley, andy smithern, harry
|
| . (句号) | 表示除了在空白末尾的终端换行字符以外的任何一个字符。命令行:
awk '/a..e/' testfile
将具有以两个字符隔开的字符 a 和 e 的所有记录打印至标准输出。此示例中的输出是:
smawley, andy smiley, allen smithhern, anne
|
| *(星号) | 表示零个或更多的任意字符。命令行:
awk '/a.*e/' testfile
将具有以零个或更多字符隔开的字符 a 和 e 的所有记录打印至标准输出。此示例中的输出是:
smawley, andy smiley, allen smithhern, anne smitters, alexis
|
| \ (反斜杠) | 转义字符。当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。例如,命令行:
/a\/\//
将与模式 a // 匹配,因为反斜杠否定斜杠作为正则表达式定界符的通常含义。要将反斜杠本身指定为字符,则使用双反斜杠。有关反斜杠及其使用的更多信息,请参阅以下关于转义序列的内容。
|
与PERs相比,主要是一些结合类型表示符没有了:包括:”\d,\D,\s,\S,\t,\v,\n,\f,\r”其它功能基本一样的。 我们常见的软件:javascript,.net,java支持的正则表达式,基本上是:EPRs类型。
二、awk 常见调用正则表达式方法
- awk语句中:
awk ‘/REG/{action}’/REG/为正则表达式,可以将$0中,满足条件记录 送入到:action进行处理.
- awk正则运算语句(~,~!等同!~)
[chengmo@centos5 ~]$ awk 'BEGIN{info="this is a test";if( info ~ /test/){print "ok"}}'
ok
- awk内置使用正则表达式函数
gsub( Ere, Repl, [ In ] )sub( Ere, Repl, [ In ] )match( String, Ere )split( String, A, [Ere] )详细函数使用,可以参照:linux awk 内置函数详细介绍(实例)
通过上面细述,不知道大家有没有对awk正则表达式有一个更加清楚的认识。 有什么问题可以与我交流!
awk内置函数使用说明:
from:
http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
这节详细介绍awk内置函数,主要分以下3种类似:算数函数、字符串函数、其它一般函数、时间函数
一、算术函数:
以下算术函数执行与 C 语言中名称相同的子例程相同的操作:
| 函数名 | 说明 |
| atan2( y, x ) | 返回 y/x 的反正切。 |
| cos( x ) | 返回 x 的余弦;x 是弧度。 |
| sin( x ) | 返回 x 的正弦;x 是弧度。 |
| exp( x ) | 返回 x 幂函数。 |
| log( x ) | 返回 x 的自然对数。 |
| sqrt( x ) | 返回 x 平方根。 |
| int( x ) | 返回 x 的截断至整数的值。 |
| rand( ) | 返回任意数字 n,其中 0 <= n < 1。 |
| srand( [Expr] ) | 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。 |
举例说明:[chengmo@centos5 ~]$ awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}'
0.841 22026.466 2.303 3OFMT 设置输出数据格式是保留3位小数获得随机数:[chengmo@centos5 ~] awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
31
[chengmo@centos5 ~]$ awk 'BEGIN{srand();fr=int(100*rand());print fr;}'41
二、字符串函数是:
| 函数 | 说明 |
| gsub( Ere, Repl, [ In ] ) | 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行,。 |
| sub( Ere, Repl, [ In ] ) | 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。 |
| index( String1, String2 ) | 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。 |
| length [(String)] | 返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 |
| blength [(String)] | 返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。 |
| substr( String, M, [ N ] ) | 返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。 |
| match( String, Ere ) | 在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。 |
| split( String, A, [Ere] ) | 将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。 |
| tolower( String ) | 返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 |
| toupper( String ) | 返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。 |
| sprintf(Format, Expr, Expr, . . . ) | 根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。 |
Ere都可以是正则表达式
gsub,sub使用[chengmo@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}'
this is a test!test!在 info中查找满足正则表达式,/[0-9]+/ 用””替换,并且替换后的值,赋值给info 未给info值,默认是$0查找字符串(index使用)[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'
ok未找到,返回0正则表达式匹配查找(match使用)[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'
ok截取字符串(substr使用)[wangsl@centos5 ~]$ awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes从第 4个 字符开始,截取10个长度字符串字符串分割(split使用)[chengmo@centos5 ~]$ awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'
4
4 test
1 this
2 is
3 a分割info,动态创建数组tA,这里比较有意思,awk for …in 循环,是一个无序的循环。 并不是从数组下标1…n ,因此使用时候需要注意。格式化字符串输出(sprintf使用)格式化字符串格式:其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符,用来确定输出内容格式。
格式符 说明 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 自动选择合适的表示法
[chengmo@centos5 ~]$ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%o\n",n1,n2,n3,n1,n1);}'
124.11,18446744073709551615,1.2,7C,174
三、一般函数是:
| 函数 | 说明 |
| close( Expression ) | 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。 |
| system(Command ) | 执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。 |
| Expression | getline [ Variable ] | 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 |
| getline [ Variable ] < Expression | 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 |
| getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 |
打开外部文件(close用法)[chengmo@centos5 ~]0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin逐行读取外部文件(getline使用方法)[chengmo@centos5 ~]0;};close("/etc/passwd");}'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin[chengmo@centos5 ~]$ awk 'BEGIN{print "Enter your name:";getline name;print name;}'
Enter your name:
chengmo
chengmo调用外部应用程序(system使用方法)[chengmo@centos5 ~]$ awk 'BEGIN{b=system("ls -al");print b;}'
total 42092
drwxr-xr-x 14 chengmo chengmo 4096 09-30 17:47 .
drwxr-xr-x 95 root root 4096 10-08 14:01 ..b返回值,是执行结果。
四、时间函数
| 函数名 | 说明 |
| mktime( YYYY MM DD HH MM SS[ DST]) | 生成时间格式 |
| strftime([format [, timestamp]]) | 格式化时间输出,将时间戳转为时间字符串 具体格式,见下表. |
| systime() | 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数 |
创建指定时间(mktime使用)[chengmo@centos5 ~]$ awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'
2001年01月01日 星期一 12时12分12秒[chengmo@centos5 ~]$ awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
2634468求2个时间段中间时间差,介绍了strftime使用方法[chengmo@centos5 ~]$ awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'
308201392strftime日期和时间格式说明符
格式 描述 %a 星期几的缩写(Sun) %A 星期几的完整写法(Sunday) %b 月名的缩写(Oct) %B 月名的完整写法(October) %c 本地日期和时间 %d 十进制日期 %D 日期 08/20/99 %e 日期,如果只有一位会补上一个空格 %H 用十进制表示24小时格式的小时 %I 用十进制表示12小时格式的小时 %j 从1月1日起一年中的第几天 %m 十进制表示的月份 %M 十进制表示的分钟 %p 12小时表示法(AM/PM) %S 十进制表示的秒 %U 十进制表示的一年中的第几个星期(星期天作为一个星期的开始) %w 十进制表示的星期几(星期天是0) %W 十进制表示的一年中的第几个星期(星期一作为一个星期的开始) %x 重新设置本地日期(08/20/99) %X 重新设置本地时间(12:00:00) %y 两位数字表示的年(99) %Y 当前月份 %Z 时区(PDT) %% 百分号(%)
以上是awk常见 内置函数使用及说明,希望对大家有所帮助。
awk 统计渠道和DSP展现差异的脚本:
#!/bin/bash #adx:渠道:google/taobao/tencent/yigao/baidu,能区分即可. #DSPFILE:DSP的展现统计 #ADXFILE:渠道的展现统计 #ADXTIME:需要对比的是哪天的数据 #RESFILE:渠道和DSP展现对比的结果 CUR=`dirname 0` ADX=$1 DSPFILE=$2 ADXFILE=$3 ADXTIME=$4 RESFILE=$CUR/${ADX}_dsp_${ADXTIME}.log #echo "current dir"$CUR #echo "Adx:"$ADX #echo "DSP file:"$DSPFILE #echo "ADX file:"$ADXFILE #echo "date time:"$ADXTIME #echo "result file name:"$RESFILE echo "站点名,站点URL,"$ADX"展现数,dsp展现数,差距" >> $RESFILE awk -F"," 'NR==FNR{c[FNR]=$1;n[FNR]=$2}NR>FNR{k=0;for(i=1;i<=length(c);++i){if(index(n[i],$2)){k=k+c[i] }} print $1","$2","$3","k","$3-k}' $DSPFILE $ADXFILE >> $RESFILE 2>&1
操作系统版本查询(Centos or Ubuntu or Debian or Slackware)
方法1:lsb_release -a 方法2:cat /proc/version
TCP各种状态说明:
查看Apache的并发请求数及其TCP连接状态:
Linux命令:
Linux命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
(这条语句是从 新浪互动社区事业部技术总监王老大那儿获得的,非常不错)
返回结果示例:
LAST_ACK 5 (正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)
返回结果示例:
LAST_ACK 5 (正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
源码安装mysql:
解压缩后,先安装cmake工具;
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql && make && sudo make install
增加mysql用户名和用户组;
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/home/data/mysql/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/home/data/mysql/data -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci && make
make install
从$MYSQL_HOME/support_files中拷贝my-medium.cnf 到/etc/my.cnf中;拷贝mysql.server 到/etc/init.d/mysql,修改/etc/my.cnf文件中的basedir和datadir选项;
./mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/home/data/mysql/data --user=mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql && make && sudo make install
增加mysql用户名和用户组;
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/home/data/mysql/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/home/data/mysql/data -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci && make
make install
从$MYSQL_HOME/support_files中拷贝my-medium.cnf 到/etc/my.cnf中;拷贝mysql.server 到/etc/init.d/mysql,修改/etc/my.cnf文件中的basedir和datadir选项;
./mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/home/data/mysql/data --user=mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/home/data/mysql/data -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci && make
Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
To do so, start the server, then issue the following commands:
/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h fedora password 'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h fedora password 'new-password'
Alternatively you can run:
/usr/local/mysql/bin/mysql_secure_installation
/usr/local/mysql/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/mysql/mysql-test ; perl mysql-test-run.pl
cd /usr/local/mysql/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/local/mysql/scripts/mysqlbug script!
mysql命令自动补全:修改/etc/my.cnf文件,将no-auto-rehash修改为auto-rehash