Skip to content Skip to main navigation Skip to footer

Linux

Linux/Ubuntu:在命令行下安装vim文本编辑器

linux系统下的默认文本编辑器vi,当我们想使用vim命令的时候,系统会输出一些错误的信息如下:
install_vim1
如何解决这个问题呢?为什么在ubuntu下没有默认安装vim呢?如何安装完整的vim的文本编辑器呢?
vim(vi增强)是一个可以向前兼容vi的文本编辑器。它可以用来编辑任何的文本,特别是用来编辑配置文件或者编写shell, python, perl, c/c++程序。
ubuntu下安装vim 文本编辑器
打开一个终端,输入下面的命令:

sudo apt-get install vim
 

sudo -s
apt-get install vim
 

命令输出:
[cc lang=”php”] Reading package lists… Done
Building dependency tree
Reading state information… Done
The following package was automatically installed and is no longer required:
bind9utils
Use ‘apt-get autoremove’ to remove them.
The following extra packages will be installed:
libgpm2 libpython2.7 vim-runtime
Suggested packages:
gpm ctags vim-doc vim-scripts
The following NEW packages will be installed:
libgpm2 libpython2.7 vim vim-runtime
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,530 kB of archives.
After this operation, 28.1 MB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://mirrors.service.networklayer.com/ubuntu/ precise/main libgpm2 amd64 1.20.4-4 [17.2 kB] Get:2 http://mirrors.service.networklayer.com/ubuntu/ precise-updates/main libpython2.7 amd64 2.7.3-0ubuntu3.1 [1,188 kB] Get:3 http://mirrors.service.networklayer.com/ubuntu/ precise-updates/main vim-runtime all 2:7.3.429-2ubuntu2.1 [6,277 kB] Get:4 http://mirrors.service.networklayer.com/ubuntu/ precise-updates/main vim amd64 2:7.3.429-2ubuntu2.1 [1,048 kB] Fetched 8,530 kB in 1s (8,515 kB/s)
Selecting previously unselected package libgpm2.
(Reading database … 57205 files and directories currently installed.)
Unpacking libgpm2 (from …/libgpm2_1.20.4-4_amd64.deb) …
Selecting previously unselected package libpython2.7.
Unpacking libpython2.7 (from …/libpython2.7_2.7.3-0ubuntu3.1_amd64.deb) …
Selecting previously unselected package vim-runtime.
Unpacking vim-runtime (from …/vim-runtime_2%3a7.3.429-2ubuntu2.1_all.deb) …
Adding ‘diversion of /usr/share/vim/vim73/doc/help.txt to /usr/share/vim/vim73/doc/help.txt.vim-tiny by vim-runtime’
Adding ‘diversion of /usr/share/vim/vim73/doc/tags to /usr/share/vim/vim73/doc/tags.vim-tiny by vim-runtime’
Selecting previously unselected package vim.
Unpacking vim (from …/vim_2%3a7.3.429-2ubuntu2.1_amd64.deb) …
Processing triggers for man-db …
Setting up libgpm2 (1.20.4-4) …
Setting up libpython2.7 (2.7.3-0ubuntu3.1) …
Setting up vim-runtime (2:7.3.429-2ubuntu2.1) …
Processing /usr/share/vim/addons/doc
Setting up vim (2:7.3.429-2ubuntu2.1) …
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode.
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode.
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode.
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode.
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode.
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode.
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode.
Processing triggers for libc-bin …
ldconfig deferred processing now taking place
[/code] install_vim2
如果想知道更多的关于linux vi/vim的使用方法,可以参考下面的文章:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. vi/vim里如何退出不保存?

vi/vim里如何退出不保存?

对于刚开始使用vi/vim文本编辑器的新手来说,如何在不保存更改而退出vi/vim 文本编辑器呢? 当你使用linux vi/vim 文本编辑器对linux下某个配置文件做编辑操作,当你更改完之后,可以保存退出文件,也可以不保存退出vi/vim 编辑器,也就是说更改的所有操作都不会保存。
本来将会讲述如何来不保存并退出当前的vi/vim编辑器。
首先,当你通过vi/vim更改文件之后,按“Esc“键,退出”insert“模式,然后输入冒号(),紧接着输入下面的命令:q!
vi-vim-quit
更多参考:
1. Linux 下 vi/vim 文本编辑器超详细使用指南
2. Linux/Ubuntu:在命令行下安装vim文本编辑器
3. linux vi/vim man 帮助文档

