Skip to content Skip to main navigation Skip to footer

Linux

Linux:每日Ubuntu小技巧——安装Ubuntu后做什么

许多Windows用户开始使用Ubuntu时都感到束手无策。Ubuntu与Windows截然不同,想要轻松驾驭Ubuntu可不是一件简单的事情。Ubuntu的使用方式不同于Windows。许多用户对命令行、文件系统的布局和应用程序的名称都感到陌生。但是不用担心,我们会提供帮助的。

如果你以前是Windows或者Mac OS X用户现在想学Ubuntu,那你来对地方了。我们正努力帮助新用户开始Ubuntu之旅。我们的口号理所当然就是“菜鸟教程”。

我们的教程大多不是针对专业人士的,而是面向刚开始学习Windows和Ubuntu的新手。所以,在Ubuntu上遇到了任何困扰,都可以回来转转。

好了,言归正传。几天前一个读者问了我们一个问题,如下:

安装好Ubuntu后首先要做什么?

很简单,第一次安装Ubuntu时,你可能有很多事情想做。但是最重要的是让它正常工作。不要担心遇到难题,这些你很快就会明白。

这里有一些安装好Ubuntu之后你最初想要做的事。可能你想做的比这还多,但这些是比较重要的。

  • 更新系统 -首先更新你的系统。系统更新可以让你安装比较新的软件包和一些其它程序的修正。使用Ubuntu时你可以使用下面的命令正确地进行系统更新。 sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove
  • 安装好Ubuntu后要做的另外一件事就是运行下面的命令。这条命令能帮助你安装编解码器和因法律原因而排除在Ubuntu外的软件包。Ubuntu并未预装这些比较重要的程序。而没有这些程序你可能无法听音乐、看电影或者做其它的事情。所以,如果你安装了Ubuntu但是不能播放DVD或者听音乐CD,那就运行下面的命令吧。 sudo apt-get install ubuntu-restricted-extras

以上这些命令并非你将在Ubuntu运行的全部的命令,但它们是安装好Ubuntu后你首先要运行的。希望这些能帮助到你。

使用愉快!

 

via: http://www.liberiangeek.net/2013/10/daily-ubuntu-tipsthings-to-do-after-installing-ubuntu/

译者:Linchenguang 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:Linux 系统中僵尸进程

  Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动。僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸。

僵尸进程如何产生的?

  如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了。那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢?

  一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号、进程的退出状态、进程运行的CPU时间等。因此进程 在终止时,回收所有内核分配给它的内存、关闭它打开的所有文件等等,但是还会保留以上极少的信息,以供父进程使用。父进程可以使用 wait/waitpid 等系统调用来为子进程收拾,做一些收尾工作。

  因此,一个僵尸进程产生的过程是:父进程调用fork创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中(进程描述符占有极少的内存空间)。子进程的状态变成EXIT_ZOMBIE,并且向父进程发送SIGCHLD 信号,父进程此时应该调用 wait() 系 统调用来获取子进程的退出状态以及其它的信息。在 wait 调用之后,僵尸进程就完全从内存中移除。因此一个僵尸存在于其终止到父进程调用 wait 等函数这个时间的间隙,一般很快就消失,但如果编程不合理,父进程从不调用 wait 等系统调用来收集僵尸进程,那么这些进程会一直存在内存中。

  在 Linux 下,我们可以使用 ps 等命令查看系统中僵尸进程,僵尸进程的状态标记为‘Z’:

Linux:Linux 系统中僵尸进程
Linux:Linux 系统中僵尸进程

产生一个僵尸进程

  根据上面的描述,我们很容易去写一个程序来产生僵尸进程,如下代码:

#include #include int main(){    //fork a child process    pid_t pid = fork();    if (pid > 0)   //parent process    {        printf(“in parent process, sleep for one miniute…zZ…n”);        sleep(60);        printf(“after sleeping, and exit!n”);    }    else if (pid == 0)      {        //child process exit, and to be a zombie process        printf(“in child process, and exit!n”);        exit(0);    }    return 0;}

  父进程并没有写 wait 等系统调用函数,因此在子进程退出之后变成僵尸进程,父进程并没有为其去收尸。我们使用下面命令编译运行该进程,然后查看系统中进程状态:

guohailin@guohailin:~/Documents$ gcc zombie.c -o zombieguohailin@guohailin:~/Documents$ ./zombie in parent process, sleep for one miniute…zZ…in child process, and exit!# 打开另一个终端:guohailin@guohailin:~$ ps aux | grep -w ‘Z’1000      2211  1.2  0.0      0     0 ?        Z    13:24   6:53 [chromium-browse] 1000      4400  0.0  0.0      0     0 ?        Z    10月16   0:00 [fcitx] 1000     10871  0.0  0.0      0     0 pts/4    Z+   22:32   0:00 [zombie]

  父进程并没有写 wait 等系统调用函数,因此在子进程退出之后变成僵尸进程,父进程并没有为其去收尸。我们使用下面命令编译运行该进程,然后查看系统中进程状态:

guohailin@guohailin:~/Documents$ gcc zombie.c -o zombieguohailin@guohailin:~/Documents$ ./zombie in parent process, sleep for one miniute…zZ…in child process, and exit!# 打开另一个终端:guohailin@guohailin:~$ ps aux | grep -w ‘Z’1000      2211  1.2  0.0      0     0 ?        Z    13:24   6:53 [chromium-browse] 1000      4400  0.0  0.0      0     0 ?        Z    10月16   0:00 [fcitx] 1000     10871  0.0  0.0      0     0 pts/4    Z+   22:32   0:00 [zombie]

  从上面可以看出,系统中多了一个僵尸进程。但如果等父进程睡眠醒来退出之后,我们再次查看系统进程信息,发现刚才的僵尸进程不见了。

guohailin@guohailin:~/Documents$ ./zombie in parent process, sleep for one miniute…zZ…in child process, and exit!after sleeping, and exit!guohailin@guohailin:~/Documents$ ps aux | grep -w ‘Z’1000      2211  1.2  0.0      0     0 ?        Z    13:24   6:53 [chromium-browse] 1000      4400  0.0  0.0      0     0 ?        Z    10月16   0:00 [fcitx]

  这是为什么呢?父进程到死都也没有为其子进程收尸呀,怎么父进程退出之后,那个僵尸进程就消失了呢?难道父进程在退出时会为子进程收拾吗?其实不 然….真正的原因是:父进程死掉之后,其所有子进程过继给 init 进程,init 进程成为该僵尸进程的新进程,init 进程会周期性地去调用 wait 系统调用来清除它的僵尸孩子。因此,你会发现上面例子中父进程死掉之后,僵尸进程也跟着消失,其实是 init 进程为其收尸的!

怎样避免僵尸进程的产生

  不能使用 kill 后接 SIGKILL 信号这样的命令像杀死普通进程一样杀死僵尸进程,因为僵尸进程是已经死掉的进程,它不能再接收任何信号。事实上,如果系统中僵尸进程并不多的话,我们也无需去消除它们,少数的僵尸进程并不会对系统的性能有什么影响。

  那么在编程时,如果能避免系统中大量产生僵尸进程呢?根据上面描述的,子进程在终止时会向父进程发 SIGCHLD 信号,Linux 默认是忽略该信号的,我们可以显示安装该信号,在信号处理函数中调用 wait 等函数来为其收尸,这样就能避免僵尸进程长期存在于系统中了。示例代码如下:

#include #include #include #include #include sig_atomic_t child_exit_status;void clean_up_child_process(int signal_num){    /* clean up child process */    int status;    wait (&status);    /* store its exit status in a global variable */    child_exit_status = status;}int main(){    /* handle SIGCHLD by calling clean_up_child_process  */    struct sigaction sigchild_action;    memset(&sigchild_action, 0, sizeof(sigchild_action));    sigchild_action.sa_handler = &clean_up_child_process;    sigaction(SIGCHLD, &sigchild_action, NULL);    /* fork a child, and let the child process dies before parent */    pid_t c_pid;    c_pid = fork();    if (c_pid > 0)    {        printf(“in parent process, and sleep for on mininute…zZ…n”);        sleep(60);    }    else if(c_pid == 0)    {        printf(“in child process, and exit nown”);        exit(0);    }    else    {        printf(“fork failed!n”);    }    return 0;}  

参考资料

 

文章来自:http://www.cnblogs.com/hazir/p/zombie_process.html

Linux:每日Ubuntu小技巧 —— 禁用Ubuntu的屏幕锁定

当您还是Ubuntu新手时,有一些功能您还无法马上知道。例如,如何修改您的密码、禁用某些功能和创建新用户帐号等。当新用户试用Ubuntu时,经常会问一个问题:如何关闭屏幕锁定或阻止Ubuntu屏幕逐渐变暗。

这里为Ubuntu新手准备了一些简单技巧。这些技巧对于Ubuntu高手而言毫无新意,此教程也不是为Ubuntu高手而准备的,它们仅供Ubuntu新手学习使用。

Ubuntu被设计成几分钟后就自动锁定,再次使用之前您必须输入密码来解锁。如果这给您带来了太多的麻烦,那么您也许想要关闭这个自动锁屏功能,而这正是下面马上将要介绍的内容。

您计算机的自动锁定是出于安全的原因,如果您禁用或关闭了它,您的计算机将不再被锁定,任何可以物理接触到您计算机的人都可以登录并且使用它。如果对您而言,这不是什么大问题,那么继续下面学习具体如何来做。

首先,登录Ubuntu,点击控制选项(位于菜单栏的最右边的图标)图标并选择 系统设置

 

接着,点击系统设置面板里的“亮度和锁屏”图标

 

最后,关闭“锁定屏幕选项”。

 

就是这样了!如果您要重新开启它,那么再次点击“锁定屏幕选项”切换回去即可。屏幕锁定是一个很好的特性,可以保护您的计算机,但如果您知道您的隐私或信息不会有风险,那么您可以禁用它。

 

via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-disable-ubuntu-lock-screen/

译者:lenky0401 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:Linux终端:用cat命令查看不可见字符

时常,某个程序或软件并没有语法错误,并且你检查它的相关内容也确实没有发现问题。这是因为你用普通文本编辑器软件来查看的时候,有许多字符没有显示出来,但在终端使用cat命令可以很容易地检测出是否存在这些字符。

首先,我们创建一个简单的文本文件,写入一些特殊字符。打开终端,运行命令:

printf 'testing121111testing141012more testing1211001300even more testing1211111112' > /tmp/testing.txt

现在用不同的编辑器软件打开,显示的结果会不同。用简单的cat打开将显示:

$ cat /tmp/testing.txt
testing
        testing
more testing
even more testing

如果用nano或者vim打开,将会看到:

testing
            testing^L^H
more testing
    ^@^K^@even more testing

现在我们给cat加上一些选项参数,以便能显示出特殊字符来。

用cat -T命令来显示TAB键的字符^I

cat -T /tmp/testing.txt
testing
^I^Itesting
more testing
^I
  even more testing
^I^I^I

用cat -E命令来显示行尾的结束字符$

$ cat -E /tmp/testing.txt
testing$
        testing
  $
more testing$
even more testing$
            $

用简单的cat -A命令就可以显示所有不可见的字符:

$ cat -A /tmp/testing.txt
testing$
^I^Itesting^L^H$
more testing$
^I^@^K^@even more testing$
^I^I^I$

 

via: http://linuxaria.com/pills/linux-terminal-seeing-the-unseen-characters-with-cat?lang=en#more-7645

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:runningwater 校对:Caroline

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

Linux:每日Ubuntu小技巧 —— 让Windows访问你文件的最简单的方法

不管你是一个新手还是精通Ubuntu和Windows的大牛,让Windows访问Ubuntu文件的最好的方式都是使用Samba。通过许多第三方工具可以很轻松的安装和管理。

对于想要了解怎么从Windows快速访问Ubuntu文件的新用户或者新手来说,这篇短文将会告诉你该怎么做。我们的目标是要帮助新用户。我们尽量将这篇教程写得通俗易懂,以便让新手看懂而不会遇到太大的困难。

在这里我们不会太注重了解Samba是什么或者怎么将它配置加入域这类细节。我们要做的就是告诉你怎么在Ubuntu中安装和设置Samba,让Windows可以访问Ubuntu的文件。

如果你想要更多的了解Samba,我建议你Google一下,或者查询下Wikipedia。首先在Ubuntu下打开你的终端,然后运行如下命令安装Samba和其他相关的工具。

sudo apt-get install samba cifs-utils

上面这条命令将会安装Samba和其他相关的工具。在旧版的Ubuntu中,你可能需要使用smbfs替代cifs-utils。如果上面命令能够使用就更好了。

然后,使用gedit(或者其他工具)打开Samba主配置文件,然后进行如下更改。可以使用如下命令打开主配置文件:

sudo gedit /etc/samba/smb.conf

文件打开后,查找如下行并取消其注释(删掉行首的“;”)。它应该是这样的:

security = user

Linux:每日Ubuntu小技巧 —— 让Windows访问你文件的最简单的方法
Linux:每日Ubuntu小技巧 —— 让Windows访问你文件的最简单的方法

然后,向下滚动文件,找到下面这行,同时取消行首注释。

[homes]

这将会允许用户访问访问home目录中的文件夹及文件。比如说,如果你 取消 注释了[homes],用户可以通过键入服务器名加用户名的方式访问home目录。

\192.168.0.2username

然后,运行如下命令向Samba数据库添加你的账户信息。这样可以允许你使用Samba访问共享文件。

sudo smbpasswd -a usernmame

用你自己的用户名替代上述的username。

当提示创建密码时,创建并确认即可。最后,重启Samba服务或者重启计算机。

通过Windows访问文件时,点击开始 –> 运行然后输入如下内容。或者打开资源管理器输入如下内容,如图。

\ubuntu_machine_IPusername

 

Linux:每日Ubuntu小技巧 —— 让Windows访问你文件的最简单的方法
Linux:每日Ubuntu小技巧 —— 让Windows访问你文件的最简单的方法

Enjoy!

 

来自: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-easiest-way-access-files-windows/

译者:SCUSJS 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:Ubuntu——每日小贴士:Linux上的时光机

当我们比较windows和ubuntu时,会发现他们各有千秋。在还原到之前状态的能力方面,Windows做的很好,它可以很好的还原到Windows XP之前的状态,这可以让你在需要修复时节省了很多时间。

与此不同的是,Ubuntu并不能让整个系统还原到之前的状态,但是你可以对自己的个人文件或文件夹进行还原。

不过,还好现在有了TimeShift,你现在可以像Windows一样将整个Ubuntu系统还原到之前的状态,TimeShift也许没有提供Windows上还原功能的所有功能,但至少已经很接近了。

TimeShift是一款开源应用,它提供和Windows上还原系统、Mac上时间机器相同的功能。它会在预定时间内给系统保存快照,并在你需要时通过快照来实现还原。

要安装TimeShift,你需要使用如下命令来添加其PPA。

sudo apt-add-repository -y ppa:teejee2008/ppa

然后执行下面的命令来升级系统和安装TimeShift。

sudo apt-get update && sudo apt-get install timeshift

安装完之后在Dash中搜索到TimeShift,启动它并设置好首选项。第一次启动会一些时间来扫描你电脑中的可用空间和需要备份的文件。

 

Linux:Ubuntu——每日小贴士:Linux上的时光机
Linux:Ubuntu——每日小贴士:Linux上的时光机

