Mac OS:终端下使用curl命令下载文件

在mac os下,如何通过命令行来下载网络文件?如果你没有安装或wget命令,那么可以使用curl工具来达到我们的目的。

1
2
3
4
5
6
7
curl命令参数:
curl 'url地址'
curl [选项] 'url地址'
curl -O 'url'
curl -L -O 'url'
curl -o output.file.name.here 'url-here'
curl -o foo.pdf 'http://server1.cyberciti.biz/foo.pdf'

示例:
从osetc.com服务器里下载test.rar文件

1
curl -o test.rar 'http://www.osetc.com/test.rar。'

选项 “-o”会将输出写入到指定的文件test.rar里

在使用curl的时候也可以指定多个url,如下面的例子:

1
2
3
curl -O http://server{1,2,3}.osetc.com/
curl -O http://server{1,2,3}.osetc.com/test.pdf
curl -O ftp://intranet.site.{us,uk,in}.google/reports/test[a-z].tar.gz

Python:如何获取当前的日期和时间

在python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函数来得到当前的时间或日期呢?

当然你可以使用时间模块(time module),该模块提供了各种和时间相关的函数。但是这个模块里的一些函数在某些平台里不可用。那么怎么办呢?我们
可以使用一个更高级的面向对象的接口函数:datetime。它提供了操作日期和时间的多种简单或复杂的方法。

python里使用time模块来获取当前的时间

1
2
3
time.strftime(format)
time.strftime("%H:%M:%S") ##24小时格式
time.strftime("%I:%M:%S")## 12小时格式

示例
一个获取当天日期和时间的简单python程序

1
2
3
4
5
6
7
#!/usr/bin/python

import time
print (time.strftime("%H:%M:%S"))

## 12 hour format ##
print (time.strftime("%I:%M:%S"))

示例输出:

1
2
18:11:30
611:30

打印出当前的日期的python程序

1
2
3
4
5
#!/usr/bin/python

import time
## dd/mm/yyyy格式
print (time.strftime("%d/%m/%Y"))

示例输出:
11/10/2013

格式参数:

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
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月//
%e 在两字符域中,十进制表示的每月的第几天
%F 年--
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从06,星期一为0
%U 第年的第几周,把星期日做为第一天(值从053
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从06,星期天为0
%W 每年的第几周,把星期一做为第一天(值从053
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从099
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号

使用datetime模块来获取当前的日期和时间
参数如下:

1
2
3
4
5
6
cur=datetime.datetime.now()
cur.hour
cur.minute
cur.year
cur.day
cur.month

例子:

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python
import datetime
i = datetime.datetime.now()
print ("当前的日期和时间是 %s" % i)
print ("ISO格式的日期和时间是 %s" % i.isoformat() )
print ("当前的年份是 %s" %i.year)
print ("当前的月份是 %s" %i.month)
print ("当前的日期是  %s" %i.day)
print ("dd/mm/yyyy 格式是  %s/%s/%s" % (i.day, i.month, i.year) )
print ("当前小时是 %s" %i.hour)
print ("当前分钟是 %s" %i.minute)
print ("当前秒是  %s" %i.second)

示例输出:

1
2
3
4
5
6
7
8
9
当前的日期和时间 = 2013-10-11 19:38:19.4545
ISO格式的日期和时间 = 2013-10-11T19:38:19.4545
当前的年份 2013
当前的月份 10
当前的日期  11
dd/mm/yyyy 格式是  11/10/2013
当前小时是 0
当前分钟是 38
当前秒是  19

Bash shell:如何去掉字符串或变量里的空格

对于下面的bash变量,如何去掉变量值的前后空白呢?

out=”$(awk -F’,’ ‘/file/ {print $9}’ devops.file)”

你可以是用sed, awk, cut, tr 或者其他的工具来去除$out的空白字符。

示例:

定义一个out变量:

1
out= "  bash test"

使用echo 命令来显示$out:

1
echo "$out"

命令输出:

1
bash test

sed 例子

1
echo "$out" | sed -e 's/^[ \t]*//'

命令输出:

1
bash test

Awk 示例

1
2
3
4
out="     bash test     “
echo "
=${out}="
##使用awk去除变量值前面和后面的空白字符
echo "
${out}" | awk '{gsub(/^ +| +$/, "")} {print "=" $0 "="}'

示例输出:

1
=bash shell=

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

linux系统下的默认文本编辑器vi,当我们想使用vim命令的时候,系统会输出一些错误的信息如下:

install_vim1
如何解决这个问题呢?为什么在ubuntu下没有默认安装vim呢?如何安装完整的vim的文本编辑器呢?
vim(vi增强)是一个可以向前兼容vi的文本编辑器。它可以用来编辑任何的文本,特别是用来编辑配置文件或者编写shell, python, perl, c/c++程序。

ubuntu下安装vim 文本编辑器

打开一个终端,输入下面的命令:

1
sudo apt-get install vim

1
2
sudo -s
apt-get install vim

命令输出:

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
39
40
41
42
43
44
45
46
47
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

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服务

1
$sudo service bind9 start

1
$sudo /etc/init/d/bind9 start

停止named服务

1
$sudo service bind9 stop

1
$sudo /etc/init.d/bind9 stop

重启named 服务

1
$sudo service bind9 restart

1
$sudo /etc/init.d/bind9 restart

查看当前named服务的状态

1
$sudo service bind9 status

1
$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页面的特定区域的信息

1
man 区域数 命令名

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

1
$man 1 echo

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

1
man man

1
man 1 man

如何清除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"