ubuntu/debian: 命令行下重启Named服务

在ubuntu或debian里,如何在命令行下重新启动named服务呢?你可以使用位于/etc/init.d下的进程启动脚本。另一种方法是使用service命令去启动/停止/重启named服务。脚本名字是:
ubuntu_named_restart1
服务的名字是:bind9
示例:
启动named服务

$sudo service bind9 start
 

$sudo /etc/init/d/bind9 start
 

停止named服务

$sudo service bind9 stop
 

$sudo /etc/init.d/bind9 stop
 

重启named 服务

$sudo service bind9 restart
 

$sudo /etc/init.d/bind9 restart
 

查看当前named服务的状态

$sudo service bind9 status
 

$sudo /etc/init.d/bind9 status
 

命令输出如下:
ubuntu_named_restart2

linux/unix:man命令的高级用法

对于一个linux新手来说,可能会经常使用man命令来获取帮助信息。 通过whatis命令可以查看一些man的页面信息。但是你会注意到man页面里有很多相同的命令名。比如,当我运行 whatis echo:
输出如下:
echo                 (1)  – display a line of text
echo                 (3x)  – curses input options
echo [builtins]      (1)  – bash built-in commands, see bash(1)
echo [cbreak]        (3x)  – curses input options
echo [curs_inopts]   (3x)  – curses input options
echo [halfdelay]     (3x)  – curses input options
echo [intrflush]     (3x)  – curses input options
echo [keypad]        (3x)  – curses input options
echo [meta]          (3x)  – curses input options
echo [nocbreak]      (3x)  – curses input options
echo [nodelay]       (3x)  – curses input options
那么我们如何查看这些重复的man页面信息呢?(1),(3x)这些有代表什么意思呢?
所有的man页面信息被划分成不同的区域。通常情况下,linux或类Unix系统有8到9个区域。标准的区域信息包含以下几个部分:
Section #1 : User Commands
Section #2 : System Calls
Section #3 : C Library Functions
Section #4 : Devices and Special Files
Section #5 : File Formats and Conventions
Section #6 : Games et. Al.
Section #7 : Miscellanea
Section #8 : System Administration tools and Deamons
对于一些linux系统发布商可能会在特定的区域里定制一些信息。
命令后大括号里的数字是什么意思呢?
echo (1)里的echo是命令名字,1是命令的man页面的区域。
示例:查看man页面的特定区域的信息

man 区域数 命令名
 

读取echo(1)命令的帮助信息:

$man 1 echo
 

对于更多的关于man命令的用法,可以使用下面的命令:

man man
 

man 1 man
 

如何清除squid proxy 缓存以及重新创建缓存目录

在linux系统或者unix系统里,如何清除squid缓存,以及怎么重新创建缓存目录呢?
可以通过下面的方法来来删除或清空缓存并重新创建缓存目录。
步骤#1:查找Squid缓存的目录位置

#grep cache_dir  /etc/squid/squid.conf
 

命令输出:

cache_dir ufs /var/spool/squid 110 17 25
 

步骤#2:以空缓存目录的方式,重启Squid服务  

#squid -k shutdown
#rm -rf /cache/
#rm -rf /var/spool/squid/
 

重新创建缓存目录

#squid -z
 

命令输出:

2013/08/30 08:14:29| Making directories in /var/spool/squid/00
2013/08/30 08:14:29| Making directories in /var/spool/squid/01
2013/08/30 08:14:29| Making directories in /var/spool/squid/02
2013/08/30 08:14:30| Making directories in /var/spool/squid/03
2013/08/30 08:14:30| Making directories in /var/spool/squid/04
 

重启squid服务:

#squid
 

#service squid start
 

命令输出:

Starting squid:                                            [  OK  ]
 

步骤#3:验证Squid是否正在运行

# netstat -tulpn | grep :3128
# tail -f /var/log/squid/access.log
# tail -f /var/log/squid/cache.log
 

Linux/Unix:ls命令的输出如何按更新日期排序