启动后可以进行偏好设置,当然你也可以保留默认设置。如果你需要立刻备份时,可以直接点击菜单上的“备份按钮”,当然你也可以在需要时使用它对整个电脑进行还原操作。

来试试手吧!

 

via: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-restore-machine-previous-state/

译者:Timeszoro 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:每日Ubuntu小技巧——了解Root帐号

对于想了解Root帐号的Ubuntu新手,这里有一个简短的文章会让你对root账号和如何使用及为什么使用root账号有些清楚的认识。如你所见,每个版本的Ubuntu都会带一个root账号。

root账号也被称作管理员账号。你可以将root账号看作是有着同上帝一样的权力的账号。它可以删除任何文件,任何目录并对系统做出任何修改。root账号的权限是无限制的。

由于root账号过于强大,系统会自动地产生一个密码串,该密码串在系统上不可能通过加密来匹配到,如此一来用户就不能使用root帐号登入系统了。相对直接用root帐号登录,Ubuntu更支持用户使用sudo命令。

sudo命令可以使已获得授权的用户在不知道root帐号的密码也不使用root帐号的情况下,通过使用自己的密码暂时提升自己的权限。

如果你因为一些其它原因仍然想要使用root帐号并用它登录系统,很简单,给它设置一个密码就可以了。这样就可以使能root帐号了:

sudo passwd

上面的命令可以激活root帐号,但是想要用root帐号登录系统,你还必须打开被Ubuntu禁用的手动登录功能。手动登录功能允许用户输入帐号和相应的登录密码而不仅仅是从登录界面选择一个帐号登录。

要在Ubuntu 13.10中打开手动登录选项,你可以运行下面的命令

sudo gedit /etc/lightdm/lightdm.conf.d/50-unity-greeter.conf

然后如图所示添加下面这一行文字

greeter-show-manual-login=true

 

保存并重启电脑。

对于较早版本的Ubuntu,你可以在另外一个位置,即/etc/lightdm目录下找到这个配置文件。文件名可能叫lightdm.conf

修改完后,在登录界面,你就可以输入root帐号和相应的密码然后登录系统了。

 

Linux:每日Ubuntu小技巧——了解Root帐号
Linux:每日Ubuntu小技巧——了解Root帐号

如果你想锁定/禁用root帐号,使用下面的命令

sudo passwd -l root

使用愉快!

 

via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tipsknowing-root-account/

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:Linchenguang 校对:wxy

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

Linux:apt-fast:飞一般的apt-get

apt-fast是一个为 apt-getaptitude 做的“ shell脚本封装 ”,通过对每个包进行并发下载的方式可以大大减少APT的下载时间。apt-fast使用aria2c或axel下载管理器来减少APT下载时间。就像传统的apt-get包管理器一样,apt-fast支持几乎所有的apt-get功能,如, install , remove , update , upgrade , dist-upgrade 等等,并且更重要的是它也支持proxy。

在Ubuntu上安装apt-fast

使用以下PPA去安装apt-fast。apt-fast开发者说:“ 一些发行版,如PCLinux已经在他们默认的仓库中包括了apt-fast 。” 我希望它将来也包含在Ubuntu/Debian的默认仓库中。

添加apt-fast的PPA,在终端中输入以下命令。

sudo add-apt-repository ppa:apt-fast/stable

用命令更新源:

sudo apt-get update

使用命令安装apt-fast:

sudo apt-get install apt-fast

在安装期间,它将要求你输入下载包的最大并发链接数。

 

Linux:apt-fast:飞一般的apt-get
Linux:apt-fast:飞一般的apt-get

在下一个对话框里面,会问你是否要禁止apt-fast的确认对话框。选择No并继续安装。如果你选择Yes,apt-fast在安装软件包时不会问你确认与否。

Linux:apt-fast:飞一般的apt-get
Linux:apt-fast:飞一般的apt-get
 

我发现 aria2 下载管理器已经随着apt-fast的安装而自动安装。所以,你不必单独安装aria2。

如果你想重新配置apt-fast选项,你可以使用命令:

sudo dpkg-reconfigure apt-fast

用法

与apt-get功能相似,我们可以使用:

apt-fast install package
apt-fast remove package
apt-fast update
apt-fast upgrade
apt-fast dist-upgrade

及更多命令。

这是一个正在工作中的apt-fast包管理器:

 

Linux:apt-fast:飞一般的apt-get
Linux:apt-fast:飞一般的apt-get

创建别名(可选)

编辑 ~/.bashrc 文件在末尾添加下面这行。

alias apt-get=’apt-fast’

或者简单运行以下命令在你的 ~/.bashrc 中添加它。

sudo echo “alias apt-get=’apt-fast'” >> ~/.bashrc

从现在每当你运行apt-get命令去移除,更新和升级包时,它将在后台自动使用apt-fast。听起来很酷吧?

在测试期间,当下载包时我发现它与apt-get相比非常快。试一试,你一定会赞同我的看法。感谢阅读!!

 

via: http://www.unixmen.com/improve-apt-get-download-speed-apt-fast/

译者:Vito 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:安装Ubuntu13.10 – Saucy Salamander(活泼的蝾螈)后的首要事情

已于10月17日发布的 Ubuntu 13.10 Saucy Salamander,有着许多新的显著特点、较多的更新及明显的性能改进。这篇简短的操作手册(how-to)将会讨论在日常的使用中怎么样进一步提升Ubuntu 13.10的性能。

如果你已经装有Ubuntu以前的版本,想升级到最新的13.10的话,请参照着我们的指南一步一步操作。升级到Ubuntu 13.10 Saucy Salamander

首先,在全新安装Ubuntu 13.10 Saucy后,第一步就是检查如下的几件事情。

A. 它能正常的跑起来吗,如果不能,查看我们以前发表的文章来解决相应的问题

B. wifi连接速度是否正常,如果太慢,查看我们以前发表的文章来解决相应的问题

1. 更新系统

安装完Ubuntu 13.10 Saucy后,首要的事情就是更新或升级软件源库,确保你的系统中的所有软件都更新到最新版本。

$ sudo apt-get update && sudo apt-get upgrade

2. 安装Ubuntu Tweak软件

在Ubuntu系统或它的衍生发行版系统上,Ubuntu Tweak 是必须有的。它是一个应用程序,使用它,任何人都能很容易的配置Ubuntu系统。它提供了很多有用的桌面和系统选项,这些都是默认的桌面环境没有提供的。使用Ubuntu Tweak,只需要一个简单的点击,就可以安装所有需要的应用程序,还可以改变默认的从左到右的窗口按钮排列方式等等。

阅读专访Ubuntu Tweak的作者周鼎

通过PPA安装Ubuntu Tweak

注意: 稳定的 Ubuntu-Tweak PPA还没有准备好,但有一个来源于讨论组并可用的PPA可以安装Ubutun-Tweak(译注:现在已经有了正式的了)。

打开终端,输入如下命令:

$ sudo add-apt-repository ppa:tualatrix/next

$ sudo apt-get update 

$ sudo apt-get install ubuntu-tweak

这篇文章里提到的大部分应用程序,都可以在Ubuntu Tweak中心找到,并且通过点击就可安装。

如果你想学习怎么样使用Ubuntu Tweak,请阅读我们以前的帖子文章

3. 桌面环境

不喜欢Ubuntu 13.10默认的Unity,为什么不试试Cinnamon或者Gnome呢?

Cinnamon是GNOME 3的一个分支,它提供了一个有经典菜单的底部面板,这对于想使用经典底部菜单的Ubuntu用户来说相当有用。Ubuntu 13.10的默认源库里已经提供了Cinnamon,因此输入下面的命令就能安装。

sudo apt-get install cinnamon

如果你想安装最新版本的cinnamon,就增加如下步骤:

sudo add-apt-repository ppa:gwendal-lebihan-dev/cinnamon-nightly

sudo apt-get update

sudo apt-get install cinnamon

注销当前登录会话,然后在登录提示窗口选择Cinnamon作为桌面会话。就可以进入Cinnamon的桌面环境。

 

Linux:安装Ubuntu13.10 - Saucy Salamander(活泼的蝾螈)后的首要事情
Linux:安装Ubuntu13.10 – Saucy Salamander(活泼的蝾螈)后的首要事情

警告: 最新版本的Cinnamon会破坏原来的Unity,这在Ubuntu 13.04版本和13.10版本上都发现了同样的问题。希望在 Ubuntu 13.10稳定版本发布时会修复这个bug。欲了解更多信息,请参阅此链接

在Ubuntu 13.10上安装GNOME 3

要在Ubuntu 13.10上安装GNOME 3,输入如下命令:

sudo apt-get install gnome-shell ubuntu-gnome-desktop

在安装期间,安装程序会让你选择登录显示管理器(LightDM是Unity桌面默认的标准,GDM是GNOME桌面默认的标准,任一个都可以)。

 

Linux:安装Ubuntu13.10 - Saucy Salamander(活泼的蝾螈)后的首要事情
Linux:安装Ubuntu13.10 – Saucy Salamander(活泼的蝾螈)后的首要事情

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

Linux:Linux下常用文本处理命令

Linux下面有很多经典的非常有用的命令,其中处理文本的命令就有很多。这些小工具经过了几十年时间的洗礼,现在已经变成了经典,已经变成了Linux下面的标准,其实它们一直是遵循着Linux的标准。下面就让我们一起看看这些经典的Linux文本处理命令。

一. sort

文件排序, 通常用在管道中当过滤器来使用. 这个命令可以依据指定的关键字或指定的字符位置, 对文件行进行排序. 使用-m选项, 它将会合并预排序的输入文件. 想了解这个命令的全部参数请参考这个命令的info页.

二. tsort

拓扑排序, 读取以空格分隔的有序对, 并且依靠输入模式进行排序.

三. uniq

这个过滤器将会删除一个已排序文件中的重复行. 这个命令经常出现在sort命令的管道后边.

四. expand, unexpand

expand命令将会把每个tab转化为一个空格. 这个命令经常用在管道中.

unexpand命令将会把每个空格转化为一个tab. 效果与expand命令相反.

五. cut

一个从文件中提取特定域的工具. 这个命令与awk中使用的print $N命令很相似, 但是更受限. 在脚本中使用cut命令会比使用awk命令来得容易一些. 最重要的选项就是-d(字段定界符)和-f(域分隔符)选项.

六. paste

将多个文件, 以每个文件一列的形式合并到一个文件中, 合并后文件中的每一列就是原来的一个文件. 与cut结合使用, 经常用于创建系统log文件.

七. join

这个命令与paste命令属于同类命令. 但是它能够完成某些特殊的目地. 这个强力工具能够以一种特殊的形式来合并两个文件, 这种特殊的形式本质上就是一个关联数据库的简单版本.

join命令只能够操作两个文件. 它可以将那些具有特定标记域(通常是一个数字标签)的行合并起来, 并且将结果输出到stdout. 被加入的文件应该事先根据标记域进行排序以便于能够正确的匹配.

八. head

把文件的头部内容打印到stdout上(默认为10行, 可以自己修改). 这个命令有一些比较有趣的选项.

九. tail

将一个文件结尾部分的内容输出到stdout中(默认为10行). 通常用来跟踪一个系统logfile的修改情况, 如果使用-f选项的话, 这个命令将会继续显示添加到文件中的行.

十. wc

wc可以统计文件或I/O流中的”单词数量”:

十一. fold

将输入按照指定宽度进行折行. 这里有一个非常有用的选项-s, 这个选项可以使用空格进行断行(译者: 事实上只有外文才需要使用空格断行, 中文是不需要的)(请参考例子 12-23和例子 A-1).

十二. fmt

一个简单的文件格式器, 通常用在管道中, 将一个比较长的文本行输出进行”折行”.

十三. col

这个命令用来滤除标准输入的反向换行符号. 这个工具还可以将空白用等价的tab来替换. col工具最主要的应用还是从特定的文本处理工具中过滤输出, 比如groff和tbl. (译者: 主要用来将man页转化为文本.)

十四. column

列格式化工具. 通过在合适的位置插入tab, 这个过滤工具会将列类型的文本转化为”易于打印”的表格式进行输出.

十五. colrm

列删除过滤器. 这个工具将会从文件中删除指定的列(列中的字符串)并且写到文件中, 如果指定的列不存在, 那么就回到stdout. colrm 2 4

Caution: 如果这个文件包含tab和不可打印字符, 那将会引起不可预期的行为. 在这种情况下, 应该通过管道的手段使用expand和unexpand来预处理colrm.

十六. nl

计算行号过滤器. nl filename将会把filename文件的所有内容都输出到stdout上, 但是会在每个非空行的前面加上连续的行号. 如果没有filename参数, 那么就操作stdin.

nl命令的输出与cat -n非常相似, 然而, 默认情况下nl不会列出空行.

十七. pr

格式化打印过滤器. 这个命令会将文件(或stdout)分页, 将它们分成合适的小块以便于硬拷贝打印或者在屏幕上浏览. 使用这个命令的不同的参数可以完成好多任务, 比如对行和列的操作, 加入行, 设置页边, 计算行号, 添加页眉, 合并文件等等. pr命令集合了许多命令的功能, 比如nl, paste, fold, column, 和expand.

pr -o 5 –width=65 fileZZZ | more 这个命令对fileZZZ进行了比较好的分页, 并且打印到屏幕上. 文件的缩进被设置为5, 总宽度设置为65.

一个非常有用的选项-d, 强制隔行打印(与sed -G效果相同).

十八. gettext

GNU gettext包是专门用来将程序的输出翻译或者本地化为不同国家语言的工具集. 在最开始的时候仅仅支持C语言, 现在已经支持了相当数量的其它程序语言和脚本语言.

想要查看gettext程序如何在shell脚本中使用. 请参考info页.

十九. msgfmt

一个产生二进制消息目录的程序. 这个命令主要用来本地化.

二十. iconv

一个可以将文件转化为不同编码格式(字符集)的工具. 这个命令主要用来本地化.

二十一. recode

可以认为这个命令是上边iconv命令的专业版本. 这个非常灵活的并可以把整个文件都转换为不同编码格式的工具并不是Linux标准安装的一部分.

二十二. TeX, gs

TeX和Postscript都是文本标记语言, 用来对打印和格式化的视频显示进行预拷贝.

TeX是Donald Knuth精心制作的排版系统. 通常情况下, 通过编写脚本的手段来把所有的选项和参数封装起来一起传到标记语言中是一件很方便的事情.

Ghostscript (gs) 是一个 遵循GPL的Postscript解释器.

二十三. enscript

将纯文本文件转换为PostScript的工具

比如, enscript filename.txt -p filename.ps 产生一个 PostScript 输出文件filename.ps.

二十四. groff, tbl, eqn

另一种文本标记和显示格式化语言是groff. 这是一个对传统UNIX roff/troff显示和排版包的GNU增强版本. Man页使用的就是groff.

tbl表处理工具可以认为是groff的一部分, 它的功能就是将表标记转化到groff命令中.

eqn等式处理工具也是groff的一部分, 它的功能是将等式标记转化到groff命令中.

二十五. lex, yacc

lex是用于模式匹配的词汇分析产生程序. 在Linux系统上这个命令已经被flex取代了.

yacc工具基于一系列的语法规范, 产生一个语法分析器. 在Linux系统上这个命令已经被bison取代了.

二十六. tr

字符转换过滤器.

via: http://www.linuxsong.org/2011/07/linux-text-tool/#more-475 

