Skip to content Skip to main navigation Skip to footer

Linux

Linux:Tmux:终端复用器

Tmux 是一个 C 语言编写的终端,它能够在单一窗口中同时访问和控制多个终端。它是一个类似于 GNU Screen 的工具。使用它,用户可以在 Linux 系统上管理多个任务和命令行程序,而不用同时打开多个终端窗口,Tmux 还可以切换到后台在需要的时候在调用到前台来。

在 Debian 和 Ubuntu 下安装 Tmux 的命令:

sk@sk:~$ sudo apt-get install tmux

在 CentOS 和 RHEL 中,它不存在于官方的软件源中,所以需要添加 EPEL 库。添加命令:

[root@server ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

添加完毕后,可以用下面的命令来安装它:

[root@server ~]# yum install tmux

安装完毕后,只需要执行如下命令就可以使用它了:

[root@server ~]# tmux

执行这个命令后,您将会被转移到 Tmux 的会话中。转移到会话中后,您需要先按下 Ctrl+B 才能执行其他的命令。您可以先按下 Ctrl+B 后按 “?” 来查看所有支持的命令。

Linux:Tmux:终端复用器
Linux:Tmux:终端复用器

建立一个新 Tmux 会话命令:

先按下 Ctrl+B 后在按下 “c“,您将建立一个新的会话。

Linux:Tmux:终端复用器
Linux:Tmux:终端复用器

在新的会话界面,您可以在底部看到绿色的 Tmux 会话记录,* 号标记的会话表示当前的会话。

您可以在所列出的会话之间切换,按下 Ctrl+B 然后在按 “w“,然后使用箭头来移动到你需要的会话,然后在回车,就可以切换到相应的会话中。如果要退出当前的会话,只需要键入”exit“命令即可。

Linux:Tmux:终端复用器
Linux:Tmux:终端复用器

如果您想拆分两个会话窗口,可以按下 Ctrl+B 后在按下 “%” 来实现。

Linux:Tmux:终端复用器
Linux:Tmux:终端复用器

要从会话脱离,可以按下 Ctrl+B 后接着按 “d” 。将脱离所有的会话返回原来的终端屏幕。

如果要恢复脱离的会话,您可以输入如下命令来恢复:

[root@server ~]# tmux attach

这样,你将恢复链接到原来的会话中。

更详细的使用命令,可以查看 Tmux 的 man 来得到。

[root@server ~]# man tmux

试试这个工具吧。

来源:https://linux.cn/article-1573-1.html

Linux:Ubuntu 下的闹钟和定时器

最近在玩一个网络游戏,那个游戏里每天固定的时间会有固定的事件发生,所以我一定要在固定的时间上线,要不就错过了那些发生的时间了。所以我需要一个能定时提醒我的闹钟,当然了,是在电脑上的,我可不想在手机上弄好多个闹钟让它定时响。

在 windows 下,我搜了无数次,也试用了很多个说是具有这样功能的软件可是就是不成,我也用过 Outlook 的日程功能,和 OneNote 的提醒,哎,就别提了,就没有一个能简简单单的完成我想要的功能的。我就需要一个能每天多个不同时段提醒我的钟表而已。

好在我还同时使用 Ubuntu ,使用 Ubuntu 就简单了,打开 Ubuntu 软件中心,在搜索框中输入 “alarm clock” 好了, 你会看到下面的软件列表:

Linux:Ubuntu 下的闹钟和定时器
Linux:Ubuntu 下的闹钟和定时器

我们要安装的就是那个评价最多的那个 alarm-clock-applet 。好了,点击它的名字展开它,并在展开的区域中点击“安装”按钮。

软件很小,很快就安装完成了。好了,在桌面的左侧寻找软件的图标,点击打开它。

Linux:Ubuntu 下的闹钟和定时器
Linux:Ubuntu 下的闹钟和定时器

相信对于这样一个界面,我不用说太多,大家也都知道怎么使用了,点击那个大大的 + 号图标。

Linux:Ubuntu 下的闹钟和定时器
Linux:Ubuntu 下的闹钟和定时器

给你的一个闹钟起个名字,然后设置时间,重复,对重复是我需要的,我需要每天都提醒我,我就是要这个功能,周一到周日全都要。设置一个我喜欢的铃声。嗯,下面的启动程序是什么意思?嗯,我也不知道,不管它了,点击关闭。

好了,我的一个时钟已经设置完毕,我还需要第二个,三个,四个……

嗯,差不多了,每天的固定时段都设置出来了。嗯,怎么感觉时间有点怪怪的,哦,我的系统时间有问题,我调调,嗯,怎么,还觉得怪怪的,哦,它用的是倒计时的时间。好了,现在就等着固定时段到了以后它在哪里叫了。

Linux:Ubuntu 下的闹钟和定时器
Linux:Ubuntu 下的闹钟和定时器
 已同步至 linux的微博

来源:https://linux.cn/article-1575-1.html

Linux:在树莓派上安装游戏模拟器

桌面电脑,媒体中心,计算太空计划预算——还有什么是树莓派不能干的呢?

看起来没有——因为,它开始进军游戏业了。

当然了,树莓派肯定不能支持最新的具有惊艳图形效果的高清游戏。不过,树莓派可以变成一个复古游戏中心——通过模拟器的支持,可以运行从苹果II到PS I的各种游戏。

有一个软件可以安装所有的模拟器。使用EmulationStation,你可以把你的树莓派变成“复古派”,一个可以玩所有你能找到的模拟器游戏的设备。

 

准备工作

要建立一个“复古派”,你需要有常用的树莓派配件——HDMI或者RCA线缆,SD卡,USB键盘鼠标,以太网连接——以及要在树莓派上安装媒体中心和其他操作系统时需要在你的桌面电脑上预先准备的软件。

Linux:在树莓派上安装游戏模拟器
Linux:在树莓派上安装游戏模拟器

“复古派”需要的软件基本上就是EmulationStation和Raspbian(一种树莓派的Debian Linux发行版),后者可以让你利用图形界面的文件浏览器来编辑配置文件。

访问这个链接去下载“复古派”项目SD卡镜像,并使用Win32 Disk Imager工具把这个镜像刻录到你的SD卡上,下面会详细说明过程。当然,你还需要一些你最喜欢的复古游戏的ROM。

 

安装复古派

上述两个文件下载完成后,把格式化过的空白SD卡插入计算机的读卡器中,“复古派”镜像大概有1.4GB,下载下来的是ZIP文件,需要先解压缩。

Linux:在树莓派上安装游戏模拟器
Linux:在树莓派上安装游戏模拟器

解压缩win32diskimager-binary.zip,完成后,打开文件夹找到win32diskimager.exe文件,右键点击文件,选择“以管理员身份运行”。

运行起来后,选择你的SD卡的那个盘符,你需要打开资源管理器来确认盘符。然后,选择“浏览”,找到解压出来的RetroPieImage_verx.x.img(“x.x”代表版本号),选中,点击“写入”。写入镜像可能会需要一段时间,等待的过程中你可以找点别的事做。

在Linux和Mac OS X上拷贝镜像文件到SD卡的过程会有一些不同,但你可以在树莓派的Wiki页面找到快速帮助信息。

 

启动和配置

第一次启动“复古派”,你会被要求配置你的控制器,这个地方配置的控制器在玩具体游戏的时候是可以修改的,这里的配置主要是用来让你在EmulationStation中进行菜单导航的。

从上面的截图可以看到,你需要配置很多命令,把这些配置记下来,后面你会发现这里面会有一些很有用的配置。

完成后,按下你设置的菜单按钮,选择退出,这时系统会突出EmulationStation,进入命令行。

在这里输入:startx

进入Raspbian的图形界面,在这里可以修改控制器配置文件。在文件管理器中,打开RetroPieConfigsall然后用文本编辑器(比如LeafPad)打开retroarch.cfg。

Linux:在树莓派上安装游戏模拟器
Linux:在树莓派上安装游戏模拟器

这里可选的有很多不同的控制器类型,你需要搜索一下,找到适合你的设备的最佳配置,但是假如你的控制器没有模拟摇杆(就是Xbox 360的手柄上那些小摇杆),你需要找到并删除下面这行:

input_player1_l_x_plus_btn = “x”

retroarch.cfg文件非常有用,你会经常修改这个文件,所以每次你修改的时候,最好备份一份,以保证你可以随时把以前的配置恢复回来。

当你准备好重启EmulationStation的时候,打开主X菜单,选择登出,然后在提示符中输入: emulationstation

这会让你重新进入“复古派”模式。

 

添加新游戏

用你的树莓派运行复古游戏时,你可以玩内置ROM里的游戏,这些游戏会显示在可选的模拟器中。

一开始可选模拟器有限是因为其他的模拟器只有在对应的ROM存在的时候才可以打开,因此,你需要通过把那些ROM拷贝到“复古派”里相应的文件夹下来激活你想要的模拟器。

有很多网站提供复古游戏的ROM下载,但是你要确保你拥有下载的游戏的原始光盘,卡带或者软盘(避免版权问题)。

要添加ROM,最快的方式可能就是从你的PC上通过SFTP(就是支持SSH连接的FTP)连接到树莓派上,然后浏览RetroPieROMs文件夹。在这里,所有的子文件夹会保存你下载的ROM,并且会被相应的命名。你需要做的就是把ROM上传到对应的文件夹,然后重启设备刷新EmulationStation,或者在菜单中通过控制器导航来找到这个ROM。

 

配置完成?开始玩吧!

我之前已经把我的树莓派改装成了桌面电脑和媒体中心,但是“复古派”要比之前的更好玩,这个小电脑还在不断地给我惊喜。

Linux:在树莓派上安装游戏模拟器
Linux:在树莓派上安装游戏模拟器

只需要几分钟的时间,你就可以开始玩那些在游戏厅中的经典设备上的经典游戏,

这些都是通过树莓派做到的。

“复古派”可以满足不同人的口味,你可以邀请朋友们来玩多玩家游戏,或者就用鼠标和键盘在DOS模拟器下玩经典PC游戏。

最重要的是,玩的开心!

 

原文链接: Christian Cawley 翻译: 极客范 – 冬大少爷 译文链接

Linux:PHP 5.5新特性

默认开启OPCache

PHP 5.5安装时候会默认编译Zend OPcache做为OPCache,并默认开启OPCache.

PHP语言的一些改变

增加Generator

function getLinesFromFile($fileName) {
    if (!$fileHandle = fopen($fileName, 'r'))
    {
        throw new RuntimeException('Couldn't open file "' . $fileName . '"');
    }
    while (false !== $line = fgets($fileHandle))
    {
        yield $line;
    }
    fclose($fileHandle);
}
foreach (getLinesFromFile($fileName) as $line)
{
    // do something
}

增加finally关键字

try {
    echo '1';
    throw new Exception();
} catch (Exception $e) {
    echo '2';
} finally {
    echo '3';
}

完全限定类名

使用ClassName::class可以获得”完全限定类名”(fully qualified class name)

namespace FooBar;
class One {
    const A = self::class;
    const B = Two::class;
}
class Two extends One {
    public static function run()
    {
        var_dump(self::class);
        var_dump(static::class);
        var_dump(parent::class);
    }
}
var_dump(One::class);
$class = One::class;
$x = new $class;
var_dump($x);
$two = Two::class;
(new $two)->run();

empty( )函数允许直接调用函数

function test_false() {
    return false;
}
if (empty(test_false()))
{
    echo "output something.";
}

foreach中使用list( )

$users = [
    ['Foo', 'Bar'],
    ['Baz', 'Qux'],
];
foreach ($users as list($firstname, $lastname)) {
    echo "First name: $firstname, last name: $lastname.";
}

常量寻址(Constant dereferencing)-访问常量内元素

echo "hello"[1];
echo [1,2,3,4][3];

标准库或函数/方法的一些改变

增加密码哈希API

password hashing api的函数:password_get_info(), password_hash(),password_needs_rehash(),password_verify()

$receved_password = "zrwmpassword";
$pass_hash = password_hash($receved_password, PASSWORD_DEFAULT);
var_dump(password_get_info($pass_hash));
if (password_verify($receved_password, $pass_hash)) {
    echo 'Password is valid';
} else {
    echo 'Invalid password';
}

新增加的一些函数

PHP Core还新增了array_column(),boolval(),json_last_error_msg(),cli_get_process_title()等函数。

此外还新增一些有用的扩展函数/方法:

  • MySQLimysqli_begin_transaction()mysqli_release_savepoint()mysqli_savepoint()
  • IntlIntlDateFormatter::formatObject()IntlDateFormatter::getCalendarObject()IntlDateFormatter::getTimeZone()IntlDateFormatter::setTimeZone()
  • cURLcURL新增一些函数,其中curl_file_create()函数或CURLFile类都可以创建CURLFile对象,实现文件的上传功能.

新增的类/接口

查看PHP 5.5新增的类/接口.

对比DateTime与DateTimeImmutable的一个简单例子:

function printUTC1(DateTime $dt) {
    $dt->setTimeZone(new DateTimeZone('UTC'));
    echo $dt->format(DateTime::ATOM) . PHP_EOL;
}
function printUTC2(DateTimeImmutable $dt)
{
    $dt->setTimeZone(new DateTimeZone('UTC'));
    echo $dt->format(DateTime::ATOM) . PHP_EOL;
}
$dt = new DateTime('now');
printUTC1($dt); // 2013-06-28T05:58:49+00:00
$dt = new DateTimeImmutable('now');
printUTC2($dt); // 2013-06-28T13:58:49+08:00

过期与删除的特性

  • 不再支持Windows XP和 Windows Server 2003
  • 扩展mysql过期,需使用MySQLi或PDO_MySQL
  • preg_replace /e 修饰符过期
  • 删除Logo GUIDs
  • intl扩展的一些方法/函数过期IntlDateFormatter::setTimeZoneID()和datefmt_set_timezone_id()现在已经过期.可以分别使用IntlDateFormatter::setTimeZone()和datefmt_set_timezone().
  • mcrypt扩展的一些函数过期mcrypt_cbc(),mcrypt_cfb(),mcrypt_ecb(),mcrypt_ofb()等函数过期
via http://www.zrwm.com/?p=7536 ,有修改。

Linux:网卡流量统计实用工具nicstat

nicstat安装

# wget -c http://nchc.dl.sourceforge.net/project/nicstat/nicstat-1.92.tar.gz
# tar zxvf nicstat-1.92.tar.gz
# cd nicstat-1.92
# cp Makefile.Linux Makefile
# uname -m
x86_64
# diff Makefile Makefile.Linux  ## 如果不是64位机器则不需要修改Makefile
17c17
< CFLAGS =	$(COPT)
---
> CFLAGS =	$(COPT) -m32
25c25
< CPUTYPE = x86_64
---
> CPUTYPE =	i386
# make && make install

nicstat使用

在解压包目录nicstat-1.92内,有个nicstat.sh脚本.

查看网卡速度(-l):

[root@centos192 nicstat-1.92]# ./nicstat.sh -l
Int      Loopback   Mbit/s Duplex State
lo            Yes        -   unkn    up
eth0           No     1000   full    up

间隔3秒,查看2次结果(留意%Util和Sat):

[root@centos192 nicstat-1.92]# ./nicstat 3 2
    Time      Int   rKB/s   wKB/s   rPk/s   wPk/s    rAvs    wAvs %Util    Sat
06:19:46       lo    0.72    0.72    2.15    2.15   341.2   341.2  0.00   0.00
06:19:46     eth0    0.89    0.15    1.37    0.92   660.4   163.6  0.00   0.00
    Time      Int   rKB/s   wKB/s   rPk/s   wPk/s    rAvs    wAvs %Util    Sat
06:19:49       lo    0.00    0.00    0.00    0.00    0.00    0.00  0.00   0.00
06:19:49     eth0    0.02    0.12    0.33    0.33   66.00   354.0  0.00   0.00
  • Time列:表示当前采样的响应时间.
  • lo and eth0 : 网卡名称.
  • rKB/s : 每秒接收到千字节数.
  • wKB/s : 每秒写的千字节数.
  • rPk/s : 每秒接收到的数据包数目.
  • wPk/s : 每秒写的数据包数目.
  • rAvs : 接收到的数据包平均大小.
  • wAvs : 传输的数据包平均大小.
  • %Util : 网卡利用率(百分比).
  • Sat : 网卡每秒的错误数.网卡是否接近饱满的一个指标.尝试去诊断网络问题的时候,推荐使用-x选项去查看更多的统计信息.

查看扩展信息(-x 和 -s):

[root@centos192 nicstat-1.92]# ./nicstat 3 2 -x
06:33:57      RdKB    WrKB   RdPkt   WrPkt   IErr  OErr  Coll  NoCP Defer  %Util
lo            0.69    0.69    2.08    2.08   0.00  0.00  0.00  0.00  0.00   0.00
eth0          0.86    0.14    1.33    0.89   0.00  0.00  0.00  0.00  0.00   0.00
06:34:00      RdKB    WrKB   RdPkt   WrPkt   IErr  OErr  Coll  NoCP Defer  %Util
lo            0.00    0.00    0.00    0.00   0.00  0.00  0.00  0.00  0.00   0.00
eth0          0.02    0.12    0.33    0.33   0.00  0.00  0.00  0.00  0.00   0.00
[root@centos192 nicstat-1.92]# ./nicstat.sh -s
    Time      Int          rKB/s          wKB/s
06:37:48       lo          0.685          0.685
06:37:48     eth0          0.848          0.140

查看tcp相关信息(-t):

[root@centos192 nicstat-1.92]# ./nicstat.sh -t
05:15:05    InKB   OutKB   InSeg  OutSeg Reset  AttF %ReTX InConn OutCon Drops
TCP         0.00    0.00    4.01    3.50  0.00  0.01 0.000   0.05   0.09  0.0
  • InKB : 表示每秒接收到的千字节.
  • OutKB : 表示每秒传输的千字节.
  • InSeg : 表示每秒接收到的TCP数据段(TCP Segments).
  • OutSeg : 表示每秒传输的TCP数据段(TCP Segments).
  • Reset : 表示TCP连接从ESTABLISHED或CLOSE-WAIT状态直接转变为CLOSED状态的次数.
  • AttF : 表示TCP连接从SYN-SENT或SYN-RCVD状态直接转变为CLOSED状态的次数,再加上TCP连接从SYN-RCVD状态直接转变为LISTEN状态的次数
  • %ReTX : 表示TCP数据段(TCP Segments)重传的百分比.即传输的TCP数据段包含有一个或多个之前传输的八位字节.
  • InConn : 表示TCP连接从LISTEN状态直接转变为SYN-RCVD状态的次数.
  • OutCon : 表示TCP连接从CLOSED状态直接转变为SYN-SENT状态的次数.
  • Drops : 表示从完成连接(completed connection)的队列和未完成连接(incomplete connection)的队列中丢弃的连接次数.

查看udp相关信息(-u):

[root@centos192 nicstat-1.92]# ./nicstat.sh -u
06:39:42                    InDG   OutDG     InErr  OutErr
UDP                         0.01    0.01      0.00    0.00
  • InDG : 每秒接收到的UDP数据报(UDP Datagrams)
  • OutDG : 每秒传输的UDP数据报(UDP Datagrams)
  • InErr : 接收到的因包含错误而不能被处理的数据包
  • OutErr :因错误而不能成功传输的数据包.

默认以KB为单位,现在以M单位查看:

[root@centos192 nicstat-1.92]# ./nicstat.sh -M
    Time      Int   rMbps   wMbps   rPk/s   wPk/s    rAvs    wAvs %Util    Sat
05:16:55       lo    0.01    0.01    2.55    2.55   341.2   341.2  0.00   0.00
05:16:55     eth0    0.01    0.00    1.61    1.08   667.3   163.7  0.00   0.00

其它用法:

[root@centos192 nicstat-1.92]# ./nicstat.sh  -x -t -u
06:49:25    InKB   OutKB   InSeg  OutSeg Reset  AttF %ReTX InConn OutCon Drops
TCP         0.00    0.00    3.16    2.74  0.00  0.01 0.000   0.04   0.07  0.00
06:49:25                    InDG   OutDG     InErr  OutErr
UDP                         0.01    0.01      0.00    0.00
06:49:25      RdKB    WrKB   RdPkt   WrPkt   IErr  OErr  Coll  NoCP Defer  %Util
lo            0.67    0.67    2.00    2.00   0.00  0.00  0.00  0.00  0.00   0.00
eth0          0.83    0.14    1.29    0.86   0.00  0.00  0.00  0.00  0.00   0.00

[root@centos192 nicstat-1.92]# ./nicstat.sh -a
06:50:43    InKB   OutKB   InSeg  OutSeg Reset  AttF %ReTX InConn OutCon Drops
TCP         0.00    0.00    3.15    2.74  0.00  0.01 0.000   0.04   0.07  0.00
06:50:43                    InDG   OutDG     InErr  OutErr
UDP                         0.01    0.01      0.00    0.00
06:50:43      RdKB    WrKB   RdPkt   WrPkt   IErr  OErr  Coll  NoCP Defer  %Util
lo            0.66    0.66    1.99    1.99   0.00  0.00  0.00  0.00  0.00   0.00
eth0          0.82    0.14    1.28    0.86   0.00  0.00  0.00  0.00  0.00   0.00

使用”-a”与使用”-x -t -u”相当.

Linux:八大 Linux/Unix 服务器内存转储工具

  话说工欲善其事必先利其器,当你对Linux/Unix服务器内存进行转储时,手边需要有得力的工具。国外媒体盘点了八款Linux/Unix服务器内存监控工具。一起来看看。

LiME(Linux Memory Extractor)

  LiME(之前叫DMD)是一种可加载内核模块(Loadable Kernel Module,LKM),可获得Linux和Linux设备中的易失性存储器。该工具支持从设备中的文件系统或者从网络中获取内存。LiME是第一个可以 从Android设备捕捉完整内存的工具,在抓取过程中减少了将用户和内核空间进程之间的互动。

  • LiME下载地址:http://code.google.com/p/lime-forensics/downloads/list

Draugr

  使用/dev/(k)mem或者信息转储,Draugr可通过python语言访问、读写、搜索内存。还可以通过不同方式找到系统信息。另外,还可以找到内核符号(XML文件或EXPORT_SYMBOL)、进程,以及反汇编和转储内存。

  • Draugr下载地址:http://code.google.com/p/draugr/downloads/list

Volatilitux

  对Linux系统来说,Volatilitux相当于Volatility。Volatilitux支持以下物理内存转储架构:

* ARM

* x86

* 支持PAE的x86

支持以下命令:

* pslist: 打印所有进程列表

* memmap: 打印一个进程的内存映射

* memdmp: 转储进程的可寻址内存

* filelist: 对于一个给定的进程,打印所有的开启文档

* filedmp: 转储开启文档

  • Volatilitux下载地址:http://code.google.com/p/volatilitux/downloads/list

Memfetch

  这是一款简单的工具,可将运行中的进程的所有内存进行转储,或者在发现故障状态时进行转储。安装Memfetch代码:

  1. ## FreeBSD ## 
  2. pkg_add -r -v memfetch 
  3. ## other *nix user download it from the following url ## 
  4. wget http://lcamtuf.coredump.cx/soft/memfetch.tgz 
  5. tar xvf memfetch.tgz 
  6. cd memfetch && make 
  • Memfetch下载地址:http://lcamtuf.coredump.cx/

红帽Crash

  该核心分析套件是一个独立的工具,可以用来研究生态系统、在Netdump上创建的内核核心转储、支持Red Hat Linux上的diskdump和kdump软件包,可以用于内存取证。安装代码:

  1. ## RHEL / CentOS ## 
  2. yum install crash 
  3. ## Novell / Suse / OpenSUSE ## 
  4. zypper install yast2-kdump 
  • Crash下载地址:http://people.redhat.com/anderson/

Memgrep

  一款简单的工具,从运行中的进程和核心文件中搜索、替换、转储内存。安装:

  1. ## FreeBSD ## 
  2. pkg_add -r -v memgrep 
  • Memgrep下载地址:http://hick.org/

Memdump

  Memdump将系统内存转储到标准输出流,跳过内存映射。默认转储物理内存的内容。安装:

## Debian / ubuntu Linux ## sudo apt-get install memdump ## FreeBSD ## pkg_add -r -v memdupm

foriana

  根据操作系统结构之间的逻辑关系从RAM映像提取进程和模块列表信息的工具。

来自:http://www.searchsv.com.cn/showcontent_74564.htm

Linux:YUM 安装及清理

  Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理 依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

  在我们平时对CentOS的软件安装中,yum命令在查找安装盘中的rpm比较快,现将收集的一些常用命令整理如下:

1.列出任何可更新的软件清单

命令:yum check-update

2.安装任何更新软件

命令:yum update

3.仅安装指定的软件

命令:yum install ***

4.仅更新指定的软件

命令:yum update ***

5.列出任何可安裝的软件清单

命令:yum list 用YUM安装删除软件

  装了系统添加删除软件是常事,yum同样能够胜任这一任务,只要软件是rpm安装的。

  安装的命令是,yum install xxx,yum会查询数据库,有无这一软件包,假如有,则检查其依赖冲突关系,假如没有依赖冲突,那么最好,下载安装;假如有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,您能够自己作出判断。

  删除的命令是,yum remove xxx,同安装相同,yum也会查询数据库,给出解决依赖关系的提示。

1.用YUM安装软件包

命令:yum install ***

2.用YUM删除软件包

命令:yum remove ***

用YUM查询软件信息

  我们常会碰到这样的情况,想要安装一个软件,只知道他和某方面有关,但又不能确切知道他的名字。这时yum的查询功能就起作用了。您能够用 yum search keyword这样的命令来进行搜索,比如我们要则安装一个Instant Messenger,但又不知到底有哪些,这时不妨用 yum search messenger这样的指令进行搜索,yum会搜索任何可用rpm的描述,列出任何描述中和messeger有关的rpm包,于 是我们可能得到gaim,kopete等等,并从中选择。

  有时我们还会碰到安装了一个包,但又不知道其用途,我们能够用yum info packagename这个指令来获取信息。

1.使用YUM查找软件包

命令:yum search ***

2.列出任何可安装的软件包

命令:yum list

3.列出任何可更新的软件包

命令:yum list updates

4.列出任何已安装的软件包

命令:yum list installed

5.列出任何已安装但不在 Yum Repository 內的软件包

命令:yum list extras

6.列出所指定的软件包

命令:yum list ***

7.使用YUM获取软件包信息

命令:yum info ***

8.列出任何软件包的信息

命令:yum info

9.列出任何可更新的软件包信息

命令:yum info updates

10.列出任何已安裝的软件包信息

命令:yum info installed

11.列出任何已安裝但不在 Yum Repository 內的软件包信息

命令:yum info extras

12.列出软件包提供哪些文档

命令:yum provides

清除YUM缓存

  yum 会把下载的软件包和header存储在cache中,而不会自动删除。假如我们觉得他们占用了磁盘空间,能够使用yum clean指令进行清除,更精确 的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all一 股脑儿端 .

1.清除缓存目录(/var/cache/yum)下的软件包

命令:yum clean packages

2.清除缓存目录(/var/cache/yum)下的 headers

命令:yum clean headers

3.清除缓存目录(/var/cache/yum)下旧的 headers

命令:yum clean oldheaders

4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers

命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders).

来自:http://www.huzs.net/?p=1136

 已同步至 linux的微博

Linux:我安身立命的编程指导

这些年来我收集了一些编程指导原则,当编程时,这些原则就会出现在我脑子里。有一些是我总结的,有一些是我从@jonwagnerdotcom 和 @jbright 那里偷来的,书本里也给了我一些,另外一些我完全忘记了出处。希望这些指导原则在你编程时也会给你带来帮助。

  1. 思考

    凡事动手前先用脑思考。不要盲目遵循各种模式。所做的事要有意义。相信自己的脑袋。

  2. 不同事情不同编程方法,相同的事情相同的代码。

    不要在完全不同的事情上强制沿用DRY(不要自我重复)编程原则,但相同的模式中一定要用同一段代码。

  3. 期望更好会成为你完成任务的敌人

    尽量写最好的程序,但不要担心发布它。程序是拿来使用的。你不发布它,没有人会用它。

  4. 没写的代码是绝对没有bug的

    尽量避免写代码,除非必须。没有人能做到完美。你的代码将会带来不可预期的后果。事前掂量一下,看看问题是否真的需要用代码来解决。

  5. 不要自我重复(DRY).

    让代码整洁和独立,让它们可以复用。相同的代码不要写第二遍(或拷贝/粘贴)。任何时候你拷贝/粘贴一段代码时都要有充分的理由。

  6. 不要担心删代码,你有版本控制系统

    (它在版本控制系统里,不是吗?即使用一个很烂的版本控制系统,那也比不用强)。未被删除的代码只会堵塞代码库。删除那些不需要的代码,让版本控制系统帮您留住历史。太多次我看到老代码到处都是,只是因为没有人确信这些代码是否真的不需要了。

  7. 代码只是一些字节码

    不要害怕重构。代码的原材料是很廉价的。

  8. 为你的作品骄傲。不要马马虎虎。

    编程是一种技艺。写代码要用心,要为它们自豪。

  9. 有Bug是正常的

    没有人能设定将来。Bug免不了要出现,这没什么。出现时消灭它们。

  10. 要有乐趣

    并不是每个任务都会很有趣,但努力在你的工作中找到乐趣。这会让你保持工作精神,创造出更好的产品。

 

[英文原文:Coding rules to live and code by ]
via http://www.aqee.net/coding-rules-to-live-and-code-by/ 

Linux:安装 Fedora 19 GNOME 后需做的五件事

1. 更改主机名称:在安装全新的Fedora 19桌面这个过程中,我确信你注意到了这点:Anaconda即Fedora系统安装器没有为你提供设定主机名称的选项。主机名称默认情况下是 localhost。如果你已登录到桌面上,可以通过这两个办法确认该主机名称:在外壳终端输入hostname,或者点击System Settings(系统设置)中的Details(细节)模块,主机名称应该显示在Device name(设备名称)这一栏。

更改主机名称很简单。假设你想把新的主机名称改为HUman,那么以根用户(root)身份在命令行只要输入hostnamectl set-hostname HUman。就这么简单!牢记一点:必须针对Fedora Spins完成这一步,而不是仅仅针对GNOME 3版本。

2. 安装GNOME调节工具(GNOME Tweak Tool):对我来说,一种所谓的”纯粹 的”GNOME外壳用起来很无趣。使用过程中,只显示关闭按钮的窗口标题栏只是其中一个很烦人的方面。不过借助GNOME调节工具,你可以通过图形化界面 配置其中一些特性。想安装该工具,你可以通过外壳终端或者通过gpk应用程序来安装。如果通过外壳终端来安装,只要以根用户身份输入yum install gnome-tweak-tool。如果通过gpk应用程序来安装,按名称来搜索该应用程序,并安装。然后,你可以从应用程序选择器视图来启动它。 GNOME调节工具的主默认视图如下所示。我总是喜欢更改的第一个设置是Arrangement of buttons on the titlebar(排列标题栏上的按钮)。我喜欢显示所有的按钮。这只是你使用GNOME调节工具就能改动的众多设置之一。

Linux:安装 Fedora 19 GNOME 后需做的五件事
Linux:安装 Fedora 19 GNOME 后需做的五件事

3. 安装扩展件:如果你与我一样也不喜欢”纯粹的”GNOME外壳,但又不想放弃GNOME 3桌面,换成另一种桌面环境,那么你可以安装众多扩展件,这些扩展件可以根据你的喜好来改动GNOME 3桌面。《为GNOME 3提高生产力的2个扩展件》一文已经介绍了2个扩展件。如果安装这两个扩展件,你的GNOME外壳看起来就完全如同下面图中的外壳,应用程序选择器按钮就在顶部面板的正上方。

Linux:安装 Fedora 19 GNOME 后需做的五件事
Linux:安装 Fedora 19 GNOME 后需做的五件事

4. 安装游戏:默认安装的Fedora 19 KDE随带一批预安装的游戏,但是GNOME 3版本只随带一个游戏,就一个。不过,这不是什么问题,因为软件库里面有不止一个的GNOME 3游戏应用程序,你可以使用yum或gpk应用程序来安装。后者有一个Games(游戏)类别,所以你可以浏览该类别,找到合适的游戏后即可安装。而如果 你想安装一款热门的非免费游戏,那么还有Steam Client for Fedora,你可以借助这篇指南文章(http://www.linuxbsdos.com/2013/02/19/install-steam- client-on-fedora-18/)来安装它。

5. 启用第三方软件库:由于在任何Fedora版本中默认情况下只随带属于自由软件(Free Software)的应用程序,你需要安装第三方软件库(repos),才能享用Fedora并不随带的应用程序。你可以启用许多这样的软件库。《在Fedora 19上启用的4个第三方软件库》一文给出了值得安装的几个软件库。

原文:http://www.linuxbsdos.com/2013/07/07/5-things-to-do-after-installing-fedora-19-gnome/

译文:http://os.51cto.com/art/201307/402706.htm

 已同步至 linux的微博

Linux:一些达成共识的JavaScript编码风格约定

如果你的代码易于阅读,那么代码中bug也将会很少,因为一些bug可以很容被调试,并且,其他开发者参与你项目时的门槛也会比较低。因此,如果项目中有多人参与,采取一个有共识的编码风格约定非常有必要。与其他一些语言相比(比如Python示例),JavaScript没有一个权威的编码风格指南,取而代之的是一些流行的编码风格:

当然,在JavaScript语法检查器JSLintJSHint中也有一些默认的设置选择。问题是,什么才是终极的、让大多数开发者可以遵循的JavaScript编码风格呢?下面让我们从这6个风格指南中找出一些有共识的风格来。

代码风格

缩进

  • 两个空格,无需更长的缩进,无需Tab缩进:Google、NPM、Node.js、Idiomatic
  • Tab缩进:jQuery
  • 4个空格:Crockford

参数和表达式之间的空格

  • 使用紧凑型风格:Google、NPM、Node.js

project.MyClass = function(arg1, arg2) {

  • 过多地使用空格:Idiomatic, jQuery

for ( i = 0; i < length; i++ ) {

没有发表意见:Crockford

大部分指南中,都提醒开发者不要在语句结尾处有任何的空格。

代码行长度

  • 最多80个字符:Google、NPM、Node.js、Crockford(当在代码块中,除了2个空格外的其他缩进允许将函数参数与首个函数参数的位置对齐。另一种选择是当自动换行时使用4个空格缩进,而不是2个。)
  • 没有发表意见:jQuery、Idiomatic

分号

  • 始终使用分号,不依赖于隐式插入:Google、Node.js、Crockford
  • 在某些情况下不要使用expect:NPM
  • 没有发表意见:jQuery、Idiomatic

注释

  • 遵循JSDoc约定:Google、Idiomatic
  • 没有发表意见:NPM、Node.js、jQuery、Crockford

引号

  • 推荐单引号:Google、Node.js
  • 双引号:jQuery
  • 没有发表意见:NPM、Idiomatic、Crockford

变量声明

  • 一次声明一个,不使用逗号:Node.js

var foo = ”;var bar = ”;

  • 一次声明多个,在行结束处使用逗号分隔:Idiomatic、jQuery

var foo = “”,  bar = “”,  quux;

  • 在行开始处使用逗号:NPM
  • 没有发表意见:Google、Crockford

大括号

  • 在同一行使用左大括号:Google、NPM、Node.js、Idiomatic、 jQuery、Crockford

function thisIsBlock(){

NPM指南中指出,只在代码块需要包含下一行时使用大括号,否则不使用。

全局变量

  • 不要使用全局变量:Google、Crockford(谷歌表示,全局变量命名冲突难以调试,并可能在两个项目进行正整合时出现一些棘手的问题。为了便于共享公用的JavaScript代码,需要制定公约来避免冲突发生。Crockford认为不应该使用隐式全局变量。)
  • 没有发表意见:Idiomatic、jQuery、NPM、Node.js

命名风格

变量命名

  • 开始的第一个单词小写,之后的所有单词首字母大写:Google、NPM、Node.js、Idiomatic

var foo = “”;var fooName = “”;

常量命名

  • 使用大写字母:Google、NPM、Node.js

var CONS = ‘VALUE’;

  • 没有发表意见:jQuery、Idiomatic、Crockford

函数命名

  • 开始的第一个单词小写,之后的所有单词首字母大写(驼峰式):Google、NPM、Idiomatic、Node.js(推荐使用长的、具描述性的函数名)

function veryLongOperationNamefunction short()..

     关键字形式的函数命名:

function isReady()function setName()function getName()

  • 没有发表意见:jQuery、Crockford

阵列命名

  • 使用复数形式:Idiomatic 

var documents = [];

  • 没有发表意见:Google、jQuery、NPM、Node.js、Crockford

对象和类命名

  • 使用如下形式:Google、NPM、Node.js

var ThisIsObject = new Date;

  • 没有发表意见:jQuery、Idiomatic、Crockford

其他命名

  • 针对长文件名和配置键使用all-lower-hyphen-css-case形式:NPM

根据上述风格来配置.jshintrc文件

JSHint(http://www.jshint.com/)是一个JavaScript语法和风格检查工具,你可以用它来提醒代码风格相关的问题。它可以很好地被集成到许多常用的编辑器中,是统一团队编码风格的一个很好的工具。

你可以通过JSHint文档查看可用的选项:http://www.jshint.com/docs/#options

下面根据本文上面每个分类下的第一种风格来创建一个.jshintrc文件。你可以将它放到项目中根目录中,JSHint-avare代码编辑器将会按照它来统一项目中的所有代码风格。

{  “camelcase” : true,  “indent”: 2,  “undef”: true,  “quotmark”: single,  “maxlen”: 80,  “trailing”: true,  “curly”: true}

此外,你应该将下面的头添加到你的JavaScript文件中。

/* jshint browser:true, jquery:true */

在Node.js文件中你应该添加:

/*jshint node:true */

还可以在各种JavaScript文件中添加下面的声明:

‘use strict’;

这将影响JSHint和你的JavaScript引擎,可能不那么兼容,但是JavaScript将会运行得更快。

在提交Git之前自动执行JSHint

如果你想确保所有的JS代码与.jshintrc中定义的风格保持一致,你可以将下面的内容添加到你的.git/hooks/pre-commit文件中,当你试图提交任何新修改的文件到项目时会自动执行风格检查。

#!/bin/bash# Pre-commit Git hook to run JSHint on JavaScript files.## If you absolutely must commit without testing,# use: git commit –no-verify filenames=($(git diff –cached –name-only HEAD)) which jshint &> /dev/nullif [ $? -ne 0 ];then  echo “error: jshint not found”  echo “install with: sudo npm install -g jshint”  exit 1fi for i in “${filenames[@]}”do    if [[ $i =~ .js$ ]];    then        echo jshint $i        jshint $i        if [ $? -ne 0 ];        then            exit 1        fi    fidone

最后祝大家编码愉快!

英文原文:JavaScript, the winning style

译文:http://www.csdn.net/article/2013-07-11/2816196-JavaScript-code-style-guide

 已同步至 linux的微博

Linux:Fedora 18 在线升级至 Fedora 19 命令步骤

1.指定 yum 源,利用自带的升级工具升级。国内情况的话,建议使用 163 的源,稳定速度快。

fedup-cli –network 19 –debuglog fedupdebug.log –instrepo=http://mirrors.163.com/fedora/releases/19/Fedora/x86_64/os/

2.下载完更新包后,会提示重启,reboot 重启

3.重启后系统开始更新,按 ESC 查看更新具体过程

4.更新完进入系统清理引导和垃圾数据

fedup –resetbootloaderfedup –clean

5.更新到最新数据包

yum clean allyum distro-sync

6.清理旧的内核

package-cleanup –oldkernel –count 1

7.重装 grub2 引导程序

yum reinstall greub2*grub2-mkconfig -o /boot/grub2/grub.cfg

8.重启。升级完成。

 已同步至 linux的微博

Linux:OpenWrt——适用于路由器的Linux系统

好吧,OpenWrt是什么?它是一个适用于路由器的Linux发行版。和其他Linux发行版一样,它也内置了包管理工具,你可以从一个软件仓库里直接安装软件。OpenWrt可以用在所有需要嵌入式Linux的地方,它有众多功能,比如SSH服务器,VPN,流量整形服务,甚至是BitTorrent客户端。

OpenWrt并不适合所有人。大多数人对自己的路由器自带固件已经很满意了,但许多高级用户则会使用像DD-WRT这样的嵌入式替代方案。但OpenWrt更灵活——本质上它是一个可安装于各种路由器的嵌入式Linux系统。OpenWrt有一个web交互界面,但如果你需要的只是一个有更多特性的web界面,还有其他一些路由器固件的替代方案会让你感觉更好。

和DD-WRT一样,OpenWrt基于Linux而且比一些路由器自带的固件更稳定,要知道有些路由器一旦遇到大量连接就会比较让人捉急了。

OpenWrt的用处

在路由器上安装模块化的Linux发行版,如果这个主意一丁点儿没让你感到兴奋的话,你可能读错了文章。除了可以作路由器,我现在就列出OpenWrt其他一些比较酷的功能。

  • SSH隧道:OpenWrt包含了一个SSH服务器所以你可以访问它的终端。把它的SSH服务暴露在网络下之后(别忘了用密钥验证而非弱密码的方式给它加密),你就可以远程连接并使用SSH隧道加密访问它。这使得在国外的你可以通过公共Wi-Fi访问一些只有在国内能访问的网站。
  • 搭建VPN:SSH隧道和VPN在很多方面很相像,但你还是可以在OpenWrt路由上搭建适合自己的VPN。
  • 安装BitTorrent客户端:如果有特定的网络附加存储器(NAS),或者一个附带了USB端口的路由器和一个USB设备,你就可以把路由器当作一个BitTorrent客户端了。
  • 运行服务器软件:OpenWrt的软件源包含了可以让它作为web服务器的软件包,比如IRC server,BitTorrent tracker,等等。你可能正在使用路由器,那为什么不干脆把这台路由当作一台服务器来用?路由器耗电比计算机少得多,所以把它当作一个轻量级服务器是很聪明的做法。
  • 流量整形服务:OpenWrt让你可以对经过路由的包进行数据包整形并检测其服务质量,将合适的数据包优先分配。你甚至可以将指定数据包优先分配给指定计算机,而对分配给其他计算机的包暂缓处理。
  • 捕获并分析网络流量:你可以使用tcpdump来记录所有经由你路由器的数据包。然后可以分享到网络或者使用类似Wireshark的工具来打开它,进而分析你的网络流量与行为。

以上列出的并不完整,还差得远呢。但它应该让你开始思考OpenWrt还能做的其它事。它是个有大量软件包的嵌入式Linux系统,在许多方面它就跟计算机上的Linux系统一样灵活——虽然它对硬件的约束要高得多。

安装OpenWrt

OpenWrt最初由Linksys WRT54G开发出来,但现在它已经支持许多路由器模式。你可以在其官方网站找到这串支持的模式列表。OpenWrt的wiki同样提供了如何安装OpenWrt的说明。要注意的是,安装OpenWrt意味着你把路由器的自带固件替换成了OpenWrt操作系统。

Linux:OpenWrt——适用于路由器的Linux系统
Linux:OpenWrt——适用于路由器的Linux系统

终端及web接口

一旦OpenWrt安装好以后,你就可以通过SSH客户端(比如Windows下的PuTTY,或者Linux和Mac 里边自带的ssh命令行)访问它的BusyBox shell。BusyBox是一个在嵌入式Linux里被广泛使用的shell,OpenWrt还提供了常用程序(比如vi)以供文件编辑。和其他Linux系统一样,你可以运行许多脚本,还可以建立定时任务,按时间表执行指令。

OpenWrt使用opkg软件包管理工具从软件源中安装成千上万的包。它同样使用UCI(Unified Configuration Interface)来配置系统。OpenWrt已经置备了各种你需要的信息。

Linux:OpenWrt——适用于路由器的Linux系统
Linux:OpenWrt——适用于路由器的Linux系统

然而你并不需要懂得所有这些东西。OpenWrt有LuCI,一个用于配置你的路由器的web交互接口。这个web接口包含大量不同的配置页面,其中一个是软件包管理页面,使得你可以浏览、搜索和安装可用的软件包。 你可以安装多少包,取决于你的路由器存储空间有多大。肯定没有足够的空间让你把所有东西都安装上去,OpenWrt的模块化属性允许你选择你想要安装的特性,然后装配你的路由器操作系统。

一些软件包同样有LuCI配置页面,安装完后你可以在此很方便地配置它们。注意不是所有的软件都有LuCI界面,所以有些软件你可能不得不亲自去终端配置它们。

Linux:OpenWrt——适用于路由器的Linux系统
Linux:OpenWrt——适用于路由器的Linux系统

你是否使用过OpenWrt或者其他第三方路由器固件?你用它们来做什么?在评论里分享你的经历或者你学到的小技巧吧。

原文链接: Chris Hoffman 翻译: 极客范 – 钟益强译文链接: http://www.geekfan.net/2344/

Linux:ffmpeg 图形化界面工具 traGtor

traGtor 是 ffmpeg 的图形化界面工具,可在 Linux 下使用。traGtor 使用 Python 和 GTK+ 引擎编写。

Linux:ffmpeg 图形化界面工具 traGtor
Linux:ffmpeg 图形化界面工具 traGtor
Linux:ffmpeg 图形化界面工具 traGtor
Linux:ffmpeg 图形化界面工具 traGtor

在 Ubuntu 下的安装方法:

wget http://repository.mein-neues-blog.de:9000/PublicKeysudo apt-key add PublicKeyrm PublicKeyecho “deb http://repository.mein-neues-blog.de:9000/ /” | sudo tee -a /etc/apt/sources.listsudo apt-get updatesudo apt-get install tragtor

来自:http://www.oschina.net/p/tragtor

 已同步至 linux的微博

Linux:iptables 详细的使用指南

Linux系统中,防火墙(Firewall),网址转换(NAT),数据包(package)记录,流量统计,这些功能是由Netfilter子系统所提供的,而iptables是控制Netfilter的工具。iptables将许多复杂的规则组织成成容易控制的方式,以便管理员可以进行分组测试,或关闭、启动某组规则。

iptable能够为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。iptable只读取数据包头,不会给信息流增加负担,也无需进行验证。

1. 术语解释

DNATDestination Network Address Translation 目标网络地址转换。 DNAT是一种改变数据包目的ip地址的技术,经常和SNAT联用,以使多台服务器能共享一个ip地址连入Internet,并且继续服务。通过对同一个 ip地址分配不同的端口,来决定数据的流向。SNATSource Network Address Translation源网络地址转换。这是一种改变数据包源ip地址的技术, 经常用来使多台计算机分享一个Internet地址。这只在IPv4中使用,因为IPv4的地址已快用完了,IPv6将解 决这个问题。

2. iptable 概述

2.1. iptable的链和表结构

Linux:iptables 详细的使用指南
Linux:iptables 详细的使用指南

如上图可以看出,iptable总体结构.

2.2. 五个链(chain)

iptable_chain.png

PREROUTING在数据包进入防火墙之后、路由判断之前对数据包进行修改INPUT在数据包被路由到本地之后,但在用户空间程序看到它之前对数据包进行修改OUTPUT用户空间程序处理数据包后,由本地发出,再次被路由之前更改数据包FORWARD在最初的路由判断之后、最后一次更改包的源地址之前对数据包进行修改POSTROUTING在所有路由判断之后,对数据包进行修改

注意: 链 是每个数据包流需要经过的不同环节,你可以在不同的环节根据需要设置不同的过滤策略,每个链的默认策略都是Accept

2.3. 四个表(table)

Mangle表这个表主要用来mangle包,你可以使用mangle匹配来改变包的一些属性,比如 TOS(TYPE OF SERVICE),TTL (TIME TO LIVE),MARK(后续流量控制TC等)Nat表此表仅用于NAT,也就是转换包的源或目标地址。注意,就象我们前面说过的,只有流的第一个 包会被这个链匹配,其后的包会自动被做相同的处理(DNAT,SNAT,MASQUERADE)Filter表此表用来过滤数据包,我们可以在任何时候匹配包并过滤它们。 我们就是在这里根据包的内容对包做DROP或ACCEPT的.

iptalbe中,要用 -t 参数指定要操作哪个表,如果没有 -t 参数,就默认对filter表操作.Raw表优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

注意: 表 是规则的集合组,每个表中的规则条目是按顺序匹配的,你可以在数据包经过的不同环节设置规则,表的处理优先级:raw > mangle > nat > filter

2.4. 详细的数据包流程

Linux:iptables 详细的使用指南
Linux:iptables 详细的使用指南

从上图可以看出,数据包流环节和表的配合使用方法

3. iptable应用场景

Linux:iptables 详细的使用指南
Linux:iptables 详细的使用指南

上图是应用场景的简单拓扑描述,下面的应用场景举例,都以上图为参考.

系统启动的时候所有的默认策略都是ACCEPT,在下面的场景举例中,我们都是在这种前提下设定iptable的。下面每个场景举例都是独立的,没有相关联性的。

3.1. 网关服务器安全策略

目标 : 网关服务器系统自生安全策略,只对内网用户开放22端口(sshd服务)

#清空 filter table
[root@localhost]# iptables -F -t filter
[root@localhost]# iptables -X -t filter
[root@localhost]# iptables -Z -t filter
#清空 nat table
[root@localhost]# iptables -F -t nat
[root@localhost]# iptables -X -t nat
[root@localhost]# iptables -Z -t nat
#设置默认策略(INPUT链默认为DROP)
[root@localhost]# iptables -t filter -P INPUT DROP
[root@localhost]# iptables -t filter -P OUTPUT ACCEPT
[root@localhost]# iptables -t filter -P FORWARD ACCEPT
#回环接口(lo),默认accept
[root@localhost]# iptables -A INPUT -p ALL -i lo -j ACCEPT
#只对内网用户开放sshd服务
[root@localhost]# iptables -A INPUT -p tcp -s 192.168.138.0/24 --dport 22 -j ACCEPT

说明: 防火墙的策略顺序一般都是 从 非信任 ==> 信任,默认关闭所有访问权限,然后按照需要逐条开放访问权限.

3.2. 共享上网(nat)

目标:使局域网的用户都可以访问外网的服务器

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 

说明: SNAT 和 MASQUERADE 区别

SNAT : 不管是几个地址,必须明确的指定要SNAT的ip,适合网关服务器有固定地址或者是固定地址范围. MASQUERADE : 是针对ADSL动态拨号这种场景而设计,从服务器的网络接口上,自动获取当前ip地址来做NAT,这样就实现了动态SNAT地址转换

3.3. 内网的服务器对外服务(端口映射)

目标:使外网用户可以访问到局域网192.168.138.21这台HTTP服务

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.138.21
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

3.4. 在网关服务器进行透明代理

目标: 使局域网用户,访问外网web服务时,自动使用squid作web透明代理服务器。

[root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.138.1
[root@localhost]# iptables -t nat -A PREROUTING -s 192.168.138.0/24 -p tcp --dport 80 -i eth0 -j REDIRECT --to 3128
[root@localhost]# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
 

via http://www.linuxde.net/2013/06/14620.html 

Linux:Ubuntu 的软件的管理工具

  使用Ubuntu的第一步就是应该学会如何管理软件。以下几种方法是目前我用到的,整理一下,怕时间久了就会忘记。

一、APT命令安装

  APT全称Advanced Packaging Tool,可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Linux系统上管理软件的过程。现在Debian和其衍生发行版(如 Ubuntu)中都包含了APT。APT命令(package 为软件包名称):

  • apt-cache search package 搜索包
  • apt-cache show package 获取包的相关信息,如说明、大小、版本等
  • sudo apt-get install package 安装包
  • sudo apt-get install package –reinstall 重新安装包
  • sudo apt-get -f install 强制安装
  • sudo apt-get remove package 删除包
  • sudo apt-get remove package –purge 删除包,包括删除配置文件等
  • sudo apt-get autoremove 自动删除不需要的包
  • sudo apt-get update 更新源
  • sudo apt-get upgrade 更新已安装的包
  • sudo apt-get dist-upgrade 升级系统
  • sudo apt-get dselect-upgrade 使用 dselect 升级
  • apt-cache depends package 了解使用依赖
  • apt-cache rdepends package 了解某个具体的依赖
  • sudo apt-get build-dep package 安装相关的编译环境
  • apt-get source package 下载该包的源代码
  • sudo apt-get clean && sudo apt-get autoclean 清理下载文件的存档
  • sudo apt-get check 检查是否有损坏的依赖

  除了要了解基本的apt指令外,还需要了解下一些与APT相关的文件,具体每个文件作用如下:

  • /etc/apt/sources.list 设置软件包的获取来源
  • /etc/apt/apt.conf apt配置文件
  • /etc/apt/apt.conf.d apt的零碎配置文件
  • /etc/apt/preferences 版本参数
  • /var/cache/apt/archives/partial 存放正在下载的软件包
  • /var/cache/apt/archives 存放已经下载的软件包
  • /var/lib/apt/lists 存放已经下载的软件包详细信息
  • /var/lib/apt/lists/partial 存放正在下载的软件包详细信息

二、DPKG命令安装

  dpkg是Debian软件包管理器的基础,被用于安装、卸载和供给和.deb软件包相关的信息。dpkg本身是一个底层的工具,本身并不能从远程包仓库下载包以及处理包的依赖的关系,需要将包从远程下载后再安装。DPKG常用命令:

  • dpkg -i package.deb 安装包
  • dpkg -r package 删除包
  • dpkg -P package 删除包(包括配置文件)
  • dpkg -L package 列出与该包关联的文件
  • dpkg -l package 显示该包的版本
  • dpkg –unpack package.deb 解开 deb 包的内容
  • dpkg -S keyword 搜索所属的包内容
  • dpkg -l 列出当前已安装的包
  • dpkg -c package.deb 列出 deb 包的内容
  • dpkg –configure package 配置包

  注意:更多选项可通过 dpkg -h 查询,有些指令需要超级用户权限才能执行。

三、Synaptic Package Manager(新立得软件包管理器)

  由于synaptic是GUI界面的,没啥命令好说的,其实这个在Ubuntu里面也挺少用到的,更多的还是通过apt-get命令就可以搞定。

四、aptitude命令

  与apt类似的管理工具,在管理依赖方面相比apt要强,目前官方已经不推荐,可能是由于64位的系统安装32的库会出现问题导致的。

  除了上面讲解的几种,其实在Ubuntu安装软件过程中还是会遇到一些问题。比如:

1、如何安装下载下来是.tar.gz的软件?

  tar.gz或者.tar.bz2一般情况下都是源代码的安装包,对于此种类型的软件包,一般先要通过命令将压缩包解压,然后才能进行编译,继而进行安装。以.tar.gz格式为例,我们先要执行 tar -zxvf FileName.tar.gz 以解压软件包,然后通过执行 ./configure 来进行配置,执行 make 来进行编译,执行 sudo make install 。执行完成后,即可完成软件的编译和安装。使用 make clean 删除安装时产生的临时文件。

2、如何安装下载下来是.bin的软件?

  扩展名为.bin文件是二进制的,它也是源程序 经编译后得到的机器语言。后缀为.bin 的一般是一些商业软件。安装起来也非常的简单。第一步,进入程序目录,执行:sudo chmod +x xxx.bin,即修改文件为可执行。第二步,运行:sudo ./xxx.bin,这时程序就进去安装了。

3、如何安装下载下来是.rpm的软件?

  .rpm格式是Red Hat Package Manager的简称,是由Red Hat公司推出的,在Ubuntu上不能安装.rpm格式的软件包,一般用alien把rpm转换为deb格式后再安装。Ubuntu没有默认安装 alien,所以先安装alien,命令为:sudo apt-get install alien 然后用alien命令进行转换:sudo alien xxx.rpm 这一步以后会生成一个同名的xxx.deb文件, 然后就可以双击或者通过dpkg命令安装了。

来自:http://www.biaodianfu.com/ubuntu-soft-manage.html

 已同步至 linux的微博

Linux:我用 TypeScript 语言的七个月

  从 2012 年 12 月开始,我用 TypeScript 作为主要语言,用于一个大规模的企业项目。项目下个月要发布了,我想分享一些细节内容,包括我们团队怎么使用 TypeScript 的,还有成就项目的工作流程。

什么是 TypeScript

  TypeScript 是由微软开发的一个能够在 Node.js 上运行的开源语言和编译器。这个语言是在 ECMAScript6 基础上演化并吸收了生成 Javascript 类别和接口的一些特性。Typescript 的编译器使用 TypeScript 语言编写,并且能够在任何兼容 Javascript 的程序内运行,同时它也是作为 node.js 的一个工具包发布的。所以该语言最终生成的仍然是 Javascript 脚本。

评估

  在 2012 年十一月期间,我们发现我们所选择的开发工具和对于 Typescript 的试用确实给团队带来很多便利。起初,我们试用了 Haxe,Dart,Coffescript 等一系列语言,但是我们最终还是被拥有 ECMAScript6 特性 Javascript 编译 器:Tyepscript 打动了。我们所期望的是使用 Javascript 作为开发语言但同时又想要在我们的开发过程中注入一定的结构框架,而且希望能够依靠编辑器来进行一些纠错和验证。所以实际上我们最终还是只有在 Javascript 和 Typescript 之间作选择。在这基础上,团队作了几个小型的项目雏形,并且迅速发现了以下一些有趣的特性:

验证:Typescript 能够在编译的同时让我们验证一些代码在不同模块中的重复使用。在声明变量类型和定义语句方法的时候,我们能够很有效的对所有 call/get/set 的使用在所有模块中进行交叉验证。如果一个属性被赋给了  bbox.controls.image 类,那么在编译时只有图片实例或其子类才能够满足编译条件。

报错:Typescript 编译器能够提供非常细节的报错,如果提供额外的类和接口信息,那报错的内容会更加的详细。

轻量化:Typescript 的类和接口在编译时会蒸发的一干二净从而生成纯净的 Javascript 脚本。

ECMAS6(ES6):Typescript 在 ES6 的基础上添加了类和接口。它让我们能够利用最新的 Javascript 语法规则去编写程序同时在编译时添加 ES3,ES5 的标签,使得其能够兼容 ES3,ES5 的标准。这让代码的整理变得非常轻松。

Build process:在我们最初的检验和测试过程中,有一个部分是利用 Ant 创建一个团队进程。通过对环境的适当调试,开发者能够和 SCM(架构部署)进行同步并且建立一个拥有所有代码组件(codepakages)的本地服务器用于开发和调试。整个创建 的过程迁入了 LESS,RequireJS,Uglify2,TypeScript 模板处理和服务器的生成。

使用

  在评估之后的几个月里,我们基于 TypeScript 建立了一个稳定的团队工作流程并且从中获利良多。进程的创建(buildprocess)是我们开发过程中一个至关重要并且每天都会使用到的一个过程。基于 TypeScript,我们每天的工作流程基本上如下所述:

  • 从 SCM 进行更新
  • 运行‘antall’==>创建全部+运行本地服务器
  • 运行’antdev’或者’antts’==>增量式创建
  • 检校创建过程中的错误或者在浏览器中进行测试
  • 清理 bug 然后重复以上步骤

  我个人非常喜欢这样的运作模型,从中我发现我们花在浏览器测试阶段的时间远少于之前的 JavaScript 项目。由于 Build 过程中就已经检校了一些接口/类型/语法的错误,因此在浏览器测试阶段我们就减少了对此类错误的勘误工作量。一旦所有人都熟悉了 TypeScript 的 debugging 流程,我们大大的提高了工作效率,这是在以前的开发过程中所没有体验过的。花了 5 秒钟编译但是最终却删除了整一个没有运作的毫无意义类听起来有点不能接受。这种防患于未然的 debugging 方式节省我们大约 2 个月的时间,而且代码的质量也大大提高了。

  当初在我们进行开发的时候,TypeScript 定义文件的质量和内容不是非常理想。定义文件能够让你非常安全的从外部定义 JavaScript 的接口类型,但这样做你的代码必须在编译时完全遵照定义文件。自从这个项目开始之际,我们借 DefinitelyTyped 项目为一些主要的或者非主要的 JavaScript 库编写润饰了 180 个定义。小组最后在创建进程时使用了关于 Require,JQuery,Backbone,Bootstrap,Underscore 和 EaselJS 的定义文件。现在为TypeScript添加定义文件,你只要在你的 main.ts 文件中添加一下的代码就可以了。

  根据同样的方法你也可以向 TypeScript 中添加一些外部库。某种程度上来说定义文件,接口和 TypeScript 的类的运作方式是类似的。为了简化我们创建进程的过程,我们将这些调用过程全部综合到一个 init.ts 文件中,这样当编译器工作的时候就可以自动载入所有该应用所需要 TypeScript 代码。哪怕是那些本需要通过先调用模块才能调用的类也能在这里被调用表达,这样这些类就会在编译时预先在外部生成一个模块文件以供使用。注意这个外部模块的代码中”exportClass”的语法,它会告诉编译器将文件视为一个外部模块进行调用,而编译器标识 ”-moduleamd” 会使得编译器将模块编排成 AMD 或者 CommonJS 的格式

Linux:我用 TypeScript 语言的七个月
Linux:我用 TypeScript 语言的七个月

  除此之外,TypeScript 还有另外一个很优雅整合代码的功能。每一个类和变量都被输出到浏览器窗口实体之外的一个路径里以供全局访问。我们使用了 bbox 作为所有类和变量的命名空间,同时提供了输入时的支持,你也可以便捷的为你自己的应用建立一个良好命名空间。以上的模块包含在 了”bbox.controls”里并且在运行时可以发现它被输出到了 bbox.controls,Bounds 中。考虑到我们有用到大约 60 多个类,我们最大化的使用了这个模块系统并且在开发过程中使用的非常顺利。你可以遵照这个方法自由的导出和类别化你自己的变量或者所有的类,而不需要让所有的变量都归属于某个类。由于提供了类别和权限的限制,类别化输出的变量对于模块内单一的变量非常适用。随着类别和模块的介入,你使用 JavaScript 的方式也会有所改变,并且很难形成比较差的实践方式。随着一个能够监测到通过数组或者一个很特殊的类别重写了某实体的高级编译器,你可以一不同的方式利用 JavaScript 进行开发,TypeScript 作为一种语言有着它独特的工作模式。它已经不完全是 JavaScript 了,但全包含了 JavaScript 原有的所有特性。

  通过一系列的开发实践我发祥我自己已经通过对代码的重构实现了开发策略的转换。由于有时需检查在不同部分受到修改影响的代码,我开始在有意识的改变变量类别,接口和命名空间等方面相信编译器本身的行为。在编译之后我才会修改结果,并且根据需要进行代码的重构。这在很多方面都使我能够很有效处理较大的代码量。编译器为我省去了很多 debugging 的负担。

Linux:我用 TypeScript 语言的七个月
Linux:我用 TypeScript 语言的七个月

  至于我的开发环境,尽管其他团对成员选择了 Jetbrians,我依然选择了 sublimetext2+TypeScirpt 语法高亮。毫无异议, 我发觉即使没有自动完成的功能,sublime 依然能提供很好的 TypeScript 开发环境。由于 TypeScript 编译器本身就有着增量式的编译功能和丰富的 IDE 整合功能,可能需要更多的时间来证明到底 Sublime/Edge/Jetbrains 哪一个才是最适合的开发工具。

  最后,当我爱上使用 TypeScript 的同时(当然,我也会继续用下去),我发现了一个令人望而生畏的地方。有很多次,当你一头扎进编译环境中,编译器却由于输入信息不可用而阻止你调用一个方法或者变量。每当这时,我们发现只有我们手动修复 bug 时,利用关联数组语法 (associativearraysyntax)去解决这个问题。比如:无论什么样的分类形 式,foo[‘myProperty’]foo[‘myMethod’]() 应该能够让你介入 foo 的 myProperty 和 myMethod 属性。这看起来有一些不可思议,但只要记住随时可能用到关联数组语法 (associativearraysyntax)就万事大吉了,你总有需要它的地方。

最后附上一些项目开发过程中的总结数据:

  • 63 个 typescript 类
  • 12 个运行库(libs)(Underscore,Require,Bootstrap,Jquery,Backbone,EaselJS…)
  • 一次创建所有进程,用时 8 秒
  • 一次创建所有开发进程,用时 5 秒
  • 149Kb 大小的运行库文件和 411Kb 大小的类文件

总结

  在过去 7 个月里用 TypeScript 做开发是一件非常愉快的事情。在之前的开发经验里,我使用过 ActionScript/ES4,但由于有着相似的结构,我很快就适应了 TypeScript,同时保持了 JavaScript 优雅的代码便捷性。在很多方面,我发现对于 TypeScript 的使用,的确使我们在团队代码质量和截止日期上有了很大提升。我不认为我是微软的死忠,但是 TypeScript 确实使我眼前一亮。它是过去三年里我所接触的最好的也是比较容易接受的一个网页开发的工具。我期待在未来能够在更多的项目中用到, 并且能够参与到该语言/编译器的开发中去。

  这周我将会在旧金山的 Build 去了解 TypeScript0.9 的一些特性,下个月我会在 Senchacon360Stack

  我爱 TypeScript!

来自:http://blog.jobbole.com/43675/

 已同步至 linux的微博

Linux:女孩子学Linux之硬盘分区篇

前言

本文在上篇《让女孩子更快学会Linux的方法与建议》基础上,笔者将着重为女孩子们介绍硬盘分区的知识,以及如何在Linux系统安装中如何进行手动分区(以虚拟机安装为例)。

Windows的硬盘分区

日常生活中,我们常常听到有C盘,D盘这样的说法。现在请打开你的Windows桌面上”计算机”或”我的电脑”图标,就会出现”本地磁盘C”、”本地磁盘D”等一系列图标。那么,这些图标都代表着什么呢?又为神马从C,D开始,A,B盘又去了哪里?笔者接下来会进行详细介绍,姐妹们不要着急哦!

大多数人都知道,硬盘是电脑中最大的数据存储区域,它可以存储海量的数据。你电脑上的操作系统,软件,游戏,电影等等全部存放在里面。面对这么多数据,需要一种有效的机制来管理它们。硬盘分区便应运而生了。

所谓硬盘分区,也就是用软件方式,把硬盘分为数块互相独立的区域,每块区域可以用不同的格式来管理文件(称之为文件系统)。例如Windows使用FAT、NTFS文件系统,Linux使用ext3,ext4,btrfs,XFS等文件系统。需要注意的是,由于Linux系统的开放特性,它可以使用世界上几乎所有种类的文件系统。文件系统可以通过操作系统内置工具来进行创建(Windows下通常称为”格式化”)。使用方法请自行查阅资料。因篇幅有限,本文不再赘述。

有了硬盘分区,操作系统应该如何使用它们呢?常见的Windows系统用拉丁字母C,D,E…对硬盘分区依次编号,称为盘符。第一个分区定为C盘,第二个分区定为D盘……依次类推。

你一定会感到奇怪,A,B盘为什么不存在?其实在电脑发展的早期,存在一种叫软盘的存储设备,其功能类似于我们现在用的U盘。只是容量小得多,读写速度也慢的多…那个时候,A盘代表软盘驱动器1,B盘代表软盘驱动器2。C开始才代表硬盘。后来随着时代发展,软盘退出了我们的视野,但以C盘作为代表第一个硬盘分区的传统保留到现在的Windows中。A,B盘便看不到了。

Linux的硬盘分区

好了,现在我们进入正题,来讲述一下Linux的硬盘分区知识。

Linux的硬盘分区调度方式有别于Windows,没有盘符的概念。而把所有的硬盘分区都”挂载”在系统的目录树上,方可进行读写目录树顶端的”/”,称为根分区,其作用相当于Windows下的C盘,存放所有Linux系统下的相关程序文件。根分区下面,有bin,boot,dev,home等一系列目录,存放的是Linux系统中不同用途的文件。这些目录既可以依附在根分区下面,也可以映射到一个独立的Linux分区。建立或取消这种目录与硬盘分区的映射关系的操作,便称为挂载/卸载。

这里笔者提醒大家一下:如果一个目录中原来有内容,现将某个硬盘分区挂载到此目录的话,那么此目录中只会显示挂载上去的硬盘分区中内容,原有内容须将分区卸载后方可显示。

讲到这里,姐妹们一定很关心:我如何在安装Linux过程中进行硬盘分区操作呢?笔者以新建的虚拟机硬盘(其上没有任何数据,可以理解为一块刚买来的硬盘)为例进行讲解。笔者分配的虚拟硬盘大小为30GB。

嗯,现在启动你的虚拟机。安装程式开始之后,经过几步无关紧要的步骤,一路“下一步”以后,出现了选择分区方式的界面。

选项有“自动使用整个硬盘安装”,“自动使用未分区空间安装”,“进行手动分区”。虽然眼下主流Linux发行版均提供了完善的自动分区机制,但我们为了学习,还是进行手动分区好了。

选择手动分区,点击“下一步”。这时会出现一个提示,大意为在这块硬盘上找不到可用分区表,是否清除所有数据来创建一个新的分区表?请放心地点“确定”,因为这里的虚拟硬盘与你电脑上主硬盘是相互独立的,不会妨碍到你硬盘上的珍贵数据。

接下来出现一个“未分区空间”的灰条,大小为30GB。请选中这个灰条,点击“创建新分区”,在“挂载点”栏选择“/”,大小输入15000MB(约15GB),文件系统选择ext4,其他栏目不用管,点击“确定”。好了,我们创建了一个大小为15GB的分区,作为Linux系统的安装分区。

接下来,请再次按以上步骤创建一个分区,大小输入1000或2000MB(1~2GB),文件系统选择swap,挂载点不填,确定。现在创建的是交换分区,功能类似于Windows下的虚拟内存,可以保证你一旦物理内存用尽,还能继续使用电脑(只是速度很慢)。

再接再厉,我们继续创建一个个人数据分区,大小设为剩余所有空间(一般情况下不需要手动输入),文件系统选择ext4,挂载点选择/home,确定。大功告成啦!!分区步骤已结束,单击下一步,按提示进行格式化分区。最后按提示完成所有安装步骤即可!

后记

关于硬盘分区的知识,笔者就先讲到这里。各位姐妹们是否明白了呢?不管怎么说吧,笔者也是付出了辛劳的。各位是不是考虑给点掌声呢!O(∩_∩)O~ruojiner2013.07.19完稿

 

 

本文源地址: http://ruojiner.clanmark.com/viewtopic.php?id=206  

注意:由于网站带来过大压力,不允许任何个人和组织将文章分享到人人等社交平台,否则责任自负。:> 

 已同步至 linux的微博

来源:https://linux.cn/article-1666-1.html

Linux:显示日历信息的命令 cal 和 ncal

  Linux 里内置两个用来显示和校准日历的命令 cal 和 ncal。一旦你习惯使用它们,你会发现使用命令很多时候都比你运用鼠标在 GUI 的日历里查看要来的更迅速和方便。命令行下,有许多参数,这些参数能完成您所需要的所有关于日历的需求,目前来说,我还没有发现我需要显示的一种日历的需求是它没有的,哈。

  下面,我就来和大家一起学习学习这些命令,这些命令我都在 Ubuntu Linux 日常使用:

问1、如何显示当前月份的信息

答:直接使用 cal 命令就可以,不需要添加任何参数

$ cal
     July 2013
Su Mo Tu We Th Fr Sa
    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

  当然,您使用 ncal 也会得到同样的效果:

$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27

  您可以看到整个当前月份的日历,当天日期是高亮显示的,您可以使用 -h 参数来关闭高亮。

问2、如何竖向排列日期

答:使用 ncal 命令同时添加 -J 参数

$ ncal -J
    July 2013
Su  1  8 15 22 29
Mo  2  9 16 23 30
Tu  3 10 17 24 31
We  4 11 18 25
Th  5 12 19 26
Fr  6 13 20 27
Sa  7 14 21 28

问3、想查询复活节日期

答:使用 ncal 命令添加 -e 参数

$ ncal -e
31 March 2013

问4、怎么显示 Julian 日历

答:使用 cal 命令添加 -j 参数

$ cal -j
         July 2013
 Su  Mo  Tu  We  Th  Fr  Sa
    182 183 184 185 186 187
188 189 190 191 192 193 194
195 196 197 198 199 200 201
202 203 204 205 206 207 208
209 210 211 212

问5、如何显示指定月份日历

答:使用 cal 命令添加 -m 参数和月份

$ cal -m1
    January 2013
Su Mo Tu We Th Fr Sa
       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

  默认情况下,您添加的 -m参数和月份为当年的月份,如果您希望看到指定的某个年的月份,您可以在后面添加四位数字的年份。

$ cal -m1 1999
    January 1999
Su Mo Tu We Th Fr Sa
                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

问6、如何同时显示前一个月本月和下一个月三个月的日历

答:使用 cal 命令添加 -3 参数

$ cal -3
     June 2013             July 2013            August 2013
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                   1      1  2  3  4  5  6               1  2  3
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10
 9 10 11 12 13 14 15  14 15 16 17 18 19 20  11 12 13 14 15 16 17
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30 31
30

  同样道理,您可以查看任意三个月的日历:

$ cal -3 -m3 1984
   February 1984           March 1984            April 1984
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
          1  2  3  4               1  2  3   1  2  3  4  5  6  7
 5  6  7  8  9 10 11   4  5  6  7  8  9 10   8  9 10 11 12 13 14
12 13 14 15 16 17 18  11 12 13 14 15 16 17  15 16 17 18 19 20 21
19 20 21 22 23 24 25  18 19 20 21 22 23 24  22 23 24 25 26 27 28
26 27 28 29           25 26 27 28 29 30 31  29 30

问7、如何显示orthodox Easter 的信息

答:使用 ncal 命令添加 -o 参数

$ ncal -o
 5 May 2013

问8、如何显示国家代码

答:使用 ncal 命令添加 -p 参数

$ ncal -p
 AL Albania        1912-11-30      IT Italy          1582-10-04
 AT Austria        1583-10-05      JP Japan          1918-12-18
 AU Australia      1752-09-02      LI Lithuania      1918-02-01
 BE Belgium        1582-12-14      LN Latin          9999-05-31
 BG Bulgaria       1916-03-18      LU Luxembourg     1582-12-14
 CA Canada         1752-09-02      LV Latvia         1918-02-01
 CH Switzerland    1655-02-28      NL Netherlands    1582-12-14
 CN China          1911-12-18      NO Norway         1700-02-18
 CZ Czech Republic 1584-01-06      PL Poland         1582-10-04
 DE Germany        1700-02-18      PT Portugal       1582-10-04
 DK Denmark        1700-02-18      RO Romania        1919-03-31
 ES Spain          1582-10-04      RU Russia         1918-01-31
 FI Finland        1753-02-17      SI Slovenia       1919-03-04
 FR France         1582-12-09      SW Sweden         1753-02-17
 GB United Kingdom 1752-09-02      TR Turkey         1926-12-18
 GR Greece         1924-03-09     *US United States  1752-09-02
 HU Hungary        1587-10-21      YU Yugoslavia     1919-03-04
 IS Iceland        1700-11-16

问9、如何按自然月显示周信息

答:使用 ncal 命令添加 -w 参数

$ ncal -w
    July 2013
Su     7 14 21 28
Mo  1  8 15 22 29
Tu  2  9 16 23 30
We  3 10 17 24 31
Th  4 11 18 25
Fr  5 12 19 26
Sa  6 13 20 27
   26 27 28 29 30

  最下面的一行是下个月的信息。

问10、怎么一下查看全年的日历

答:使用 ncal 命令添加 -y 参数和 四位数的年份

$ ncal -y 2010
                                  2010
    January           February          March             April
Su     3 10 17 24 31     7 14 21 28        7 14 21 28        4 11 18 25
Mo     4 11 18 25     1  8 15 22        1  8 15 22 29        5 12 19 26
Tu     5 12 19 26     2  9 16 23        2  9 16 23 30        6 13 20 27
We     6 13 20 27     3 10 17 24        3 10 17 24 31        7 14 21 28
Th     7 14 21 28     4 11 18 25        4 11 18 25        1  8 15 22 29
Fr  1  8 15 22 29     5 12 19 26        5 12 19 26        2  9 16 23 30
Sa  2  9 16 23 30     6 13 20 27        6 13 20 27        3 10 17 24
    May               June              July              August
Su     2  9 16 23 30     6 13 20 27        4 11 18 25     1  8 15 22 29
Mo     3 10 17 24 31     7 14 21 28        5 12 19 26     2  9 16 23 30
Tu     4 11 18 25     1  8 15 22 29        6 13 20 27     3 10 17 24 31
We     5 12 19 26     2  9 16 23 30        7 14 21 28     4 11 18 25
Th     6 13 20 27     3 10 17 24        1  8 15 22 29     5 12 19 26
Fr     7 14 21 28     4 11 18 25        2  9 16 23 30     6 13 20 27
Sa  1  8 15 22 29     5 12 19 26        3 10 17 24 31     7 14 21 28
    September         October           November          December
Su     5 12 19 26        3 10 17 24 31     7 14 21 28        5 12 19 26
Mo     6 13 20 27        4 11 18 25     1  8 15 22 29        6 13 20 27
Tu     7 14 21 28        5 12 19 26     2  9 16 23 30        7 14 21 28
We  1  8 15 22 29        6 13 20 27     3 10 17 24        1  8 15 22 29
Th  2  9 16 23 30        7 14 21 28     4 11 18 25        2  9 16 23 30
Fr  3 10 17 24        1  8 15 22 29     5 12 19 26        3 10 17 24 31
Sa  4 11 18 25        2  9 16 23 30     6 13 20 27        4 11 18 25

问11、如何显示某个月和某个月前几个月和后几个月的日历

答:使用 cal 命令添加 -m -B -A 参数和月个数

$ cal -m4 -B2 -A2
   February 2013           March 2013            April 2013
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
                1  2                  1  2      1  2  3  4  5  6
 3  4  5  6  7  8  9   3  4  5  6  7  8  9   7  8  9 10 11 12 13
10 11 12 13 14 15 16  10 11 12 13 14 15 16  14 15 16 17 18 19 20
17 18 19 20 21 22 23  17 18 19 20 21 22 23  21 22 23 24 25 26 27
24 25 26 27 28        24 25 26 27 28 29 30  28 29 30
                      31
      May 2013             June 2013
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
          1  2  3  4                     1
 5  6  7  8  9 10 11   2  3  4  5  6  7  8
12 13 14 15 16 17 18   9 10 11 12 13 14 15
19 20 21 22 23 24 25  16 17 18 19 20 21 22
26 27 28 29 30 31     23 24 25 26 27 28 29
                      30

  显示结果上,您可以看出,我们想显示 4 月份和 4 月份前两个月和后两个月的日历。如果您想显示指定年份的日历同时在显示年份前后的几个月,那么直需要在添加 -y 参数和四位数的年份即可:

$ cal -y 2012 -B2 -A2
   November 2011         December 2011          January 2012
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
       1  2  3  4  5               1  2  3   1  2  3  4  5  6  7
 6  7  8  9 10 11 12   4  5  6  7  8  9 10   8  9 10 11 12 13 14
13 14 15 16 17 18 19  11 12 13 14 15 16 17  15 16 17 18 19 20 21
20 21 22 23 24 25 26  18 19 20 21 22 23 24  22 23 24 25 26 27 28
27 28 29 30           25 26 27 28 29 30 31  29 30 31
   February 2012           March 2012            April 2012
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
          1  2  3  4               1  2  3   1  2  3  4  5  6  7
 5  6  7  8  9 10 11   4  5  6  7  8  9 10   8  9 10 11 12 13 14
12 13 14 15 16 17 18  11 12 13 14 15 16 17  15 16 17 18 19 20 21
19 20 21 22 23 24 25  18 19 20 21 22 23 24  22 23 24 25 26 27 28
26 27 28 29           25 26 27 28 29 30 31  29 30
      May 2012             June 2012             July 2012
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
       1  2  3  4  5                  1  2   1  2  3  4  5  6  7
 6  7  8  9 10 11 12   3  4  5  6  7  8  9   8  9 10 11 12 13 14
13 14 15 16 17 18 19  10 11 12 13 14 15 16  15 16 17 18 19 20 21
20 21 22 23 24 25 26  17 18 19 20 21 22 23  22 23 24 25 26 27 28
27 28 29 30 31        24 25 26 27 28 29 30  29 30 31
    August 2012          September 2012         October 2012
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
          1  2  3  4                     1      1  2  3  4  5  6
 5  6  7  8  9 10 11   2  3  4  5  6  7  8   7  8  9 10 11 12 13
12 13 14 15 16 17 18   9 10 11 12 13 14 15  14 15 16 17 18 19 20
19 20 21 22 23 24 25  16 17 18 19 20 21 22  21 22 23 24 25 26 27
26 27 28 29 30 31     23 24 25 26 27 28 29  28 29 30 31
                      30
   November 2012         December 2012          January 2013
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3                     1         1  2  3  4  5
 4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12
11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19
18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26
25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30 31
                      30 31
   February 2013
Su Mo Tu We Th Fr Sa
                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

  从结果上我们看到,除了 2012 年整年外,我们还能看到 2011 年最后俩月和 2013 年前俩月的日历。

问12、如何让 ncal 命令显示成  cal 命令的结果

答:可以使用 -C 参数来完成这一点

$ ncal
    July 2013
Su     7 14 21 28
Mo  1  8 15 22 29
Tu  2  9 16 23 30
We  3 10 17 24 31
Th  4 11 18 25
Fr  5 12 19 26
Sa  6 13 20 27
$ cal
     July 2013
Su Mo Tu We Th Fr Sa
    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
$ ncal -C
     July 2013
Su Mo Tu We Th Fr Sa
    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

  同样,你可以使用 -N 参数来让 cal 命令看起来和 ncal 一样:

$ cal
     July 2013
Su Mo Tu We Th Fr Sa
    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
$ ncal
    July 2013
Su     7 14 21 28
Mo  1  8 15 22 29
Tu  2  9 16 23 30
We  3 10 17 24 31
Th  4 11 18 25
Fr  5 12 19 26
Sa  6 13 20 27
$ cal -N
    July 2013
Su     7 14 21 28
Mo  1  8 15 22 29
Tu  2  9 16 23 30
We  3 10 17 24 31
Th  4 11 18 25
Fr  5 12 19 26
Sa  6 13 20 27

问13、如何让日历显示成以周一为每周第一天的样子

答:使用 ncal 命令添加 -M 参数即可

$ ncal -M
    July 2013
Mo  1  8 15 22 29
Tu  2  9 16 23 30
We  3 10 17 24 31
Th  4 11 18 25
Fr  5 12 19 26
Sa  6 13 20 27
Su  7 14 21 28

  还有一个 -S 参数,可以按周日为第一天来显示

问14、如何切换 ncal 命令为以前的显示方式

答:使用 ncal 命令添加 -b 参数

$ ncal
    July 2013
Su     7 14 21 28
Mo  1  8 15 22 29
Tu  2  9 16 23 30
We  3 10 17 24 31
Th  4 11 18 25
Fr  5 12 19 26
Sa  6 13 20 27
$ ncal -b
     July 2013
Su Mo Tu We Th Fr Sa
    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

cal 和 ncal 命令的一些其他相关信息

  虽然我们可以查看这两个的命令的 man page 来得到更多的信息,不过在这里,我还有一些其他信息要告诉大家。需要指定年份的时候,我们需要四位数的年份。不是所有的参数都可以同时使用的,比如 -y, -3, -1 他们之间是冲突的,如果同时使用,后面的参数会覆盖掉前面的参数。

 已同步至 linux的微博

来源:https://linux.cn/article-1667-1.html

Linux:linux中强大且常用命令:find、grep

在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下:

  • find命令
    • find命令的一般形式
    • find命令的常用选项及实例
    • find与xargs
  • grep命令
    • grep命令的一般形式
    • grep正则表达式元字符集(基本集)
    • grep命令的常用选项及实例

1、find命令

find命令是一个无处不在命令,是linux中最有用的命令之一。find命令用于:在一个目录(及子目录)中搜索文件,你可以指定一些匹配条件,如按文件名、文件类型、用户甚至是时间戳查找文件。下面就通过实例来体验下find命令的强大。

1.1、find命令的一般形式

man文档中给出的find命令的一般形式为:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]

其实[-H] [-L] [-P] [-D debugopts] [-Olevel]这几个选项并不常用(至少在我的日常工作中,没有用到过),上面的find命令的常用形式可以简化为:

find [path…] [expression]

  • path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
  • expression:expression可以分为——“-options [-print -exec -ok …]”
    • -options,指定find命令的常用选项,下节详细介绍
    • -print,find命令将匹配的文件输出到标准输出
    • -exec,find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ {  } ;,注意{   }和;之间的空格 find ./ -size 0 -exec rm {} ; 删除文件大小为零的文件 (还可以以这样做:rm -i `find ./ -size 0`  或 find ./ -size 0 | xargs rm -f &) 
    • 为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中:find . -type f -exec ls -l {  } ; 在/logs目录中查找更改时间在5日以前的文件并删除它们:find /logs -type f -mtime +5 -exec rm {  } ;
    • -ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 find . -name “*.conf”  -mtime +5 -ok rm {  } ; 在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示

也有人这样总结find命令的结构:

find start_directory      options      criteria_to_match      action_to_perform_on_results

1.2、find命令的常用选项及实例

  • -name 按照文件名查找文件。 find /dir -name filename  在/dir目录及其子目录下面查找名字为filename的文件 find . -name “*.c” 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
  • -perm 按照文件权限来查找文件。 find . -perm 755 –print 在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
  • -prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。 find /apps -path “/apps/bin” -prune -o –print 在/apps目录下查找文件,但不希望在/apps/bin目录下查找 find /usr/sam -path “/usr/sam/dir1” -prune -o –print 在/usr/sam目录下查找不在dir1子目录之内的所有文件
  • -user 按照文件属主来查找文件。 find ~ -user sam –print 在$HOME目录中查找文件属主为sam的文件
  • -group 按照文件所属的组来查找文件。 find /apps -group gem –print 在/apps目录下查找属于gem用户组的文件 
  • -mtime -n +n 按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。 find / -mtime -5 –print 在系统根目录下查找更改时间在5日以内的文件 find /var/adm -mtime +3 –print 在/var/adm目录下查找更改时间在3日以前的文件
  • -nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。 find / –nogroup -print
  • -nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。 find /home -nouser –print
  • -newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
  • -type 查找某一类型的文件,诸如: b – 块设备文件。 d – 目录。 c – 字符设备文件。 p – 管道文件。 l – 符号链接文件。 f – 普通文件。 find /etc -type d –print 在/etc目录下查找所有的目录 find . ! -type d –print 在当前目录下查找除目录以外的所有类型的文件 find /etc -type l –print 在/etc目录下查找所有的符号链接文件
  • -size n: 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 find . -size +1000000c –print 在当前目录下查找文件长度大于1 M字节的文件 find /home/apache -size 100c –print 在/home/apache目录下查找文件长度恰好为100字节的文件 find . -size +10 –print 在当前目录下查找长度超过10块的文件(一块等于512字节)
  • -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 find / -name “CON.FILE” -depth –print 它将首先匹配所有的文件然后再进入子目录中查找 
  • -mount:在查找文件时不跨越文件系统mount点。  find . -name “*.XC” -mount –print 从当前目录开始查找位于本文件系统中文件名以XC结尾的文件(不进入其他文件系统)
  • -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

1.3、find与xargs

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

来看看xargs命令是如何同find命令一起使用的,并给出一些例子。

find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

find / -name “core” -print | xargs echo “” >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

find . -type f -print | xargs grep “hostname” 用grep命令在所有的普通文件中搜索hostname这个词

find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} ;)

find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件

find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

2、grep命令

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

2.1、grep命令的一般选项及实例

grep [OPTIONS] PATTERN [FILE…] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

grep命令用于搜索由Pattern参数指定的模式,并将每个匹配的行写入标准输出中。这些模式是具有限定的正则表达式,它们使用ed或egrep命令样式。如果在File参数中指定了多个名称,grep命令将显示包含匹配行的文件的名称。对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), ) 出现在 Pattern参数中时必须带双引号。如果 Pattern参数不是简单字符串,通常必须用单引号将整个模式括起来。在诸如 [a-z], 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定一个范围。整理序列可以定义等价的类以供在字符范围中使用。如果未指定任何文件,grep会假定为标准输入。

2.2、grep正则表达式元字符集(基本集)

^  锚定行的开始 如:’^grep’匹配所有以grep开头的行。

$  锚定行的结束 如:’grep$’匹配所有以grep结尾的行。

.   匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。

*  匹配零个或多个先前字符 如:’ *grep’匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[] 匹配一个指定范围内的字符,如'[Gg]rep’匹配Grep和grep。

[^]  匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep’匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。

(..)  标记匹配字符,如:'(love)’,love被标记为1。

<  锚定单词的开始,如:'

>  锚定单词的结束,如’grep>’匹配包含以grep结尾的单词的行。

x{m} 连续重复字符x,m次,如:’o{5}’匹配包含连续5个o的行。

x{m,} 连续重复字符x,至少m次,如:’o{5,}’匹配至少连续有5个o的行。

x{m,n} 连续重复字符x,至少m次,不多于n次,如:’o{5,10}’匹配连续5–10个o的行。

w  匹配一个文字和数字字符,也就是[A-Za-z0-9],如:’Gw*p’匹配以G后跟零个或多个文字或数字字符,然后是p。

W  w的反置形式,匹配一个非单词字符,如点号句号等。W*则可匹配多个。

b  单词锁定符,如: ‘bgrepb’只匹配grep,即只能是grep这个单词,两边均为空格。

2.3、grep命令的常用选项及实例

-?

同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

-b,–byte-offset

打印匹配行前面打印该行所在的块号码。

-c,–count

只打印匹配的行数,不显示匹配的内容。

-f File,–file=File

从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。

-h,–no-filename

当搜索多个文件时,不显示匹配文件名前缀。

-i,–ignore-case

忽略大小写差别。

-q,–quiet

取消显示,只返回退出状态。0则表示找到了匹配的行。

-l,–files-with-matches

打印匹配模板的文件清单。

-L,–files-without-match

打印不匹配模板的文件清单。

-n,–line-number

在匹配的行前面打印行号。

-s,–silent

不显示关于不存在或者无法读取文件的错误信息。

-v,–revert-match

反检索,只显示不匹配的行。

-w,–word-regexp

如果被引用,就把表达式做为一个单词搜索。

-V,–version

显示软件版本信息。

=====

ls -l | grep ‘^a’ 通过管道过滤ls -l输出的内容,只显示以a开头的行。

grep ‘test’ d* 显示所有以d开头的文件中包含test的行。

grep ‘test’ aa bb cc 显示在aa,bb,cc文件中匹配test的行。

grep ‘[a-z]’ aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

grep ‘w(es)t.*’ aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用””号进行转义,直接写成’w(es)t.*’就可以了。

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写

grep -l pattern files :只列出匹配的文件名,

grep -L pattern files :列出不匹配的文件名,

grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),

grep -C number pattern files :匹配的上下文分别显示[number]行,

grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,

grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

 

参考文献:

——借此感谢在实习公司同事们给与的帮助,

特别是Jay、Jeff。

 

 

作者:吴秦出处:http://www.cnblogs.com/skynet/

Linux:如何在Ubuntu安装AMD私有驱动?

  如果你的电脑上有AMD或是nVidia的显卡,你就拥有了很棒的图形处理能力。然而,这些图形供应商对自己产品的秘密都不喜欢公开,包括他们的专有驱动。

  Ubuntu和其他Linux发行版都使用的是开源驱动。那这两者的差别在哪呢?如何在Ubuntu中安装专有驱动?

二者差别

  决定使用开源驱动还是专有驱动可能比你想的还要重要一些。首先,专有驱动的性能远高于前者,因为专有驱动是由AMD开发的,而不是一群能拿到显卡构造图的开源开发者。其次,专有驱动的电源管理也要好的多。

  但是,如果驱动出了点问题,Ubuntu开发者自己就可以轻易修复问题并更新电脑。而如果是AMD专有图形驱动,你只能等AMD回应你再来修复问题了。大 多数时候,如果你想拥有最佳性能且节省最多能源,专有驱动肯定是不二选择,当你是个疯狂玩家或有其他高性能需求时尤其如此。

  安装专有驱动有几种不同的方法,这里我提供一个简单的和一个稍微有点难的方法,前者不能保证安装的是最新的版本,后者则能让你运行最新的驱动。

简单方法

  在Ubuntu最新发行版Raring Ringtail 中,你得多点几步才能到达“附加驱动”的地方,在这里你可以轻易从Ubuntu的源里找到所有系统可用的专有驱动。现在就打开Dash,键入 “Software & Updates”,点击出现的应用图标再点击“附加驱动”的标签。

  在这个标签里,除了自己的显卡信息,你还能看到三个选项:开源驱动,fglrx专有驱动,以及fglrx-updates专有驱动。后两者的区别在于当 Ubuntu13.04发布时fglrx驱动是当时最新的版本。而fglrx-updates驱动则只要AMD发布了新版本就会自己升级到最新版本。

  这两个你可以任选一个,点击应用,待安装完毕后重启,你就已经用上了专有驱动了,体验下3D性能的提升吧!

稍难方法

  AMD发布新版本时fglrx-updates驱动就会自动升级,但其实并不总是这样,因为Ubuntu的源的更新老是会有延迟。所以,你可以自己安装指定版本的专有驱动。

  准备开始吧,在终端敲入以下命令:

sudo apt-get install build-essential cdbs dh-make dkms execstack dh-modaliases linux-heade

  如果你的Ubuntu是64位版本,你还需要这个命令:

sudo apt-get install lib32gcc1

  这两条命令为下一步创建驱动包部署了必需的环境。

  然后,去AMD的驱动页面,下载适合你显卡的驱动以及32或是64位的Ubuntu版本。下载完毕后,从 .zip文件中解压出 .run 文件,打开 .run文件的属性并将其设置为可执行。

  下一步,打开终端,使用 cd 命令进入 .run文件所在文件夹(比如 cd Downloads/ ),然后运行以下命令:

sudo sh ./amd-catalyst-version-here-and-such.run –buildpkg Ubuntu/raring

  当然了你得把相应文件名替换进去。如果你使用的不是Ubuntu13.04,你需要用适当的名字替换掉 raring 。

  当这句命令完毕时你就得到了几个 .deb文件。接下来运行

sudo dpkg -i fglrx*.deb

  这个命令会安装所有创建出来的包。完成后,你还得运行一个命令来正确安装新驱动:

sudo amdconfig –initial -f

  现在重启电脑,一切搞定!如果你想升级驱动,只要重复以上步骤就好了,从下载驱动开始,到 sudo dpkg -i fglrx*.deb。

总结

  长远来看,专有驱动确实更好,AMD的Linux驱动却一直有点麻烦。然而以上这些技巧足以安装并让它们发挥作用。既然在Linux玩游戏已经越来越流行,知道如何安装专有驱动也变得重要起来。如果你使用的是其他发行版比如Fedora,你可能得去看旧一点的说明

  如果你是Ubuntu新手,看一看我们的Ubuntu新手指导吧!

  你在Linux使用过专有驱动吗?如果没有,为什么你还坚守开源驱动?在评论里留言吧!

原文:Danny Stieben

译文:http://www.geekfan.net/2611/

 已同步至 linux的微博

Linux:Linux系统管理员不可不知的命令:sudo

  sudo是个统管一切的命令。它的字面意思是代表“超级用户才能做!”(super user do!)对Linux系统管理员或高级用户而言,它是必不可少的最重要的命令之一。你可曾有过这样的经历:在终端中试着运行某个命令,结果却遇到“拒绝访问”?这个就是你所需要的命令!但正所谓,权力越大,责任也越大!较之以根用户身份登录,或者使用 su “switch user” 命令,sudo要好得多。请耐心读下去,看看sudo能为你做些什么!

sudo:它有什么用途?

  那么,sudo实际能做些什么呢?如果你在任何Linux命令的前面加上“sudo”这个前缀,那么它会以提升的权限来运行该命令。执行某些管理任务需要提升的权限。有一天,你可能想运行一台LAMP(Linux Apache MySQL PHP)服务器,又要手动编辑配置文件。你可能还要重新启动或重置Apache Web服务器或者是其他服务后台程序。你甚至需要提升的权限来关闭或重新计算机。“嘿,谁关闭了这台机子?”

  如果你熟悉Windows,sudo与当你试图处理任何重要操作时,弹出来的Windows用户帐户控制(ACL)对话框非常相似,只是不如后者来得友好。在Windows中,如果你试图执行某项管理任务,对话框就会问你是否想继续执行(“你果真确信想要运行刚才点击的这个程序吗?”)随后执行该任务。在Mac机器上,一个安全对话框会弹出来,要求你输入密码,并点击“确定”。

  而Linux方面显得更有戏剧性。要是没有适当的权限,一些操作会显得相当怪异。你在编辑的那个重要的配置文件可能无法正确保存内容。你安装上去的那个程序可能就是拒绝运行。你已下载、想要编译的那段出色的源代码编译不了。你要是不走运的话,甚至还会看到“拒绝访问”或另一个错误信息。你最担心的种种情况都变成了现实,但你要做的就是请求权限!这就是为什么我们在执行像下面这种操作时,应该牢记事先请求超级用户权限:

sudo reboot

在这个屏幕截图中看看如果我们没有先借助sudo提升权限,会出现什么情况:

Linux:Linux系统管理员不可不知的命令:sudo
Linux:Linux系统管理员不可不知的命令:sudo

  首先,我们使用重启命令尝试重启系统。该命令没有提到:“必须是超级用户”。然后,我们试着用sudo重启。sudo要求你提供用户密码。请注意:它要求 你提供的是你的密码,而不是根密码。最后,我们看到表明现在将重启系统的广播信息。sudo就像是个神奇的命令,会发出神奇的指令。

Linux:Linux系统管理员不可不知的命令:sudo
Linux:Linux系统管理员不可不知的命令:sudo

为什么sudo比另一个办法更好?

  sudo是提升权限的最出色、最安全的方法。我们不妨看一下提升权限的另一个方法。作为切换用户命令,”su”会要求你输入根密码,并且给你一个超 级用户提示符,以#符号表示。这个#符号意味着”危险!你已作根用户登录上去!”你下达的第一个命令也许顺利执行完毕。但是你一旦忘了,会继续以根用户身 份登录。要是打错一个字,就完蛋了!你清除了整个硬驱,而不是清除你下载的那个盗版mp3文件。你的Web服务器和家庭公司统统不见了!如果是sudo, 你就得在每一个命令之前输入”sudo”。因而,你没必要记得切回到常规用户模式,那样发生的事故就会更少。

Suderos文件

  这个文件可谓是sudo的基础。它控制着谁可以使用sudo命令来获得提升的权限。它通常位于/etc/sudoers。想编辑这个文件,最有效最 安全的方式就是,使用visudo命令。这个命令会以提升权限启动vi编辑器,那样你就能编辑并保存该文件。它还会给sudoers文件上文件锁,那样别 人无法编辑该文件。一旦你完成了编辑工作,它会分析文件,查找有无简单的错误。编辑sudo文件要比仅仅使用任何旧的文本编辑器来得安全得多。

  该文件含有许多参数。你可以指定哪些用户或哪些用户助可以执行哪些命令。我们准备为自己授予访问sudo的权限,为此只要在底部添加:

username  ALL=(ALL)   ALL //为用户”username”授予sudo访问权%wheel    ALL=(ALL)   ALL //为属于wheel用户组的所有用户授予sudo访问权

  现在指定的用户名就能够使用所有根权限了。你还可以允许某个用户或用户组只对特定服务或服务器拥有sudo访问权,以取代ALL参数,不过那是另一个话题了。

几个选项

  与任何优秀的命令一样,也有几个很棒的选项可以让sudo处理更多的事务。

  • sudo -b会在后台运行命令。这对显示许多实时输出内容的命令来说很有用。
  • sudo -s 会运行以提升权限指定的外壳,为你提供#提示符(别忘了退出!)
  • sudo su -会让你成为根用户,并装入你那些自定义的用户环境变量。

有没有现在就用它?

  我们想要运行重要任务时,sudo提供了安全的提升权限。在Ubuntu用户当中,它也许是使用最广泛、功能最强大的命令,因为它已成为该发行版中的首选方法。既然你拥有了这么大的权利,那么在运行命令时务必要做到安全!世上可没有su-undo撤销命令!

原文:http://blog.linuxacademy.com/linux/linux-commands-for-beginners-sudo/

译文:http://os.51cto.com/art/201307/404879.htm

 已同步至 linux的微博

Linux:在Ubuntu/Debian上用Unison来同步文件

Unison是一款免费的、跨平台的文件同步工具;有了它,我们就能够将两套文件副本(实例)保存在两个不同的平台上,或保存在同一个系统的不同磁 盘上。不像简单的镜像方法或备份实用工具,Unison可以同时更新分布式目录结构的两个副本。它可以检测并显示有冲突的更新。而且不像分布式文件系 统,Unison是一款用户级程序;不需要改动内核,也没必要在任何一个主机上都要拥有根用户权限。

Unison可在与互联网连接的任何一对机器之间使用,通过直接套接层链路或基于加密SSH连接的隧道进行联系。它谨慎使用网络带宽,在PPP连接等慢速链路上可以顺畅地使用。可以使用一种类似rsync的压缩协议,优化将小容量更新传送到大文件的操作。

在这篇实用文章中,我使用了两台运行Ubuntu的系统。本地系统运行Ubuntu桌面版,其IP地址是192.168.1.100/24;而远程 系统则运行Ubuntu服务器版,其IP地址是192.168.1.201/24。我还准备在这两个系统之间同步目录/home/sk/Unixmen。 请根据你的具体情况,更改相应值。

安装Unison

在本地和远程服务器系统上安装:

使用下列两个命令,更新和升级这两个系统:

sudo apt-get updatesudo apt-get upgrade

在两个系统上安装Unison。

sudo apt-get install unison unison-gtk

配置

现在在你的本地系统上,从Menu(菜单)或Dash启动Unison GUI工具。它的界面看起来应该如下。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

首先,我们得为同步过程创建一个新的配置文件。点击Add(添加),即可创建一个新的配置文件。点击Forward(下一步)。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

输入新配置文件的名称,点击Forward(下一步)。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

这里会要求你选择同步方法。我想使用SSH,在本地桌面与远程服务器之间同步文件。于是我在这里从Synchronization Kind(同步类别)下拉框中选择Using SSH(使用SSH)。然后输入远程主机服务器的IP地址和用户名称,如下所示,点击Forward(下一步)。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

现在,我们得指定需要复制的本地文件夹和远程文件夹。在Local Directory(本地目录)框里面输入本地文件夹的路径(如本文中的/home/sk/Unixmen),在Remote Directory(远程目录)框里面输入远程文件夹的路径。点击Forward(下一步)。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

如果你同步FAT分区里面的任何文件夹,请勾选FAT Partition(FAT)分区,然后点击Forward(下一步)。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

最后点击Apply(应用)。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

我们已成功地创建了配置文件。点击Open(打开)即可开始。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

它会要求你输入远程系统用户密码。输入密码,点击OK(确定)。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

如果你头一次使用该应用程序,你会得到如下所示的一段警告信息。点击Ok(确定),继续操作。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

现在,你会看到类似这样的屏幕。

Linux:在Ubuntu/Debian上用Unison来同步文件
Linux:在Ubuntu/Debian上用Unison来同步文件

把你想要复制的文件夹或文件放入到同步文件夹(/home/sk/unixmen),点击Go(开始同步)。一切都会在幕后进行。

现在查看远程系统里面的文件。它们应该肯定就在那里。如果你添加了一个新的文件或文件夹,点击Rescan(重新扫描);之后,点击Go(开始同步),即可开始同步了。

sk@server1:~$ ls /home/sk/Unixmen/New1  New2  New3

就这样,开始享用吧。你刚才看到的上面这些只是Unison的一个基本概念。你可以用Unison处理许多任务。我建议你仔细阅读官方文档,以获取更多信息。

原文:http://www.unixmen.com/synchronize-files-with-unison-on-ubuntu/

译文:http://os.51cto.com/art/201307/404642.htm

 已同步至 linux的微博

Linux:消息队列软件产品大比拼

我花了一周的时间评估比较了一下各种消息队列产品,非常的有趣。我做这个事的动机是因为一个客户有一个很高性能需求。他们的消息信息突破了1百万个并发。目前他们使用的是SQL server,并不理想,我建议他们使用消息队列服务器。

为了对一些相似的候选产品获得一个全面的但是粗浅的性能上的了解,我们它们放在一起做了个测试。我让每个消息产品各发送和接受1百万千条1K的消息。测试准备的有些仓促,我并没有修改任何的配置,只是快速的看了一下它们的安装文档,安装好每种软件,然后就让它们做这些最简单的收发信息的操作。所以这是一次真正的“开箱即装即用”的性能表现。我完全理解,这对那些初始配置十分保守的消息队列产品将会是个惩罚。

候选产品有:

  • MSMQ这是微软的产品里唯一被认为有价值的东西。对我的客户来说,如果MSMQ能证明可以应对这种任务,他们将选择使用它。关键是这个东西并不复杂,除了接收和发送,没有别的;它有一些硬性限制,比如最大消息体积是4MB。然而,通过和一些像MassTransit 或 NServiceBus这样的软件的连接,它完全可以解决这些问题。
  • ActiveMQJava世界的中坚力量。它有很长的历史,而且被广泛的使用。它还是跨平台的,给那些非微软平台的产品提供了一个天然的集成接入点。然而,它只有跑过了MSMQ才有可能被考虑。
  • RabbitMQ我听说了很多关于这个用Erlang写成的消息中间件的优秀的特性。它支持开放的高级消息队列协议 (AMQP,Advanced Message Queuing Protocol),从根本上避免了生产厂商的封闭,使用任何语言的各种客户都可以从中受益。这种协议提供了相当复杂的消息传输模式,所以基本上不需要MassTransit 或 NServiceBus 的配合。它还具有“企业级”的适应性和稳定性。这些东西对我的客户来说十分的有吸引力。
  • ZeroMQ我在研究AMQP时从发现了这个产品。开发这个产品的公司是AMQP集团的一部分,并且还有一个叫做OpenAMQ的产品。然而,他们却戏剧性的从AMQP分离的出去,并抱怨说这这个产品迷失了方向、变的越来越复杂。你可以到这里阅读Dear John的关于此事的文章。ZeroMQ具有一个独特的非中间件的模式,也就是说,跟其它几个接受测试的产品不同,你不需要安装和运行一个消息服务器,或中间件。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。非常有趣的是,他们也同样使用这方式在任何利用ZeroMQ进行强大的进程内通信的语言里创建Erlang风格的这种执行角色。

把这四个MQ产品装上、跑起来是一个很有趣的工作。当你需要安装一个非Windows平台的产品时,下一定的功夫那是必须的。ActiveMQ需要在目标机器上安装Java,RabbitMQ需要Erlang环境。安装这两个产品都没有遇到麻烦,但我想这是否给系统的维护增加了一层任务。如果这个中的一个被选中,我需要让系统维护的人去理解和维护他们以前不熟悉的运行库。ActiveMQ,RabbitMQ 和 MSMQ 都需要启动服务进程,这些都可以监控和配置,另外一个就有问题了。

ZeroMQ,它没有中间件架构,不需要任何服务进程和运行时。事实上,你的应用程序端点扮演了这个服务角色。这让部署起来非常简单,但担心的是,你没有地方可以观察它是否有问题出现。就目前我知道的,ZeroMQ仅提供非持久性的队列。你可以在需要的地方实现自己的审计和数据恢复功能。老实说,我甚至不确信是否该把它列在此次测试中,它的运行原理和其它几种差别太大了。

我就不瞎扯了,下面是测试结果。显示的是发送和接受的每秒钟的消息数。整个过程共产生1百万条1K的消息。测试的执行是在一个Windows Vista上进行的。

Linux:消息队列软件产品大比拼
Linux:消息队列软件产品大比拼

就像你看到的,ZeroMQ和其它的不是一个级别。它的性能惊人的高。公平的说,ZeroMQ跟其它几个比起来像头巨兽,尽管这样,结论很清楚:如果你希望一个应用程序发送消息越快越好,你选择ZeroMQ。当你不太在意偶然会丢失某些消息的情况下更有价值。

老实讲,我更希望使用Rabbit。但这种事情是应该做更多的测试,你最终会有一个最爱,我所听到的、读到的各种关于Rabbit的事情让我觉得它应该是最佳选择。但使用这个测试结果,我很难说服他们不去使用MSMQ。

如果你想自己跑一下这些测试,我的测试代码都放在了GitHub上。我很感兴趣(但不是非常非常感兴趣)想知道如何优化这些测试,所以,如果你能做到一个更好的测试结果,请告诉我。谢谢。

 

本文由“外刊IT评论”网(www.aqee.net)荣誉出品

[英文原文:Message Queue Shootout! ]
 已同步至 linux的微博

Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区

  日常工作中,我们经常需要截取屏幕状态来给其他人看。一般情况下,我们能最直接想到的就是使用键盘上的“Print Screen SysRq”键来直接截取屏幕到内存中,然后再在其他工具中将内存中的图粘贴出来。不过在 Ubuntu 下,当你打开一个程序的下拉菜单的时候,你会发现在 Ubuntu 下截屏是有问题的。目前这个问题还没有得到很好的解决,那么我们怎么办呢。在一番搜索查询后,我发现了一个通过命令行就可以实现截屏的程序,gnome-screenshot (在 Gnome 桌面环境下) 可以非常方便的截取我们需要的屏幕,可以截取整个屏幕,当前窗口,或者我们制定的区域。

  下面我们就挨个来测试测试这些功能。这里一共有六个示例,可以让大家了解这个命令和工具:

1、捕捉整个屏幕

  捕捉整个屏幕应该是非常普遍的需求了,gnome-screenshot 捕捉整个屏幕只需要运行下面的命令就可以:

$ gnome-screenshot

Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区
Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区

  上面就是我的当前整个桌面了。

2、通过 -w 参数来捕捉当前 Shell 窗口

  上面的例子里我们捕捉了整个屏幕的状态,如果我们只想捕捉当前活动的 Shell 窗口我们可以在命令上添加 -w 参数来做到:

$ gnome-screenshot -w

Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区
Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区

  您可以看到,上面的截图只有当前运行的 Shell 窗口。

3、使用 -a 参数来捕捉指定区域

  捕捉指定区域应该是比整个桌面和指定窗口使用频率更高的需求了。

$ gnome-screenshot -a

  运行了这个命令以后,您应该看到您的鼠标指针已经发生了变化,您只需要移动鼠标到您需要的区域单击然后拖动出一个区域来,松开鼠标的时候,您将得到一个区域的截图。

https://dn-linuxcn.qbox.me/data/attachment/album/201307/25/225214iki8lsdl00kmuick.png

  您可以看到上面的这个只有一点点高的小图片。

4、使用 -B 参数来去除窗口的边框

  在第二个方法中,虽然我们截取了当前活动的窗口,不过它是连带着窗口的名称状态条一起截取的,如果我们需要截取不带名称状态条的图形,那么我们就需要在 -w 参数后面继续添加 -B 参数了。

$ gnome-screenshot -w -B

Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区
Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区

  怎么样,看起来是不是更清爽一些。

5、使用 -d 参数来延迟截取功能从而截取其他活动窗口

  前面我们使用 -w 参数来捕获当前活跃的 Shell 窗口,不过我们不能只截取 Shell 窗口而视其他窗口的需求而不顾。Shell 只是我们的使用工具,我们还需要其他窗口的截图来完成我们的工作,我们也不能总是所有截图里都带着 Shell 窗口。-d 参数就是来满足我们这个需求的。-d 参数后面我们继续添加一个数字,执行带这些参数的命令后,截取屏幕功能将在你指定的数字的秒数后来实现。这样你就有充足的时间来缩小、关闭你不需要的窗口或者切换到你需要的窗口。

$ gnome-screenshot -d 5

  上面的命令将在 5 秒后截取桌面,执行后,你就可以在五秒钟的时间内来切换到你需要截取的窗口,然后等待 5 秒钟的到来就好了。

Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区
Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区

6、使用 -e 参数来给截图添加效果

  gnome-screenshot 工具可以给截图添加一个外边框和阴影,以便我们在其他地方使用截图的时候,这些图都具有一个明显的边框。-e 参数后面根据需要添加“border”或者“shadow”下面是一个添加边框的命令示例。

  注:我使用 -w 参数来捕捉当前窗口,-B 参数来去除窗口名称状态条,同时给它添加一个边框:

$ gnome-screenshot -wB -e border

Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区
Linux:如何使用 gnome-screenshot 截图命令来截取屏幕、窗口或指定区

  大家赶紧试验试验这些命令参数吧,看看他们都能怎么样组合,当然了这里是命令行的使用模式,其实我们还可以在 GUI 下来使用,您只需要在命令上添加 -i 参数就可以看到具体是怎么样的了。

原文:http://mylinuxbook.com/gnome-screenshot/ 

补充

谢谢 @gad壹米 的提示,可以将上述的命令设置到快捷键上:

设置中 “键盘 -> 快捷键 ->自定义快捷键” 新增一个自定义的,命令设为 gnome-screenshot -a ,然后绑定一个快捷键如 ctrl+shift+a。就能随意截取部分屏幕了 

 

来源:https://linux.cn/article-1693-1.html

Linux:Linux 知识深似海

  如果你有一个4.2GB的CSV文件,里面有超过1200万条记录,每条记录都有50列。现在你要做的是把其中某一列的值全加起来。

  你怎么办?

  这是我最近看到的一篇文章的开头部分。文章介绍的是如何使用unix命令来分析大体积文件的文章。像我这样一个基本上都在Windows平台上开发的程序员,对他提出的这样一个问题,首先出现在脑子里的就是内存溢出、CPU达到100%、跑一个晚上。而对于一个Linux/unix高手来说,这真是小菜一碟,正如文章中介绍的方法,一行命令就完成了这个任务。

  (假设文件名叫做data.csv,行数据用竖线分割,我们需要总计其中的第四列。)

  cat data.csv | awk -F “|” ‘{ sum += $4 } END { printf “%.2fn”, sum }’

  简洁干净,而且里面的{ sum += $4 }很有闭包的味道。让我对Linux的向往又加深了一层。

  我写这篇博客的目的并不是抒发对Linux的感情的,而是重点讲一下发生在这篇文章评论里的事情。这篇文章吸引了不少Linux爱好者的评论,而且都是Liunx高手,仅仅是第一条评论,看了后就让我惊讶的合不上嘴。

  这位叫做California Lotto的网名的评论是:

  如果你认为自己是一个Linux命令行高手,那恭喜你赢得今天的“最没用的Cat用法”大奖。你应该这样写这个命令:

  awk -F “|” ‘{ sum += $4 } END { printf “%.2fn”, sum }’ < data.csv

  的确,cat在这里似乎是没必要的。我首先是佩服,可之后马上感觉这个人可真讨厌,卖弄。虽然我不喜欢他无视作者写这片好博文的辛苦,但作为外行人,他和作者一样都是我高不可及的。

  可是当我读第二条评论时,事情出现了戏剧性的变化,这第二条评论明显是真对第一条评论的:

  如果你认为自己是一个Linux命令行高手,那恭喜你赢得今天的“最没用的重定向用法”奖。你应该这样写这个命令:

  awk -F “|” ‘{ sum += $4 } END { printf “%.2fn”, sum }’ data.csv

  正所谓强中自有强中手,一山更比一山高。我突然意识到,其实没必要在这里比谁比谁更强,在这个浩瀚的互联网里,永远都会有比你在某方法更出众的人。这里重要的是探讨和参与。通过这种探讨,不仅丰富了你我的知识,而且对问题的解决方案有了更丰富的认识。正像接下来的评论里继续指出,命令行这的重定向符放在什么地方都可以,写成这样也是好用的:

  

  ,神奇吧!而接下来继续有人指出,作者在实验时写成这样:

  head -1 data.psv | awk -F’|’ ‘{print NF}’

  ,实验成功后直接把head改成cat是顺理成章的事。

  不管怎样,这是一篇好文章,这些人都是高手,都是我的老师,不仅教我编程知识,更教我如何做人。

原文:http://www.gregreda.com/2013/07/15/unix-commands-for-data-science/

译文:http://www.aqee.net/useful-unix-commands-for-data-science/

 已同步至 linux的微博

Linux:6 款最好的免费 Python IDE

  集成开发环境(IDE)是一种软件,可以为软件开发人员提供全面的工作环境,从而更高效率的工作,它不只仅仅是一个文本编辑器。IDE 可以格式化代码,高亮显示,代码提示,自动侦错等等。

  IDE 之所以称之为集成开发环境,它必须比文本编辑器要具有更多的特性才能称之为 IDE,一个 IDE 最起码应该包括下面的这些特性才能称之为 IDE :

  • 源代码编辑器(就是文本编辑器所具有的功能了,当然要比普通文本编辑器要多具有代码自动完成,高亮显示,代码格式化等等功能)
  • 调试工具
  • 解释器
  • 自动化工具

  一个好的 IDE ,可以帮助开发人员减少工作中的错误,使程序的维护效率提高。Python IDE 可以帮助程序员从日常繁重而重复的工作中减轻一些负担,具有错误提示、版本控制、代码检查、项目管理。不过面对众多的 IDE ,选择使用哪个可能也是一个头疼的问题。下面给大家介绍 6 个很不错的 Python IDE ,大家可以试试。

Eric 全功能的 Python 和 Ruby 编辑器

Linux:6 款最好的免费 Python IDE
Linux:6 款最好的免费 Python IDE

Spyder

Linux:6 款最好的免费 Python IDE
Linux:6 款最好的免费 Python IDE

IEP 跨平台的 Python IDE

Linux:6 款最好的免费 Python IDE
Linux:6 款最好的免费 Python IDE

PTK

Linux:6 款最好的免费 Python IDE
Linux:6 款最好的免费 Python IDE

Code::Blocks 具有很高的可扩展性和全方位可配置的 IDE

Linux:6 款最好的免费 Python IDE
Linux:6 款最好的免费 Python IDE

Anjuta GNOME 下多功能开发环境

Linux:6 款最好的免费 Python IDE
Linux:6 款最好的免费 Python IDE

原文:http://www.linuxlinks.com/article/20130726165454564/PythonIDE.html

 已同步至 linux的微博

来源:https://linux.cn/article-1703-1.html

Linux:AwOken 图标主题升级 – 新增图标

  AwOken 是一款简洁醒目的图标主题。是我喜欢的图标主题之一,AwOken 提供大量不同颜色的单色图标,非常漂亮。

Linux:AwOken 图标主题升级 – 新增图标
Linux:AwOken 图标主题升级 – 新增图标

Linux:AwOken 图标主题升级 – 新增图标
Linux:AwOken 图标主题升级 – 新增图标

Linux:AwOken 图标主题升级 – 新增图标
Linux:AwOken 图标主题升级 – 新增图标

Linux:AwOken 图标主题升级 – 新增图标
Linux:AwOken 图标主题升级 – 新增图标

Linux:AwOken 图标主题升级 – 新增图标
Linux:AwOken 图标主题升级 – 新增图标
Linux:AwOken 图标主题升级 – 新增图标
Linux:AwOken 图标主题升级 – 新增图标

  AwOken提供了几乎所有的 Linux 程序图标,几个月前 AwOken 2.5 发布,该版本的变化:

  1. LibreOffice 新图标(支持Writer、Impress、Calc、Draw、Base等);
  2. 几个Web应用程序图标;
  3. Spotify, Darktable, Rdio, Zim, Geary, Terminator, Uget, Snappy, p7zip, 等新增和图标更新。

  通过PPA安装该图标主题,添加以下官方 PPA(支持Ubuntu 12.04,Ubuntu 12.10,Ubuntu 13.04,Ubuntu 13.10):

sudo add-apt-repository ppa:alecive/antigone sudo apt-get update sudo apt-get install awoken-icon-theme

Kubuntu 用户输入以下命令:

sudo add-apt-repository ppa:alecive/antigone sudo apt-get update sudo apt-get install kawoken-icon-theme

来自:http://imcn.me/html/y2013/15472.html

Linux:把你的树莓派打造成一个NAS

你有闲置的移动硬盘和树莓派吗?你可以用这些来打造一个廉价而且低能耗的NAS。最后的效果肯定比不上售价500美刀的NAS,比如Synology DiskStation出品的那些。但可以搭建出一个低能耗的网络存储平台——而且特别适用于已经厌倦了国家安全局的数据监控的那些人,你可以把数据藏在这个“小阁楼”里。

Linux:把你的树莓派打造成一个NAS
Linux:把你的树莓派打造成一个NAS

你需要一个树莓派,和一两个闲置着的移动硬盘。体积较小的2.5硬盘可以由USB接口直接供电,但是我们需要一个带有供电功能的USB分线器,因为树莓派的USB接口提供的电是不足以给移动硬盘供电的。除此之外你也可以用thumbdrive,甚至是一张SD卡。事实上我现在在用的就是一个USB口的移动硬盘和一个thumbdrive搭建的,操作流程都是一样的。

Linux:把你的树莓派打造成一个NAS
Linux:把你的树莓派打造成一个NAS

只用一个硬盘,也可以搭建分享文件的网络存储器,但是用两个硬盘,就可以设置数据备份,以防有一个硬盘坏掉。

准备硬盘

最初的步骤是在台式机上格式化硬盘。这是为了方便,如果出了问题,我们可以把硬盘从NAS上拔下来,还可以在一台PC上读上面的数据。

可以在树莓派上格式化,但是会花上几个小时,从台式机上格式化会快很多。现在就去做吧。

设置SSH,开启root用户,首先为root用户设置密码:sudo -ipasswd root(输入你的密码)

然后在命令行下面运行raspi-config脚本,可以用sudo命令,也可以注销当前用户,然后以root用户的身份登陆。在高级选项菜单中,开启SSH。

Linux:把你的树莓派打造成一个NAS
Linux:把你的树莓派打造成一个NAS

重启后,你应该可以从联网的另一台机器登陆(如果在windows上,可以使用Putty):SSH root@[IP地址]

登陆之后,搞清楚插上去的硬盘在/dev下面的编号是什么。下文假设使用两个硬盘,创建数据备份。输入fdisk -l

会显示出已经挂载的存储设备。你应该看到类似于这样的画面:

Linux:把你的树莓派打造成一个NAS
Linux:把你的树莓派打造成一个NAS

/dev/mmc是树莓派系统的分区,mmc指的是SD卡。/dev/sda1和/dev/sdb1和SD卡没有关系,这些是你插上去的USB硬盘(本意是SCSI驱动器,但是现在用来指任何SATA口的或其他存储器)

安装ntfs-3g模块,于是我们就能读写NTFS格式的硬盘了。apt-get install ntfs-3g

然后创建一个目录,以这个目录作为挂载点挂载硬盘。为简单起见,下文用1和2来指代。mkdir /media/1mkdir /media/2mount -t auto /dev/sda1 /media/1mount -t auto /dev/sdb1 /media/2mkdir /media/1/sharesmkdir /media/2/shares

Samba

下一步我们来设置Samba。Samba是Windows使用的网络文件共享协议(事实上最新的OSX Mavericks也支持)apt-get install sambaapt-get install samba-common-bincp /etc/samba/smb.conf /etc/samba/smb.conf.baknano /etc/samba/smb.conf

如果你不熟悉这类配置文件,行首的#表示这一行是注释,于是这一行的配置也就不会生效。要开启一项功能,可以自己添加一行,也可以把某一行前面的注释符号去掉,让它生效。

我们先来启动用户安全;按下CTRL-W然后输入”security”,来找到相关的选项。去掉这一行前面的注释符号:security = user

然后,移动到文本末尾(或者按住CTRL V直到移动到了末尾),添加网络共享,数目取决于你自己的需求。使用这种格式:[test] comment = Test sharepath = /media/1/sharesvalid users = @usersforce group = userscreate mask = 0660directory mask = 0771read only = no

只有第一块硬盘的配置——之后我们将用第二块硬盘和第一块同步,以进行备份。

完成编辑之后,按下CTRL X然后按y来退出。

Linux:把你的树莓派打造成一个NAS
Linux:把你的树莓派打造成一个NAS

然后用下面的命令重启Samba。service samba restart

现在给你的树莓派添加一个用户,假设你不想用同一个用户来访问(下文的”jamie”是用户名)useradd jamie -m -G users

输入下面的命令给新用户设置密码,完成后确认。passwd jamie

然后我们把这个用户加入到Samba中。你需要两次确认你的密码。smbpasswd -a jamie

然后就去测试网络存储功能吧,应该可以在其他机器上看到了(Windows或Mac),而且你应该可以往上面写入文件。

Linux:把你的树莓派打造成一个NAS
Linux:把你的树莓派打造成一个NAS

现在还剩一个问题,你重启树莓派,驱动器的挂载就会失效。为了解决这个问题,我们需要安装autofs。apt-get install autofsnano /etc/auto.master在+auto.master下面加入一行:/media/ /etc/auto.ext-usb –timeout=10,defaults,user,exec,uid=1000

现在就可以安全重启,不会破坏配置了。

数据备份

如果你安装了两个硬盘,我们现在就可以用一个脚本来同步数据,如果一块硬盘坏了,还有一份备份的。我们用rsync来做备份。apt-get install rsynccrontab -e

linux下面的crontab是用来自动运行某个任务的一个软件。我曾经在《自动备份你的网站》中简要提到过。加上这一行:30 5 * * * rsync -av –delete /media/1/shares /media/2/shares/

数字的格式是这样子的:分钟|小时|一个月中哪一天|月份|一个星期中哪一天

所以我们加进去的那一行,rsync命令会在每天的早晨5点30分运行(*通配符表示“所有”,所以会在“每个月的每一天”运行)

如果你想立刻进行一次备份,只要粘贴这个rsync的命令:rsync -av –delete /media/1/shares /media/2/shares/

取决于共享文件夹里放的东西,耗费的时间可能只要几秒钟,也可能会长一些,在完成之后会给你一个报告。rsync最棒的地方在于它会记录哪些文件更新了,哪些文件添加近来或是应该被删除。你可以再试一遍那个命令,应该立刻就会完成的,因为rsync知道没有文件发生了变动。

教程到这里就结束了——现在你搭建起了自己的NAS,虽然细节上有待改进,但是现在就可以用起来了。虽然没有市面上出售的NAS那些华丽的特性,但是它也能漂亮地完成任务,而且耗电会少很多。

有问题请在评论区提出,我会尽力帮忙的,但是请确定你在使用最新的树莓派系统镜像。

原文链接: James Bruce 翻译: 极客范 – 孔垂瑾译文链接: http://www.geekfan.net/2767/

Linux:教你用树莓派打造一个家庭影院

在四周的时间里,我用各种各样的方式折腾树莓派,例如用来浏览网页,用来跑日常的一些计算任务,以及折腾网络设置(以太网和USB无线网)。但是折腾树莓派是不是会有个穷尽?还是说我会一直对折腾它感兴趣,把它一直放在架子上,想出当一个有用的点子的时候就打开它?

在MakeUseOf我们已经一同探究了树莓派各式各样的用法,但是还有一种非常流行的用法,就是利用树莓派做一个流媒体或家庭影院系统。

当我在写这篇文章的时候,传统的报刊杂志正在说,仅售22英镑的智能电视即将来临,树莓派当然可以把普通的纯平LCD或等离子电视变成智能电视,感谢有人移植XBMC这个流行的软件,为我们带来了Raspbmc。

准备Raspbmc

你应该已经遵照之前的一篇文章,为树莓派安装好了Debian,而且已经能正常运行了。

为了安装Raspbmc,需要准备几件东西。第一件是一张新的SD卡——之前的那张要用在普通环境下;SD卡事实上就是树莓派的硬盘,所以如果过度写入,就只能重新刷镜像才能修复了,大概就等同于重装系统。没必要用一张新的SD卡,但是推荐用新的。一张microSD再加上一个SD卡套也是可以的。

无论你选择哪种方案,卡都要先格式化,于是在进行下一步前,把卡插到读卡器中,连接到你的PC上。

Linux:教你用树莓派打造一个家庭影院
Linux:教你用树莓派打造一个家庭影院
然后,下载Raspbmc安装器。下载完成后,解压缩并运行installer.exe文件。

你的SD卡应该会在安装窗口中显示出来,选中SD卡那一项前面的小方格,然后点击安装,软件就会把Raspbmc安装到SD卡上面。当“恭喜”信息出现的时候,就可以把卡拔下来,插到你的树莓派上面去了。

Linux:教你用树莓派打造一个家庭影院
Linux:教你用树莓派打造一个家庭影院

设置Raspbmc

把安装有Raspbmc的SD装到树莓派里,打开设备,确保设备和外网是连通的,因为在安装过程中,还有一部分数据要从网上下载,所以说连网是必须的。muo-raspbmc3在此过程中你什么都不用做——除非网络连接断开了,网线传输出错了或者SD卡坏了——所以现在可以坐下来,在等待的时候喝杯咖啡(Raspbmc的安装说明上就是这么说的!)。

你可以用树莓派上的XBMC干什么

Raspbmc是流行的媒体中心软件XBMC移植到树莓派上的产物。所以用户界面喝功能大体上是相同的。

Linux:教你用树莓派打造一个家庭影院
Linux:教你用树莓派打造一个家庭影院
图片,视频以及音乐都有各自的菜单,有小软件可以收到三个地方的天气情况。媒体源需要手动添加,可以用插件管理器安装插件,有很多插件可供选择。
Linux:教你用树莓派打造一个家庭影院
Linux:教你用树莓派打造一个家庭影院
XBMC/Raspbmc最好的地方是使用简单,而且界面清爽,视觉效果也不错。

更多Raspbmc的使用说明,请前往XBMC wiki

改进Raspbmc

在树莓派上搭建这种媒体中心是相对简单的事情,不用再去进一步折腾,就可以连接一个媒体,享受你的(不那么繁重的)劳动成果。

但是这个系统并不完美,它不支持某些文件的编码格式。MPEG-2和VC-1的解码器必须花钱买。幸运的是这些解码器相对来说不贵,可以在树莓派的网站找到。

就算不去做这些改进,你的树莓派也已经是一个便携式家庭影院了。

原文链接: Christian Cawley 翻译: 极客范 – 孔垂瑾译文链接: http://www.geekfan.net/2847/

Linux:Nginx SSL 性能调优

这篇文章的目的是要谈谈我的 Nginx 调优经验,就不涉及数据库调优的内容了。

初始服务器设置

我的服务器运行在亚马逊 EC2 t1 micro 上,选择 Nginx + PHP5-fpm 作为后端,因为一些安全因素还打开了SSL。

性能测试

我使用了Blitz.io 来进行压力测试。下面是我使用的命令参数:

-p 1-250:60 https://mydomian.com

这是一个用户线性递增的测试,每个测试用户跑60秒。Blitz.io为每个请求每秒增加4个( = rise / run = 260 / 60)测试用户。

结论

我把结论提前写在这里,如果你不想读完整篇文章也没有问题。

  1. Nginx默认设置的DH算法(译注:Diffie-Hellman key exchange algorithm)是影响SSL性能的最大因素,因此采用如下设置能增加SSL性能:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
  1. 升级硬件 Upgrade your EC2 from t1.micro to c1.medium
  2. 正确配置 Nginx的worker进程数量 Set Nginx to have 2 worker processes as a c1.medium gives you 2 CPUs

细节解释

以下是我进行测试的详细过程。

尝试1:升级硬件

直觉告诉我,想解决性能问题的直接途径就是升级硬件,我把EC2实例从t1.micro升级到了为高流量而优化过的c1.medium

升级后的测试结果:

Linux:Nginx SSL 性能调优
Linux:Nginx SSL 性能调优

巅峰时服务器的hits达到50/sec,压力增加时,time-out增加,hits减少。

尝试2:测试CPU性能

我打开top然后重启了测试,注意到2个CPU的使用率不到13%,内存使用了300Mb,很明显硬件没有充分利用。所以我更改了nginx的设置:

worker_processes 2;

尝试3,4,5:调整Nginx和PHP5-fpm

以下尝试得到的结果都和尝试1相同

尝试3:

nginx.conf

worker_processes 2;
events {
worker_connections 19000;
multi_accept on;
}
...

尝试4:

nginx.conf

worker_processes 2;
events {
  worker_connections 19000;
  multi_accept on;
}
http {
  gzip on;
  gzip_disable "msie6";
  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/plain application/xml application/javascript text/css application/x-javascript;
…
}
...

尝试5:

在尝试4未变的情况下我更改了php5-fpm的设置:

pm.max_children = 160
pm.start_servers = 24
pm.min_spare_servers = 20
pm.max_spare_servers = 35
pm.max_requests = 1500

尝试6:在另一个服务器部署

我有一个1.5Gb RAM和8CPU的Linode服务器,采用刚才的设置,这是我的测试结果:

Linux:Nginx SSL 性能调优
Linux:Nginx SSL 性能调优

Linode的服务器的结果棒极了!我的第一个直觉是难道Linode比EC2好吗。在我把我的服务迁移到Linode之前我想确保两者仅有的对性能有可能产生影响的不同被排除掉。

尝试7:大惊喜

我Google到Nginx在SSL上有些问题。Nginx默认使用DHE算法来产生密匙,改变这个设置应该能使它快一些。

这里是我参考的一些文章:

所以我更改了nginx.conf,删掉了kEDH算法

worker_processes 2;
events {
  worker_connections 1024;
}
http {
  gzip on;
  gzip_disable "msie6";
  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/plain application/xml application/javascript text/css application/x-javascript;
  ssl_ciphers ALL:!kEDH!ADH:RC4+RSA:+HIGH:+EXP;
…
}
...

下图是测试结果:

Linux:Nginx SSL 性能调优
Linux:Nginx SSL 性能调优

效果很显著! 

尝试8: 硬件提升是必要的吗

现在我的EC2和Linode表现差不多了。但是我真的需要升级到c1.medium实例才能实现这个性能的提升吗?或许不是这样……所以我把我改回了t1.micro。因为t1.micro实例只有一个CPU,所以我把worder_processes设置改回1。下面是测试的结果:

Linux:Nginx SSL 性能调优
Linux:Nginx SSL 性能调优

所以答案是肯定的,硬件上的提升是必要的。 

尝试9:

有人在 Hacker News 上反馈说我的SSL密匙不能满足Perfect Forward Secrecy,我采用了他们的建议,对我的SSL设置做了如下更改:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

现在这个设置应该满足Perfect Forward Secrecy协议了。我重新跑了测试:

Linux:Nginx SSL 性能调优
Linux:Nginx SSL 性能调优

太棒了,性能也没有下降。很棒的学习经验!

 

来源:http://blog.jobbole.com/44844/