如果目录有大量的文件,我们想把通过ls命令查看到目录里的最新文件或者最后更改的文件,那么该如何去做呢?
你需要使用ls命令的“-t”选项。-t选项会把ls命令的输出按最后更改时间来排序。也就是说,最后修改的文件会显示在最前面。打开一个终端,输入下面的命令。
命令参数
ls -t
ls -lt | less
ls -lt  /root | less
命令输出:
[cc lang=”php”] total 19256
drwxr-xr-x. 2 root root     4096 Dec 17  2012 grub
-rw-r–r–. 1 root root 13057907 Dec 17  2012 initramfs-2.6.32-279.el6.x86_64.img
drwxr-xr-x. 3 root root     4096 Dec 17  2012 efi
-rw-r–r–. 1 root root   179157 Jun 22  2012 symvers-2.6.32-279.el6.x86_64.gz
-rw-r–r–. 1 root root   101820 Jun 22  2012 config-2.6.32-279.el6.x86_64
-rw-r–r–. 1 root root  2341856 Jun 22  2012 System.map-2.6.32-279.el6.x86_64
-rwxr-xr-x. 1 root root  3986608 Jun 22  2012 vmlinuz-2.6.32-279.el6.x86_64
[/code] 使用“-r”选项可以按相反的顺序来显示:
ls -tr
ls -ltr
ls -ltr /boot/ | less
命令输出:
[cc lang=”php”] -rwxr-xr-x. 1 root root  3986608 Jun 22  2012 vmlinuz-2.6.32-279.el6.x86_64
-rw-r–r–. 1 root root  2341856 Jun 22  2012 System.map-2.6.32-279.el6.x86_64
-rw-r–r–. 1 root root   101820 Jun 22  2012 config-2.6.32-279.el6.x86_64
-rw-r–r–. 1 root root   179157 Jun 22  2012 symvers-2.6.32-279.el6.x86_64.gz
drwxr-xr-x. 3 root root     4096 Dec 17  2012 efi
-rw-r–r–. 1 root root 13057907 Dec 17  2012 initramfs-2.6.32-279.el6.x86_64.img
drwxr-xr-x. 2 root root     4096 Dec 17  2012 grub
[/code] 在使用上面选项的时候,一定要加上-A(显示除了. 和.. 的文件或目录)或 -a(显示所有的文件)
ls -Altr /boot/ | less
ls -alt /boot/ | less

linux 如何查找一个目录文件

在linux下如何查找一个名字为“main.img”的目录呢?某些人会想到locate命令,这个命令是linux下最简单的也是最快速的目录或文件查找方式。 但是locate命令有时候会查找不到我们想要的文件或目录的位置。那么我们还有其他的方法来查找吗?当然有,我们可以使用find 命令。
locate和find命令的区别:
locate命令会从有updatedb预先生成的数据库中去查找, 而find命令这是通过递归方式去查询文件系统里的文件。
命令用法:

find 查找目录 选项 模式
find /dirpath -name "目录名"
find /dirpath -name "匹配字符"
find /dirpath -name "目录名” -print
find / -name "目录名"
 

示例
显示当前目录的所有文件和子目录

find
find .
find . -print
 

在根目录下查找mysql目录

find / -name "mysql"
 

命令输出:

/var/lock/subsys/mysql
/var/spool/mail/mysql
/usr/lib64/mysql
/usr/share/mysql
 

显示详细的文件或目录列表
使用-ls来列出查找到的文件或目录的详细信息

find / -name "mysql" -ls
 

命令输出:

950402    0 -rw-r--r--   1 root     root            0 Jul 31 18:14 /var/lock/subsys/mysql
950379    0 -rw-rw----   1 mysql    mail            0 Jul 31 18:14 /var/spool/mail/mysql
721554    4 drwxr-xr-x   2 root     root         4096 Dec 17  2012 /usr/lib64/mysql
721562    4 drwxr-xr-x  26 root     root         4096 Dec 17  2012 /usr/share/mysql
 

如何只列出目录文件:

find / -type d -name "mysql" -ls
 

命令输出:

721554    4 drwxr-xr-x   2 root     root         4096 Dec 17  2012 /usr/lib64/mysql
721562    4 drwxr-xr-x  26 root     root         4096 Dec 17  2012 /usr/share/mysql
 

如何不区分大小写去查找:
替换-name选项为-iname

find / -type d -iname "mysql" -ls
 

或者

find / -type d -iname "mysql"
 

模式”mysql”将会匹配”mysql”,”MYSQL”,”Mysql”,”mySQL”等
最后回到我们之前的问题,如何找到名为”main.img”的目录呢?
通过下面的其中一个命令:

find / -type d -iname "main.img" -ls
或
find / -type d -name "main.img" -ls
或
find / -type d -name "main.img"
 

bashshell:如何删除文本行所有的空白字符

在文本文件中,如何删除文件中每行的所有的空白字符呢?
我们可以通过sed 命令来实现,或者通过下面的一下文本处理工具来实现需求:
1.perl
2.python
3.awk
Perl 例子:
[cc lang=”php”] perl -lape ‘s/\s+//sg’ test >testoutput
[/code] 或者使用
[cc lang=”php”] perl -lapi -e ‘s/\s+|^\n//sg’ test
[/code] sed 例子:
[cc lang=”php”] sed -e ‘s/^[ \t]*//’ -e ‘s/[ \t]*$//’ testfile > testoutput
[/code] awk 例子:
[cc lang=”php”] awk ‘{$1=$1}{ print }’ testfile > testoutput
[/code]

Linux:让所有人退出当前登录的系统

所有的linux系统都可以通过root用户去登陆,如果需要安装新的kernel或者新硬件,那么首先要让所有的当前通过SSH 或telnet登陆的用户退出登陆, 我们怎么来做呢?最好的注销远程用户的方法是什么呢?
你可以通过下面的几个命令来实现:
1. who 或 w 命令 –显示当前的登陆用户以及他们在干什么
2. pkill 命令– 杀掉用户会话以及强制用户退出系统
3.shutdown命令 — 关闭系统
示例
使用who命令列出当前登陆的用户列表

#w
 

#who
 

命令输出:

root pts/0 2013-08-23 23:57 (111.194.207.192)
 

强制root用户退出当前系统:

#pkill -KILL -u root
 

如果有多个用户的话,我们需要通过脚本的方式去处理,否则会耗费很多时间:

who | awk '$1 !~ /root/{ cmd="/sbin/pkill -KILL -u " $1; system(cmd)}'
 

最后,我们可以通过shutdown命令来关闭系统,而不用一次kill每个用户。

#shutdown -h +5 “系统将在5分钟后关闭,请保存好数据并退出当前系统”
 

Bash:在linux终端上显示网页内容

在bash shell下,如何获取到HTML网页内容并将其显示在终端屏幕上呢?
你可以使用下面的任何一个工具或者它们的组合来得到网页的内容:
1)curl命令 — 这是可以使用http/https/ftp或者其它的协议获取网页内容的数据传输工具。
2)lynx命令 — 是一个在文本模式下浏览网页内容的网页浏览器。
3)wget命令 — 是一个免费的非交互式从网页上下载数据的工具,支持HTTP/HTTPS/FTP协议。
4)w3m命令 — 也是一个基于文本的网页浏览器
工具安装
在你的linux或Unix操作系统上,上面的工具可能没有被安装,可通过下面的方式:
Debian/Ubuntu linux上安装curl, wget, lynx 和w3m

$apt-get install curl wget lynx w3m
 

Fedora/RHEL/CentOS linux上安装curl, wget, lynx 和w3m

$sudo yum install curl wget lynx w3m
 

FreeBSD Unix 上安装curl, wget, lynx 和w3m
[cc lang=”bash] $sudo pkg_add -v -r curl lynx w3m wget
[/code] 示例
使用curl命令来下载网页页面:

curl http://osetc.com/
curl https://www.osetc.com/linux-how-to-see-which-port-is-being-used-tcp80.html
 

使用curl并保存输出到一个变量:

tmp="$(curl http://osetc.com/)"
tmp="$(curl https://www.osetc.com/linux-how-to-see-which-port-is-being-used-tcp80.html)"
 

lynx 命令示例

lynx -dump www.osetc.com
lynx -dump https://www.osetc.com/linux-how-to-see-which-port-is-being-used-tcp80.html
 

上面的dump选项会转存默认文档的格式化输出。
wget命令示例

wget -o - http://www.osetc.com
wget -o - https://www.osetc.com/linux-how-to-see-which-port-is-being-used-tcp80.html
 

将wget的输出赋值给一个变量

tmp="$(wget -O - http://www.osetc.com)"
echo "$tmp"
echo "$tmp" | w3m -dump -T text/html
echo "$tmp" | lynx -dump -stdin
 

w3m命令示例