Linux:每日Ubuntu小技巧——添加用户到已存在的组

对于刚开始使用Ubuntu的用户和新手来说,尤其是从Ubuntu中不在包含旧式的用户和组的管理工具后,管理用户和组变的富有挑战性。在先前Ubuntu的版本下,用户可以通过Gnome系统工具下的用户管理工具轻松的管理用户和组。

现在,在Ubuntu上没有了这个工具,现在唯一的工具也仅仅允许你创建、管理和删除用户,所以如果你需要在Ubuntu中从组里面添加或删除用户,那么你将需要用到命令行终端或控制台。

举个例子,如果你想要让某些用户访问文件或提升他们的访问权限,最好方式就是改变组的权限。你可以创建一个组,接着给这个组正确的权限,在添加用户到组时,用户可以获得与组相同的权限。

因为当前Ubuntu不能用工具轻易的管理组权限,这个简洁的教程,将告诉你如何用命令行完成以上操作,这仅仅是一行代码,一旦你理解了,这并不难。

开始吧,按Ctrl-Alt-T打开终端。

查看Ubuntu上所有的组,键入命令groupmod并(连按三次tab键

groupmod <连按三次tab键>

 

Linux:每日Ubuntu小技巧——添加用户到已存在的组
Linux:每日Ubuntu小技巧——添加用户到已存在的组

这会列出现在你系统上的所有用户组,现在添加用户到已存在的组吧,运行下列命令:

sudo adduser 用户名 组名

例如,如果你想添加Richard到sudo组,运行下列命令:

sudo adduser richard sudo

好了,去验证用户的相关组,运行下列命令:

id richard

试试吧!

 

via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-adding-users-existing-groups/

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:Luoxcat 校对:wxy

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

Linux:每日Ubuntu小技巧——怎样安装谷歌Chrome浏览器

对于刚刚开始使用Ubuntu并想安装谷歌Chrome浏览器的新用户来说,本文所介绍的方法是最快捷的。在Ubuntu上安装谷歌Chrome的方法有很多。一些用户喜欢直接在谷歌Chrome下载页面获得 deb 进行安装。

另一些用户喜欢通过来自Chromium的PPA进行安装。我更喜欢通过 wget 命令下载安装。通过命令行的方式是最快的,也是这篇文章想要告诉你的。

可能你已经知道,谷歌Chrome已经完成屌丝的逆袭,成为最流行的网络浏览器之一。实际上,这也是我最喜欢的浏览器。我最开始使用的是Internet Explorer,然后换成Firefox,最后又换成了谷歌Chrome。

我并不是想让你换浏览器,但是如果你想要在Ubuntu下使用Chrome,那么就去安装它吧。

要开始安装Chrome,你有一些选择。首先你可以使用浏览器去访问谷歌Chrome下载页面然后下载一个拷贝。如果你不喜欢使用命令行,你可以使用这个方法。

而对于喜欢使用终端命令行的用户来说,可以使用以下命令来下载。

cd /tmp

对于谷歌Chrome32位版本,使用如下链接:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb

对于64位版本可以使用如下链接下载:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

下载完后,运行如下命令安装。

sudo dpkg -i google-chrome*; sudo apt-get -f install

然后就搞定了!安装完成后,到Unity Dash搜索Chrome就可以启动它了。

使用愉快!

 

来自: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-install-google-chrome-browser/

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:SCUSJS 校对:Caroline

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

Linux:MAC 系统中显示中文MAN手册

最近在做中文MAN手册的翻译,发现MAC系统中的MAN命令不能像多数Linux发行版那样很好的显示中文MAN手册。

根据查找的资料,找到了解决方法:

1、首先要更新你的系统中的 groff 包,MAC中(10.8和10.9)的groff是1.18,是几年的版本了,需要升级,可以下载最新的groff 1.22 编译或者通过 port 来安装。

2、需要修改MAN的配置文件:

sudo vi /private/etc/man.conf

修改NROFF配置为:

NROFF           preconv -e utf8 | /opt/local/bin/groff -Wall -mtty-char -Tutf8 -mandoc -c

这样就可以将UTF8编码的MAN页面通过转码而被groff识别。

修改PAGER配置为:

PAGER           /usr/bin/less -isR

这样可以避免MAN手册页面中的ANSI Escape字符序列干扰(用于控制显示粗体等格式)

保存即可。

 

顺便,也说下如何彩色显示MAN的方法。

在环境变量中增加如下:

export GROFF_NO_SGR=1
export LESS_TERMCAP_mb=$'E[01;36m'
export LESS_TERMCAP_md=$'E[01;36m'
export LESS_TERMCAP_me=$'E[0m'
export LESS_TERMCAP_se=$'E[0m'
export LESS_TERMCAP_so=$'E[01;44;33m'
export LESS_TERMCAP_ue=$'E[0m'
export LESS_TERMCAP_us=$'E[01;33m'

这样MAN就是彩色了,如果希望调整颜色,可以相应修改上述的Escape代码。

不过这种方法有个副作用就是,会扰乱env这样的命令输出的显示。

所以,更好的解决方式是,使用env命令来重新定义man命令的环境:

man() {
  env GROFF_NO_SGR=1
    LESS_TERMCAP_mb=$'E[1;36m'
    LESS_TERMCAP_md=$'E[1;36m'
    LESS_TERMCAP_me=$'E[0m'
    LESS_TERMCAP_se=$'E[0m'
    LESS_TERMCAP_so=$'E[1;44;33m'
    LESS_TERMCAP_ue=$'E[0m'
    LESS_TERMCAP_us=$'E[1;33m'
    man "$@"
}

以上可以放到你的/etc/bashrc 里面。

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

Linux:在Ubuntu 13.10或者13.04上安装Rhythmbox 3.0

Rhythmbox 3.0已经发布了超过一个月了,这个版本改进了用户界面,使用Python 3来支持插件。很可惜,新版本并没有集成到13.10里面,但是你可以使用PPA来安装它(Ubuntu 13.04也支持)。

 

Rhythmox 3.0的新功能:

  • 插件现在使用Python 3;
  • 新的任务进度显示在曲目列表的下方(可以供很多东西使用包括包括轨道更换和导入作业等);
  • 支持作曲家标签;
  • 重新制作了播放控制栏;
  • 使用象征性的图片重新设计了源列表;
  • 所有东西都更好的优化过;
  • 通过不同的公开属性将CBR和VBR编码方式区分开;
  • 播放列表设置内容(浏览方式等)保存到playlists.xml文件;
  • 在适当情况下更好的使用了RTL图标;
  • 修复了IM状态和ReplayGain插件;
  • 修复了其他很多漏洞。

能在这里找到完整的Rhythmbox 3.0更新日志。

在Ubuntu 13.10或者13.04下安装Rhythmbox 3.0

 

Ubuntu 13.10 (Unity)下的Rhythmbox 3.0

因为Rhythmbox 3.0的插件使用Python 3而不是Python 2, 第三方插件 PPA里面的插件都不能在Rhythmbox里面使用了 。你可以通过手动安装的方式来使用它们中的一些(包括Equalizer插件和超酷的CoverArt browser

  • 更多信息请看这篇文章。

Rhythmbox 3.0现在可以在一个非官方PPA里面找到,它是由Jacob Zimmermann维护,为Ubuntu 13.10和13.04(及衍生系统)准备。通过以下命令添加这个PPA然后安装/升级Rhythmbox 3.0:

sudo add-apt-repository ppa:jacob/media

sudo apt-get update

sudo apt-get install rhythmbox

 

来自: http://www.webupd8.org/2013/10/install-rhythmbox-30-in-ubuntu-1310-or.html

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:SCUSJS 校对:Caroline

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

Linux:Ubuntu每日小技巧——保护你的Home文件夹

几天之前,我们向大家展示了如何在Ubuntu中改变您的home文件夹,以便只有授权用户才能够看到您文件夹中的内容。我们说过,“adduser”命令创建的用户目录,目录里面内容是所有人可读的。这意味着:默认情况下,您的机器上所有有帐号的用户,都能够浏览您home文件夹里面的内容。

要想阅读之前的文章,请点击这里.在那篇文章中,我们还介绍了如何设置权限,可以让您的home文件夹不被任何人浏览。

在这篇博客里,还可以看到如何通过加密文件目录的方式来获得同样的效果。当home文件夹被加密后,未经授权的用户将既不能看到也不能访问该目录。

加密home文件夹并不是在每个环境中对每个人都适用,所以在实际使用该功能之前,请确信自己真的需要它。

要使用加密home目录的功能,请登录到Ubuntu并运行以下命令。

sudo apt-get install ecryptfs-utils

你是无法在登录后加密当前home文件夹的,必须创建一个临时账户并登录进去。之后再运行下面这些命令,来加密你的home文件夹。

使用你当前的账户名代替下面的USERNAME。

sudo ecryptfs-migrate-home -u USERNAME

当以临时用户的身份登录后,为使你的帐号拥有root或admin权限,就需要以自己的身份运行 su+用户名的命令。系统会提示你输入密码。

su USERNAME

使用具有使用root或admin权限的帐号(译注:即拥有su权限的账号)代替USERNAME。

在这之后,运行 ecryptfs-migrate-home –u USERNAME 命令加密home文件夹。

使用被加密的账号第一次登录后,你将会看到如下截图的界面,包含更多关于加密home文件夹的信息。

 

Linux:Ubuntu每日小技巧——保护你的Home文件夹
Linux:Ubuntu每日小技巧——保护你的Home文件夹

要创建带有加密home目录的用户,运行下面的命令:

adduser –encrypt-home USERNAME

试试看吧!

 

via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-protect-home-folders/

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:rogetfan 校对:jasminepeng

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

Linux:Ubuntu每日小技巧 – 深入理解应用菜单和按钮

Ubuntu是一款很不错的操作系统。它基本上可以做到任何现代操作系统能做的事情,甚至有时候能做的更好。如果你是一个ubuntu新手,那么你现在还有很多不知道的事情。对于那些专家级用户来说十分普通的事情可能对你来说可能就不太普通了,因此这个“ubuntu每日小技巧”系列旨在帮助你和新用户轻松设置管理ubuntu。

Ubuntu有一个菜单栏。这个主菜单栏是在屏幕的顶端黑色条状栏,其包含了状态菜单或指示器和时间日期,音量键,应用的菜单和窗口管理按钮。

窗口管理按钮在主菜单(黑色条状栏)的左上角。当年你打开一个程序的时候,主菜单左上角的按钮包括关闭、最小化、最大化、和恢复大小按钮,这些按钮叫做窗口管理按钮。

应用的菜单位于窗口管理按钮的右侧。当应用打开时才显示应用菜单。

默认情况下,ubuntu隐藏了窗口应用菜单和管理按钮,只有当你把鼠标放在左侧角里的时候才能看到。如果你打开一个程序但是找不到菜单,只需要把你的鼠标移动到屏幕左上角就可以使它显示出来。

如果这让你很困惑,而且你想关闭(全局的)应用菜单而使每个程序都有自己的菜单的话,继续向下看。

运行以下命令以安装或删除应用菜单:

sudo apt-get autoremove indicator-appmenu

运行上面的命令将会删除应用菜单即全局菜单。现在,为了使改变生效,先退出然后再登录回来。

现在,当你打开一个ubuntu里面的程序的时候,每个程序就会用显示自己的菜单代替把它隐藏在全局菜单或主菜单里。

 

就是这样! 想返回原来的状态的话,运行下面的命令:

sudo apt-get install indicator-appmenu

使用愉快!

 

via: http://www.liberiangeek.net/2013/09/daily-ubuntu-tips-understanding-app-menus-buttons/

本文由 LCTT 原创翻译,Linux中国 荣誉推出

译者:crowner 校对:wxy

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

Linux:各种 NoSQL 的比较

即使关系型数据库依然是非常有用的工具,但它们持续几十年的垄断地位就要走到头了。现在已经存在无数能撼动关系型数据库地位的 NoSQL,当然,这些 NoSQL 还无法完全取代它们。(也就是说,关系型数据库还是处理关系型事务的最佳方式。)

NoSQL 与 NoSQL 之间的区别,要远大于不同的 SQL 数据库之间的区别,所以软件架构师必须要在项目一开始就选好一款合适的 NoSQL。

考虑到这种情况,本文为大家介绍以下几种 NoSQL 之间的区别:Cassandra, Mongodb, CouchDB, Redis, Riak, Couchbase (ex-Membase), Hypertable, ElasticSearch, Accumulo, VoltDB, Kyoto Tycoon, Scalaris, Neo4jHBase

最流行的 NoSQL

MongoDB 2.2版

开发语言: C++

主要特性: 保留 SQL 中一些用户友好的特性(查询、索引等)

许可证: AGPL (驱动: 采用Apache许可协议)

数据传输格式: 自定义,二进制( BSON 文档格式)

  • 主/从备份(支持自动故障切换功能)
  • 自带数据分片功能
  • 通过 javascript 表达式提供数据查询
  • 服务器端完全支持 javascript 脚本
  • 比 CouchDB 更好的升级功能
  • 数据存储使用内存映射文件技术
  • 功能丰富,性能不俗
  • 最好开启日志功能(使用 –journal 参数)
  • 在 32 位系统中,内存限制在 2.5GB
  • 空数据库占用 192MB 空间
  • 使用 GridFS(不是真正的文件系统)来保存大数据和元数据
  • 支持对地理数据建立索引
  • 可用于数据中心

应用场景:

  • 动态查询
  • 喜欢定义索引,而不是使用 map/reduce 功能
  • 高性能的大数据访问
  • 想使用 CouchDB 但数据变化频度太大

使用案例:

想布署 MySQL 或 PostgreSQL,但预先定义数据字典让你望而却步。这个时候,MongoDB 是你可以考虑的选项

Riak 1.2版

开发语言: Erlang、C、以及一些 JavaScript

主要特性: 容错机制(当一份数据失效,服务会自动切换到备份数据,保证服务一直在线 —— 译者注)

许可证: Apache

数据传输格式: HTTP/REST 架构,或自定义二进制格式

  • 可存储 BLOB(binary large object,二进制大对象,比如一张图片、一个声音文件 —— 译者注)
  • 可在分布式存储和复制存储之间作协调
  • 为了保证可验证性和安全性,Riak 在 JS 和 Erlaing 中提供提交前(pre-commit)和提交后(post-commit)钩子(hook)函数(你可以在提交数据前执行一个 hook,或者在提交数据后执行一个 hook —— 译者注)
  • JS 和 Erlang 提供映射和简化(map/reduce)编程模型
  • 使用 links 和 link walking ,用于图形化数据库(link 用于描述对象之间的关系,link walking 是一个用于查询对象关系的进程 —— 译者注)
  • 次要标记(secondaty indeces,开发者在写数据时可用多个名称来标记一个对象 —— 译者注),一次只能用一个
  • 支持大数据对象(Luwak)(Luwak 是 Riak 中的一个服务层,为大数据量对象提供简单的、面向文档的抽象,弥补了 Riak 的 Key/Value 存储格式在处理大数据对象方面的不足 —— 译者注)
  • 提供“开源”和“企业”两个版本
  • 基于Riak搜索的全文检索、建立索引和查询
  • 正在将存储后端从“Bitcask”迁移到 Google 的“LevelDB”上
  • 企业版本提供无主模式的多点复制(各点地位平等,非主从架构)和SNMP监控功能

应用场景:

  • 假如你想要类似 Dynamo 的数据库,但不想要它的庞大和复杂
  • 假如你需要良好的单点可扩展性、可用性和容错能力,但不想为多点备份买单。

使用案例:

销售点数据收集;工厂控制系统;必须实时在线的系统;需要易于升级的网站服务器

CouchDB 1.2版

开发语言: Erlang

主要特性: 数据一致性;易于使用

许可证: Apache

数据传输格式: HTTP/REST

  • 双向复制!(一种同步技术,每个备份点都有一份它们自己的拷贝,允许用户在存储点断线的情况下修改数据,当存储节点重新上线时,CouchDB 会对所有节点同步这些修改 —— 译者注)
  • 支持持续同步或者点对点同步
  • 支持冲突检测
  • 支持主主互备!(多个数据库实时同步数据,起到备份和分摊用户并行访问量的作用 —— 译者注)
  • 多版本并发控制(MVCC),写操作时不需要阻塞读操作(或者说不需要锁住数据库的读取操作)
  • 向下兼容以前版本的数据
  • 可靠的 crash-only 设计(所谓 crash-only,就是程序出错时,只需重启下程序,丢弃内存的所有数据,不需要执行复杂的数据恢复操作 —— 译者注)
  • 需要实时压缩数据
  • 视图(文档是 CouchDB 的核心概念,CouchDB 中的视图声明了如何从文档中提取数据,以及如何对提取出来的数据进行处理 —— 译者注):内嵌映射和简化(map/reduce)编程模型
  • 格式化的views字段:lists(包含把视图运行结果转换成非 JSON 格式的方法)和 shows(包含把文档转换成非 JSON 格式的方法)(在 CouchDB 中,一个 Web 应用是与一个设计文档相对应的。在设计文档中可以包含一些特殊的字段,views 字段包含永久的视图定义 —— 译者注)
  • 能够进行服务器端文档验证
  • 能够提供身份认证功能
  • 通过 _changes 函数实时更新数据!
  • 链接处理(attachment:couchDB 的每份文档都可以有一个 attachment,就像一份 email 有它的网址 —— 译者注)
  • 有个 CouchApps(第三方JS的应用)

应用场景:

  • 用于随机数据量多、需要预定义查询的地方
  • 用于版本控制比较重要的地方

使用案例:

可用于客户关系管理(CRM),内容管理系统(CMS);可用于主主互备甚至多机互备

Redis 2.4版

开发语言: C/C++

主要特性: 快到掉渣

许可证: BSD

数据传输格式: 类似 Telnet 式的交换

  • Redis 是一个内存数据库(in-memory database,简称 IMDB,将数据放在内存进行读写,这才是“快到掉渣”的真正原因 —— 译者注),磁盘只是提供数据持久化(即将内存的数据写到磁盘)的功能(这类数据库被称为“disk backed”数据库)
  • 当前不支持将磁盘作为 swap 分区,虚拟内存(VM)和 Diskstore 方式都没加到此版本(Redis 的数据持久化共有4种方式:定时快照、基于语句追加、虚拟内存、diskstore。其中 VM 方式由于性能不好以及不稳定的问题,已经被作者放弃,而 diskstore 方式还在实验阶段 —— 译者注)
  • 主从备份
  • 存储结构为简单的 key/value 或 hash 表
  • 但是操作比较复杂,比如:ZREVRANGEBYSCORE
  • 支持 INCR(INCR key 就是将key中存储的数值加一 —— 译者注)命令(对限速和统计有帮助)
  • 支持sets数据类型(以及 union/diff/inter)
  • 支持 lists (以及 queue/blocking pop)
  • 支持 hash sets (多级对象)
  • 支持 sorted sets(高效率的表,在范围查找方面有优势)
  • 支持事务处理!
  • 缓存中的数据可被标记为过期
  • Pub/Sub 实现了消息订阅和推送!

应用场景:

  • 适合布署快速多变的小规模数据(可以完全运行在存在中)

使用案例:

股价系统、分析系统、实时数据收集系统、实时通信系统、以及取代 memcached

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

Linux:Ubuntu 13.10安装后你要做的8件事

Ubuntu 13.10 已经发布了,对于那些打算安装“纯净版”的用户,安装完系统后你可以考虑下面的8件事。

 

Linux:Ubuntu 13.10安装后你要做的8件事
Linux:Ubuntu 13.10安装后你要做的8件事

1. 安装一些绚丽的小零件

Linux:Ubuntu 13.10安装后你要做的8件事
Linux:Ubuntu 13.10安装后你要做的8件事
 

系统负载 是系统监控工具GNOME里的一个小应用。它能在面板上展示出CPU、内存、网络使用、硬盘I/O等信息。点击下面的按钮从Ubuntu软件中心安装。

 

或者通过命令行进行安装:

sudo apt-get install indicator-multiload

Linux:Ubuntu 13.10安装后你要做的8件事
Linux:Ubuntu 13.10安装后你要做的8件事
 

CPU频率是一款等效于“GNOME-CPU调频”的应用。你可以实时的调整CPU的频率。点击下面的按钮从Ubuntu软件中心安装。

 

或者通过命令行安装:

sudo apt-get install indicator-cpufreq

我的天气是一款显示当前天气的应用,它能显示5天内的预报并支持四大天气服务站点:OpenWeatherMap, Yahoo, Wunderground 和 World Weather Online。

通过命令行进行安装:

sudo add-apt-repository ppa:atareao/atareao

sudo apt-get update

sudo apt-get install my-weather-indicator

 

Linux:Ubuntu 13.10安装后你要做的8件事
Linux:Ubuntu 13.10安装后你要做的8件事

Variety一款带有AppIndicator的应用,但是基本上你只需要配置一次就可以用指示器来使用此软件了。Variety是一款很酷的壁纸更换的应用,他能在设定的时间内自动下载并更换壁纸。用起来就有种高帅富的感觉。壁纸库每天都会有更新,你可以很快的切换到另外一个壁纸,收藏自己喜欢的壁纸,留着日后再用。

通过以下命令行安装:

sudo add-apt-repository ppa:peterlevi/ppa

sudo apt-get update

sudo apt-get install variety

 

Linux:Ubuntu 13.10安装后你要做的8件事
Linux:Ubuntu 13.10安装后你要做的8件事

你可能还需要一个剪切板管理器,试试Diodon 吧,这是款轻量型软件,支持文件、图像等。点击下面的按钮安装:

 

或者通过命令行安装:

sudo apt-get install diodon diodon-plugins

2. 设置 Unity

 

Linux:Ubuntu 13.10安装后你要做的8件事
Linux:Ubuntu 13.10安装后你要做的8件事

Unity Tweak Tool让用户能改变一些Unity设置,比如:自动隐藏、窗口最大化、“触发角”、Dash、Unity启动器或平视显示器、改变GTK或图标主题、改变字体和大小,移动窗口控制器到右边等。

点击下面的按钮从软件中心安装

 

或者通过命令行安装

sudo apt-get install unity-tweak-tool

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

Linux:如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等

你是否曾经有过要计算一个非常大的数据(几百GB)的需求?或在里面搜索,或其它操作——一些无法并行的操作。数据专家们,我是在对你们说。你可能有一个4核或更多核的CPU,但我们合适的工具,例如 grepbzip2wcawksed等等,都是单线程的,只能使用一个CPU内核。

借用卡通人物Cartman的话,“如何我能使用这些内核”?

要想让Linux命令使用所有的CPU内核,我们需要用到GNU Parallel命令,它让我们所有的CPU内核在单机内做神奇的map-reduce操作,当然,这还要借助很少用到的–pipes 参数(也叫做–spreadstdin)。这样,你的负载就会平均分配到各CPU上,真的。

BZIP2

bzip2是比gzip更好的压缩工具,但它很慢!别折腾了,我们有办法解决这问题。

以前的做法:

cat bigfile.bin | bzip2 --best > compressedfile.bz2

现在这样:

cat bigfile.bin | parallel --pipe --recend '' -k bzip2 --best > compressedfile.bz2

尤其是针对bzip2,GNU parallel在多核CPU上是超级的快。你一不留神,它就执行完成了。

GREP

如果你有一个非常大的文本文件,以前你可能会这样:

grep pattern bigfile.txt

现在你可以这样:

cat bigfile.txt | parallel  --pipe grep 'pattern'

或者这样:

cat bigfile.txt | parallel --block 10M --pipe grep 'pattern'

这第二种用法使用了 –block 10M参数,这是说每个内核处理1千万行——你可以用这个参数来调整每个CUP内核处理多少行数据。

AWK

下面是一个用awk命令计算一个非常大的数据文件的例子。

常规用法:

cat rands20M.txt | awk '{s+=$1} END {print s}'

现在这样:

cat rands20M.txt | parallel --pipe awk '{s+=$1} END {print s}' | awk '{s+=$1} END {print s}'

这个有点复杂:parallel命令中的–pipe参数将cat输出分成多个块分派给awk调用,形成了很多子计算操作。这些子计算经过第二个管道进入了同一个awk命令,从而输出最终结果。第一个awk有三个反斜杠,这是GNU parallel调用awk的需要。

WC

想要最快的速度计算一个文件的行数吗?

传统做法:

wc -l bigfile.txt

现在你应该这样:

cat bigfile.txt | parallel  --pipe wc -l | awk '{s+=$1} END {print s}'

非常的巧妙,先使用parallel命令‘mapping’出大量的wc -l调用,形成子计算,最后通过管道发送给awk进行汇总。

SED

想在一个巨大的文件里使用sed命令做大量的替换操作吗?

常规做法:

sed s^old^new^g bigfile.txt

现在你可以:

cat bigfile.txt | parallel --pipe sed s^old^new^g

…然后你可以使用管道把输出存储到指定的文件里。

[英文原文:Use multiple CPU Cores with your Linux commands ]
via : http://www.aqee.net/use-multiple-cpu-cores-with-your-linux-commands/ 

Linux:di – 比 df 更有用的磁盘信息工具

如果你是个Linux命令行用户,你肯定会使用df命令检查文件系统的磁盘使用情况。尽管df是一个受欢迎的命令,但仍然不能提供一些高级的功能,如一个用户实际的磁盘可用空间,以及各种有用的显示格式等。还有另一个命令行实用工具可用,不仅提供了这些高级功能也提供了df的所有特性。在本文中,我们将讨论磁盘信息工具 — di

Linux:di - 比 df 更有用的磁盘信息工具
Linux:di – 比 df 更有用的磁盘信息工具

注释 – 如果你想了解 df 更多信息, 查看 df命令教程.

di – 磁盘信息工具

Linux:di - 比 df 更有用的磁盘信息工具
Linux:di – 比 df 更有用的磁盘信息工具

从这个di帮助手册页很明显的发现 di 提供了一些很有价值的特性,值得一试。让我们看一些这个工具实际使用的例子。

测试环境

  • OS – Ubuntu 13.04
  • Shell – Bash 4.2.45
  • Application – di 4.30

一个简短的教程

下面是一些 di 工具的示例:

1. 默认的输出

默认情况下di命令生成人们易读的输出格式

这里有个示例:

$ di
Filesystem         Mount               Size     Used    Avail %Used  fs Type
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs

所以你能发现用千兆字节(G)和兆字节(M)做磁盘使用情况的数据单位。这绝对是比 df 默认的输出产生的效果好。(译注:df也可以输出带类似单位的显示,只是需要额外加参数 -h)

2. 用 -A 选项打印类似挂载点、特殊设备名称等全部字段

选项 -A可以用来极详细的打印挂载点,特殊设备名称等。

这里有个示例:

$ di -A
Mount fs Type  Filesystem
     Options
        Size     Used     Free %Used  %Free
        Size     Used    Avail %Used  %Free
        Size     Used    Avail %Used
       Inodes     Iused     Ifree %Iused
/     ext4     /dev/sda6
    rw,errors=remount-ro
       28.1G    20.2G     8.0G   72%    28%
       28.1G    21.6G     6.5G   77%    23%
       26.7G    20.2G     6.5G   75%
      1884160    389881   1494279   21%
/dev  devtmpfs udev
    rw,mode=0755
        1.5G     0.0G     1.5G    0%   100%
        1.5G     0.0G     1.5G    0%   100%
        1.5G     0.0G     1.5G    0%
       381805       571    381234    0%
/run  tmpfs    tmpfs
    rw,noexec,nosuid,size=10%,mode=0755
      300.2M     0.9M   299.3M    0%   100%
      300.2M     0.9M   299.3M    0%   100%
      300.2M     0.9M   299.3M    0%
       384191       549    383642    0%

所以你可以看到所有的字段,可以用于调试目的时打印输出。

3. 用 -a选项打印所有挂载设备

这里是个示例:

$ di -a
Filesystem         Mount               Size     Used    Avail %Used  fs Type
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
devpts             /dev/pts            0.0M     0.0M     0.0M    0%  devpts
proc               /proc               0.0M     0.0M     0.0M    0%  proc
binfmt_misc        /proc/sys/fs/bi     0.0M     0.0M     0.0M    0%  binfmt_misc
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs
none               /run/lock           0.0M     0.0M     0.0M    0%  tmpfs
none               /run/shm            0.0M     0.0M     0.0M    0%  tmpfs
none               /run/user           0.0M     0.0M     0.0M    0%  tmpfs
gvfsd-fuse         /run/user/himan     0.0M     0.0M     0.0M    0%  fuse.gvfsd-fuse
sysfs              /sys                0.0M     0.0M     0.0M    0%  sysfs
none               /sys/fs/cgroup      0.0M     0.0M     0.0M    0%  tmpfs
none               /sys/fs/fuse/co     0.0M     0.0M     0.0M    0%  fusectl
none               /sys/kernel/deb     0.0M     0.0M     0.0M    0%  debugfs
none               /sys/kernel/sec     0.0M     0.0M     0.0M    0%  securityfs

所以你能看到与所有设备相关的所有信息,被打印出来了。

4. 用 -c 选项用逗号作为值的分隔符

选项 -c 用命令分隔的值将附上双引号

这里是个示例:

$ di -c
s,m,b,u,v,p,T
/dev/sda6,/,28.1G,20.2G,6.5G,77%,ext4
udev,/dev,1.5G,0.0G,1.5G,0%,devtmpfs
tmpfs,/run,300.2M,0.9M,299.3M,0%,tmpfs

如上,你可以看到打印了用逗号分隔符输出的值。(译注:这种输出便于作为其他程序的输入解析)

5. 用 -g 选项通过千兆字节(G)打印大小

下面是个示例:

$ di -g
Filesystem         Mount              Gibis     Used    Avail %Used  fs Type
/dev/sda6          /                   28.1     20.2      6.5   77%  ext4
udev               /dev                 1.5      0.0      1.5    0%  devtmpfs
tmpfs              /run                 0.3      0.0      0.3    0%  tmpfs

当然,你能看到所有与大小有关的值都用千兆字节(G)打印出来。

同样的你可以用 -k 和 -m 选项来分别的显示千字节(K)大小和兆字节(M)大小。

6. 通过 -I 选项显示特定的文件系统类型的相关信息

假设你想显示只跟tmpfs文件系统相关的信息。下面将告诉你如何用 -I 选项完成任务。

$ di -I tmpfs
Filesystem         Mount               Size     Used    Avail %Used  fs Type
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs
none               /run/lock           5.0M     0.0M     5.0M    0%  tmpfs
none               /run/shm            1.5G     0.0G     1.5G    0%  tmpfs
none               /run/user         100.0M     0.0M   100.0M    0%  tmpfs
none               /sys/fs/cgroup      0.0M     0.0M     0.0M    0%  tmpfs

Ok 你能看到只有tmpfs类型相关文件系统信息被输出并显示出来了。

7. 用 -n 选项跳过标题行的输出

如果你正试图通过一个脚本(或程序)解析该命令的输出结果并希望 di 命令跳过显示的标题行,那么用 -n 选项是绝佳的方法。

下面是个示例:

$ di -n
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs

如上,你能发现输出中并没有显示标题行。

8. 通过 -t 选项在文件系统列表底下再打印一行总计行

如果想要显示所有相关列的总数,用 -t 选项。

示例:

$ di -t
Filesystem         Mount               Size     Used    Avail %Used  fs Type
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs
                   Total              29.9G    20.2G     8.3G   72%

观察到最后一行的值为所有文件系统的统计数据。

9. 通过 -s 选项 排序输出

-s选项可用于排序该命令的输出结果(译注:默认按照挂载点名称排序)

下面告诉你如何反向排序输出:

$ di -sr
Filesystem         Mount               Size     Used    Avail %Used  fs Type
tmpfs              /run              300.2M     0.9M   299.3M    0%  tmpfs
udev               /dev                1.5G     0.0G     1.5G    0%  devtmpfs
/dev/sda6          /                  28.1G    20.2G     6.5G   77%  ext4

你也可以在-s后添加子选项’r’逆序排序输出。

类似的,你可以使用 -s 选项做一些其他类型的排序.以下是摘自man手册供您参考:

    -s 排序方式

    可以指定排序方式。默认排序方式的按照挂载点的名称进行排序。支持如下的排序方式:

          m :按照挂载点名称排序(默认)

          n  :不排序(即按照在挂载表/etc/fstab中的顺序)

          s   :按照特殊设备名称

          t   :按照文件系统类型

          r   :逆序排序

排序方式可以组合使用,如:  di –stsrm :按照类型、设备、挂载点逆序排序。di –strsrm :按照类型、设备逆序、挂载点逆序排序。

10. 通过 -f 选项指定输出格式

你可以通过结合-f选项和其子选项指定输出格式字符串。

例如,用 -fm,打印挂载点的名称。

示例:

$ di -fm
Mount
/
/dev
/run

如上你可以看到只有挂载点的名字被打印出来。

同样的,打印文件系统的类型,用 -ft

示例:

$ di -ft
fsType
ext4
devtmpf
tmpfs

如果你想快速查找,这里有个其他可用的格式选项截图.

 

更完整的选项,参考di命令man文档

下载/安装

这里有一些关于di命令的重要链接:

命令行工具 di 也能通过apt、yum等命令在命令行下载和安装。Ubuntu用户也可以从Ubuntu 软件中心下载这个命令。

优点

  • 提供了许多高级功能
  • 跨平台

缺点

  • 在大多数的Linux发行版没有预装
  • 大量选项需要学习

结论

最后,di命令提供了一些非常有用的特性,比df命令更强大。如果你正在寻找一个类似df,但比df更强大的关于磁盘信息的命令行工具,那么di是最理想的选择。试试吧,包你满意!!!

你试过di或任何其他类似df工具?请跟我们分享你的经验!

 

via: http://mylinuxbook.com/di-a-disk-information-utility/

译者:Luoxcat 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:戴文的Linux内核专题:02 源代码

在下载并解压内核源代码后,用户可以看到许多文件夹和文件。尝试去找一个特定的文件或许是一个挑战。谢天谢地,源代码以一个特定的方式组织的。这使开发者能够轻松找到任何文件或者内核的一部分。

内核源代码的根目录下包含了以下文件夹

arch
block
crypto
Documentation
drivers
firmware
fs
include
init
ipc
kernel
lib
mm
net
samples
scripts
security
sound
tools
usr
virt

还有一些文件在源代码的根目录下。它们会在下面列出。

COPYING -许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。然而,没有人可以出售源代码。

CREDITS – 贡献者列表

Kbuild – 这是一个设置一些内核设定的脚本。打个比方,这个脚本设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。

Kconfig – 这个脚本会在开发人员配置内核的时候用到,这会在以后的文章中讨论。

MAINTAINERS – 这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。当一个开发者在内核中发现一个问题,并希望能够报告给能够处理这个问题的维护者时,这是是很有用的。

Makefile – This script is the main file that is used to compile the kernel. This file passes parameters to the compiler as well as the list of files to compile and any other necessary information. 这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。

README – 这个文档提供给开发者想要知道的如何编译内核的信息。

REPORTING-BUGS – 这个文档提供如何报告问题的信息。

内核的代码是以“.c”或“.h”为扩展名的文件。 “.c”的扩展名表明内核是用众多的编程语言之一的C语言写的, “h”的文件是头文件,而他们也是用C写成。头文件包含了许多“.c”文件需要使用的代码,因为他们可以引入已有的代码而不是重新编写代码,这节省了程序员的时间。否则,一组执行相同的动作的代码,将存在许多或全部都是“c”文件。这也会消耗和浪费硬盘空间。(译注:头文件不仅仅可节省重复编码,而且代码复用也会降低代码错误的几率)

所有上面列出的文件夹中的文件都组织得很好。文件夹名称至少可以帮助开发人员很好地猜测文件夹中的内容。下面提供了一个目录树和描述。

arch – 这个文件夹包含了一个Kconfig文件,它用于设置这个目录里的源代码编译所需的一系列设定。每个支持的处理器架构都在它相应的文件夹中。如,Alpha处理器的源代码在alpha文件夹中。请记住,随着时间的推移,一些新的处理器将被支持,有些会被放弃。对于Linux v3.9.4,arch下有以下文件夹:

alpha
arc
arm
arm64
avr32
blackfin
c6x
cris
frv
h8300
hexagon
ia64
m32r
m68k
metag
microblaze
mips
mn10300
openrisc
parisc
powerpc
s390
score
sh
sparc
tile
um
unicore32
x86
xtensa

block – 此文件夹包含块设备驱动程序的代码。块设备是以数据块方式接收和发送的数据的设备。数据块都是一块一块的数据而不是持续的数据流。

crypto – 这个文件夹包含许多加密算法的源代码。例如,“sha1_generic.c”这个文件包含了SHA1加密算法的代码。

Documentation – 此文件夹包含了内核信息和其他许多文件信息的文本文档。如果开发者需要一些信息,他们也许能在这里找到所需要的信息。

drivers – 该目录包含了驱动代码。驱动是一个控制硬件的软件。例如,要让计算机知道键盘并使其可用,键盘驱动是必要的。这个文件夹中存在许多文件夹。每个文件夹都以硬件的种类或者型号命名。例如,’bluetooth’包含了蓝牙驱动程序的代码。还有其他很明显的驱动像SCSI、USB和火线等。有些驱动程序可能会比较难找到。例如,操纵杆驱动不在’joystick’文件夹中,它们却在./drivers/input/joystick。同样键盘和鼠标驱动也在这个input文件夹中。 ‘Macintosh’包含了苹果的硬件代码。 ‘Xen’包含了Xen hypervisor代码。(hypervisor是一种允许用户在一台计算机上运行多个操作系统的软件或硬件。这意味着在Xen允许用户在一台计算机上同时运行的两个或两个以上的Linux系统。用户还可以运行Windows,Solaris,FreeBSD或其他操作系统在Linux系统上。)driver文件夹下还有许多其他的文件夹,但他们在这篇文章中无法一一列举,他们将在以后的文章中提到。

firmware – fireware中包含了让计算机读取和理解从设备发来的信号的代码。举例来说,一个摄像头管理它自己的硬件,但计算机必须了解摄像头给计算机发送的信号。Linux系统会使用vicam固件(firmware)来理解摄像头的通讯。否则,没有了固件,Linux系统将不知道如何处理摄像头发来的信息。另外,固件同样有助于将Linux系统发送消息给该设备。这样Linux系统可以告诉摄像头重新调整或关闭摄像头。

fs – 这是文件系统的文件夹。理解和使用的文件系统所需要的所有的代码就在这里。在这个文件夹里,每种文件系统都有自己的文件夹。例如,ext4文件系统的代码在ext4文件夹内。 在fs文件夹内,开发者会看到一些不在文件夹中的文件。这些文件用来控制整个文件系统。例如,mount.h中会包含挂载文件系统的代码。文件系统是以结构化的方式来存储和管理的存储设备上的文件和目录。每个文件系统都有自己的优点和缺点。这是由文件系统的设计决定的。举例来说,NTFS文件系统支持的透明压缩(当启用时,会在用户不知道的情况下自动压缩存储文件)。大多数文件系统缺乏此功能,但如果在fs文件夹里编入相应的文件,它们也有这种能力。

include – include包含了内核所需的各种头文件.这个名字来自于C语言用”include”来在编译时导入头文件。

init – init文件夹包含了内核启动的处理代码(INITiation)。main.c是内核的核心文件,这是用来衔接所有的其他文件的源代码主文件。

ipc – IPC代表进程间通讯。此文件夹中的代码是作为内核与进程之间的通信层。内核控制着硬件,因此程序只能请求内核来执行任务。假设用户有一个打开DVD托盘的程序。程序不直接打开托盘,相反,该程序通知内核托盘应该被打开。然后,内核给硬件发送一个信号去打开托盘。这些代码同样管理kill信号。举例来说,当系统管理员打开进程管理器去关闭一个已经锁死的程序,这个关闭程序的信号被称为kill信号。内核接收到信号,然后内核会要求程序停止或直接把进程从内存和CPU中移除(取决于kill的类型)。命令行中的管道同样用于进程间通信。管道会告诉内核在某个内存页上写入输出数据。程序或者命令得到的数据是来自内存页上的某个给定的指针。

kernel – 这个文件夹中的代码控制内核本身。例如,如果一个调试器需要跟踪问题,内核将使用这个文件夹中代码来将内核指令通知调试器跟踪内核进行的所有动作。这里也有跟踪时间的代码。在内核文件夹下有个”power”文件夹,这里的代码可以使计算机重新启动、关机和挂起。

lib – 这个文件夹包含了内核需要引用的一系列内核库文件代码。

mm – mm文件夹中包含了内存管理代码。内存并不是任意存储在RAM芯片上的。相反,内核小心地将数据放在RAM芯片上。内核不会覆盖任何正在使用或保存重要数据的内存区域。

net – net文件夹中包含了网络协议代码。这包括IPv6、AppleTalk、以太网、WiFi、蓝牙等的代码,此外处理网桥和DNS解析的代码也在net目录。

samples – 此文件夹包含了程序示例和正在编写中的模块代码。假设一个新的模块引入了一个想要的有用功能,但没有程序员说它已经可以正常运行在内核上。那么,这些模块就会移到这里。这给了新内核程序员一个机会通过这个文件夹来获得帮助,或者选择一个他们想要协助开发的模块。

scripts – 这个文件夹有内核编译所需的脚本。最好不要改变这个文件夹内的任何东西。否则,您可能无法配置或编译内核。

security – 这个文件夹是有关内核安全的代码。它对计算机免于受到病毒和黑客的侵害很重要。否则,Linux系统可能会遭到损坏。关于内核的安全性,将在以后的文章中讨论。

sound – 这个文件夹中包含了声卡驱动。

tools – 这个文件夹中包含了和内核交互的工具。

usr – 还记得在以前的文章中提到vmlinuz和其他类似的文件么?这个文件夹中的代码在内核编译完成后创建这些文件。

virt – 此文件夹包含了虚拟化代码,它允许用户一次运行多个操作系统。这与先前提到的Xen是不同的。通过虚拟化,客户机操作系统就像任何其他运行在Linux主机的应用程序一样运行。通过Xen这样的hypervisor(注:虚拟机管理程序),两个操作系统可以同时管理硬件。在虚拟化中,在客户机操作系统上运行在Linux内核上,而在hypervisor中,它没有客户系统并且所有的系统不互相依赖。

提示: 绝不在内核源代码内移动文件,除非你知道你在做什么。否则,编译会由于缺失文件失败。

Linux内核的文件夹结构保持相对稳定。内核开发者会做一些修改,但总体来说,这些设置对整个内核版本都是一样。驱动程序文件夹的布局也基本保持一样。

 

via: http://www.linux.org/threads/the-linux-kernel-the-source-code.4204/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:戴文的Linux内核专题:03 驱动程序

驱动程序是使内核能够沟通和操作硬件或协议(规则和标准)的小程序。没有驱动程序,内核不知道如何与硬件沟通或者处理协议(内核实际上先发送指令给BIOS,然后BIOS传给硬件)。 Linux的内核代码在驱动程序文件夹中以源代码的形式包含了许多驱动程序。驱动文件夹中的每个文件夹会在下面说明。在配置和 编译内核时,这样有助于你了解驱动程序。否则,用户可能会在编译时加入不必要的或者漏掉重要的驱动。驱动代码通常会包含一个单行注释来指出驱动的目的。 比如,tc的驱动代码,有一行的注释说是用于TURBOchannel总线。由于这些文档,用户应该看驱动前几行的注释来了解它们的用途。

有几个术语你应该已经知道,所以下面的信息应该是明白的。一个I/O设备指的是输入/输出设备。例如调制解调器和网卡,他们发送和接收数据。监视器是一个输出设备 – 只有信息出来。键盘、鼠标和游戏杆是数据输入系统。存储设备用于存储数据,例如SD卡、硬盘、光盘、存储卡等。CPU(处理器)是计算机的“大脑”或“心脏” ,如果没有它,电脑就无法运作。主板则是一块连接板上不同组件的印刷线路板。主板及各个组件是计算机的运行的基础。许多计算机用户说主板是电脑的心脏(主板上有CPU)。主板包含了用于连接外设的端口,外设包括输入、输出和存储设备。总线是主板的电路,它连接着外设。网络设备用于两台或多台计算机之间的连接。端口则是用户可以插入另外一台设备或一根电缆的设备,例如,用户可以将插入一根火线记忆棒插入一个火线端口;将以太网电缆插入一个以太网端口。光碟的读取是利用激光,从可以散射或反射的激光的反射面上读出数据,一个常见的 光盘是DVD。许多系统说自己是32位或者64位,这指的是寄存器、地址总线或数据总线的位数。例如,在一块64位的主板上,数据总线(组件之间的银线)有64根并排到目的的线。存储器地址以位(0和1)的形式在存储器中编址,因此,一个32位存储地址包含32个0和1来表示存储器上的某处地址。

Linux:戴文的Linux内核专题:03 驱动程序
Linux:戴文的Linux内核专题:03 驱动程序

许多驱动程序是通用驱动程序,这意味着一个通用键盘驱动可以使内核可以处理几乎所有的键盘。然而,有些驱动是专用驱动,像苹果和Commodore就分别为苹果电脑和Amiga系统制造了专门的硬件。Linux内核中已经包含了许多诸如智能手机、苹果、Amiga系统、PS3、Android平板,和许多其他设备的驱动程序。

注意有些设备的驱动不在本目录中。比如,射频驱动在net和media文件夹下。

accessibility – 这些驱动提供支持一些辅助设备。在Linux 3.9.4中,这个文件夹中只有一个驱动就是盲文设备驱动。

acpi – 高级配置和电源接口(ACPI : Advanced Configuration and Power Interface)驱动用来管理电源使用。

amba – 高级微控制器总线架构(AMBA : Advanced Microcontroller Bus Architecture)是与片上系统(SoC)的管理和互连的协议。SoC是一块包含许多或所有必要的计算机组件的芯片。这里的AMBA驱动让内核能够运行在这上面。

ata – 该目录包含PATA和SATA设备的驱动程序。串行ATA(SATA)是一种连接主机总线适配器到像硬盘那样的存储器的计算机总线接口。并行ATA(PATA)用于连接存储设备,如硬盘驱动器,软盘驱动器,光盘驱动器的标准。PATA就是我们所说的IDE。

atm – 异步通信模式(ATM : Asynchronous Transfer Mode)是一种通信标准。这里有各种接到PCI桥的驱动(他们连接到PCI总线)和以太网控制器(控制以太网通信的集成电路芯片)。

auxdisplay – 这个文件夹提供了三个驱动。LCD 帧缓存(framebuffer)驱动、LCD控制器驱动和一个LCD驱动。这些驱动用于管理液晶显示器 —— 液晶显示器会在按压时显示波纹。注意:按压会损害屏幕,所以请不要用力戳LCD显示屏。

base – 这是个重要的目录包含了固件、系统总线、虚拟化能力等基本的驱动。

bcma – 这些驱动用于使用基于AMBA协议的总线。AMBA是由博通公司开发。

block – 这些驱动提供对块设备的支持,像软驱、SCSI磁带、TCP网络块设备等等。

bluetooth – 蓝牙是一种安全的无线个人区域网络标准(PANs)。蓝牙驱动就在这个文件夹,它允许系统使用各种蓝牙设备。例如,一个蓝牙鼠标不用电缆,并且计算机有一个电子狗(小型USB接收器)。Linux系统必须能够知道进入电子狗的信号,否则蓝牙设备无法工作。

bus – 这个目录包含了三个驱动。一个转换ocp接口协议到scp协议。一个是设备间的互联驱动,第三个是用于处理互联中的错误处理。

cdrom – 这个目录包含两个驱动。一个是cd-rom,包括DVD和CD的读写。第二个是gd-rom(只读GB光盘),GD光盘是1.2GB容量的光盘,这像一个更大的CD或者更小的DVD。GD通常用于世嘉游戏机中。

char – 字符设备驱动就在这里。字符设备每次传输数据传输一个字符。这个文件夹里的驱动包括打印机、PS3闪存驱动、东芝SMM驱动和随机数发生器驱动等。

clk – 这些驱动用于系统时钟。

clocksource – 这些驱动用于作为定时器的时钟。

connector – 这些驱动使内核知道当进程fork并使用proc连接器更改UID(用户ID)、GID(组ID)和SID(会话ID)。内核需要知道什么时候进程fork(CPU中运行多个任务)并执行。否则,内核可能会低效管理资源。

cpufreq – 这些驱动改变CPU的电源能耗。

cpuidle – 这些驱动用来管理空闲的CPU。一些系统使用多个CPU,其中一个驱动可以让这些CPU负载相当。

crypto – 这些驱动提供加密功能。

dca – 直接缓存访问(DCA : Direct Cache Access)驱动允许内核访问CPU缓存。CPU缓存就像CPU内置的RAM。CPU缓存的速度比RAM更快。然而,CPU缓存的容量比RAM小得多。CPU在这个缓存系统上存储了最重要的和执行的代码。

devfreq – 这个驱动程序提供了一个通用的动态电压和频率调整(DVFS : Generic Dynamic Voltage and Frequency Scaling)框架,可以根据需要改变CPU频率来节约能源。这就是所谓的CPU节能。

dio – 数字输入/输出(DIO :Digital Input/Output)总线驱动允许内核可以使用DIO总线。

dma – 直接内存访问(DMA)驱动允许设备无需CPU直接访问内存。这减少了CPU的负载。

edac – 错误检测和校正( Error Detection And Correction)驱动帮助减少和纠正错误。

eisa – 扩展工业标准结构总线(Extended Industry Standard Architecture)驱动提供内核对EISA总线的支持。

extcon – 外部连接器(EXTernal CONnectors)驱动用于检测设备插入时的变化。例如,extcon会检测用户是否插入了USB驱动器。

firewire – 这些驱动用于控制苹果制造的类似于USB的火线设备。

firmware – 这些驱动用于和像BIOS(计算机的基本输入输出系统固件)这样的设备的固件通信。BIOS用于启动操作系统和控制硬件与设备的固件。一些BIOS允许用户超频CPU。超频是使CPU运行在一个更快的速度。CPU速度以MHz(百万赫兹)或GHz衡量。一个3.7 GHz的CPU的的速度明显快于一个700Mhz的处理器。

gpio – 通用输入/输出(GPIO :General Purpose Input/Output)是可由用户控制行为的芯片的管脚。这里的驱动就是控制GPIO。

gpu – 这些驱动控制VGA、GPU和直接渲染管理(DRM :Direct Rendering Manager )。VGA是640*480的模拟计算机显示器或是简化的分辨率标准。GPU是图形处理器。DRM是一个Unix渲染系统。

hid – 这驱动用于对USB人机界面设备的支持。

hsi – 这个驱动用于内核访问像Nokia N900这样的蜂窝式调制解调器。

hv – 这个驱动用于提供Linux中的键值对(KVP :Key Value Pair)功能。

hwmon – 硬件监控驱动用于内核读取硬件传感器上的信息。比如,CPU上有个温度传感器。那么内核就可以追踪温度的变化并相应地调节风扇的速度。

hwspinlock – 硬件转锁驱动允许系统同时使用两个或者更多的处理器,或使用一个处理器上的两个或更多的核心。

i2c – I2C驱动可以使计算机用I2C协议处理主板上的低速外设。系统管理总线(SMBus :System Management Bus)驱动管理SMBus,这是一种用于轻量级通信的two-wire总线。

ide – 这些驱动用来处理像CDROM和硬盘这些PATA/IDE设备。

idle – 这个驱动用来管理Intel处理器的空闲功能。

iio – 工业I/O核心驱动程序用来处理数模转换器或模数转换器。

infiniband – Infiniband是在企业数据中心和一些超级计算机中使用的一种高性能的端口。这个目录中的驱动用来支持Infiniband硬件。

input – 这里包含了很多驱动,这些驱动都用于输入处理,包括游戏杆、鼠标、键盘、游戏端口(旧式的游戏杆接口)、遥控器、触控、耳麦按钮和许多其他的驱动。如今的操纵杆使用USB端口,但是在上世纪80、90年代,操纵杆是插在游戏端口的。

iommu – 输入/输出内存管理单元(IOMMU :Input/Output Memory Management Unit)驱动用来管理内存管理单元中的IOMMU。IOMMU连接DMA IO总线到内存上。IOMMU是设备在没有CPU帮助下直接访问内存的桥梁。这有助于减少处理器的负载。

ipack – Ipack代表的是IndustryPack。 这个驱动是一个虚拟总线,允许在载体和夹板之间操作。

irqchip – 这些驱动程序允许硬件的中断请求(IRQ)发送到处理器,暂时挂起一个正在运行的程序而去运行一个特殊的程序(称为一个中断处理程序)。

isdn – 这些驱动用于支持综合业务数字网(ISDN),这是用于同步数字传输语音、视频、数据和其他网络服务使用传统电话网络的电路的通信标准。

leds – 用于LED的驱动。

lguest – lguest用于管理客户机系统的中断。中断是CPU被重要任务打断的硬件或软件信号。CPU接着给硬件或软件一些处理资源。

macintosh – 苹果设备的驱动在这个文件夹里。

mailbox – 这个文件夹(pl320-pci)中的驱动用于管理邮箱系统的连接。

md – 多设备驱动用于支持磁盘阵列,一种多块硬盘间共享或复制数据的系统。

media – 媒体驱动提供了对收音机、调谐器、视频捕捉卡、DVB标准的数字电视等等的支持。驱动还提供了对不同通过USB或火线端口插入的多媒体设备的支持。

memory – 支持内存的重要驱动。

memstick – 这个驱动用于支持Sony记忆棒。

message – 这些驱动用于运行LSI Fusion MPT(一种消息传递技术)固件的LSI PCI芯片/适配器。LSI大规模集成,这代表每片芯片上集成了几万晶体管、

mfd – 多用途设备(MFD)驱动提供了对可以提供诸如电子邮件、传真、复印机、扫描仪、打印机功能的多用途设备的支持。这里的驱动还给MFD设备提供了一个通用多媒体通信端口(MCP)层。

misc – 这个目录包含了不适合在其他目录的各种驱动。就像光线传感器驱动。

mmc – MMC卡驱动用于处理用于MMC标准的闪存卡。

mtd – 内存技术设备(MTD :Memory technology devices)驱动程序用于Linux和闪存的交互,这就就像一层闪存转换层。其他块设备和字符设备的驱动程序不会以闪存设备的操作方式来做映射。尽管USB记忆卡和SD卡是闪存设备,但它们不使用这个驱动,因为他们隐藏在系统的块设备接口后。这个驱动用于新型闪存设备的通用闪存驱动器驱动。

net – 网络驱动提供像AppleTalk、TCP和其他的网络协议。这些驱动也提供对调制解调器、USB 2.0的网络设备、和射频设备的支持。

nfc – 这个驱动是德州仪器的共享传输层之间的接口和NCI核心。

ntb – 不透明的桥接驱动提供了在PCIe系统的不透明桥接。PCIe是一种高速扩展总线标准。

nubus – NuBus是一种32位并行计算总线。用于支持苹果设备。

of – 此驱动程序提供设备树中创建、访问和解释程序的OF助手。设备树是一种数据结构,用于描述硬件。

oprofile – 这个驱动用于从驱动到用户空间进程(运行在用户态下的应用)评测整个系统。这帮助开发人员找到性能问题

parisc – 这些驱动用于HP生产的PA-RISC架构设备。PA-RISC是一种特殊指令集的处理器。

parport – 并口驱动提供了Linux下的并口支持。

pci – 这些驱动提供了PCI总线服务。

pcmcia – 这些是笔记本的pc卡驱动

pinctrl – 这些驱动用来处理引脚控制设备。引脚控制器可以禁用或启用I/O设备。

platform -这个文件夹包含了不同的计算机平台的驱动像Acer、Dell、Toshiba、IBM、Intel、Chrombooks等等。

pnp – 即插即用驱动允许用户在插入一个像USB的设备后可以立即使用而不必手动配置设备。

power – 电源驱动使内核可以测量电池电量,检测充电器和进行电源管理。

pps – Pulse-Per-Second驱动用来控制电流脉冲速率。这用于计时。

ps3 – 这是Sony的游戏控制台驱动- PlayStation3。

ptp – 图片传输协议(PTP)驱动支持一种从数码相机中传输图片的协议。

pwm – 脉宽调制(PWM)驱动用于控制设备的电流脉冲。主要用于控制像CPU风扇。

rapidio – RapidIO驱动用于管理RapidIO架构,它是一种高性能分组交换,用于电路板上交互芯片的交互技术,也用于互相使用底板的电路板。

regulator – 校准驱动用于校准电流、温度、或其他可能系统存在的校准硬件。

remoteproc – 这些驱动用来管理远程处理器。

rpmsg – 这个驱动用来控制支持大量驱动的远程处理器通讯总线(rpmsg)。这些总线提供消息传递设施,促进客户端驱动程序编写自己的连接协议消息。

rtc – 实时时钟(RTC)驱动使内核可以读取时钟。

s390 – 用于31/32位的大型机架构的驱动。

sbus – 用于管理基于SPARC的总线驱动。

scsi – 允许内核使用SCSI标准外围设备。例如,Linux将在与SCSI硬件传输数据时使用SCSI驱动。

sfi -简单固件接口(SFI)驱动允许固件发送信息表给操作系统。这些表的数据称为SFI表。

sh – 该驱动用于支持SuperHway总线。

sn – 该驱动用于支持IOC3串口。

spi – 这些驱动处理串行设备接口总线(SPI),它是一个在在全双工下运行的同步串行数据链路标准,。全双工是指两个设备可以同一时间同时发送和接收信息。双工指的是双向通信。设备在主/从模式下通信(取决于设备配置)。

ssb – ssb(Sonics Silicon Backplane)驱动提供对在不同博通芯片和嵌入式设备上使用的迷你总线的支持。

staging – 该目录含有许多子目录。这里所有的驱动还需要在加入主内核前经过更多的开发工作。

target – SCSI设备驱动

tc – 这些驱动用于TURBOchannel,TURBOchannel是数字设备公司开发的32位开放总线。这主要用于DEC工作站。

thermal – thermal驱动使CPU保持较低温度。

tty – tty驱动用于管理物理终端连接。

uio – 该驱动允许用户编译运行在用户空间而不是内核空间的驱动。这使用户驱动不会导致内核崩溃。

usb – USB设备允许内核使用USB端口。闪存驱动和记忆卡已经包含了固件和控制器,所以这些驱动程序允许内核使用USB接口和与USB设备。

uwb – Ultra-WideBand驱动用来管理短距离,高带宽通信的超低功耗的射频设备

vfio – 允许设备访问用户空间的VFIO驱动。

vhost – 这是用于宿主内核中的virtio服务器驱动。用于虚拟化中。

video – 这是用来管理显卡和监视器的视频驱动。

virt – 这些驱动用来虚拟化。

virtio – 这个驱动用来在虚拟PCI设备上使用virtio设备。用于虚拟化中。

vlynq – 这个驱动控制着由德州仪器开发的专有接口。这些都是宽带产品,像WLAN和调制解调器,VOIP处理器,音频和数字媒体信号处理芯片。

vme – WMEbus最初是为摩托罗拉68000系列处理器开发的总线标准

w1 – 这些驱动用来控制one-wire总线。

watchdog – 该驱动管理看门狗定时器,这是一个可以用来检测和恢复异常的定时器。

xen – 该驱动是Xen管理程序系统。这是个允许用户运行多个操作系统在一台计算机的软件或硬件。这意味着xen的代码将允许用户在同一时间的一台计算机上运行两个或更多的Linux系统。用户也可以在Linux上运行Windows、Solaris、FreeBSD、或其他操作系统。

zorro – 该驱动提供Zorro Amiga总线支持。

 

via: http://www.linux.org/threads/the-linux-kernel-drivers.4205/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:写给Git初学者的7个建议

当我刚刚开始使用Git的版本控制时,我根本不确定我付出那么多时间是不是会得到回报。Branch、Stage、Stash,这些Git名词对我来说都非常陌生。

而今天的我已不能想象生活没有Git会变成什么样。Git不仅提供了我非常需要的版本控制功能,还让我变成一个更优秀的程序员。

这里有一系列可以帮助你的小贴士,可以让Git成为你开发工作中非常重要的一部分。

 

第一条:花时间去学习Git的基本操作

学习Git的基本操作并不是要求你把整个Git文档从头到尾读完(但如果这就是你的方式,我也不会反对)。

Git里面有太多的教育内容,我很确定里面一定有对你胃口的最佳学习方式。

Linux:写给Git初学者的7个建议
Linux:写给Git初学者的7个建议

看一下以下这些Git学习资源吧:

 

第二条:从简单的Git工作流开始

少即是多。

常常的,Git会和一个复杂的工作流联系起来。不过我可以这么说:你还暂时不需要为了Git的诸多好处,而一下子变成Git大师。

Git的工作流是可以非常简单的 —- 而且在许多情况下你需要的就是这么简单。你当然可以用multiple remote repositories、issue pull request、rebase changes等等,但是你不想用这些的话完全可以不用。

从简单的工作流入手也会使日后添加复杂性或者使用Git高级功能变得简单。当你需要使用这些功能的时候,Git已经准备好了。

这里有一些不同的Git工作流的例子,你可以从他们的想法中得到启发

总的来说:不要因为觉得Git什么都要学就压力很大,你完全可以从今天开始使用Git。

 

第三条:不要再害怕犯错误

Git最出色的一点是:它几乎是100%易上手误操作的。

记住以下几点会让你晚上睡得更香:

  1. Git基本上不删除数据。即使是那些看起来是删除数据的操作,实际上是为了让你更快的撤销删除,而在向系统添加数据。
  2. Git基本可以撤销所有操作。我鼓励你更多的实验和探索你的想法,因为这就是使用版本控制系统系统的最主要的好处之一。
  3. 你团队的每一个成员都在他/她的计算机中有各自的副本。本质上这更像是整个版本控制项目中的冗余备份(包括包括整个历史纪录),你捅了大娄子而且还没办法还原这种情况是极其少见的。

 

第四条:理解分支概念

在Git里面,分支这个概念是你一开始能学到的最有用的东西了。分支允许你隔离开发你的项目,而要想成为一个高效的Git用户,这是非常关键的一点。

一开始这听起来好像不是什么大事,但一旦你完全的理解了分支概念,你会开始想没有这个你怎么活下去。

尽管其他的版本控制系统也会使用分支概念,Git是第一个实现它,并让它变的好用的系统。

Linux:写给Git初学者的7个建议
Linux:写给Git初学者的7个建议

这里有一些有助你了解Git分支概念的资源:

 

第五条:学习暂存区

当你的提交里面只包含一些相关的变化时,版本控制会变的非常有用[b],它保证了你的提交可以被没有任何副作用的回滚,经常提交的习惯也可以让你的同事更好的了解你的进度。

Git有个功能叫暂存区让这一切都变为可能

学习使用暂存区,并爱上它,因为这是Git里面最重要最独立的一个模块。

  1. 为什么暂存区那么有用
  2. 用暂存区的好处在哪 —- 一个有关Git暂存区的讨论主题
  3. 啊哈!学习Git的那些时候 —- 一篇博客文章
  4. Git上有关暂存区的简短教程

 

 

第六条:用Git图形界面

尽管使用图形界面绝对不会是一个要求,但我还是高度推荐使用。

使用图形界面让大多数操作都变得简单,让你在项目开始时便占尽优势。

不管怎么说,使用Git不应该只是记住各种命令和参数,而是改进你的编程工作流。如果图形界面可以做到这一点的话,没有理由让简单的事变的困难嘛。

Linux:写给Git初学者的7个建议
Linux:写给Git初学者的7个建议

看一下这些Git界面吧:

  • Tortoise Git – Windows平台下的开源Git图形界面
  • GitX(L) – Mac OS X下的开源Git客户端
  • SourceTree – Windows和Mac下的免费Git或Mecurial界面
  • git-cola – 一款开源Git界面
  • Tower – 我们公司为Mac用户所出的Git界面

使用图形界面并不能减轻你学习Git基础的负担,不过一旦你快乐的征服了Git,使用这些工具会让你的生活变得更轻松。

 

第七条:对自己承诺你会用Git

使用一个新工具一开始会让人非常头疼,走过这条学习曲线的方法只有一个:继续走下去。

做一个充分的承诺,不要回头。在你平常的工作流里引入Git很快就会被证明这是你近期做的最大的,最有意义的决定。

避免这种情况:「我会在这个项目里使用Git,但其他项目就再说了。」至少一开始不要这样。

充分承诺的这种心态会让你有更多的机会去练习,让事情变得更加简单,因为你知道你现在这个项目用了版本控制系统。而更重要的是,让Git成为你的编程习惯。

未来不久,你就会看到只有那么一些情况不需要用到Git,

对自己做一个100%的承诺,作为Git征服之路的开始。

 

原文链接: sixrevisions   翻译: 伯乐在线 – 吴鹏煜译文链接: http://blog.jobbole.com/50603/

Linux:如何在手机上安装Ubuntu Touch 13.10

Ubuntu Touch 13.10是Canonical公司针对手机新推出的一款操作系统,但是相对于桌面而言,它安装到手机并不是那么容易。

 

Linux:如何在手机上安装Ubuntu Touch 13.10
Linux:如何在手机上安装Ubuntu Touch 13.10

Canonical提供了安装Ubuntu Touch 13.10所有必要的工具。这真是个好消息,因为手动安装操作系统可是相当麻烦的。

首先提醒,此操作系统并非任何手机都能使用。因开发原因,Canonical限制其只能使用在Nexus 4设备上(代号金枪鱼和灰鲭鲨) ,而且手机必须已被解锁。

要安装工具,你将需要在终端输入几个简单的命令:

sudo add-apt-repository ppa:phablet-team/tools

sudo apt-get update

sudo apt-get install phablet-tools android-tools-adb android-tools-fastboot

用户还必须确保他们的手机已被设置成开发使用。进入“设置项/关于手机”,点击“软件版本”7次。如果你操作正确,将会收到一条提示消息。

你必须从新菜单——“开发者选项”中启用USB调试,该菜单通过前面的方法已被解锁。在手机上勾选该选项时,会出现一条消息,通知用户正在配对。同意,那么你准备得差不多了。

在开始安装前的最后一步是备份你的Android系统。同样使用adb工具。只要打开终端,输入以下命令:

adb backup -apk -shared -all

如果你要重新安装原来的Android系统,打开一个终端,运行以下命令:

adb restore backup.ab

最后的命令至关重要,你应该使用sudo运行,以确保正确执行该命令。打开一个终端,输入以下命令:

sudo phablet-flash ubuntu-system –no-backup

运行过程中应该没有任何问题,设备将最终引导到Ubuntu Touch。不要停止终端也不要中断此过程。

以上就是你需要遵照的简单步骤,这样,在所支持的设备上运作应该没有任何问题了。

 

来源于: http://news.softpedia.com/news/How-to-Install-Ubuntu-Touch-13-10-On-Your-Phone-392828.shtml

译者:coolpigs 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:每日Ubuntu小技巧——怎样修改你的计算机名字

本文又是一篇为Ubuntu新用户和新手准备的文章,将会指导你怎样在使用Ubuntu时轻松更改你的计算机名字,许多用户从来不会考虑在Ubuntu更改计算机名字或者主机名,那是他们最不用考虑担心的事情。

许多用户会使用安装Ubuntu过程中创建或设定的名字,但是对于想要知道怎么更改名字的新用户,可以继续接下来的学习。本文不是为Ubuntu专家所准备,是为那些刚刚开始使用Ubuntu的初学者用户。

那么,为什么你又想要更改你的计算机名字?如果除了想要学习怎样操作,你没有一个好的理由,那么就不要学了,反之,如果你有一个好的理由或者想要学习怎样操作,那么请继续。

按下 Ctrl – Alt – T 组合键,打开终端。 当终端打开,输入下列命令,使用gedit编辑hostname文件

sudo gedit /etc/hostname

接下来,无论旧的计算机名字是什么,换一个新的吧。例如,如果你想要你的计算机名字为“RDOMNU”,先删除文件内容,输入 RDOMNU,然后保存文件。

然后,再输入下列命令来打开hosts文件

sudo gedit /etc/hosts

更改第二行箭头标记位置的值,使它与你刚才输入的计算机名字相符,完成后保存文件。

 

就是这样!重启你的计算机,然后你的机器将会显示新的名字。这就是怎么改变Ubuntu机器的名字。

试一试吧!

 

via: http://www.liberiangeek.net/2013/10/daily-ubuntu-tips-change-computer-name/

译者:Vic___ 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:戴文的Linux内核专题:04 安全

Linux内核是所有Linux系统的核心。如果有任何恶意代码控制或破害了内核的任何一部分,那么系统会严重受损,文件可能被删除或损坏,私人信息可能被盗等等。很明显,保持内核安全涉及到用户的最大利益。值得庆幸的是,由于Linux内核极其安全,Linux是一个非常安全的系统。在用户比例上,Linux病毒比Windows病毒更少,并且Linux用户比Windows用户个人更少感染病毒。(这就是为什么许多公司使用Linux来管理他们的服务器的一个原因。) 然而,我们仍然没有借口去忽视内核的安全。Linux有几个安全特性和程序,但本文只讨论Linux安全模块(LSM)及其它的内核安全特性。

Linux:戴文的Linux内核专题:04 安全
Linux:戴文的Linux内核专题:04 安全

AppArmor(应用盔甲)最初是由Immunix写的安全模块。自从2009年以来,Canonical维护着这些代码(Novell在Immunix之后,Canonical以前管理这些代码)。这个安全模块已经从2.6.36版本进入Linux主分支之中。AppArmor限制了程序的能力。AppArmor使用文件路径来跟踪程序限制。许多Linux管理员称AppArmor是最容易配置的安全模块。然而,而许多Linux用户觉得这个模块与其它的替代品相比很糟糕。

安全增强Linux(SELinux)是AppArmor的替代品,它最初由美国国家安全局开发(NSA)。SELinux自从2.6版本就进入内核主分支中。SELinux是限制修改内核和用户空间的工具。SELinux给可执行文件(主要是守护进程和服务端程序)最小特权去完成它们的任务。SELinux也可以用来控制用户权限。SELinux不像AppArmor那样使用文件路径,而SELinux在追踪权限时使用文件系统去标记可执行文件。因为SElinux本身使用文件系统管理可执行文件,所以SELinux不能像AppArmor那样对整个文件系统提供保护。

注意:守护进程是在后台运行的程序

注意:虽然在内核中有AppArmor、SELinux及其它安全模块,但只能有一个安全模块被激活。

Smack是安全模块的另一种选择。Smack从2.6.25起进入内核主分支。Smack应能比AppArmor更安全,但比SELinux更容易配置。

TOMOYO,是另外一个安全模块,在2.6.30进入内核主分支。TOMOYO可以提供安全防护,但是它的主要用途是分析系统安全缺陷。

AppArmor、SELinux、Smack和TOMYO组成了四个标准Linux安全模块。这些都通过使用强制访问控制(MAC : mandatory access control)工作,这种访问控制是通过限制程序或者用户执行一些任务来实现的。安全模块还有某些形式的列表规定了它们可以做什么不可以做什么。

Yama在Linux内核中一个新安全模块。Yama还没有作为标准的安全模块,但是在将来他会成为第5个标准安全模块。Yama和其他安全模块一样使用相同的机制。

“grsecurity”是一系列Linux内核安全补丁的集合。多数补丁用于处理远程网络连接和缓冲区溢出的安全问题(以后讨论)。grsecurity中有一个叫PaX的有趣组件。PaX补丁允许内存里的代码使用最少的所需权限。例如,存储程序的内存段被标为不可写。想想看,为什么一个可执行的程序需要在内存中是可写的?通过这个补丁,恶意代码就不能修改目前正在执行的程序。缓冲区溢出是一种当程序由于bug或者恶意代码在内存上写入数据,并让它的内存边界超出到其他程序的内存页上的安全事件。当Pax被激活时,它会帮助阻止这些缓冲区溢出,因为程序没有写到其他内存页上的权限了。

Linux入侵检测系统(LIDS)是一个内核安全补丁,提供了强制访问控制(MAC)的特性。这个补丁就像扮演LSM模块的角色。

Systrace是一个减少和控制应用程序访问系统文件和系统调用的工具。系统调用是对内核的服务请求。比如,当一个文本编辑器写入一个文件到硬盘上时,程序将会发送一个系统请求让内核写入文件到硬盘中。

这些是在Linux安全系统中非常重要的组件。这些安全模块和补丁使内核免于受到恶意代码的攻击。没有这些特性,Linux系统将会变成一个不安全的操作系统。

 

via: http://www.linux.org/threads/the-linux-kernel-security.4223/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:戴文的Linux内核专题:01 介绍

译者按:

本文作者戴文.科利尔.约翰逊(Devyn Collier Johnson)今年才19岁,但是他在Linux内核、人工智能、编程语言方面拥有丰富的经验,本文是其在linux.org上连载的一系列关于内核的文章。文章写的深入浅出,本站不揣浅陋,由LCTT成员geekpi进行了系列翻译,以分享给广大Linux爱好者。

 

在1991年,一个叫林纳斯·本纳第克特·托瓦兹的芬兰学生制作了一个现在非常流行的操作系统的内核。他于1991年9月发布了Linux 0.01,并且于1992年以GPL许可证的方式授权了该内核。GNU通用许可证(GPL)允许人们使用、拥有、修改,以及合法和免费的分发源代码。这使得内核变得非常流行,因为任何人都可以免费地下载。现在任何人都可以生成他们自己的内核,这有助于人们学习如何获取、编辑、配置、编译并安装Linux内核。

内核是操作系统的核心。操作系统是一系列的管理硬件并允许用户在电脑上运行应用的程序。内核控制着硬件和应用。应用并不直接和硬件打交道,而是首先和内核交互。总之,软件运行在内核上,而内核操作着硬件。没有内核,电脑就是一个没用的物件。

用户制作他们自己的内核有各种各样的原因。许多用户也许想要一个只包含他们需要的代码的系统内核。比如说我的内核包含了火线设备驱动,但是我的电脑缺乏这些端口。当系统启动时,时间和内存就会浪费在那些我系统上并没有安装的设备上。如果我想要简化我的内核,我会制作自己不包含火线驱动的内核。至于另外一个理由,某个用户可能拥有一台有特殊硬件的设备,但是最新的Ubuntu版本中的内核缺乏所需的驱动。这个用户可以下载最新的内核(比当前Ununtu的Linux内核要新),并制作他们自己的有相应驱动的内核。不管怎样,这两个原因是用户想要制作自己的Linux内核的普遍原因。

在下载内核前,我们应该讨论一些重要的术语和事实。Linux内核是一个宏内核,这意味着整个操作系统都运行在内核预留的内存里。说的更清楚一些,内核是放在内存里的。内核所使用的空间是内核预留的。只有内核可以使用预留的内核空间。内核拥有这些内存空间,直到系统关闭。与内核空间相对应的还是用户空间。用户空间是内存上用户程序拥有的空间。比如浏览器、电子游戏、文字处理器、媒体播放器、壁纸、主题等都是放在内存里的用户空间。当一个程序关闭的时候,任何程序都可以使用新释放的空间。在内核空间,一旦内存被占用,则没有任何其他程序可以使用这块空间。

Linux内核也是一个抢占式多任务内核。这意味该内核可以暂停一些任务来保证任何应用都有机会来使用CPU。举个例子,如果一个应用正在运行但是正在等待一些数据,内核会把这个应用暂停并允许其他的程序使用新释放的CPU资源,直到数据到来。否则的话,系统就会浪费资源给那些正在等待数据或者其他程序执行的的任务。内核将会强制程序去等待或者停止使用CPU。没有内核的允许,应用程序不能脱离暂停或者使用CPU。

Linux内核使得设备作为文件显示在/dev文件夹下。举个例子,USB端口位于/dev/bus/usb。硬盘分区则位于/dev/disk/分区。因为这个特性,许多人说:“在Linux上,一切皆文件”。(不过这些设备文件不能被直接使用,——译者补充)举个例子,如果一个用户想要访问在存储卡上的数据,他们是不能通过设备文件访问到这些数据的。(译注:此处原文是“If a user wanted to access data on their memory card, for example, they cannot access the data through these device files.”,但根据上下文,此处语境不对,所以做了相应补充。据“食梦-”的提示,原文也有人对此提出了质疑,作者做了如下解释:http://www.linux.org/threads/%EF%BB%BFthe-linux-kernel-introduction.4203/#post-12623)

Linux内核是可移植的。可移植性是Linux流行的一个最重要的原因。可移植性使得内核可以工作在各种处理器和系统上。一些内核支持的处理器的型号包括:Alpha、AMD、ARM、C6X、Intel、x86、Microblaze、MIPS、PowerPC、SPARC、UltraSPARC等,这还不是全部的列表。

在引导文件夹(/boot),用户会看到诸如“vmlinux”或者“vmlinuz”的文件。这两者都是已编译的Linux内核。以“z”结尾的是已压缩的。“vm”代表虚拟内存。在SPARC处理器的系统上,用户可以看见一个zImage文件。一小部分用户可以发现一个bzImage文件,这也是一个已压缩的Linux内核。无论用户有哪个文件,这些引导文件都是不能更改的,除非用户知道他们正在做什么。否则系统会变成无法引导,也就是说系统启动不了了。

内核源代码就是程序编码。有了源代码,程序员可以修改内核并能观察到内核是如何工作的。

下载内核:

现在我们想更多地了解了内核,就要下载内核源代码了。进入kernel.org并点击那个巨大的下载按钮。下载完成后,解压下载的文件。

对于本文,我使用的源代码是Linux kernel 3.9.4.这个文章系列的所有指导对于所有的内核版本是相同的(或者非常相似的)

 

via: http://www.linux.org/threads/%EF%BB%BFthe-linux-kernel-introduction.4203/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:戴文的Linux内核专题:05 配置内核 (1)

现在我们已经了解了内核,现在我们可以进入主要工作:配置并编译内核代码。配置内核代码并不会花费太长时间。配置工具会询问许多问题并且允许开发者配置内核的每个方面。如果你有不确定的问题或者特性,你最好使用配置工具提供的默认值。本系列教程会使读者逐步了解配置内核的整个过程。

Linux:戴文的Linux内核专题:05 配置内核 (1)
Linux:戴文的Linux内核专题:05 配置内核 (1)

配置代码前需要在源文件的文件夹内打开一个终端。当终端打开后,基于你喜好的配置界面,这里有几种不同的配置方法:

  • make config – 纯文本界面 (最常用的选择)。
  • make menuconfig – 基于文本彩色菜单和单选列表。这个选项可以加快开发者开发速度。需要安装ncurses(ncurses-devel)。
  • make nconfig – 基于文本的彩色菜单。需要安装curses (libcdk5-dev)。
  • make xconfig – QT/X-windows 界面。需要安装QT。
  • make gconfig – Gtk/X-windows 界面。需要安装GTK。
  • make oldconfig – 纯文本界面,但是其默认的问题是基于已有的本地配置文件。
  • make silentoldconfig – 和oldconfig相似,但是不会显示配置文件中已有的问题的回答。
  • make olddefconfig -和silentoldconfig相似,但有些问题已经以它们的默认值选择。
  • make defconfig – 这个选项将会创建一份以当前系统架构为基础的默认设置文件。
  • make ${PLATFORM}defconfig – 创建一份使用arch/$ARCH/configs/${PLATFORM}defconfig中的值的配置文件。
  • make allyesconfig – 这个选项将会创建一份尽可能多的问题回答都为‘yes’的配置文件。
  • make allmodconfig – 这个选项将会创建一份将尽可能多的内核部分配置为模块的配置文件。

注意:内核代码可以放进内核自身,也可以成为一个模块。例如,用户可以将蓝牙驱动作为一个模块加入(独立于内核),或者直接放到内核栗,或者完全不加蓝牙驱动。当代码放到内核本身时,内核将会请求更多的内存并且启动会花费更长的时间。然而,内核会执行的更好。如果代码作为模块加入,代码将会一直存在于硬盘上直到被需要时加载。接着模块被加载到内存中。这可以减少内核的内存使用并减少启动的时间。然而,因为内核和模块在内存上相互独立所以会影响内核的性能。另一种选择是不添加一些代码。举例来说,内核开发人员假如知道系统永远都不会使用蓝牙设备,因此这个驱动就可以不加到内核中。这提升了内核的性能。然而,如果用户之后需要蓝牙设备,那么他么需要安装蓝牙模块或者升级内核才行。

  • make allnoconfig – 这个选项只会生成内核所必要代码的配置文件。它对尽可能多的问题都回答no。这有时会导致内核无法工作在为编译该内核的硬件上。
  • make randconfig – 这个选项会对内核选项随机选择(译注:这是做什么用途的?!)。
  • make localmodconfig – 这个选项会根据当前已加载模块列表和系统配置来生成配置文件。
  • make localyesconfig – 将所有可装载模块(LKM)都编译进内核(译者注:这里与原文 ‘This will set all module options to yes – most (or all) of the kernel will not be in modules’的意思不同,作者也作出了解释:http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-1.4274/#post-13307)&#12290;

贴士:最好使用“make menuconfig”,因为用户可以保存进度。“make config”不会提供这样的便利,因为配置过程会耗费大量时间。

配置:

大多数开发者选择使用“make menucongfig”或者其他图形菜单之一。当键入上述配置命令后,第一个问题,是受否将内核编译成64位。选项有“Y”、“n”和“?”。问号用来解释这个问题,“n”代表这个问题回答否(no),”Y”代表这个问题回答是(yes)。在这个教程里,我选择是。 这里我输入”Y”(这里是大小写敏感的)并输入回车。

注意:当内核在32位系统上编译时,编译工具会询问内核是否编译成32位。第一个问题在不同的处理器上不一样。

下一行显示的是”Cross-compiler tool prefix (CROSS_COMPILE) []”(交叉编译器工具前缀)。如果你不是做交叉编译就直接按下回车。如果你正在交叉编译,对ARM系统输入像”arm-unknown-linux-gnu-“,对64位PC输入像”x86_64-pc-linux-gnu-“的字样。对其他处理器而言还有许多其他可能的命令,但是这个表太大了。一旦一名开发者知道他们想要支持的处理器,很容易就可研究出处理器需要的命令。

注意:交叉编译是为别的处理器编译代码。比如,一台Intel系统正编译着不在Intel处理器上运行的程序,比如,这个系统可能正在编译着要在ARM或AMD处理器上运行的代码。

注意:每一项选择会改变接下来显示什么问题及何时显示。我会(在教程里)包含上我的选择让读者可以在他们自己的系统上跟上配置的进度。

接下来,用户会看到“Local version – append to kernel release (LOCALVERSION) []”(本地版本号,附加到内核版本号后面)。这使开发人员可以给定一个特殊版本号或命名他们自定义的内核。我将输入“LinuxDotOrg”,这样,内核版本会显示为“3.9.4-LinuxDotOrg”。接下来,配置工具会询问“Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?]”(是否自动添加版本信息到版本号后)。如果本地有一个git版本库,git的修订号会被添加到版本号后面。这个例子中我们没有使用git,所以我回答”no”。不然git修订号将会追加到版本号中。还记得vmlinuz和几个类似的文件么?好了,下一个问题就是问使用哪一种格式压缩内核。开发人员可以从五个选项中选择一个。它们是

  1. Gzip (KERNEL_GZIP)
  2. Bzip2 (KERNEL_BZIP2)
  3. LZMA (KERNEL_LZMA)
  4. XZ (KERNEL_XZ)
  5. LZO (KERNEL_LZO)

Gzip是默认值,所以我选择”1″并按回车。每种压缩格式和其他压缩格式相比都有更高或者更低的压缩比。更好的压缩比意味着更小的体积,但是与低压缩比文件相比,它解压时需要更多的时间。

现在这行显示“Default hostname (DEFAULT_HOSTNAME) [(none)]”(默认主机名)。这里可以配置主机名。通常地,开发者这行留空(我这里留空),以便以后Linux用户可以自己设置他们的主机名。

接下来开发者可以启用或者禁用交换分区。Linux使用一个叫做”swap space”的独立分区来使用虚拟内存。这相当于Windows中的页面文件。典型地,开发者在这行“Support for paging of anonymous memory (swap) (SWAP) [Y/n/?]”(是否支持匿名内存换页)回答“Y”。

接下来的一行(System V IPC (SYSVIPC) [Y/n/?])询问内核是否支持IPC。进程间通信使进程间可以通信和同步。最好启用IPC不然许多程序将无法工作。这个问题回答“Y”会使配置工具接下来问“POSIX Message Queues (POSIX_MQUEUE) [Y/n/?]”(是否使用POSIX消息队列),这个问题只会在IPC启用后看见。POSIX消息队列是一种给每条消息一个优先级的消息队列(一种进程间通信形式)。默认的选择是“Y”。按回车选择默认选择(以大写选择指示默认)。

下一个问题“open by fhandle syscalls (FHANDLE) [Y/n/?]”(是否使用文件句柄系统调用来打开文件)是问当有需要进行文件系统操作的时候,程序是否允许使用文件句柄而不是文件名进行。默认上,这个选择是“Y”。

有时,开发者在做了一些选择后,某些问题会自动回答。比如,下一个问题“Auditing support (AUDIT) [Y/?]”(是否支持审计)会在没有提示的情况下自动回答,因为先前的选项需要这个特性。审计支持会记录所有文件的访问和修改。下一个关于审计的问题“Enable system-call auditing support (AUDITSYSCALL) [Y/n/?]”(是否启用系统调用审计支持)。如果启用,所有的系统调用都会记录下来。如果开发者想要更好的性能,那么最好尽可能地禁用审计特性并且不把它加入内核。而另外一些开发者可能为了安全监控而启用审计。这个问题我选择“n”。下一个审计方面的问题“Make audit loginuid immutable (AUDITLOGINUIDIMMUTABLE) [N/y/?]”(是否要审计进程身份ID不可变)是询问进程是否可以改变它们的loginuid(LOGIN User ID),如果启用,用户空间的进程将无法改变他们的loginuid。为了更好的性能,我们这里禁用这个特性。(译注:对于使用systemd这样的系统,其是通过中央进程来重启登录服务的,设置为“y”可以避免一些安全问题;而使用较旧的SysVinit和Upstart的系统,其需要管理员手工重启登录服务,应该设置为“N”)

注意:当通过“make config”配置时,这些通过配置工具回答的问题会显示出来但是用户无法改变答案。当通过”make menuconfig”配置时,无论用户按任何键都无法改变选项。开发者不需要去改变这些选项,因为之前的选择决定了另外一个问题的选择。

 

via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-1.4274/

译者:geekpi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:在Ubuntu 13.10 下安装支持SSL的Apache

通过这个简短的教程,让我来指导你如何安装支持SSL的Apache。以下是我的试验机的详细说明:

系统信息

root@ubuntu-unixmen:~# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:b8:b4:87
inet addr:10.1.1.110 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feb8:b487/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1738 errors:0 dropped:0 overruns:0 frame:0
TX packets:69 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:168845 (168.8 KB) TX bytes:9767 (9.7 KB)

root@ubuntu-unixmen:~# cat /etc/issue
Ubuntu 13.10 n l

安装apache

运行如下命令:

$ sudo apt-get install apache2 apache2-doc apache2-utils
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
apache2-bin apache2-data libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap ssl-cert

apache测试页面

打开浏览器,转到http://你的测试机的IP地址/。你应该会看到类似以下的信息。

 

创建目录

创建一个名为ssl的目录

$ sudo mkdir /etc/apache2/ssl

创建一个自签名凭证

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Generating a 2048 bit RSA private key.......................................................................................+++....................................+++writing new private key to '/etc/apache2/ssl/apache.key'-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:

开启Apache SSL模块

运行以下命令开启ssl模块

$ a2enmod ssl
Considering dependency setenvif for ssl:
Module setenvif already enabled
Considering dependency mime for ssl:
Module mime already enabled
Considering dependency socache_shmcb for ssl:
Enabling module socache_shmcb.
Enabling module ssl

编辑 /etc/apache2/sites-enabled/default-ssl.conf 文件,

ServerAdmin webmaster@localhost
ServerName www.unixmen.com:443
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

启用Apache缺省的SSL虚拟主机:

$ a2ensite default-ssl
Enabling site default-ssl.
To activate the new configuration, you need to run:
service apache2 reload

重启Apache:

$ sudo service apache2 restart

测试SSL连接

打开浏览器,转到https://你的测试机IP

 

Linux:在Ubuntu 13.10 下安装支持SSL的Apache
Linux:在Ubuntu 13.10 下安装支持SSL的Apache

安装完成,尽情享用!

 

via: http://www.unixmen.com/install-apache-ssl-ubuntu-13-10/

译者:Luoxcat 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

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

Linux:Python语言的创始人解释为什么Python数组的索引从0开始

最近有人在Twitter是问我为什么Python使用以0为第一位的数组索引方式(以下简称0-based),并让我看一篇关于这个主题的文章(很有趣)。这引起了我不少的回忆。ABC语言——Python的祖先之一,使用的是以1为第一位的索引方式(以下简称1-based),而C语言——另一种对Python有影响巨大的语言,使用0-based方式。我最早学习的几种语言(Algol, Fortran, Pascal),有的是1-based的,有的是不固定的。我认为,之所以让我决定让Python使用0-based索引方式的原因之一是Python的切片(slice)语法。

Linux:Python语言的创始人解释为什么Python数组的索引从0开始
Linux:Python语言的创始人解释为什么Python数组的索引从0开始

让我们来先看看切片的用法。可能最常见的用法就是“从数组中切出前n位”或“从数值的第i位起切出n位”(前一种实际上是i==起始位的特殊用法)。如果使用这种语法时不需要表达成难看的+1或-1补充方式,那将是非常的优雅。

使用0-based的索引方式,Python的半开区间切片和缺省匹配区间切片语法变得非常漂亮:a[:n] 和 a[i:i+n],前者的标准写法就是a[0:n]。

如果是1-base的索引方式,那么,想让a[:n]表达成“取前n个元素”,(这是不行的),你要么使用一个闭合区间切片语法,要么在切片语法中使用切片起始位和切片长度2个参数的形式。使用1-based索引方式,半开区间切片语法变得不优雅。这种方式下使用闭合区间切片语法,为了表达从第i位取n个元素时你必须写出a[i:i+n-1]。这样看来,如果使用1-based的索引,使用切片起始位+长度的形式更合适。这样你可以写成a[i:n]。事实上ABC语言就是这样做的——它使用了一个独特的表达方式,写成a@i|n。(参看http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS

但是,index:length这种方式在其它情况下适用吗?说实话,这点我有些记不清了,但我想我是被半开区间语法的优雅迷住了。特别是当两个切片操作位置邻接时,第一个切片操作的终点索引值是第二个切片的起点索引值时,太漂亮了,无法舍弃。例如,你想将一个数组以i,j两个点切成三部分——这三部分将会是a[:i],a[i:j]和a[j:]。

这就是为什么我要让Python使用0-based的索引方式的原因。

[英文原文:why Python uses 0-based indexing ] via: http://www.aqee.net/why-python-uses-0-based-indexing/