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

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

1
#grep cache_dir  /etc/squid/squid.conf

命令输出:

1
cache_dir ufs /var/spool/squid 110 17 25

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

1
2
3
#squid -k shutdown
#rm -rf /cache/
#rm -rf /var/spool/squid/

重新创建缓存目录

1
#squid -z

命令输出:

1
2
3
4
5
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服务:

1
#squid

1
#service squid start

命令输出:

1
Starting squid:                                            [  OK  ]

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

1
2
3
# 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
命令输出:

1
2
3
4
5
6
7
8
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

使用“-r”选项可以按相反的顺序来显示:
ls -tr
ls -ltr
ls -ltr /boot/ | less
命令输出:

1
2
3
4
5
6
7
-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

在使用上面选项的时候,一定要加上-A(显示除了. 和.. 的文件或目录)或 -a(显示所有的文件)
ls -Altr /boot/ | less
ls -alt /boot/ | less

linux 如何查找一个目录文件

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

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

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

1
2
3
find
find .
find . -print

在根目录下查找mysql目录

1
find / -name "mysql"

命令输出:

1
2
3
4
/var/lock/subsys/mysql
/var/spool/mail/mysql
/usr/lib64/mysql
/usr/share/mysql

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

1
find / -name "mysql" -ls

命令输出:

1
2
3
4
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

如何只列出目录文件:

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

命令输出:

1
2
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

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

或者

1
find / -type d -iname "mysql"

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

1
2
3
4
5
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 例子:

1
perl -lape 's/\s+//sg' test >testoutput

或者使用

1
perl -lapi -e 's/\s+|^\n//sg' test

sed 例子:

1
sed -e 's/^[ \t]*//' -e 's/[ \t]*$//' testfile > testoutput

awk 例子:

1
awk '{$1=$1}{ print }' testfile > testoutput

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

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

1
#w

1
#who

命令输出:

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

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

1
#pkill -KILL -u root

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

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

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

1
#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

1
$apt-get install curl wget lynx w3m

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

1
$sudo yum install curl wget lynx w3m

FreeBSD Unix 上安装curl, wget, lynx 和w3m

1
$sudo pkg_add -v -r curl lynx w3m wget

示例
使用curl命令来下载网页页面:

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

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

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

lynx 命令示例

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

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

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

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

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

w3m命令示例

1
2
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替换脚本名
示例:下面的例子显示目录的路径

1
dirname /root/test.sh/

命令输出:

1
/root

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

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

OR

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

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

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

命令输出:

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

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

1
var=${path%/*}

示例:

1
2
3
4
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程序

1
$sudo yum install ksh

1
#yum install ksh

命令输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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!

查看ksh的安装路径,输入下面的命令:

1
$whereis ksh

或者使用grep命令:

1
$grep --color ksh /etc/shells

命令输出:
ksh install1
将ksh设置为系统默认shell
超级用户(root)可以使用下面的命令为任何用户更改登陆后的shell程序。
命令如下:

1
$sudo chsh -s /bin/ksh 用户名

或者

1
#chsh -s /bin/ksh 用户名

示例:将test用户的默认登陆shell设置为ksh

1
#chsh -s /bin/ksh test

验证当前用户正在使用的shell程序,输入下面的命令:

1
$echo $SHELL

命令输出:

1
/bin/ksh

查看ksh的版本号,输入命令:

1
$ksh --version

命令输出:

1
version         sh (AT&T Research) 93t+ 2010-06-21

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

如何来查看当前系统哪个服务在使用80端口呢?
你可以使用下面的任何一个命令去查看什么服务在使用tcp or udp 80端口:
1. netsat -a  显示网络连接,路由表和网络接口信息的命令行工具
2. fuser-a 使用文件或套接字来识别进程的命令行工具
3.lsof -a 显示所有打开的文件的进程信息
示例
使用netstat 命令来查看什么正在使用80端口

1
# netstat -tulpn | grep :80

示例输出:

1
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      3223/httpd

其中:
1.0.0.0.0:80 是源IP地址和端口号
2. 3223/httpd 是PID号和进程名字
lsof命令来查看当前什么进程在用80端口
输入下面的命令:

1
#lsof -i :80 | grep LISTEN

示例输出:

1
2
3
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)

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服务,在终端下输入下面的命令:

1
# systemctl restart dhcpd.service

停止dhcpd服务,输入命令:

1
# systemctl stop dhcpd.service

启动dhcpd服务,输入命令:

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

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

1
# service dhcpd restart

停止dhcpd服务,输入命令:

1
# service dhcpd stop

启动dhcpd服务,输入命令:

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