w3m -dump http://www.osetc.com
w3m -dump https://www.osetc.com/linux-how-to-see-which-port-is-being-used-tcp80.html
 

Linux/Unix:shell脚本如何查出脚本文件所在的目录

在脚本开发中,我们有时候需要获取脚本文件所在的目录,这样就可以读去脚本所在目录的其它文件。例如,如果脚本位于“/home/test/sch1.sh”,我想读取
“/home/test”目录下的其它文件。那么如何才能知道该脚本所在的目录的路径和shell 脚本的目录位置呢?
你可以通过下面的方法来获取路径名的部分信息:
1.basename 命令 –显示路径名的文件名部分
2.dirname 命令–显示路径的目录部分
3. bash参数替换
4. $0替换脚本名
示例:下面的例子显示目录的路径

dirname /root/test.sh/ 

命令输出:

/root 

下面的行设置shell 变量t的值为”/root/cn/test/scr”:

t=`dirname /root/cn/test/scr/test.sh"
echo "$t" 

OR

t=$(dirname /root/cn/test/scr/test.sh)
echo "$t" 

使用$0来替换“/root/cn/test/scr/test.sh”

#!/bin/bash
scriptname="$0"
basename=$(dirname  $scriptname)
echo "脚本 $scriptname在目录 $basename里." 

命令输出:

脚本 /root/cn/test/scr/test.sh在目录/root/cn/test/scr里. 

使用bash shell变量替换参数 ${var%pattern}

var=${path%/*} 

示例:

x="/root/cn/test/scr/test.sh"
echo "${x%/*}"
y="${x%/*}"
echo "$y" 

如何在Centos/RHEL上安装KornShell(KSH)

Korn shell 是一个unix上的shell 程序,主要用在各种unix系统上,比如:sun/oracle unix,AIX等。ksh是有贝尔实验室的David korn开发出来的,ksh结合了C shell的交互式特性,并且也融入了bourne shell的语法。
那么如何在linux系统上运行korn shell(ksh)呢?
安装korn shell(ksh)
在linux终端下,通过yum来安装ksh程序
[cc lang=”php”] $sudo yum install ksh
[/code] 或
[cc lang=”php”] #yum install ksh
[/code] 命令输出:
[cc lang=”php”] Loaded plugins: fastestmirror
Determining fastest mirrors
* base: ftp.nsysu.edu.tw
* extras: ftp.cs.pu.edu.tw
* updates: mirrors.stuhome.net
base                                                                 | 3.7 kB     00:00
extras                                                              | 3.4 kB     00:00
updates                                                           | 3.4 kB     00:00
updates/primary_db                                | 3.9 MB     00:05
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package ksh.x86_64 0:20100621-19.el6_4.4 will be installed
–> Finished Dependency Resolution
Dependencies Resolved
============================================================================================
Package        Arch              Version                          Repository
Size
============================================================================================
Installing:
ksh            x86_64            20100621-19.el6_4.4              updates            687 k
Transaction Summary
============================================================================================
Install       1 Package(s)
Total download size: 687 k
Installed size: 1.5 M
Is this ok [y/N]:
Downloading Packages:
ksh-20100621-19.el6_4.4.x86_64.rpm                       | 687 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : ksh-20100621-19.el6_4.4.x86_64                     1/1
Verifying  : ksh-20100621-19.el6_4.4.x86_64                    1/1
Installed:
ksh.x86_64 0:20100621-19.el6_4.4
Complete!
[/code] 查看ksh的安装路径,输入下面的命令:
[cc lang=”php”] $whereis ksh
[/code] 或者使用grep命令:
[cc lang=”php”] $grep –color ksh /etc/shells
[/code] 命令输出:
ksh install1
将ksh设置为系统默认shell
超级用户(root)可以使用下面的命令为任何用户更改登陆后的shell程序。
命令如下:
[cc lang=”php”] $sudo chsh -s /bin/ksh 用户名
[/code] 或者
[cc lang=”php”] #chsh -s /bin/ksh 用户名
[/code] 示例:将test用户的默认登陆shell设置为ksh
[cc lang=”php”] #chsh -s /bin/ksh test
[/code] 验证当前用户正在使用的shell程序,输入下面的命令:
[cc lang=”php”] $echo $SHELL
[/code] 命令输出:
[cc lang=”php”] /bin/ksh
[/code] 查看ksh的版本号,输入命令:
[cc lang=”php”] $ksh –version
[/code] 命令输出:
[cc lang=”php”] version         sh (AT&T Research) 93t+ 2010-06-21
[/code]

linux 如何查看哪些正在使用TCP80端口

如何来查看当前系统哪个服务在使用80端口呢?
你可以使用下面的任何一个命令去查看什么服务在使用tcp or udp 80端口:
1. netsat -a  显示网络连接,路由表和网络接口信息的命令行工具
2. fuser-a 使用文件或套接字来识别进程的命令行工具
3.lsof -a 显示所有打开的文件的进程信息
示例
使用netstat 命令来查看什么正在使用80端口
[cc lang=”php”] # netstat -tulpn | grep :80
[/code] 示例输出:
[cc lang=”php”] tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      3223/httpd
[/code] 其中:
1.0.0.0.0:80 是源IP地址和端口号
2. 3223/httpd 是PID号和进程名字
lsof命令来查看当前什么进程在用80端口
输入下面的命令:
[cc lang=”php”] #lsof -i :80 | grep LISTEN
[/code] 示例输出:
[cc lang=”php”] apache2   1501     root    3u  IPv4   4544      0t0  TCP *:www (LISTEN)
apache2   1516  www-data    3u  IPv4   4544      0t0  TCP *:www (LISTEN)
apache2   1522 www-data    3u  IPv4   4544      0t0  TCP *:www (LISTEN)
[/code]

Fedora linux: 重启/停止/启动(restart/stop/start) DHCPD 服务的命令

在Fedora 18中,我们怎么通过命令行来重启dhcpd服务呢?
DHCP(动态主机配置协议)是一个用于为网络上的独立设备获取网络配置信息的协议,主要包括下面的一些信息:
1.IP地址
2.子网掩码
3.广播地址
4.DNS服务器的IP地址
5.默认的网关地址
Fedora start/stop/restart DHCPD服务(最新版本,Fedora 15之后)
重启dhcpd服务,在终端下输入下面的命令:

# systemctl restart dhcpd.service
 

停止dhcpd服务,输入命令:

# systemctl stop dhcpd.service
 

启动dhcpd服务,输入命令:

# systemctl start dhcpd.service
 
注意:在默认情况下,DHCPD 服务不会在系统启动的时候启动。为了在系统启动的时候自动重启,可以输入下面的命令来实现:
# systemctl enable dhcpd.service
 

Fedora start/stop/restart DHCPD服务(老版本,Fedora 14之前)
重启dhcpd服务,在终端下输入下面的命令:

# service dhcpd restart
 

停止dhcpd服务,输入命令:

# service dhcpd stop
 

启动dhcpd服务,输入命令:

# service dhcpd start
 
注意:在默认情况下,DHCPD 服务不会在系统启动的时候启动。为了在系统启动的时候自动重启,可以输入下面的命令来实现:
# chkconfig dhcpd on
 

AWK 浮点数加法运算的结果如何依旧为浮点数

在我这样的一个需求:通过awk从一个文本文件中过滤出包含“gor”字符串的行,并计算出每行中第二个字段(浮点数)的累加和。当执行完awk后,得到的结果却是四舍五入后的整数,而我们期望的结果是浮点数值,类似于345.33,不是345.
awk 命令如下:
grep ‘gor’ try.txt | awk ‘BEGIN{ sum=0.0}{ sub(“,”,””,$2); sum +=$2}END{ print “$” sum}’
$345
那么我们才能得到想要的345.33这样的浮点数值输出呢?
awk 默认情况下会以双精度浮点数来表示所有的数值。换句话说,所有的数在awk里皆浮点数,所有的算数操作都以浮点数来进行。
示例:AWK 浮点运算
这个的例子将会使用一个叫try.txt的文件,该文件包含了一些数值。
[cc lang=”php”] d1 18.2 14.2
d2 11.5 6.60
d3 4.5  4.30
d4 2.5 17.5
d5 3    5
[/code] 下面的awk脚本将会计算第二字段和第三个字段的总和
[cc lang=”php”] awk ‘{ sum = $2 + $3; print $1, sum }’ try.txt
[/code] 脚本输出结果:
[cc lang=”php”] d1 32.4
d2 18.1
d3 8.8
d4 20
d5 8
[/code] awk对每个字段求平均值
[cc lang=”php”] awk ‘{ sum = $2 + $3; avg = sum/2; print $1, sum , avg}’ try.txt
[/code] 输出结果:
[cc lang=”php”] d1 32.4 16.2
d2 18.1 9.05
d3 8.8 4.4
d4 20 10
d5 8 4
[/code]  
输出内容格式化
在awk中我们可以类似于C语言中的printf,这样可以输出更好看更有意义的结果
[cc lang=”php”] awk ‘{ sum = $2 + $3 ; avg = sum/4; printf “%s: $%.2f ($%05.2f)n”,$1, sum, avg}’ try.txt
[/code] 输出结果:
[cc lang=”php”] d1: $32.40 ($08.10)
d2: $18.10 ($04.53)
d3: $8.80 ($02.20)
d4: $20.00 ($05.00)
d5: $8.00 ($02.00)
[/code] 回到刚开始的问题,我们可以用下面的awk命令来替换之前的命令:
[cc lang=”php”] grep ‘gor’ testing.txt  | awk ‘BEGIN{ sum=0.0}{ sub(“,”,””,$2); sum +=$2}END{printf “$%.2fn”, sum}’
[/code] 推荐阅读:
.更多信息可参考awk命令man帮助

CentOS/RHEL:检测各种服务(service)的启动状态

RHEL/Centos/Fedora linux系统里,如何来查看某些特定的服务比如:MySQL 或者Apache是否在运行中呢?
当然你需要使用“service”命令,该命令主要用于管理Linux操作系统中各种服务,它是一个脚本命令,会调用/etc/init.d/下面的各种服务启动程序。
service SERVER status
OR
/etc/init.d/SERVER status
示例:
在Centos 或RHEL下,查看一个名为mysqld(MySQL server)的是否处于运行状态。
[cc lang=”php”] # service mysqld status
[/code] 示例输出结果:
[cc lang=”php”] mysqld (pid  4324) is running…
[/code]  
查看所有服务的状态
命令service –status-all 将会运行所有的启动脚本来显示各个服务的运行状态:
[cc lang=”php”] #service –status-all
[/code] 输出为:[cc lang=”php”] [root@osetc ~]# service –status-all
Aegis is running
auditd is stopped
crond (pid  938) is running…
ip6tables: Firewall is not running.
iptables: Firewall is not running.
ERROR! MySQL is running but PID file could not be found
netconsole module not loaded
Configured devices:
lo eth0 eth1
Currently active devices:
lo eth0 eth1
ntpd (pid  930) is running…
Usage: /etc/init.d/php-fpm {start|stop|quit|restart|reload|logrotate}
master is stopped
rdisc is stopped
rsyslogd (pid  883) is running…
sandbox is stopped
saslauthd is stopped
openssh-daemon (pid  13367) is running…
vsftpd (pid 31721) is running…
[/code]  
ps 和pgrep命令
你也可以执行ps或者pgrep 命令来查看服务的状态
[cc lang=”php”] #ps aux | grep ‘SERVER’
#ps aux | grep ‘mysqld’
#pgrep ‘SERVER’
#pgrep -u username ‘SERVER’  ##查看某个用户的服务状态
#pgrep mysqld
[/code]  
启动服务:
如果Apache服务器的服务httpd没有启动,那我们如何来启动呢:
[cc lang=”php”] #service httpd status
#chkconfig httpd on
#service httpd start
[/code] 更多信息可以参考man帮助- service, pgrep,ps

Linux:查看目录大小的命令

于的linux新手,如何在linux系统下通过命令行来查看目录的大小呢?
你可以使用强大的“du”命令:
[a]查找并估算文件的使用空间
[b]汇总每个目录的磁盘使用情况
显示目录和文件的大小
基本的命令参数
[cc lang=”php”] du
du 目录名
du [选项] 目录名
[/code] 示例:
du命令如果不带任何参数,将会显示当前目录下每个的目录以及所有子目录的名字和使用空间大小
[cc lang=”php”] #du
[/code] 命令输出:
du command
如何想查看/var或者home目录的目录信息,可以输入下面的命令:
[cc lang=”php”] du /var/
du /root/home
[/code]  
du 命令后跟”-h”选项,可以以更易读的格式来显示输出: 例如,可以以KB,MB,GB为单位显示
[cc lang=”php”] du -h /etc/
du -h /var/
du -h /root/home
du -h
[/code] 输出结果:
du command2
 
“-s”选项,将会输出当前目录的总的磁盘使用空间
[cc lang=”php”] du -sh
du -sh /etc/
du -sh /root/home
[/code] 示例输出:
[cc lang=”php”] [root@osetc.com cache]# du -sh man yum
1.7M    man
93M     yum
[/code]  
使用“-c”可以对查看的所有目录大小做汇总
[cc lang=”php”] du -csh /root /etc/ /home
[root@osetc.com cache]# du -csh /root /etc/ /home
906M    /root
4.4M    /etc/
20K     /home
910M    total
[/code] 其它资料参考:
. 参考du命令的man帮助

Linux/Unix:通过dd命令创建1GB的二进制镜像大文件

linux/unix/BSD系统下,如何通过shell命令来快速创建1GB或者10GB的image镜像文件呢?
我们可以用”dd”命令来创建image文件。首先, 要确保系统中有足够的磁盘空间来通过”dd”去创建image文件:

$df -H 

创建1MB大小的文件(1024kb),输入下面的shell命令:

$ dd if=/dev/zero of=osetc.com.img bs=1024 count=0 seek=1024 

 
创建10MB大小的文件,输入shell命令:

$ dd if=/dev/zero of=osetc.com.img bs=1024 count=0 seek=$[1024*10] 

 
创建100MB大小的image文件,我们可以输入下面的命令:

$ dd if=/dev/zero of=osetc.com.img bs=1024 count=0 seek=$[1024*100] 

 
快速产生10GB的文件:

$ dd if=/dev/zero of=osetc.com.img bs=1000 count=0 seek=$[1000*1000*10] 

 
以上shell命令的输出类似于下面:

[root@osetc.com ~]# dd if=/dev/zero of=osetc.com.img bs=1024 count=0 seek=$[1024*10]
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.1595e-05 s, 0.0 kB/s 

 
下面来验证下我们生产的文件大小:

[root@osetc.com ~]# dd if=/dev/zero of=osetc.com.img bs=1024 count=0 seek=1024
0+0 records in
0+0 records out
0 bytes (0 B) copied, 8.803e-06 s, 0.0 kB/s
[root@osetc.com ~]# ls -lh
-rw-r--r-- 1 root root 1.0M Jul 23 22:11 osetc.com.img
 

LINUX:查看硬盘的可用剩余空间的方法

关于如何查看硬盘使用情况的方法,我们首先会想到通过“df” 命令,该命令会显示当前挂在文件系统可用的磁盘空间大小, df 命令一般来说可以显示或者查看下面的一些信息:
1.已用和可用的空间大小
2.文件系统的挂载点
3.文件系统使用情况的百分比
4.可用的inode数量
5.查看是否还有足够的空间来升级或安装新的程序
df 基本用法

df
df /dirpath/
df [选项]
df [选项】 /dirpath/

df 示例

#df
#df -H

命令输出结果为:

[root@osetc.com ~]# df -H
Filesystem             Size   Used  Avail Use% Mounted on
/dev/sda2              983G   317G   616G  34% /
tmpfs                   17G   103k    17G   1% /dev/shm

下面的例子是将只显示包含/var目录的挂载分区的磁盘使用情况

#df /var
#df -h /var

显示inode的使用情况,可以使用下面的命令:

# df -i
#df -ih
#df -i /dev/sda2

输出结果为:

[root@osetc.com ~]# df -i /dev/sda2
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda2            60915712  173179 60742533    1% /
[root@osetc.com ~]# df -ih /dev/sda2
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda2                59M    170K     58M    1% /

使用“-T”选项来查看文件系统的类型

#df -T

命令输出为:

[root@osetc.com ~]# df -T
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
/dev/sda2     ext4   959242704 309488700 601027220  34% /
tmpfs        tmpfs    16429028       100  16428928   1% /dev/shm

df命令选项:
-h 以容易理解的格式输出文件系统分区占用情况,例如32k,120M,60G。
-k 以K大小为单位输出文件系统分区占用情况。
-m 以M大小为单位输出文件系统分区占用情况。
-a 列出所有的文件系统分区,包含 0 大小的文件系统分区。
-i 列出文件系统分区的inodes信息。
-T 显示磁盘分区的文件系统类型。

更多关于df命令选项可以参考man帮助