Skip to content Skip to main navigation Skip to footer

Linux

Linux:Bash Getopts – 让你的脚本支持命令行参数

以前我总想知道如何为我的Bash脚本创建命令行参数。经过搜索,我发现了2个函数可以处理这个问题,getopt 函数和 getopts 函数。我无意争论哪一个函数更好的。getopts 是一个shell内建命令,而且似乎比 getopt 更容易实现这个功能,所以在这篇文章里我准备讲讲getopts。

Linux:Bash Getopts - 让你的脚本支持命令行参数
Linux:Bash Getopts – 让你的脚本支持命令行参数

bash getopts

开始的时候,我只试着处理传递给脚本的命令行参数。最后,我添加了另外一些有用的功能函数,使得这个脚本可以成为其他任何交互式脚本处理命令行的开始模板。我还添加了一个纯文本格式的帮助函数,让脚本更加容易阅读。

与其来一长段文字解释 getopts 在bash中是如何工作的,我认为不如直接来一个能工作的脚本更让人觉得轻松一些。

#!/bin/bash
######################################################################
#This is an example of using getopts in Bash. It also contains some
#other bits of code I find useful.
#Author: Linerd
#Website: http://tuxtweaks.com/
#Copyright 2014
#License: Creative Commons Attribution-ShareAlike 4.0
#http://creativecommons.org/licenses/by-sa/4.0/legalcode
######################################################################
#Set Script Name variable
SCRIPT=`basename ${BASH_SOURCE[0]}`
#Initialize variables to default values.
OPT_A=A
OPT_B=B
OPT_C=C
OPT_D=D
#Set fonts for Help.[译注: 这里tput用来更改终端文本属性,比如加粗,高亮等]
NORM=`tput sgr0`
BOLD=`tput bold`
REV=`tput smso`
#Help function
function HELP {
  echo -e \n"Help documentation for ${BOLD}${SCRIPT}.${NORM}"\n
  echo -e "${REV}Basic usage:${NORM} ${BOLD}$SCRIPT file.ext${NORM}"\n
  echo "Command line switches are optional. The following switches are recognized."
  echo "${REV}-a${NORM}  --Sets the value for option ${BOLD}a${NORM}. Default is ${BOLD}A${NORM}."
  echo "${REV}-b${NORM}  --Sets the value for option ${BOLD}b${NORM}. Default is ${BOLD}B${NORM}."
  echo "${REV}-c${NORM}  --Sets the value for option ${BOLD}c${NORM}. Default is ${BOLD}C${NORM}."
  echo "${REV}-d${NORM}  --Sets the value for option ${BOLD}d${NORM}. Default is ${BOLD}D${NORM}."
  echo -e "${REV}-h${NORM}  --Displays this help message. No further functions are performed."\n
  echo -e "Example: ${BOLD}$SCRIPT -a foo -b man -c chu -d bar file.ext${NORM}"\n
  exit 1
}
#Check the number of arguments. If none are passed, print help and exit.
NUMARGS=$#
echo -e \n"Number of arguments: $NUMARGS"
if [ $NUMARGS -eq 0 ]; then
  HELP
fi
### Start getopts code ###
#Parse command line flags
#如果选项需要后跟参数,在选项后面加":"
#注意"-h"选项后面没有":",因为他不需要参数。选项字符串最开始的":"是用来去掉来自getopts本身的报错的,同时获取不能识别的选项。(译注:如果选项字符串不以":"开头,发生错误(非法的选项或者缺少参数)时,getopts会向错误输出打印错误信息;如果以":"开头,则不会打印[在man中叫slient error reporting],同时将出错的选项赋给OPTARG变量)
while getopts :a:b:c:d:h FLAG; do
  case $FLAG in
    a)  #set option "a"
      OPT_A=$OPTARG
      echo "-a used: $OPTARG"
      echo "OPT_A = $OPT_A"
      ;;
    b)  #set option "b"
      OPT_B=$OPTARG
      echo "-b used: $OPTARG"
      echo "OPT_B = $OPT_B"
      ;;
    c)  #set option "c"
      OPT_C=$OPTARG
      echo "-c used: $OPTARG"
      echo "OPT_C = $OPT_C"
      ;;
    d)  #set option "d"
      OPT_D=$OPTARG
      echo "-d used: $OPTARG"
      echo "OPT_D = $OPT_D"
      ;;
    h)  #show help
      HELP
      ;;
    ?) #unrecognized option - show help
      echo -e \n"Option -${BOLD}$OPTARG${NORM} not allowed."
      HELP
      #在这里如果你不想打印完整的帮助信息,只想显示简单的错误信息,去掉上面的两行,同时使用下面的两行。
      #echo -e "Use ${BOLD}$SCRIPT -h${NORM} to see the help documentation."\n
      #exit 2
      ;;
  esac
done
shift $((OPTIND-1))  #This tells getopts to move on to the next argument.
### End getopts code ###
### Main loop to process files ###
#这里你可以用你的脚本处理逻辑来替代。这个例子只是在终端中打印文件的文件名和后缀名。你可以把任意其他的文件处理任务放到这个while-do循环中。
while [ $# -ne 0 ]; do
  FILE=$1
  TEMPFILE=`basename $FILE`
  #TEMPFILE="${FILE##*/}"  #另外一种获取不带后缀的文件名的方法。
  FILE_BASE=`echo "${TEMPFILE%.*}"`  #file without extension
  FILE_EXT="${TEMPFILE##*.}"  #file extension
  echo -e \n"Input file is: $FILE"
  echo "File withouth extension is: $FILE_BASE"
  echo -e "File extension is: $FILE_EXT"\n
  shift  #Move on to next input file.
done
### End main loop ###
exit 0

将上面的代码复制到你的文本编辑器里,然后保存到你的可执行路径下。我将这个脚本命名为 options 并保存到 /home/linerd/bin 路径下。保存之后记得给你的脚本添加可执行权限。

chmod +x ~/bin/options

现在脚本已经可以运行了。试试用 -h 参数来打印帮助信息吧。

options -h

遇到不支持的选项,脚本同样可以给出提示,并打印帮助信息。

options -z

最后,getopts可以以任意的顺序处理你给的命令行参数。唯一的限制是你要处理的文件必须放在所有参数的最后。

options -d bar -c chu -b man -a foo example1.txt example2.txt

现在你可以从这些例子里看到如何通过命令行参数给脚本里的变量赋值。这个脚本里除了getopts还有很多其他的东西,但是我认为这些就足以成为一个新脚本的开头模板了。如果你有兴趣更深入地学习bash的getopts,你可以找找深埋在man page的“Builtins”这一节里的文档,也可以从 Bash Reference Manual 找到信息。

接下来呢?

你会用getops来干什么呢?在评论里告诉我吧。


via: http://tuxtweaks.com/2014/05/bash-getopts/

译者: CNprober <travelwithheart@yeah.net, QQ619913541> 校对:wxy

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

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

Linux:ngxtop:在命令行实时监控 Nginx 的神器

Nginx网站服务器在生产环境中运行的时候需要进行实时监控。实际上,诸如Nagios, Zabbix, Munin 的网络监控软件是支持 Nginx 监控的。

如果你不需要以上软件提供的综合性报告或者长期数据统计功能,只是需要一种快速简便的办法去监控 Nginx 服务器的请求的话,我建议你采用一个叫 ngxtop 的命令行工具。

你马上就会发现 ngxtop 从界面和名称都借鉴了著名的top命令。ngxtop 是通过分析 Nginx 或者其他的日志文件,使用类似 top 命令的界面实时展示出来的。你可以说你知道的其他高端监控工具,但是在简洁这方面 ngxtop 无疑是最好的。简单就意味着不可替代。

本指南中,我将介绍如何使用 ngxtop 实时监控 Nginx 网站服务器。

Linux 上安装 ngxtop

首先在 Linux 系统中安装依赖库pip(LCTT译注:ngxtop是用python编写的)。

然后使用如下命令安装 ngxtop。

$ sudo pip install ngxtop

ngxtop 使用

基本使用方法如下:

ngxtop [options]
ngxtop [options] (print|top|avg|sum) 
ngxtop info

这里是一些通用选项。

  • -l : 指定日志文件的完整路径 (Nginx 或 Apache2)
  • -f : 日志格式
  • –no-follow: 处理当前已经写入的日志文件,而不是实时处理新添加到日志文件的日志
  • -t : 更新频率
  • -n : 显示行号
  • -o : 排序规则(默认是访问计数)
  • -a …, –a …: 添加表达式(一般是聚合表达式如: sum, avg, min, max 等)到输出中。
  • -v: 输出详细信息
  • -i : 只处理符合规则的记录

以下是一些内置变量,他们的含义不言自明。

  • bodybytessend
  • http_referer
  • httpuseragent
  • remote_addr
  • remote_user
  • request
  • status
  • time_local

使用 ngxtop 监控 Nginx

ngxtop 默认会从其配置文件 (/etc/nginx/nginx.conf) 中查找 Nginx 日志的地址。所以,监控 Nginx ,运行以下命令即可:

$ ngxtop

这将会列出10个 Nginx 服务,按请求数量排序。

显示前20个最频繁的请求:

$ ngxtop -n 20
Linux:ngxtop:在命令行实时监控 Nginx 的神器
Linux:ngxtop:在命令行实时监控 Nginx 的神器

获取Nginx基本信息:

$ ngxtop info

你可以自定义显示的变量,简单列出需要显示的变量。使用 “print” 命令显示自定义请求。

$ ngxtop print request http_user_agent remote_addr
Linux:ngxtop:在命令行实时监控 Nginx 的神器
Linux:ngxtop:在命令行实时监控 Nginx 的神器

显示请求最多的客户端IP地址

$ ngxtop top remote_addr

显示状态码是404的请求

$ ngxtop -i 'status == 404' print request status
Linux:ngxtop:在命令行实时监控 Nginx 的神器
Linux:ngxtop:在命令行实时监控 Nginx 的神器

除了Nginx,ngtop 还可以处理其他的日志文件,比如 Apache 的访问文件。使用以下命令监控 Apache 服务器:

$ tail -f /var/log/apache2/access.log | ngxtop -f common

via: http://xmodulo.com/2014/06/monitor-nginx-web-server-command-line-real-time.html

译者:shipsw 校对:wxy

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

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

Linux:使用软Raid 发挥多块SSD硬盘的性能并提升数据安全性

磁盘IO的瓶颈已经很多年了,随着SSD硬盘技术日益成熟、成本的逐步下降,越来越多公司开始在服务器上使用SSD硬盘。

自打去年给笔记本加了一块mSata接口的SSD之后,整个系统性能的提升无以言表!

单块SSD的性能已经非常好了,若没有Raid则数据安全性无法保证。但使用普通的Raid卡跑SSD硬盘,瓶颈会压在Raid卡上。既要性能好、又要数据安全,可以选择高大上的:PCIE接口的固态硬盘(SSD)或闪存卡(FlashCard)。

有没一种亲民方案呢?答案就是软Raid,比如Linux下的 mdadm v3.2.5。

下图是在 CentOS 6.4 x86_64 结合 fio v2.1.4-8-g3e26,结出不同Raid结合下的iops测试结果:

结论如下:

1、软Raid可以发挥多个SSD的性能,盘越多性能越好(目前只测试了最多5块盘)

2、Raid0 的性能最佳,但安全性最差

3、Raid5 的写性能较差,导致混合读写时性能被拖跨

4、Raid10 是性能、容量、数据安全 综合最优的方案

测试脚本如下:

#!/bin/bash -x
yum -y install fio mdadm xfsprogs
mkdir -pv /ssd
umount /ssd
mdadm -S /dev/md0
yes | mdadm -C /dev/md0 -a yes -l 0 -n 5 --assume-clean /dev/sd{b,c,d,e,f}
mkfs.xfs -f /dev/md0
mount /dev/md0 /ssd
rm -fv /tmp/fio-*.txt
cat /proc/mdstat
mdadm -D /dev/md0
fio --bs=512 --ioengine=libaio --userspace_reap --time_based --runtime=600 --group_reporting --buffered=0 --direct=1 --randrepeat=0 --norandommap --ramp_time=6 --iodepth=16 --numjobs=16 --size=100G --directory=/ssd --name=randread --rw=randread --filename=fio-test.file --output=/tmp/fio-r.txt #随机读
fio --bs=512 --ioengine=libaio --userspace_reap --time_based --runtime=600 --group_reporting --buffered=0 --direct=1 --randrepeat=0 --norandommap --ramp_time=6 --iodepth=16 --numjobs=16 --size=100G --directory=/ssd --name=randwrite --rw=randwrite --filename=fio-test.file --output=/tmp/fio-w.txt # 随机写
fio --bs=512 --ioengine=libaio --userspace_reap --time_based --runtime=600 --group_reporting --buffered=0 --direct=1 --randrepeat=0 --norandommap --ramp_time=6 --iodepth=16 --numjobs=16 --size=100G --directory=/ssd --name=randmixed --rwmixwrite=20 --rw=randrw --filename=fio-test.file --output=/tmp/fio-m.txt # 8:2混合读写
grep --color iops /tmp/fio-*.txt

需要注意的是,软Raid默认不会开机自动加载,需要手动生成配置文件。

mdadm --verbose --detail --scan > /etc/mdadm.conf
# ARRAY /dev/md0 level=raid0 num-devices=5 metadata=1.2 name=ssd.higkoo.org:0 UUID=0dfa7417:13c1622d:1dca1dfe:12a0e0f4
#    devices=/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde,/dev/sdf

“/etc/mdadm.conf”的详细说明可以查看帮助或“rpm -ql mdadm | grep “mdadm.conf””给的示例文件作参考。

然后将Raid分区写入到 fstab 中,可以使用 /dev/md0 或者 `ls -l /dev/disk/by-uuid` 查看其 uuid。写入一些数据,然后重启、验证。大功告成!

via : http://hi.baidu.com/higkoo/item/13371fe44761e62d5a7cfb55

Linux:命令行之秘

有很多使用命令行的理由。正如我们在issue 3 of Linux Voice中展示的那样,它是与你的计算机交互的最强大和简明的方法。但是,我们还是先来看一下命令行的一些隐晦的使用场景(或许有些人会觉得没有意义)。

Linux:命令行之秘
Linux:命令行之秘

(LCTT译注,以下视频可能会比较慢,请耐心等一下。)

浏览网页

Firefox和Chromium都是很好的浏览器,但是你有没有发现它们有点太图形化了?没有?看一下下面的视频,我们使用elinks web浏览器显示了与黑客相关的新闻。界面可能没有其他浏览器好看,但是它的目标是显示绝大多数的web页面!

作为一个极客,当你只有SSH连接方式时,需要快速检查一下能否访问网页时,这将是一个很便利的方法。

在维基百科上查找想要的信息

是的,上面我们已经提到了使用Web,但是web不是查看维基百科的唯一方式。David Leadbeater已经构建了一个将维基百科的内容放入DNS记录的DNS服务器。这能够让你使用像dig这样的命令行工具来抓取你想要的信息。

看电影

当你想要看《星球大战 4 :新的希望》时,不再需要使用Netflix或者YouTube,只要在你的终端中直接telnet towel.blinkenlights.nl就行了。

玩游戏

再Steam来之前Linux下就有许多游戏,并且很多都不需要图形界面,比如NetHack、Robots和Greed。下面是Moon Buggy的一个演示:

LCTT译注:大家注意到这篇文章中的视频了么?不是通常的FLA,也不是MP4、AVI。而是一个专门演示脚本“功夫”的一个网站提供的:http://shelr.tv/ ,欢迎大家也去演练下你的脚本功夫吧!

LCTT译注:为了正常呈现,我专门临时打开了网站对IFRAME的限制。。。


via: http://www.linuxvoice.com/commandline-secrets/

译者:johnhoow 校对:wxy

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

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

Linux:Linux终端下 dstat 监控工具

dstat 是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。

dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘的吞吐率(在相同的时间间隔内)。

dstat将以列表的形式为你提供选项信息并清晰地告诉你是在何种幅度和单位显示输出。这样更好地避免了信息混乱和误报。更重要的是,它可以让你更容易编写插件来收集你想要的数据信息,以从未有过的方式进行扩展。

Dstat的默认输出是专门为人们实时查看而设计的,不过你也可以将详细信息通过CSV输出到一个文件,并导入到Gnumeric或者Excel生成表格中。

特性

  • 结合了vmstat,iostat,ifstat,netstat以及更多的信息
  • 实时显示统计情况
  • 在分析和排障时可以通过启用监控项并排序
  • 模块化设计
  • 使用python编写的,更方便扩展现有的工作任务
  • 容易扩展和添加你的计数器(请为此做出贡献)
  • 包含的许多扩展插件充分说明了增加新的监控项目是很方便的
  • 可以分组统计块设备/网络设备,并给出总数
  • 可以显示每台设备的当前状态
  • 极准确的时间精度,即便是系统负荷较高也不会延迟显示
  • 显示准确地单位和和限制转换误差范围
  • 用不同的颜色显示不同的单位
  • 显示中间结果延时小于1秒
  • 支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形

安装方法

Ubuntu/Mint和Debin系统:

本地软件库中有相关安装包,你可以用下面命令安装:

# sudo apt-get install dstat

RHEL/Centos和Fedora系统:

你可以在romforge软件库中添加有相关安装包,参照指导,使用如下命令很简单就能进行安装:

# yum install dstat

ArchLinux系统:

相关软件包在社区资源库中,你可以用这个命令来安装:

# pacman -S dstat

使用方法

dstat的基本用法就是输入dstat命令,输出如下:

Linux:Linux终端下 dstat 监控工具
Linux:Linux终端下 dstat 监控工具

这是默认输出显示的信息:

CPU状态:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到”wait”一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在”waits”时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。

磁盘统计:磁盘的读写操作,这一栏显示磁盘的读、写总数。

网络统计:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。

分页统计:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。

系统统计:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。

默认情况下,dstat每秒都会刷新数据。如果想退出dstat,你可以按”CTRL-C”键。

需要注意的是报告的第一行,通常这里所有的统计都不显示数值的。

这是由于dstat会通过上一次的报告来给出一个总结,所以第一次运行时是没有平均值和总值的相关数据。

但是dstat可以通过传递2个参数运行来控制报告间隔和报告数量。例如,如果你想要dstat输出默认监控、报表输出的时间间隔为3秒钟,并且报表中输出10个结果,你可以运行如下命令:

dstat 3 10

在dstat命令中有很多参数可选,你可以通过man dstat命令查看,大多数常用的参数有这些:

  • -l :显示负载统计量
  • -m :显示内存使用率(包括used,buffer,cache,free值)
  • -r :显示I/O统计
  • -s :显示交换分区使用情况
  • -t :将当前时间显示在第一行
  • –fs :显示文件系统统计数据(包括文件总数量和inodes值)
  • –nocolor :不显示颜色(有时候有用)
  • –socket :显示网络统计数据
  • –tcp :显示常用的TCP统计
  • –udp :显示监听的UDP接口及其当前用量的一些动态数据

当然不止这些用法,dstat附带了一些插件很大程度地扩展了它的功能。你可以通过查看/usr/share/dstat目录来查看它们的一些使用方法,常用的有这些:

  • -–disk-util :显示某一时间磁盘的忙碌状况
  • -–freespace :显示当前磁盘空间使用率
  • -–proc-count :显示正在运行的程序数量
  • -–top-bio :指出块I/O最大的进程
  • -–top-cpu :图形化显示CPU占用最大的进程
  • -–top-io :显示正常I/O最大的进程
  • -–top-mem :显示占用最多内存的进程

举一些例子:

查看全部内存都有谁在占用:

dstat -g -l -m -s --top-mem

显示一些关于CPU资源损耗的数据:

dstat -c -y -l --proc-count --top-cpu

如何输出一个csv文件

想输出一个csv格式的文件用于以后,可以通过下面的命令:

# dstat –output /tmp/sampleoutput.csv -cdn

via: http://linuxaria.com/howto/linux-terminal-dstat-monitoring-tools

译者:disylee 校对:wxy

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

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

Linux:Linux LVM简明教程

逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。

LVM使用分层结构,如下图所示。

Linux:Linux LVM简明教程
Linux:Linux LVM简明教程

图中顶部,首先是实际的物理磁盘及其划分的分区和其上的物理卷(PV)。一个或多个物理卷可以用来创建卷组(VG)。然后基于卷组可以创建逻辑卷(LV)。只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷。文件系统就是在逻辑卷上创建的,然后可以在操作系统挂载和访问。

LVM测试说明

本文将介绍怎么在linux中创建和管理LVM卷。我们将会分成两个部分。第一个部分,我们首先要在一个硬盘上创建多个逻辑卷,然后将它们挂载在/lvm-mount目录。然后我们将要对创建好的卷调整大小。而第二部分,我们将会从另外一块硬盘增加额外的卷到LVM中。

准备磁盘分区

通过使用fdisk,创建磁盘分区。我们需要创建3个1G分区,注意,并不要求分区的大小一致。同样,分区需要使用‘8e’类型来使他们可用于LVM。

# fdisk /dev/sdb

Command (m for help): n ## 新建
Command action
   e   extended
   p   primary partition (1-4)
p ## 主分区
Partition number (1-4): 1 ## 分区号
First cylinder (1-1044, default 1):  ## 回车用默认的1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +1G ## 大小
Command (m for help): t ## 改变类型
Selected partition 1
Hex code (type L to list codes): 8e ## LVM 的分区代码
Changed system type of partition 1 to 8e (Linux LVM)

重复上面的操作来创建其他两个分区。分区创建完成后,我们应该有类似如下的输出:

# fdisk -l

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  8e  Linux LVM
/dev/sdb2             133         264     1060290   8e  Linux LVM
/dev/sdb3             265         396     1060290   8e  Linux LVM

准备物理卷(PV)

刚创建的分区是用来储存物理卷的。LVM可以使用不同大小的物理卷。

# pvcreate /dev/sdb1
# pvcreate /dev/sdb2
# pvcreate /dev/sdb3

使用下列命令检查物理卷的创建情况。下面截取部分输出。”/dev/sdb2″是一个新的”1.01 GiB”物理卷。

# pvdisplay

  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name
  PV Size               1.01 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               jszvzz-ENA2-g5Pd-irhV-T9wi-ZfA3-0xo092

使用下列命令可以删除物理卷。

# pvremove /dev/sdb1

准备卷组(VG)

下列命令用来创建名为’volume-group1’的卷组,使用/dev/sdb1, /dev/sdb2 和 /dev/sdb3创建。

# vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3

使用下列命令可以来验证卷组。

# vgdisplay

  --- Volume group ---
  VG Name               volume-group1
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               3.02 GiB
  PE Size               4.00 MiB
  Total PE              774
  Alloc PE / Size       0 / 0
  Free  PE / Size       774 / 3.02 GiB
  VG UUID               bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK

从输出中,我们可以看见卷组的使用量/总量。物理卷给卷组提供空间。只要在这个卷组中还有可用空间,我们就可以随意创建逻辑卷。

使用下列命令删除卷组。

# vgremove volume-group1

创建逻辑卷(LV)

下列命令创建一个名为’1v1’、大小为100MB的逻辑卷。我们使用小分区减少执行时间。这个逻辑卷使用之前创建的卷组的空间。

# lvcreate -L 100M -n lv1 volume-group1

逻辑卷可使用lvdisplay命令查看。

# lvdisplay

  --- Logical volume ---
  LV Name                /dev/volume-group1/lv1
  VG Name                volume-group1
  LV UUID                YNQ1aa-QVt1-hEj6-ArJX-I1Q4-y1h1-OFEtlW
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

现在逻辑卷已经准备好了,我们可以格式化和挂载逻辑卷,就像其它ext2/3/4分区一样!

# mkfs.ext4 /dev/volume-group1/lv1
# mkdir /lvm-mount
# mount /dev/volume-group1/lv1 /lvm-mount/

一旦逻辑卷挂载,我们就可以到挂载点 /lvm-mount/ 上读写了。要创建和挂载其它的逻辑卷,我们重复这个过程。

最后,使用lvremove我们可以删除逻辑卷。

# umount /lvm-mount/
# lvremove /dev/volume-group1/lv1

扩展一个LVM卷

调整逻辑卷大小的功能是LVM最有用的功能。这个部分会讨论我们怎么样扩展一个存在的逻辑卷。下面,我们将会扩展先前创建的逻辑卷‘lv1’扩大到200MB。

注意,调整逻辑卷大小之后,也需要对文件系统调整大小进行匹配。这个额外的步骤各不相同,取决于创建文件系统的类型。在本文中,我们使用’lv1’创建了ext4类型的文件系统,所以这里的操作是针对ext4文件系统的。(ext2/3文件系统也类同)。命令的执行顺序是很重要的。

首先,我们卸载掉lv1卷

# umount /lvm-mount/

然后,设置卷的大小为200M

# lvresize -L 200M /dev/volume-group1/lv1

接下来,检查磁盘错误

# e2fsck -f /dev/volume-group1/lv1

运行以下命令扩展文件系统以后,ext4信息就更新了。

# resize2fs /dev/volume-group1/lv1

现在,这个逻辑卷应该已经扩展到200MB了。我们检查LV的状态来验证。

# lvdisplay

  --- Logical volume ---
  LV Name                /dev/volume-group1/lv1
  VG Name                volume-group1
  LV UUID                9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

现在,这个逻辑卷可以再次挂载,同样这个方法也可用于其他分区。

缩减一个LVM卷

这章节介绍缩减LVM卷大小的方法。命令的顺序同样重要。并且,下列命令对ext2/3/4文件系统同样有效。

注意减少逻辑卷的大小值若小于储存的数据大小,存储在后面的数据会丢失。

首先,卸载掉卷。

# umount /dev/volume-group1/lv1

然后,检测磁盘错误。

# e2fsck -f /dev/volume-group1/lv1

接下来缩小文件系统,更新ext4信息。

# resize2fs /dev/volume-group1/lv1 100M

完成以后,减少逻辑卷大小

# lvresize -L 100M /dev/volume-group1/lv1

WARNING: Reducing active logical volume to 100.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv1? [y/n]: y Reducing logical volume lv1 to 100.00 MiB Logical volume lv1 successfully resized

最后,验证调整后的逻辑卷大小。

# lvdisplay

--- Logical volume ---
  LV Name                /dev/volume-group1/lv1
  VG Name                volume-group1
  LV UUID                9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

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

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

Bacula是一个开源网络备份解决方案,允许你在本地或者远程计算机组上备份或者还原数据。配置与安装很容易,并支持许多高级存储管理特性。

本教程中,让我们来学习一下如何在Ubuntu 14.04服务器上安装和配置Bacula。我的机器的IP是192.168.1.250/24,主机名是server.unixmen.local。现在让我们进入教程吧。

安装 Bacula

Bacula使用SQL数据库管理它的信息。我们可以使用MySQL或者PostgreSQL数据库。本篇教程中,我使用MySQL。

输入下面的命令安装MySQL服务器。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mysql-server

在安装MySQL的过程中,可能提示需要输入数据库管理员密码。输入密码后按下OK。

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

重新输入密码:

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

现在使用下面的命令安装bacula:

sudo apt-get install bacula-server bacula-client

Bacula默认使用Postfix MTA。安装过程中,你会被要求配置Postfix。

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

选择Internet站点并点击OK。

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

输入服务器完整域名(FQDN):

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

现在输入yes用dbconfig-common来配置Bacula数据库。

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

输入MySQL数据库管理员密码:

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

设置数据库的bacula-director-mysql用户的密码。如果留空不输入,会生成一个随机密码。

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

重新输入密码:

Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器
Linux:在Ubuntu 14.04 上使用Bacula和Webmin设置备份服务器

创建备份与还原目录

现在,让我们创建备份与还原目录。

sudo mkdir -p /mybackup/backup /mybackup/restore

设置上面目录的权限与所属用户/组:

sudo chown -R bacula:bacula /mybackup/
sudo chown -R 700 /mybackup/

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

Linux:[小白技巧]在Ubuntu 14.04中,如何从Unity启动器上移除盘符图标

一个读者发来的问题:在Ubuntu 14.04系统中,我如何从Unity启动器上移除这些盘符图标?我从来不使用它,然而它占用着启动器的位置。

默认情况下,无论你挂载与否,系统上所有分区的盘符图标都会显示在Unity启动器上。事实上它可能会使 Unity 启动器的位置变得拥挤。刚刚接触 Ubuntu 的小白可能对如何将这些盘符移去感觉比较困扰,但是实际上这很容易。

要从Ubuntu 14.04系统的Untiy启动器上永久地移除盘符图标,右键点击盘符,然后选择”Unlock from Launcher”即可。

Linux:[小白技巧]在Ubuntu 14.04中,如何从Unity启动器上移除盘符图标
Linux:[小白技巧]在Ubuntu 14.04中,如何从Unity启动器上移除盘符图标

就这样。你不需要做更多操作了。即使分区被挂载,在Unity启动器上你再也看不到盘符图标了。我希望这能帮到你。如果你有任何问题可以随时问我。


via: http://itsfoss.com/remove-drive-icons-from-unity-launcher-in-ubuntu/

译者:lousam 校对:wxy

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

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

Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

Rainloop是一个使用PHP编写的,开源免费的网页邮件客户端。他支持包括Google、Yahoo、OutLook在内的主流的邮件服务器,当然,他也支持你自己的本地邮件服务器。它看起来大致就像使用IMAP和SMTP协议的MUA(邮件客户端)一样。

RainLoop 示例

可以看一下RainLoop作者安装的演示页面: http://demo.rainloop.net/

Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

在Arch Linux上安装RainLoop

一旦在您的服务器部署上Rainloop,剩余要做的唯一的事情是通过Web浏览器访问您的Rainloop,并提供你正在使用的邮件服务器信息。

本教程包含了在 Arch Linux上的Rainloop 网页客户端的安装流程,包括如何进行配置 ApacheNginx, 当然本教程使用修改Hosts的方式,从而避免了DNS的访问。

If you also need references on installing Rainloop on Debian and Red Hat systems visit the previous RainLoop Webmail article at.

如果你还是需要一篇在DebianRed Hat 安装 RainLoop Webmail 的教程,你可以看这篇文章:

以及在 Ubuntu 服务器中安装 RainLoop Webmail 的教程,你可以看这篇文章:

系统要求

对 Nginx

对 Apache

Step 1:在 Nginx 或者 Apache 上创建虚拟主机

1. 假设你已经如上面介绍的链接所述,配置好了您的服务器(NginxApache),你需要做的第一件事是在Hosts文件里创建一个原始解析记录,以指向的Arch Linux系统的IP。

对于Linux系统,修改 /etc/hosts 文件并且在你的localhost条目之下添加 Rainloop 的虚拟域。如下:

127.0.0.1   localhost.localdomain  localhost     rainloop.lan
192.168.1.33    rainloop.lan
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

添加域信息

如果是Windows系统,则修改 C:WindowsSystem32driversetchosts 并且将接下来的内容添加到你的文件里:

192.168.1.33       rainloop.lan

2. 使用 ping 命令确认本地的 Rainloop 域名创建成功之后,然后在 ApacheNginx 中创建所需的 虚拟主机SSL 配置。

Nginx 虚拟主机

/etc/nginx/sites-available/ 目录下使用如下命令创建一个名叫rainloop.lan的文件:

$ sudo nano /etc/nginx/sites-available/rainloop.conf

添加如下的文件内容:

server {
    listen 80;
    server_name rainloop.lan;
    rewrite        ^ https://$server_name$request_uri? permanent;
    access_log /var/log/nginx/rainloop.lan.access.log;
    error_log /var/log/nginx/rainloop.lan.error.log;
    root /srv/www/rainloop/;
    # serve static files
    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
        root    /srv/www/rainloop/;
        expires 30d;
    }
    location / {
        index index.html index.htm index.php;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
    location ^~ /data {
        deny all;
    }
    location ~ .php$ {
        #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
 }

接下来创建SSL配置文件:

$ sudo nano /etc/nginx/sites-available/rainloop-ssl.conf

添加如下内容:

server {
    listen 443 ssl;
    server_name rainloop.lan;
    ssl_certificate     /etc/nginx/ssl/rainloop.lan.crt;
    ssl_certificate_key  /etc/nginx/ssl/rainloop.lan.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    access_log /var/log/nginx/rainloop.lan.access.log;
    error_log /var/log/nginx/rainloop.lan.error.log;
    root /srv/www/rainloop/;
    # serve static files
    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
        root    /srv/www/rainloop/;
        expires 30d;
    }
    location ^~ /data {
        deny all;
    }
    location / {
        index index.html index.htm index.php;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
    location ~ .php$ {
        #fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
 }

接下来将会自动生成CertificateKeys文件,然后在文件中叫Common Name*的证书里中添加您的虚拟域名( rainloop.lan**)。

$ sudo nginx_gen_ssl.sh
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

生成证书和密钥

生成证书和SSL密钥后,创建Rainloop Web服务器的文件路径(Rainloop PHP文件所在的位置),然后启用虚拟主机,并重新启动Nginx的守护进程,应用配置。

$ sudo mkdir -p /srv/www/rainloop
$ sudo n2ensite rainloop
$ sudo n2ensite rainloop-ssl
$ sudo systemctl restart nginx
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

创建RainLoop 网页向导

Apache 虚拟主机

/etc/httpd/conf/sites-available/中创建 rainloop.conf文件:

$ sudo nano /etc/httpd/conf/sites-available/rainloop.conf

添加如下内容:


    ServerName rainloop.lan
    DocumentRoot "/srv/www/rainloop/"
    ServerAdmin you@example.com
    ErrorLog "/var/log/httpd/rainloop-error_log"
    TransferLog "/var/log/httpd/rainloop-access_log"
    
        Options +Indexes +FollowSymLinks +ExecCGI
        AllowOverride All
        Order deny,allow
        Allow from all
        Require all granted
    

Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

创建Apache虚拟主机

为Apache添加SSL支持:

$ sudo nano /etc/httpd/conf/sites-available/rainloop-ssl.conf

添加如下文件内容:


    ServerName rainloop.lan
    DocumentRoot "/srv/www/rainloop/"
    ServerAdmin you@example.com
    ErrorLog "/var/log/httpd/rainloop-ssl-error_log"
    TransferLog "/var/log/httpd/rainloop-ssl-access_log"
    SSLEngine on
    SSLCertificateFile "/etc/httpd/conf/ssl/rainloop.lan.crt"
    SSLCertificateKeyFile "/etc/httpd/conf/ssl/rainloop.lan.key"
    
        SSLOptions +StdEnvVars
    
    BrowserMatch "MSIE [2-5]"
        nokeepalive ssl-unclean-shutdown
        downgrade-1.0 force-response-1.0
    CustomLog "/var/log/httpd/ssl_request_log"
        "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x "%r" %b"
    
        Options +Indexes +FollowSymLinks +ExecCGI
        AllowOverride All
        Order deny,allow
        Allow from all
        Require all granted
    

接下来将会自动生成CertificateKeys文件,然后在文件中叫Common Name*的证书里中添加您的虚拟域名( rainloop.lan**)。

$ sudo apache_gen_ssl
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

创建SSL证书和密钥

Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

输入组织信息

After the Certificate and SSL keys are created, add Rainloop DocumentRoot path, then enable Virtual Hosts and restart Apache daemon to apply configurations. 在证书和密钥建立之后,创建 RainLoop 的 DocumentRoot 所指向的目录,之后激活虚拟主机,并且重启Apache应用设置。

$ sudo mkdir -p /srv/www/rainloop
$ sudo a2ensite rainloop
$ sudo a2ensite rainloop-ssl
$ sudo systemctl restart httpd
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail
Linux:在Arch上使用Nginx/Apache安装RainLoop Webmail

激活虚拟主机

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

Linux:用笔记本模式工具1.65来延长电池续航能力

Linux:用笔记本模式工具1.65来延长电池续航能力
Linux:用笔记本模式工具1.65来延长电池续航能力

笔记本模式工具是一个Linux电源管理工具包,它可以让用户以多种方式延长笔记本电池续航能力,现在它已经升级到1.65。

笔记本模式工具的发布的版本曾经很少而且间隔很长,但开发者在最新的版本中做了一些很有意思的改变,虽然此次更新与以前不同。

根据更新日志,grep找不到$device/uevent的错误已得到修复、 sysfs/enabled已被”ip link down”所取代、 添加了对iwlwifi的支持,运行时电源管理框架现在更健壮,并且usb-autosuspend模块已被去除。

此外,当笔记本电脑恢复时,笔记本模式工具将强制以初始化模式运行,最新版本已添加英特尔 PState 驱动程序的模块,并已实现挂起/休眠接口。

用户不须更改自动设置。更改自动设置可能会导致更多的问题,但通常看来他们总是会去动它。此外,要注意到每个功能究竟是做什么的,否则你可能会搞出更多问题。

看官方公告来了解更多细节。

现在就下载用笔记本模式工具1.65:


via: http://news.softpedia.com/news/Improve-Battery-Life-with-Laptop-Mode-Tools-1-65-447397.shtml

译者:2q1w2007 校对:wxy

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

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

Linux:使用DNSCrypt来加密您与OpenDNS之间的通信

正如SSL能将HTTP通信变为加密过的HTTPS通信,DNSCrypt, 物如其名, 是一款能加密您电脑与OpenDNS之间的通信的小神器。

DNSCrypt刚问世的时候,官方公布它只是一款Mac才能用的工具,但根据最近一篇由OpenDNS发的文章表明,虽然还没有用户界面,但其实当Mac版DNSCrypt推出的时候源码已经放到了Github上了, Linux的用户也可以安装以及使用哦!(LCTT译注:目前已经有DNSCrypt WinClientDNSCrypt Windows Service ManagerDNSCrypt OSXClient 和 DNSCrypt Tools for Linux 等第三方图形界面客户端出现。)

Linux:使用DNSCrypt来加密您与OpenDNS之间的通信
Linux:使用DNSCrypt来加密您与OpenDNS之间的通信

为神马要使用 DNSCrypt?

DNSCrypt可以加密您电脑与OpenDNS服务器的所有通信,加密可以防止中间人攻击,信息窥觑,DNS劫持。更能防止网络供应商对某些网站的封锁。

这是世界上第一款加密DNS通信的工具,虽然TOR可以加密DNS的请求,但毕竟它们只是在出口节点加密而已。

这款工具并不需要对域名或其工作方式做任何的改变,它只是提供了个该工具的用户与机房里的DNS服务器之间的加密方式而已。

您可以在GitHubOpenDNS DNSCrypt页面阅读更多的相关信息。

如何在Linux使用DNSCrypt

首先下载安装DNSCrypt (LCTT译注,安装过程不详述,请参照官网描述), 然后在Terminal里输入这个命令:

sudo /usr/sbin/dnscrypt-proxy --daemonize

然后把您的DNS服务器调成”127.0.0.1″ – 在GNOME界面下的话,只要到Network Connections(网络连接)选项然后选择”Edit”并在”DNS servers”输入”127.0.0.1″就好了。如果您用的是DHCP的话,请选择Automatic (DHCP) addresses only”, 这样的话才能输入DNS服务器。然后只要重连网络便可。

您可以访问这条链接来测试您连接到了OpenDNS了没。

如果您想设置开机启动DNSCrypt,可以自建一个init的脚本,如果您用的是Ubuntu,可以参考下面的。

Arch Linux的用户可以通过AUR来安装DNSCrypt-proxy (内含rc.d脚本)

Ubuntu下的DNSCrypt

如果您想在Ubuntu设置开机启动,您可以使用这个Upstart脚本

注: 在Ubuntu 12.04版在127.0.0.1有个本地的DNS cache 服务器(dnsmasq)在跑,所以已经把改脚本改成让DNSCrypt使用127.0.0.2了, 所以按照上面的教程,应该把127.0.0.1换成127.0.0.2了。

要安装此脚本请使用以下的指令(要首先解压下下来的压缩文件):

sudo cp dnscrypt.conf /etc/init/
sudo ln -s /lib/init/upstart-job /etc/init.d/dnscrypt

然后用这个指令来启动:

sudo start dnscrypt

现在DNSCrypt就应该是开机自启了,如果您想停止的话,可以使用:

sudo stop dnscrypt

下载DNSCrypt (.deb、 .rpm以及源码都可供下载哦!)


via: http://www.webupd8.org/2012/02/encrypt-dns-traffic-in-linux-with.html

译者:213edu 校对:wxy

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

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

Linux:如何在MacBook Pro Retina上安装Linux

Linux:如何在MacBook Pro Retina上安装Linux
Linux:如何在MacBook Pro Retina上安装Linux

MacBook Pro拥有非常强大的配置,但是有些人想强上加强,他们想用Linux系统。

不管您是想要更开放和个性化的操作系统又或者是您只想要使用某些在Linux特有的软件,您都会想要在您的MacBook上安装Linux。 可惜的是MacBook Pro们可是一块块密不透风砖头,让您想装其他系统又无从下手。尤其是Linux,比在MacBook上装Windows还难。 Boot Camp对于Linux来说也没有什么用处。 虽然如此,但并不代表您完全不能做到,装机走起!

为什么要在MacBook Pro Retina上装Linux?

买MacBook不就是为了OS X吗?为何要装Linux? 其实买MacBook的原因不仅仅只是因为它的操作系统, 其极致的硬件性能,超长的电池寿命,以及抗操抗造都是购买它的原因。 这些这么好的硬件再加上一块能让您体验到HiDPI的清晰度Retina显示屏,其不皆是买入的理由乎?

但是如果您对OS X无爱,又或者您真心想要使用Linux,为何不将这自由、开源、小巧、个性化的Linux塞进您的高大上的硬件呢?苹果可能有话要说了,可谁在乎呢~

注:在本期教程我们将会使用最流行的Linux发行版 – Ubuntu来作为我们这次安装的选择。您也可以用自己想用的的Linux发行版,但相关的步骤会和本教程略有出入。 如果您把自己的系统玩坏了,我们将不承担任何责任。 本教程将教您如何 Linux 和 OS X 双系统启动,另外只有在OS X才能升级固件,所以我们建议您不要将OS X 删除。

但在我们开始之前,请您用您喜欢的方法(比如Time Machine 或 CrashPlan)将您的电脑彻底备份,以防万一。

下载 Ubuntu

首先您需要下载一份Ubuntu桌面版安装镜像 。 务必选择64位的桌面版,虽然该镜像并不是为Mac提供的。该镜像在BIOS和EFI模式下都能启动,而Mac的镜像却只能在BIOS启动。Mac是专门设计成这样的,但是我们要使之以EFI模式下启动。

写到U盘(USB)

其次, 找个2GB以上的USB, 我们将会用该USB作为Ubuntu的安装启动盘。 你可以按照 Ubuntu官方指导的步骤 或者 使用专用的图形化工具 来准备安装盘.

调整分区大小

Linux:如何在MacBook Pro Retina上安装Linux
Linux:如何在MacBook Pro Retina上安装Linux

当你完成上一步后,你的Mac Book Pro就做好安装的准备了。 打开Disk Utility(磁盘工具), 点击左边选择你的硬盘, 选择Partitions(分区)标签页。 把Mac分区缩小到你喜欢的大小 – 我们将会用新创建的可用空间来安装Ubuntu。

启动Ubuntu镜像

Linux:如何在MacBook Pro Retina上安装Linux
Linux:如何在MacBook Pro Retina上安装Linux

上述步骤完成后,将U盘插入并重启Mac Book Pro。当关机之后屏幕一黑时,请按住Option键(alt)直到你看到不同的启动选项。选择EFI选项(如果有两个的话选择左边的哪一个)来从USB启动Ubuntu.

当你看到“Try Ubuntu” 和 “Install Ubuntu” 两个选项的时候, 选择 “Try Ubuntu” 因为我们需要在安装完成之后重启之前弄一些其他的东西。

安装器

当Ubuntu的桌面加载好之后,一路向下走直到你看到分区的这一步。 如果你连接不上WiFi的话就代表你的Ubuntu还暂时不知道如何跟你这位高大上Mac做朋友, 不过不用担心, 我们暂时还不需要网络, 在你迟些重启的时候会自动识别你的驱动。

Linux:如何在MacBook Pro Retina上安装Linux
Linux:如何在MacBook Pro Retina上安装Linux

到分区这个步骤之后, 选择 “Do Something else” 这个选项。 然后请确保那块大约128MB左右的分区已经被识别为EFI启动分区(你可以点击它然后选择Option来确定一下; 另外,那个分区应该是 /dev/sda1)。下一步, 你要在新建的空间里创建一个 ext4分区,在其上挂载“/”路径。 如果你知道你自己在干嘛的话也可以创建几个不同的分区(切记这不是Windows啊孩纸)。

在你开始下一步之前,请确保你的安装引导程序(boot loader)是选择了 /dev/sda1,GRUB也是装到该分区的。 然后按照平常一样该咋装咋装。

修改 EFI 引导

Linux:如何在MacBook Pro Retina上安装Linux
Linux:如何在MacBook Pro Retina上安装Linux

当你的安装器装完Ubuntu之后,不要按重启!!! 我们还需要弄这么点东西才能使用GRUB。 请运行下列的指令:

sudo apt-get install efibootmgr

这个将会暂时地安装一个EFI boot的配置工具,然后 运行:

sudo efibootmgr

这个将会显示出当前的启动设置, 你应该看到的是 “ubuntu” 和 “Boot0000“,当前的EFI设置是把系统指向 Boot0080,这样的话就会跳过GRUB然后直接跳入OS X,所以我们要用以下指令来修复它:

sudo efibootmgr -o 0,80

现在就可以重启了!

恭喜你啦~你的Ubuntu现在应该就可以用了哦!不过下列的一些调整会让性能提升哦!

坑爹地调整设置

首先你需要改一下GRUB的设置,这样你的SSD盘才不会偶尔死机, 在Terminal输入:

sudo nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX那一行 , 把它改成 GRUB_CMDLINE_LINUX=”libata.force=noncq” 。 按下CTRL + X保存,然后按Y来确定保存。 接下来你要在Terminal输入:

sudo nano /etc/grub.d/40_custom

打开一个新的文件,请使用真丶精准手指准确地一字一字输入:

menuentry "Mac OS X" {
exit
}

这将会让你boot到你安装好的Mac OS X(GRUB的32-bit和64-bit项不能用)。然后CTRL+X 和 Y 保存退出,然后输入:

sudo update-grub

最后必须要重启才能生效。

Linux:如何在MacBook Pro Retina上安装Linux
Linux:如何在MacBook Pro Retina上安装Linux

在极其高清的Retina显示屏上神马都这么小,坑爹啊啊? 去Setting -> Display 里把 Scaling Factor弄大一点吧,不然妈妈又要担心你的近视眼了。

你也可能觉得在边边上改变窗口大小是一件极其困难的事情,坑爹啊啊? 去Terminal输入:

sudo nano /usr/share/themes/Ambiance/metacity-1/metacity-theme-1.xml

然后在里面修改成下面的参数:




如果还是太小,把上面的东西改成6吧!

最后,如果你觉得你的Linux把你那Retina鲜艳的颜色洗掉了,请到你的OS X盘,找到以下的文件:

/Library/ColorSync/Profiles/Displays/Color LCD-xxxxxx.icc

xxxxxx只是一串随机的字符,不过这路径应该只有一个文件。把他搬到你Ubuntu的Home folder, 然后到 System Settings –> Color 选择 Add New Profile 并选择你那刚弄过来的icc文件。

总结

Linux:如何在MacBook Pro Retina上安装Linux
Linux:如何在MacBook Pro Retina上安装Linux

恭喜你啦, 现在终于有一台属于你的Linux MacBook Pro Retina啦!如果你想把你的Ubuntu弄得更手熟,请按 让你的Ubuntu 像家一样舒服 尽情地修改配置吧! 该教程也可用于其他的Mac系统,当然每种Mac都有不同的好处和坏处。 如果你用的是其他的Mac,请翻一翻这篇为Ubuntu写的文档

另外,你还可以看一下其他可以在Mac安装的Linux 发行包哦!

Image Credits: K?rlis Dambr?ns Via Flickr


via: http://www.makeuseof.com/tag/install-linux-macbook-pro/

译者:213edu 校对:wxy

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

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

Linux:黑客内核:编写属于你的第一个Linux内核模块

曾经多少次想要在内核游荡?曾经多少次茫然不知方向?你不要再对着它迷惘,让我们指引你走向前方……

内核编程常常看起来像是黑魔法,而在亚瑟 C 克拉克的眼中,它八成就是了。Linux内核和它的用户空间是大不相同的:抛开漫不经心,你必须小心翼翼,因为你编程中的一个bug就会影响到整个系统。浮点运算做起来可不容易,堆栈固定而狭小,而你写的代码总是异步的,因此你需要想想并发会导致什么。而除了所有这一切之外,Linux内核只是一个很大的、很复杂的C程序,它对每个人开放,任何人都去读它、学习它并改进它,而你也可以是其中之一。

Linux:黑客内核:编写属于你的第一个Linux内核模块
Linux:黑客内核:编写属于你的第一个Linux内核模块

学习内核编程的最简单的方式也许就是写个内核模块:一段可以动态加载进内核的代码。模块所能做的事是有限的——例如,他们不能在类似进程描述符这样的公共数据结构中增减字段(LCTT译注:可能会破坏整个内核及系统的功能)。但是,在其它方面,他们是成熟的内核级的代码,可以在需要时随时编译进内核(这样就可以摒弃所有的限制了)。完全可以在Linux源代码树以外来开发并编译一个模块(这并不奇怪,它称为树外开发),如果你只是想稍微玩玩,而并不想提交修改以包含到主线内核中去,这样的方式是很方便的。

在本教程中,我们将开发一个简单的内核模块用以创建一个/dev/reverse设备。写入该设备的字符串将以相反字序的方式读回(“Hello World”读成“World Hello”)。这是一个很受欢迎的程序员面试难题,当你利用自己的能力在内核级别实现这个功能时,可以使你得到一些加分。在开始前,有一句忠告:你的模块中的一个bug就会导致系统崩溃(虽然可能性不大,但还是有可能的)和数据丢失。在开始前,请确保你已经将重要数据备份,或者,采用一种更好的方式,在虚拟机中进行试验。

尽可能不要用root身份

默认情况下,/dev/reverse只有root可以使用,因此你只能使用sudo来运行你的测试程序。要解决该限制,可以创建一个包含以下内容的/lib/udev/rules.d/99-reverse.rules文件:

SUBSYSTEM=="misc", KERNEL=="reverse", MODE="0666"

别忘了重新插入模块。让非root用户访问设备节点往往不是一个好主意,但是在开发其间却是十分有用的。这并不是说以root身份运行二进制测试文件也不是个好主意。

模块的构造

由于大多数的Linux内核模块是用C写的(除了底层的特定于体系结构的部分),所以推荐你将你的模块以单一文件形式保存(例如,reverse.c)。我们已经把完整的源代码放在GitHub上——这里我们将看其中的一些片段。开始时,我们先要包含一些常见的文件头,并用预定义的宏来描述模块:

#include 
#include 
#include 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Valentine Sinitsyn ");
MODULE_DESCRIPTION("In-kernel phrase reverser");

这里一切都直接明了,除了MODULE_LICENSE():它不仅仅是一个标记。内核坚定地支持GPL兼容代码,因此如果你把许可证设置为其它非GPL兼容的(如,“Proprietary”[专利]),某些特定的内核功能将在你的模块中不可用。

什么时候不该写内核模块

内核编程很有趣,但是在现实项目中写(尤其是调试)内核代码要求特定的技巧。通常来讲,在没有其它方式可以解决你的问题时,你才应该在内核级别解决它。以下情形中,可能你在用户空间中解决它更好:

  • 你要开发一个USB驱动 —— 请查看libusb
  • 你要开发一个文件系统 —— 试试FUSE
  • 你在扩展Netfilter —— 那么libnetfilter_queue对你有所帮助。

通常,内核里面代码的性能会更好,但是对于许多项目而言,这点性能丢失并不严重。

由于内核编程总是异步的,没有一个main()函数来让Linux顺序执行你的模块。取而代之的是,你要为各种事件提供回调函数,像这个:

static int __init reverse_init(void)
{
    printk(KERN_INFO "reverse device has been registeredn");
    return 0;
}
static void __exit reverse_exit(void)
{
    printk(KERN_INFO "reverse device has been unregisteredn");
}
module_init(reverse_init);
module_exit(reverse_exit);

这里,我们定义的函数被称为模块的插入和删除。只有第一个的插入函数是必要的。目前,它们只是打印消息到内核环缓冲区(可以在用户空间通过dmesg命令访问);KERN_INFO是日志级别(注意,没有逗号)。__init__exit是属性 —— 联结到函数(或者变量)的元数据片。属性在用户空间的C代码中是很罕见的,但是内核中却很普遍。所有标记为__init的,会在初始化后释放内存以供重用(还记得那条过去内核的那条“Freeing unused kernel memory…[释放未使用的内核内存……]”信息吗?)。__exit表明,当代码被静态构建进内核时,该函数可以安全地优化了,不需要清理收尾。最后,module_init()module_exit()这两个宏将reverse_init()reverse_exit()函数设置成为我们模块的生命周期回调函数。实际的函数名称并不重要,你可以称它们为init()exit(),或者start()stop(),你想叫什么就叫什么吧。他们都是静态声明,你在外部模块是看不到的。事实上,内核中的任何函数都是不可见的,除非明确地被导出。然而,在内核程序员中,给你的函数加上模块名前缀是约定俗成的。

这些都是些基本概念 – 让我们来做更多有趣的事情吧。模块可以接收参数,就像这样:

# modprobe foo bar=1

modinfo命令显示了模块接受的所有参数,而这些也可以在/sys/module//parameters下作为文件使用。我们的模块需要一个缓冲区来存储参数 —— 让我们把这大小设置为用户可配置。在MODULE_DESCRIPTION()下添加如下三行:

static unsigned long buffer_size = 8192;
module_param(buffer_size, ulong, (S_IRUSR | S_IRGRP | S_IROTH));
MODULE_PARM_DESC(buffer_size, "Internal buffer size");

这儿,我们定义了一个变量来存储该值,封装成一个参数,并通过sysfs来让所有人可读。这个参数的描述(最后一行)出现在modinfo的输出中。

由于用户可以直接设置buffer_size,我们需要在reverse_init()来清除无效取值。你总该检查来自内核之外的数据 —— 如果你不这么做,你就是将自己置身于内核异常或安全漏洞之中。

static int __init reverse_init()
{
    if (!buffer_size)
        return -1;
    printk(KERN_INFO
        "reverse device has been registered, buffer size is %lu bytesn",
        buffer_size);
    return 0;
}

来自模块初始化函数的非0返回值意味着模块执行失败。

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

Linux:Linux:使用bash删除目录中的特定文件

Linux:Linux:使用bash删除目录中的特定文件
Linux:Linux:使用bash删除目录中的特定文件

我是一名Linux新用户。现在我需要清理一个下载目录中的文件,其实我就是想从~/Download/文件夹删去除了以下格式的文件外所以其它文件:

  • *.iso – 所有的iso格式的文件。
  • *.zip – 所有zip格式的文件。

我如何在一个基于Linux,OS X 或者 Unix-like 系统上的bash shell中删除特定的文件呢?

Bash shell 支持丰富的文件模式匹配符例如:

  • * - 匹配所有的文件。
  • ? - 匹配文件名中的单个字母。
  • […] - 匹配封闭括号中的任何一个字母。

策略 #1: 见识一下扩展的模式匹配符

这里你需要用系统内置的shopt命令来开启shell中的extglob选项,然后你就可以使用扩展的模式符了,这些模式匹配符如下:

  1. ?(模式列表) - 匹配零次或一次给定的模式。
  2. *(模式列表) - 匹配零次或多次给定的模式。
  3. +(模式列表) - 至少匹配一次给定的模式。
  4. @(模式列表) - 匹配一次给定的模式。
  5. !(模式列表) - 不匹配给定模式。

一个模式列表就是一个或多个用 | 分开的模式(文件名)。

首先要打开extgolb选项:

shopt -s extglob

在Bash中删掉除.zip和.iso文件以外的所有文件

rm 命令的语法格式为:

## 仅保留 file1 文件 ##
rm  !(file1)
## 仅保留 file1 和 file2 文件##
rm  !(file1|file2)
## 仅保留 zip 文件 ##
rm  !(*.zip)
## 仅保留 zip 和 iso 文件 ##
rm  !(*.zip|*.iso)
## 你也可以使用完整的目录 ##
rm /Users/vivek/!(*.zip|*.iso|*.mp3)
## 也可以传递参数 ##
rm [选项]  !(*.zip|*.iso)
rm -v  !(*.zip|*.iso)
rm -f  !(*.zip|*.iso)
rm -v -i  !(*.php)

最后,关闭 extglob 选项方法如下:

shopt -u extglob

策略 #2: 使用bash的 GLOBIGNORE 变量删除指定文件以外的所有文件

摘自 bash(1) 手册页:

这是一个用冒号分开的模式列表,通过路径展开方式定义了要忽略的文件集合。如果一个匹配到路径展开模式的文件也匹配GLOBIGNORE中的模式,那么它会从匹配列表中移除。

要删除所有文件只保留 zip 和 iso 文件,应如下设置 GLOBIGNORE:

## 只在 BASH 中可行 ##
cd ~/Downloads/
GLOBIGNORE=*.zip:*.iso
rm -v *
unset GLOBIGNORE

策略 #3: 用 find 命令删除所有其它文件仅保留 zip 和 iso 文件

如果你正在使用 tcsh/csh/sh/ksh 或者其它shell,你可以在Unix-like系统上试着用下面find命令的语法格式来删除文件:

find /dir/ -type f -not -name '匹配模式' -delete

或者

## 对于怪异的文件名可以使用 xargs ##
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm {}
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm [选项] {}

想要删除 ~/source 目录下除 php 以外的文件,键入:

find ~/sources/ -type f -not -name '*.php' -delete

或者

find ~/sources/ -type f -not -name '*.php' -print0 | xargs -0 -I {} rm -v {}

只保留 *.zip 和 *.iso 文件的语法如下:

find . -type f -not ( -name '*zip' -or -name '*iso' ) -delete

更多信息参见bash command man pagefind command man page


via: http://www.cyberciti.biz/faq/linux-bash-delete-all-files-in-directory-except-few/

译者:Linchenguang 校对:Caroline

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

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

Linux:linux简单之美

Linux:linux简单之美
Linux:linux简单之美

(一)

话说windows也有syscall,这是必须的。但是win的syscall可以直接call吗?可以是

可以但是破费周折,搞成SDT之类的复杂概念。下面看看linux是如何做的吧。

section .data
msg db "hello hopy!",0x0a
section .text
global _start
_start:
	mov eax,4
	mov ebx,1
	mov ecx,msg
	mov edx,12
	int 0x80
	mov eax,1
	mov ebx,0
	int 0x80

关键是系统调用号要知道,开始找的是usr/include/asm-gen*/unistd.h,

可是都不对。后来找的是usr/include/x86_64_linux_gnu/asm/下的头文件,

有2个,分别对应x86和x64.、编译连接指令如下:

nasm -f elf main.asm
ld main.o

运行,段转储错误鸟,查了一下,本猫用的是x64位的linux,所以要生成

x64位的程序,或者指明是x86的程序,我选择后者:

ld -m elf_i386 -o main main.o

哦鸟!

(二)

我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用

C标准库中的函数快速做一些”复杂”的事:

section .data
	ft db "now is %d",10
section .text
extern puts
extern exit
extern sleep
extern printf
global main
main:
	mov edi,11
again:
	dec edi
	push edi
	push ft
	call printf
	push 1
	call sleep
	cmp edi,0
	jnz again
	push msg
	call puts
	push 0
	call exit
msg:
 db "happy xxx day!",0

以上代码功能很简单,从10倒数到0,然后打印一行,最后结束.与之前代码不同的是其中

调用了C标准库中的函数.编译和以前一样:

nasm -e elf main.asm

我们看看怎么连接:

gcc -m32 -o main main.o

好鸟!运行正常.

值得注意的是:我的OS是ubuntu64,而asm代码中是32位的,如果开始用

ld -m elf_i386 -lc -o main main.o

的方式,首先会提示找不到c库,这可以进入/usr/lib,然后使用

sudo ln -sv /lib/i386-linux-gun/libc.so.6 libc.so

创建软连接解决.

但在运行时提示无法找到可执行文件!该文件明明在的!

遂用gcc来连接,但要将_start改为main,还要装载32库

sudo apt-get install ia32-libs

还会提示找不到h文件,这时再装载库

sudo apt-get install g++-multilib

还有2族库,如有必要也可加载:

sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 
libstdc++5:i386 libstdc++6:i386
sudo apt-get install libc6-i386

最后要说的是,一些C代码在用std=c99编译时会发现提示无法获取结构大小,

这时改成如下即可:

gcc -D_GNU_SOURCE -std=c99 main.c

 (三)

在(二)中我们尝试使用了C库的函数完成功能,那么能不能用syscall方式

来搞呢?显然可以!

section .data
	ft db "now is X",10
section .text
global _start
_start:
	mov edi,10
again:
	dec edi
	mov eax,edi
	add eax,0x30
	mov byte [ft+7],al
	mov eax,4
	mov ebx,1
	mov ecx,ft
	mov edx,9
	int 0x80
	mov eax,162
	push 0
	push 1
	mov ebx,esp
	mov ecx,0
	int 0x80
	cmp edi,0
	jnz again
	mov eax,4
	mov ebx,1
	mov ecx,msg
	mov edx,15
	int 0x80
	mov eax,1
	mov ebx,0
	int 0x80
msg:
 db "happy xxx day!",10

nasm -f elf main.asm
ld -m elf_i386 -o main main.o

在代码中延时使用的是nanosleep,其他和第一篇一致,只不过做了一个bin->ascii的小转换.

via: http://blog.csdn.net/mydo/article/details/8224352 http://blog.csdn.net/mydo/article/details/8452386 http://blog.csdn.net/mydo/article/details/8452417 

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

Linux:实用的Linux SHELL面试问题及答案

随着之前有关面试的系列文章,读者的反应比较强烈,所以我决定出一篇有关Linux Shell相关的面试文章,如果对本文有什么意见或意见的话,欢迎反馈到我的邮箱里。

如果想要阅读已发表在Tecmint.com的文章,可以点击链接,链接到访谈系列,在这里我们已经介绍很多题目即文章。,FTP,MySQL和Apache的,脚本,Linux命令等。

Linux:实用的Linux SHELL面试问题及答案
Linux:实用的Linux SHELL面试问题及答案

实用的shell脚本面试问题

这边提到的5个面试问题,延续之前的有关Linux面试问题和答案。如果你是Tecmint.com的读者,你的支持我非常感谢。

1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。

答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd。

现在,创建一个名为userstats.sh文件,将下面的代码添加到它。

#!/bin/bash
echo "Hello, $LOGNAME"
echo "Current date is `date`"
echo "User is `who i am`"
echo "Current directory `pwd`"

给它添加执行权限,并且执行他。

# chmod 755 userstats.sh
# ./userstats.sh

样例输出

Hello, avi
Current date is Sat Jun  7 13:05:29 IST 2014
User is avi      pts/0        2014-06-07 11:59 (:0)
Current directory /home/avi/Desktop

2.写一个shell脚本,进行两个数字的相加,如果没有输入参数就输出错误信息和一行使用说明

答案 : 下面是简单的shell脚本以及描述,如果没有命令行参数,它会抛出错误与如何使用脚本的说明。

再创建一个名为twonumbers.sh文件和下面的内容添加到文件里。

#!/bin/bash
# The Shebang
if [ $# -ne 2 ]
# If two Inputs are not received from Standard Input
then
# then execute the below statements
    echo "Usage - $0   x    y"
    # print on standard output, how-to use the script (Usage - ./1.sh   x    y )
    echo "        Where x and y are two nos for which I will print sum"
    # print on standard output, “Where x and y are two nos for which I will print sum ”
    exit 1
    # Leave shell in Error Stage and before the task was successfully carried out.
fi
# End of the if Statement.
    echo "Sum of $1 and $2 is `expr $1 + $2`"
    # If the above condition was false and user Entered two numbers as a command Line Argument,
       it will show the sum of the entered numbers.

给他添加可执行权限,并且执行。

# chmod 755 two-numbers.sh

情形一: 未输入两个数字作为命令行参数运行脚本,你将得到下面的输出。

样例输出

# ./two-numbers.sh
Usage - ./two-numbers.sh   x    y
        Where x and y are two nos for which I will print sum

情形二: 当数字存在时,你会得到如图所示的结果。

$ ./two-numbers.sh 4 5
Sum of 4 and 5 is 9

因此,上述shell脚本满足了问题的要求。

3.你需要打印一个给定的数字的反序,如输入10572,输出27501,如果没有输入数据,应该抛出错误和使用脚本说明。在此之前,告诉我你需要在这里使用的算法。

算法

  1. 输入的数字为n
  2. 赋值 rev=0, sd=0 (反向和单个数字设置为0)
  3. n % 10, 将得到最左边的数字
  4. 反向数字可以用这个方法生成 rev * 10 + sd
  5. 对输入数字进行右位移操作(除以10)
  6. 如果n > 0, 进入第三步,否则进行第七步
  7. 输出rev

现在,创建一个名为`numbers.sh`文件,并添加以下代码。

#!/bin/bash
if [ $# -ne 1 ]
then
    echo "Usage: $0   number"
    echo "       I will find reverse of given number"
    echo "       For eg. $0 0123, I will print 3210"
    exit 1
fi
n=$1
rev=0
sd=0
while [ $n -gt 0 ]
do
    sd=`expr $n % 10`
    rev=`expr $rev * 10  + $sd`
    n=`expr $n / 10`
done
    echo  "Reverse number is $rev"

授予对文件的执行权限,并运行如下所示的脚本。

# chmod 755 numbers.h

情形一: 当输入不包含命令行参数,你将得到下面的输出。

样例输出

./numbers.sh
Usage: ./numbers.sh  number
       I will find reverse of given number
       For eg. ./2.sh 123, I will print 321

情形二: 正常输入

$ ./numbers.sh 10572
Reverse number is 27501

上面的脚本非常完美,输出正是我们需要的。

4. 你应该直接用终端,而不是依靠任何shell脚本来进行实数计算。你会怎么做(比如实数7.56+2.453)?

答案 : 我们需要用如下所述的特殊方式使用bc命令。将7.56+2.453作为输入通过管道进入bc中。

$ echo 7.56 + 2.453 | bc
10.013

5. 你需要给出圆周率的值,精度为小数点后100位,什么是最简单的方法。

答案 : 找圆周率的值最简单的方法,我们只是需要发出以下命令。

# pi 100
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

很明显!安装我们必须有包pi。只用一个aptyum命令,就能获得所需的软件包,同时用最简单方法来实现这个需求。

就是这样。我会很快在Tecmint.com发表另一个有趣的文章。至此敬请关注。别忘了向我们提供您在的评论和反馈。


via: http://www.tecmint.com/practical-interview-questions-on-linux-shell-scripting/

译者:MikeCoder 校对:wxy

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

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

Linux:戴文的Linux内核专题:25 配置内核 (21)

Linux:戴文的Linux内核专题:25 配置内核 (21)
Linux:戴文的Linux内核专题:25 配置内核 (21)

大家好!本篇我们将会配置Linux内核的网络文件系统支持。网络文件系统是一个可以通过网络远程访问计算机的远程文件系统。

首先,”NFS client support”驱动允许linux系统使用NFS网络文件系统。这里还有3个不同版本的NFS – (NFS client support for NFS version 2)、 (NFS client support for NFS version 3)、 (NFS client support for NFS version 4) 和 (NFS client support for NFSv4.1)。如果你有一个使用NFS的网络,找出你正在使用NFS的版本,或者启用所有的NFS驱动。

交换空间并不需要总在本地存储单元上。这个驱动允许Linux使用NFS作为远程交换空间(Provide swap over NFS support)。

NFS系统可以通过缓存系统加速 (Provide NFS client caching support)。这是一个本地缓存。

启用这个驱动允许NFS服务器使用DNS解析器(Use the legacy NFS DNS resolver)。

“NFS server support”给予需要满足这个需求的服务器提供了NFS的特性。其他一些NFS驱动包括(NFS server support for NFS version 3) 和 (NFS server support for NFS version 4)。

“NFS server manual fault injection”驱动是一个调试驱动,它允许开发者让NFS服务器认为在NFS上发生了一个错误。特别地,这用于测试服务器如何处理NFS错误。

“Secure RPC: Kerberos V mechanism”被用于RPC安全调用。由于安全原因,没有这个特性,NFS无法被加入到内核中。

这是一个RPC的特殊驱动(RPC: Enable dprintk debugging)。

Linux内核支持Ceph文件系统(Ceph distributed file system)。

CIFS是一个用于Samba和Windows服务器的虚拟文件系统(CIFS support (advanced network filesystem, SMBFS successor))。CIFS代表的是”Common Internet FileSystem”(通用网络文件系统)

有两个特性被用于调试或监视CIFS驱动(CIFS statistics) 和 (Extended statistics)。

要在服务器上支持LANMAN安全需要一个特定的驱动(Support legacy servers which use weaker LANMAN security)。LANMAN或者LM哈希是一种较弱的特殊的密码哈希函数。

CIFS在被挂载到安全服务器上之前需要Kerberos票据(Kerberos/SPNEGO advanced session setup)。这个驱动提供了CIFS使用能够提供票据的用户空间工具的能力。

像其他文件系统一样,CIFS有一些扩展功能(CIFS extended attributes) 和 (CIFS POSIX Extensions)。

这个驱动从CIFS服务器上获取访问控制列表(ACL)(Provide CIFS ACL support)。

CIFS有两个其他的调试工具(Enable CIFS debugging routines) 和 (Enable additional CIFS debugging routines)。

CIFS有”DFS feature support”,它允许共享在被移除后仍可以访问。DFS代表”Distributed FileSystem”(分布式文件系统)。

SMB2是CIFS的一个提升替代品(SMB2 network file system support)。SMB2代表的是”Server Message Block version 2″(服务器消息块第2版)。

用这个驱动客户端可以存储CIFS缓存(Provide CIFS client caching support)。

Novell NetWare客户端需要这个驱动访问NetWare卷 (NCP file system support (to mount NetWare volumes))。NCP代表”NetWare Core Protocol”(NetWare核心协议)。NCP是一种允许客户端与服务器主机上的NetWare卷通信的协议。

如果启用这个驱动,NetWare服务器可以使用NFS命名空间(Use NFS namespace if available)。

如果启用这个驱动,NetWare服务器可以使用OS/2长命名空间(Use LONG (OS/2) namespace if available)。

如果启用这个驱动,那么由DOS创建或者DOS系统上的存储单元上的文件名将被转换成小写(Lowercase DOS filenames)。

许多文件系统依赖于本地语言支持 (Use Native Language Support)。特别地,本地语言支持(Native Language Support (NLS))在文件名中使用不同的字符集。

这个驱动允许NCP文件系统支持执行标志和符号链接(Enable symbolic links and execute flags)。

Linux内核提供对Coda文件系统的支持(Coda file system support (advanced network fs))。Coda是众多网络文件系统中的一种。

Linux内核可以支持Andrew文件系统(Andrew File System support (AFS))。然而,Linux内核只能以不安全的方式只读这个文件系统。这个驱动目的是让Linux系统访问AFS。如果你的网络只包含了Linux系统,那么选择一个不同的Linux完全支持的网络系统。

Linux内核有一个实验性的驱动,通过9P2000协议访问Plan 9资源(Plan 9 Resource Sharing Support (9P2000))。内核也有缓存支持(Enable 9P client caching support)和控制列表(9P POSIX Access Control Lists),用于支持先前提到的Plan 9特性。

Linux:戴文的Linux内核专题:25 配置内核 (21)
Linux:戴文的Linux内核专题:25 配置内核 (21)

配置完网络文件系统后,内核的下面一部分设置是”Native Language Support”(本地语言支持)。这整个菜单包含了大多数或者全部的字符集和编码驱动。启用这些编码让这些字符集可以被系统和应用使用。UTF-8是最常用的编码,但是这并不是唯一的一个。大多数应用和驱动需要UTF-8,因此这个编码已经被设置到内核中了。

在那个菜单后,可以配置”Distributed Lock Manager (DLM)”。DLM被用于保存共享资源并表现良好。这个驱动管理用户空间和内核空间的应用,它们访问或者操作共享内存(就像网络文件系统)。集群强烈依赖于这个驱动。

现在,我们已经完全配置完了文件系统和相关的特性,我们可以进入使用内核配置工具(当使用”make menuconfig”)的第一屏”Kernel hacking”菜单。我正在使用ncurses接口(见截图),它由”make menuconfig”命令初始化,所以其他的接口可能会有一点不一样。”kernel hacking”菜单中的很多特性和设置包含了关于内核本身的很多设置。这些特性是调试工具,并有一些控制着内核的行为。

第一个设置增加printk时间戳到syslog系统调用输出中(Show timing information on printks)。

下面的3个特性控制着3个不同调试特性(Default message log level (1-7))、 (Enable _deprecated logic) 和 (Enable _must_check logic)。

Linux:戴文的Linux内核专题:25 配置内核 (21)
Linux:戴文的Linux内核专题:25 配置内核 (21)

下面的特性是一个调试特性,并在编译时有效((1024) Warn for stack frames larger than (needs gcc 4.4))。如果栈帧大于指定的大小,那么编译器会警告用户。

“Magic SysRq key”会启用Magic SysRq键的支持,这允许用户按下Alt+PrintScreen后发送给内核特殊的命令。这个在大多数情况下都有效而不管内核的状态。然而,有例外的存在。强烈建议启用Magic SysRq Key。

在编译器件,在连接是汇编器的符号链接会被移除以减少get_wchan()的输出(Strip assembler-generated symbols during link)。

下面的一个特性用于调试目的(Generate readable assembler code)。如果启用,一些内核优化将被禁止,那么一些汇编就会变成人可读的。这回损害内核的速度。如果你有特殊原因这么做时才启用它。

这个设定分会启用/禁用普遍不需要或者废除的符号 (Enable unused/obsolete exported symbols)。然而,一些模块可能需要这些符号。启用这个会增加内核的大小。Linux用户很少会需要这些符号。通常上,禁用这个特性,除非你了解一个重要的模块需要这个符号。

如果启用这个设施,内核会在用户内核头上执行健康检查(Run ‘make headers_check’ when building vmlinux)。

在编译期,这个特性会检查无效的引用(Enable full Section mismatch analysis)。

内核可以被配置来检测软件或硬件加锁(Detect Hard and Soft Lockups)。当系统被冻结超过20s并且其他任务无法执行时,这个称之为软件加锁。如果CPU在循环中超过了20s并且中断无法割到执行时间,那么这个称之为硬件加锁。

下面特性分为让内核在硬件和软件加锁时重启 (Panic (Reboot) On Hard Lockups) 和 (Panic (Reboot) On Soft Lockups)。

当内核遇到严重的问题时,它可以发出一个”kernel panic”(内核崩溃)(Panic on Oops)。强烈建议启用这个设置。这会帮助防止内核造成系统损害和数据丢失。

内核可以被设置来检测被挂起的任务(Detect Hung Tasks)。这指的是进程被锁住或者冻结了。特别是在程序变成不可中断的时候。下面的设置允许用户定义在进程被视为”挂起”前需要等待多长时间(Default timeout for hung task detection (in seconds))。

内核可以被设置成在进程挂起时重启(Panic (Reboot) On Hung Tasks)。通常上,用户并不希望这样。你希望你的系统每次在程序冻结后重启么?

“Kernel memory leak detector”找出并记录内存泄漏。

内核使用帧指针帮助更有效地报告错误并且还包含了更多的信息(Compile the kernel with frame pointers)。不言自明,我会跳过很多调试工具。

如众多Linux用户所知,当系统启动时,boot消息显示得太快了而不来不及阅读。这个特性会设置延迟时间来给用户更多的时间来阅读消息(Delay each boot printk message by N milliseconds)。

这是一个特殊的开发特性用于测试回溯代码(Self test for the backtrace code)。回溯代码是一个自我测试。

可以增加块设备的数量(Force extended block device numbers and spread them)。然而,这可能会引起启动问题,因此小心使用。

下一篇,我们会继续配置内核本身。我希望你们喜欢这边文章。谢谢!


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

译者:geekpi 校对:wxy

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

来源:http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-21.4988/

Linux:[小白技巧]如何在Linux中知道你的系统是否有USB 3.0 端口

近来的大多数的新计算机都有了USB 3.0接口了。但是你怎么知道你的计算机有没有USB 3.0接口?这篇短文中,我们会告诉如何在Linux下知道你的系统上有USB 3还是USB3接口。

在Linux终端中检测是否有USB 3.0 端口

打开一个终端,并使用下面的命令:

lsusb

这个命令会显示你系统下USB的总线信息。检查一下结果,如果你看到像“3.0 root hub”字样,这意味着你系统有USB 3.0。比如,在我的电脑上,它这样显示:

How to find if system has USB 3.0 in Linux

这个技巧在所有的Linux系统上,像Ubuntu,Linux Mint,Fedora等等都有效。现在当你知道你有USB 3.0 端口之后,**如何辨别哪个口是USB 3.0,哪个是USB 2.0。

辨别哪个口是USB 3.0

通常USB 3.0 口被标记为SS(“Super Speed”的缩写)。如果你的系统制造商没有标记SS或者USB 3,那么你可以检查端口的内部通常是蓝色的。

Linux:[小白技巧]如何在Linux中知道你的系统是否有USB 3.0 端口
Linux:[小白技巧]如何在Linux中知道你的系统是否有USB 3.0 端口

我希望这个快捷提示能够帮助你知道你系统是否有USB 3.0 并可以分辨出USB 3.0 口


via: http://itsfoss.com/find-usb-3-port-linux/

译者:geekpi 校对:wxy

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

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

Linux:Linux最佳聊天软件:Skype 4.3轻体验

自从 2012 年 4 月坚持使用 Linux 单系统以来,对于山寨王腾孙的做派极为厌恶。而自身已没有非要 QQ 不可的场合,所以彻底转向了 Skype,这个一直被薄荷开源网还魂草推崇为 Linux 下最好的聊天软件:原生软件兼容性好、运行效率高、视频语音文字聊天功能齐备、传送文件桌面共享一个不缺。

或许有人会说,Skype 不是微软公司的吗?难道还魂草这样的铁杆 Linuxer 不要恨屋及乌吗?非也!Skype 只是被微软收购而已,并非微软原创,而且被收购之后也并未放弃或歧视 Linux 平台。来看看关于 Skype 的百科知识吧。

Skype(英语发音:/ˈskaɪp/,与英文“type”同韵),是一群爱沙尼亚的软件开发人员于 2003 年设计的,亦称“对等天”的支持语音通信的即时通讯软件,采用点对点技术与其他用户连接,可以进行高质量语音聊天。连接双方网络顺畅时,音质可能超过普通电话。2011 年 10 月,Skype 正式被微软公司收购,成为微软的一个独立部门。2012 年 11 月,微软证实 2013 年第一季会在全球用 Skype 替换 Windows Live Messenger,中国大陆地区除外;2013 年 4 月 8 日,英文版 Windows Live Messenger 正式转换到 Skype,台湾则于 4 月 25 日转换。

——「本节引自自由的维基百科」

近日,Skype 发布了最新的 Skype for Linux 4.3 版。中国大陆地区访问 Skype 网站会自动跳转到国内合作商光明网,光明网并未提供 Linux 版的 Skype 下载,还魂草是从网友提供的百度网盘下载的:百度网盘下载 Skype

安装之后,启动 Skype,发现界面略有变化,似乎更成熟大气了。如图所示,可以使用 Skype 账号或微软账号登录。

Linux:Linux最佳聊天软件:Skype 4.3轻体验
Linux:Linux最佳聊天软件:Skype 4.3轻体验

选择使用 Skype 账号登录。

Linux:Linux最佳聊天软件:Skype 4.3轻体验
Linux:Linux最佳聊天软件:Skype 4.3轻体验

登录后发现,新版的 Skype 最大的变化就是把常用的功能入口放置在好友列表的顶部了,非常直观、便捷。主菜单、拨打电话、添加好友、文件传输一目了然。此外,聊天窗口中也有提示”发送一条信息“。

Linux:Linux最佳聊天软件:Skype 4.3轻体验
Linux:Linux最佳聊天软件:Skype 4.3轻体验

看看设置选项,消失已久的字体设置仍旧没有回来,可能是出于与系统融合和开发框架的考虑,Skype 4.x 以后的版本都不再提供字体设置。字体太小?需要调整 Skype 字体设置的,请参阅《Linux Mint/Ubuntu如何修改Skype字体大小》

Linux:Linux最佳聊天软件:Skype 4.3轻体验
Linux:Linux最佳聊天软件:Skype 4.3轻体验

搜索添加好友的界面变化不大。

Linux:Linux最佳聊天软件:Skype 4.3轻体验
Linux:Linux最佳聊天软件:Skype 4.3轻体验

在顶部菜单栏里,可以根据需要分类显示/隐藏联系人。

Linux:Linux最佳聊天软件:Skype 4.3轻体验
Linux:Linux最佳聊天软件:Skype 4.3轻体验

Fcitx 是 Linux 下最好的中文输入法框架,与最好的聊天软件可谓完美匹配。如果是 ibus 用户,就要设置一下 QT 配置,否则不会光标跟随哦。

Linux:Linux最佳聊天软件:Skype 4.3轻体验
Linux:Linux最佳聊天软件:Skype 4.3轻体验

还魂草一直对 Linux 版的 Skype 非常满意,毕竟是商业公司开发的成熟作品,无论功能、兼容性,还是中文化等方面,都做的非常不错。

via: http://www.mintos.org/software/new-skype-linux.html 

Linux:戴文的Linux内核专题:26 配置内核 (22)

Linux:戴文的Linux内核专题:26 配置内核 (22)
Linux:戴文的Linux内核专题:26 配置内核 (22)

你好!本篇我们将继续配置”kernel hacks”,接着我们会配置整个安全系统。

Alpha和s390处理器需要配置下一个特性(Force weak per-cpu definitions)。这个特性修复了一个在这类处理器中普遍存在的寻址问题。其他的处理器无需启用这个特性。

内核转储可以用这个特殊的调试工具测试(Linux Kernel Dump Test Tool Module)。这个软件会允许内核开发者触发一个假错误来导致内核转储。内核开发者可以保证转储成功执行。

内核提供了不同的错误注射模块来允许内核开发者测试通知(CPU notifier error injection module)、 (PM notifier error injection module) 和 (Memory hotplug notifier error injection module)。通知器提醒系统硬件还在,这对热插拔很重要。这些错误注射模块在这些通知系统中触发一个错误,那么开发者就可以测试通知系统的错误处理能力了。

“Fault-injection framework”驱动提供了不同的用于测试错误处理的工具。

“Latency measuring infrastructure”驱动提供了延迟检测工具LatencyTop,以找出用户空间中由于内核执行/任务而被阻碍/干扰的对象。

下面,我们有一个子菜单名为”Tracers”,它包含了不同追踪器的列表。追踪器是一段监视不同内核函数的代码。每次某个特定的函数启动,追踪器将被调用来检测函数。

下面的模块用来测试红黑树库的性能(Red-Black tree test)。红黑树是一个排序和搜索算法。

下面的特性是相同的除了用来测试区间树库(Interval tree test)。

在启动远程特定系统时,内核同样可以在其他系统上调试FireWire (Remote debugging over FireWire early on boot) 和 (Remote debugging over FireWire with firewire-ohci)。

printk()函数可以用来打印不同的调试信息,如果这个特性启用的话(Enable dynamic printk() support)。”printk()”是一个常被讨论的系统调用,所以记住这个打印内核相关消息。

这是一个直接内存访问(DMA)调试驱动(Enable debugging of DMA-API usage)。

Atomic64自我测试检查系统是否支持原子操作(Perform an atomic64_t self-test at boot)。这是一个32位系统执行64位操作。

这个驱动提供了对于所有可能的RAID6恢复系统的自检(Self test for hardware accelerated raid6 recovery)。

注意:自检是底层测试并且在绝大多数系统硬件和软件开启和执行前侦查软件。自检搜索硬件,失败的设备等等。自检也可能被编成应用以测试它本身。

在”Kernel Hacking”菜单中(如果你是用的是像ncurses那样的菜单接口),有一个名为”Sample kernel code”的子菜单。在以后的文章中,我们会讨论如何实现自定义/自制内核模块。只要记住这里是启用你自己的模块。

Linux:戴文的Linux内核专题:26 配置内核 (22)
Linux:戴文的Linux内核专题:26 配置内核 (22)

Kernel GNU DeBugger (KGDB)(内核调试器)有许多特性可以启用或者禁用(KGDB: kernel debugger)。这个调试器只工作在通过串行连接的两个Linux系统之间。

这个特性提供在启动时显示额外bzimage解压消息(Enable verbose x86 bootup info messages)。在内核配置的开始部分你设置了内核加密。

printk()打印不同的消息到dmsg的启动界面,但是在串行和控制台驱动加载后。启用这个驱动会使printk()更早打印信息(Early printk)。

下一个驱动和上面的一样,但是使用EHCI端口(Early printk via EHCI debug port)。

内核可以被设置来观察堆栈溢出,这样内核可以更好地管理错误(Check for stack overflows)。内核会执行的更慢,但是溢出不会造成如此大的损害。

通过启用这个,内核页面可用debugfs见到(Export kernel pagetable layout to userspace via debugfs)。然而,这个会使内核变慢。这个用于调试目的。

内核的写入错误可以被这个特性捕捉到(Write protect kernel read-only data structures)。这个选项会使内核的只读数据编程进入写保护模式。此调试工具会损害内核的速度。该调试工具还有一个用来调试其自身的工具(Testcase for the DEBUG_RODATA feature)。

为了防止被修改过代码的模块执行(由于一个错误),接着启用这个保护性特性 (Set loadable kernel module data as NX and text as RO)。这个调试工具由这个驱动提供(Testcase for the NX non-executable stack feature)。

使用这个选项,内核可以一次刷新一个TLB条目或者整张表 (Set upper limit of TLB entries to flush one-by-one)。

下一个特性是IOMMU调试特性(Enable IOMMU debugging)。这是另外一个调试测试,禁用一些IOMMU特性来用于测试稳定性(Enable IOMMU stress-test mode)。IOMMU代表”input/output memory management unit”(输入/输出内存管理单元)。

启用这个选项回事内核以30s的间隔在changepageattr()系统调用上执行单端测试。这个系统调用会改变页的属性。

任何被标以”inline”的内核代码,如果没有被表明的也同样会被GCC操作(Allow gcc to uninline functions marked)。GCC编译器会增加使得代码更好的代码(GCC擅长这么做)。然而,一些代码不想被GCC操作。

下面的驱动提供了对”copyfromuser()”系统调用的基本测试(Strict copy size checks)。copyfcromuser()从用户空间拷贝数据块到内核空间中。

这里还有一个自检;它用于NMI(NMI Selftest)。

现在,我们会进入”Security Options”,如果你使用像ncurses的基于菜单的接口时。第一个选项允许访问内核中存储的键和验证令牌(Enable access key retention support)。这有很多原因用到,像访问加密文件系统。

下面的选项用于创建并密封/开启键((TRUSTED KEYS))。加密的键使用这个驱动加密/解密(ENCRYPTED KEYS)。

启用这个特性键可以在/proc中看到(Enable the /proc/keys file by which keys may be viewed)。

使用这个安全特性,额外的限制可以应用到syslog中(Restrict unprivileged access to the kernel syslog)。

如果启用这个选项,那么用户可以选择不同的安全模块(Enable different security models)。不然,将会使用默认。如果你不完全理解安全或者如果你对使用默认感到没问题,那么就禁用它。

这个驱动提供了securityfs文件系统(Enable the securityfs filesystem)。

当启用这个特性后,钩子将会被增加到网络和套接字安全中(Socket and Networking Security Hooks)。这些钩子是访问控制。

IPSec网络钩子(also called XFRM networking hooks)在这个选项启用后实现(XFRM (IPSec) Networking Security Hooks)。安全钩子同样可被文件使用(Security hooks for pathname based access control)。

下一个驱动提供了对Intel可信赖执行技术的支持(Enable Intel(R) Trusted Execution Technology (Intel(R) TXT))。

用户可以设置无法为用户空间保留的内存寻址范围(Low address space for LSM to protect from user allocation)。开始点是0。用户在此选项中输入结束点。对于大多数平台而言,65536是一个建议值。

SELinux(在内核安全的文章中提到)是一种流行的Linux安全模块(NSA SELinux Support)。SELinux存在很多选项和特性。启动参数决定了当内核执行(NSA SELinux boot parameter)时SELinux是否启动{1}或者不启动{0}。SELinux可以被配置成在root用户需要时临时禁止(NSA SELinux runtime disable)。用户可以启用这个特性开发并测试新的策略(NSA SELinux Development Support)。AVC统计被这个特性收集并被存储 (NSA SELinux AVC Statistics)。对于checkreqprot标志有一个默认设置;”1″意味着SElinux会检查应用请求的保护,”0″会默认使用内核对mmap和mprotect系统调用的保护(NSA SELinux checkreqprot default value)。存在很多的SElinux策略;用户可以设置他们不希望SELinux excede的最新版本(NSA SELinux maximum supported policy format version)。

另外一个Linux安全模块(LSM),SMACK,也被内核支持(Simplified Mandatory Access Control Kernel Support)。

TOMOYO是另外一个被支持的LSM(TOMOYO Linux Support)。在学习模式中允许被添加的最大条目数目在下面的特性中设置(Default maximal count for audit log)。接下来,这个选项允许/禁用TOMOYO在没有策略加载器下被激活(Activate without calling userspace policy loader)。策略加载器的位置在这里被配置((/sbin/tomoyo-init) Location of userspace policy loader),触发执行的可执行文件在这里设置((/sbin/init) Trigger for calling userspace policy loader)。

再说一次,内核支持另外一个LSM – APPArmor(AppArmor support)。像SELinux一样,可以为AppArmor设置默认的启动参数(AppArmor boot parameter default value)。

Yama是另外一个LSM(Yama support)。如果启用这个特性Yama可以与另外一个LSM一起使用(Yama stacked with other LSMs)。

这个驱动让内核可以使用多个密钥链来验证进程(Digital signature verification using multiple keyrings)。

非对称键在这个特性中支持(Enable asymmetric keys support)。

内核可以保存并维护一个哈希和重要系统文件的列表(Integrity Measurement Architecture(IMA))。那么,如果恶意软件改变了一个重要的文件,内核会知道因为文件或者可执行文件被使用时内核会检测哈希值。强烈建议启用这个特性。

如果启用这个特性会加入额外的安全属性(EVM support)。可以用下面的选项设置版本(EVM HMAC version)。有两个选项分别是version 1和2。

记住所有的Linux安全模块的不同了么(LSMs)?好的,下面可以设置默认模块(Default security module (AppArmor))。

下一篇中,我们会配置”Cryptographic API”。我估计还会剩下两篇文章。在这之后,我们会讨论其他的内核主题。

先睹为快:本篇之后,关于配置还有一篇。接着,我们会完成编译并安装内核。

致我的粉丝:你随意给我致信或者给我电子邮件来建议你希望在以后的内核文章中想要看到的主题。我已经收到了一些来自这个系列读者的一些建议。请随意给我更多建议。


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

译者:geekpi 校对:wxy

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

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

Linux:如何使用ffmpeg从视频中提取图片

你曾想过从一个视频文件中提取图片吗?在Linux下就可以,在这个教程中我将使用ffmpeg来从视频中获取图片。

Linux:如何使用ffmpeg从视频中提取图片
Linux:如何使用ffmpeg从视频中提取图片

什么是ffmpeg?What is ffmpeg?

ffmpeg是一个非常有用的命令行程序,它可以用来转码媒体文件。它是领先的多媒体框架FFmpeg的一部分,其有很多功能,比如解码、编码、转码、混流、分离、转化为流、过滤以及播放几乎所有的由人和机器创建的媒体文件。

在这个框架中包含有各种工具,每一个用于完成特定的功能。例如,ffserver能够将多媒体文件转化为用于实时广播的流,ffprobe用于分析多媒体流,ffplay可以当作一个简易的媒体播放器,ffmpeg则能够转换多媒体文件格式。

如果你感兴趣,以下列出的是FFmpeg框架中包含的开发者库:

  • libavutil是一个包含简化编程功能的库,其中包括随机数生成器,数据结构,数学代码,核心多媒体工具等更多东西。
  • libavcodec是一个包含音频/视频解码器和编码器的库。
  • libavformat是一个包含了多媒体格式的分离器和混流器的库。
  • libavdevice是一个包含输入输出设备的库,用于捕捉和渲染很多来自常用的多媒体输入/输出软件框架的数据,包括Video4Linux,Video4Linux2,VfW和ALSA。
  • libavfilter是一个包含媒体过滤器的库。
  • libswscale是一个用于执行高度优化的图像缩放和颜色空间/像素格式转换操作的库。
  • libswresample是一个用于执行高度优化的音频重采样,重新矩阵和取样格式转换操作的库。

注意:ffmpeg和FFmpeg不是同一个东西。FFmpeg是框架,而ffmpeg是一个其中的一个功能。

开始行动

如果你想跟着教程做,你需要在你的linux机中安装ffmpeg命令行功能。Ubuntu用户可以在终端运行以下命令轻松安装ffmpeg功能。

sudo apt-get install ffmpeg

Fedora用户可以从源中直接安装ffmpeg。

yum install ffmpeg

或者你可以编译源代码。在你使用源代码编译并安装它之前,你需要从官网上下载源代码,使用以下命令。

wget http://www.ffmpeg.org/releases/ffmpeg-2.2.3.tar.bz2

用下面命令解压文档。

tar -xvjf ffmpeg-2.2.3.tar.bz2

文档解压完成后进入解压后的目录运行以下命令。

./configure
make

编译完成后运行下面的命令安装ffmpeg。

su -c 'make install'

全部的事情并没有完成,而你将要做的所有事就是在终端键入一些命令而且将能够从任何视频文件中抓取图片。

在做之后的步骤前,确保你在想要提取图片的视频文件的目录下。使用cd命令切换到正确的目录。教程中我使用的视频在我的桌面上,我用以下命令将目录切换到我的桌面。

cd /home/oltjano/Desktop

之后我使用以下命令从视频中提取图片。

ffmpeg -i "你是我的小呀小苹果儿.mp4" -r 1 -q:v 2 -f image2 image-3%d.jpeg

-i选项用来获取输入文件,在这里是视频文件名你是我的小呀小苹果儿.mp4,-r选项设置每秒提取图片的帧数。我想要每秒提取一帧。

之后有一个重要的选项是-q:v,应该留意这个选项并且我很喜欢用它,它用来设置提取到的图片质量。我总是设置值为2来从视频中获取高质量图片。


via: http://www.unixmen.com/extract-images-videos-using-ffmpeg/

译者:linuhap 校对:wxy

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

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

Linux:开源LDAP解决方案

LDAP(轻量级目录访问协议)是一个用于访问目录服务的应用协议,它运行在TCP/IP堆栈的上一层,采用简单的编码方法,并提供了便捷的方式来连接到互联网目录,特别是基于X.500的目录服务,并对它们进行搜索和修改。LDAP是一个开放的、中立的,并且具有工业标准的应用协议,它采用客户端-服务器模式。

该协议主要针对管理应用程序和提供对目录读/写操作的浏览器应用程序。

使用LDAP服务器的主要好处在于,整个组织的信息可以合并到一个中央仓库统一管理。LDAP支持安全套接协议层(SSL)和传输层安全协议(TLS),因而敏感信息可以受到保护。LDAP服务器用于多种任务,包括但不限于这些服务:用户认证、机器认证、用户/系统分组、资源追踪、组织演示以及应用配置存储。

为了提供对可用开源软件质量的深刻了解,我们列出了5个高品质的LDAP解决方案。

Linux:开源LDAP解决方案
Linux:开源LDAP解决方案

现在,让我们浏览手头上的5个LDAP解决方案吧。每个标题,我们都提供了连接页面,里面有对其功能特性的深度分析,同时提供了相关资源和评论的链接。

LDAP解决方案


via: http://www.linuxlinks.com/article/20140607022012848/LDAPSolutions.html

译者:GOLinux 校对:wxy

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

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

Linux:戴文的Linux内核专题:16 配置内核 (12)

Linux:戴文的Linux内核专题:16 配置内核 (12)
Linux:戴文的Linux内核专题:16 配置内核 (12)

欢迎来享受Linux内核配置系列下一部分。如你所猜到的那样,内核支持大量不同的硬件、协议和特性。

下一组我们要讨论的特性是”EEPROM support”。电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory)是一种掉电或者意外关闭后不会擦除内容的存储器。

内核支持在I2C卡上的EEPROM芯片包括FRAMs、ROMs和SRAMs (I2C EEPROMs / RAMs / ROMs 来自多数供货商)。FRAM(同样也称作FeRAM是一种使用铁电原理而不是电介质存储数据的随机访问存储芯片)。ROM芯片是只读(Read Only Memory)芯片。SRAM是静态而不是动态存储器就像DRAM。DRAN必须被刷新以保留数据而SRAM不需要刷新。然而,两者都会在电源关闭或者丢失时失去数据。

内核支持SPI总线的EEPROM(SPI EEPROMs from most vendors)。串行外设接口总线(Serial Peripheral Interface Bus (SPI))是一个缺乏错误检测的全双工总线系统。

老式的I2C EEPROM芯片需要一个除了上面I2C驱动之外的驱动(Old I2C EEPROM reader)。I2C总线用于嵌入式系统和电话,由于它用的是低速总线协议。

这个特性用来防止Maxim的可编程EEPROM变成只读模式(Maxim MAX6874/5 power supply supervisor)。特别地,这驱动提供对这个芯片的更好的电源管理。

这里还有一个驱动”EEPROM 93CX6 support”,”Microwire EEPROM 93XX46 support”和”ENE CB710/720 Flash memory card reader support”。

和其他内核特性一样,这里有一个对于EEPROM的调试特性(Enable driver debugging)。再说一次,为了更好的性能,禁用调试特性。

下面,我们有一个TI特性(Shared transport core driver)。这个驱动提供对于BT/FM和GPS芯片的传输协议。

下面的驱动支持I2C LIS3LV02Dx加速度计(STMicroeletronics LIS3LV02Dx three-axis digital accelerometer (I2C))。设备提供的数据存储在/sys/devices/platform/lis3lv02d。

下一步, Linux提供了下载固件到Altera的FPGA的模块(Altera FPGA firmware download module)。FPGA就是现场可编辑逻辑门阵列(field-programmable gate array)。它们是可编程集成电路。

Intel Management Engine Interface提供Intel芯片的安全和其他服务。

“ME Enabled Intel Chipsets”可以支持MEI。MEI是”Management Engine Interface”(管理引擎接口)。这个驱动支持有MEI服务的芯片组。

“VMware VMCI Driver”是一种用于客户机和宿主机中继通信的高速虚拟设备。VMCI代表的是”Virtual Machine Communication Interface”(虚拟机通信接口)。

下面, “ATA/ATAPI/MFM/RLL support”可以启用/禁用。MFM (Modified Frequency Modulation)是一种特殊的编码软驱位的方法。然而,这并不工作在所有的软驱上。MFM使用RLL(Run-Length Limited)编码制式。RLL通过有带宽限制的系统通信转换数据。ATAPI是先前提过的”ATA Packet Interface”,同时ATA也在讨论接口标准的时候讨论过。

现在我们将讨论SCSI支持。小型计算机接口(Small Computer System Interface (SCSI))是另外一种SATA的接口标准。USB和火线设备使用SCSI协议。

第一个SCSI设定关于”RAID Transport Class”。这允许RAID使用SCSI标准。

为了使用SCSI目标,启用这个特性(SCSI target support)。

如果系统会运行旧的Linux应用,系统可能需要”legacy /proc/scsi/ support”。这会在/proc/scsi创建SCSI文件。

为了支持SCSI磁盘,启用下一个特性(SCSI disk support)。这是一个通用驱动。

为了支持SCSI磁带,启用这个特性(SCSI tape support)。这是一个通用驱动。SCSI磁带驱动器在像磁带的磁性条上记录数据。

OnStream SCSI磁带需要这个驱动而不是前面提到SCSI通用驱动SCSI OnStream SC-x0 tape support)。

“对于SCSI CDROM support”,一些CD-ROM使用SCSI协议。

下面, 用户可以启用”Enable vendor-specific extensions (for SCSI CDROM)”。

这是一个对于大量不同SCSI设备的通用驱动(SCSI generic support)。这主要用于SCSI扫描仪和其他不被上面提到的SCSI驱动支持的设备或者那些之后会讨论的设备。

一些SCSI点唱机需要这个SCSI驱动(SCSI media changer support)。

Linux内核提供”SCSI Enclosure Support”。SCSI附件是一种管理电源和制冷SCSI设备同时提供不关于数据的服务的设备。

Linux内核应该设置为每个SCSI设备搜索全部的逻辑单元号(Logical Unit Numbers (LUN))(Probe all LUNs on each SCSI device)。LUN是SCSI地址。

这有额外的对于SCSI的错误报告(Verbose SCSI error reporting (kernel size +=12K))。这会明显地增加内核的大小。

这里还有一个SCSI日志系统(SCSI logging facility)。

为了增强你的系统,启用这个特性会允许SCSI在系统启动时就被探测到而不是先启用再探测(Asynchronous SCSI scanning)。大多数系统可以一次执行这两个任务,因此为什么允许这项? 对于那些连接了很多SCSI设备的硬件,这个会明显加快启动速度。

下面,”Parallel SCSI (SPI) Transport Attributes”(传统的并行SCSI)允许每个SCSI设备发送传输信息给sysfs。一些系统需要这个特性。

下面的特性和上面提到的一样,但是发送光纤通道设备的传输信息(FiberChannel Transport Attributes)(光纤通道接口)。光线通道设备使用SCSI。

下面用户可以启用/禁用”SCSI target support for FiberChannel Transport Attributes”(为光纤通道添加”target”模式驱动)。

iSCSI设备和SAS设备的传输数据可以导出到sysfs(iSCSI Transport Attributes)和SAS Transport Attributes)。SAS代表的的是”Serial Attached SCSI”(串行链接SCSI)。

下面,ATA支持被加入libsas(ATA support for libsas (requires libata))。注意配置工具提示需要libata。为了满足这个需求,启用ATA支持。更多情况下,配置工具已经或者将会会你这么做,但是请无论再检查一下。libsas和libata是相应的支持SAS和ATA的库。

下面的特性允许SAS接口接收SMP帧(Support for SMP interpretation for SAS hosts)。这加入了一个SMP解释器到libsas中。然而,这不会增加内核的尺寸。SMP帧允许所有在多CPU系统上的处理器访问SAS设备。

SRP可以发送传输的数据给sysfs(SRP Transport Attributes)。SRP代表SCSI RDMA协议(SCSI RDMA Protocol)。RDMA代表远程直接内存访问(Remote Direct Memory Access)。这意味着SRP是一个用来访问连接到另外一台计算机的SCSI设备的数据的协议。

下一步,用户可以启用”SCSI target support for SRP Transport”。

可以启用底层SCSI驱动(SCSI low-level drivers)。这提供了很多基础驱动。

在这之后,用户可以启用/禁用”PCMCIA SCSI adapter support”。这个适配器允许SCSI设备连接到PC卡上。

这里有一些驱动用于特殊的适配器- (Future Domain PCMCIA support)、(Qlogic PCMCIA support) 、(Symbios 53c500 PCMCIA support)。

多路径安装的设备需要这个特性(SCSI Device Handlers)。这用在每个节点都需要一个到SCSI存储单元的直接路径的集群中。

下一步,”OSD-Initiator library”(OSD启动库)可以启用。这是一个提供了补丁、OSD协议、和针对SCSI设备的T10协议的SCSI驱动。 OSD代表的是基于对象的存储设备(Object-based Storage Device);下一段会讨论得更多。

这个特性生成一个SCSI上层用于测试和管理/dev/osdx设备(OSD Upper Level driver)。exofs使用这个驱动用于挂载基于OSD的文件系统。OSD设备不像其他存储单元一样使用块的存储设备。相反地,OSD设备存储数据在称之为对象的容器里。exofs曾经称作OSDFS。

如果启用了它,OSD特性提供了调试工具(Compile All OSD modules with lots of DEBUG prints)。

如今,我们可以讨论串行ATA和并行ATA特性和驱动了。首先启用/禁用用于调试的第一个特性(Verbose ATA error reporting)。

下一步,用户应该对于ATA设备启用高级配置及电源接口特性(ATA ACPI Support)。这允许内核在SATA设备上更有效地管理电源使用。

内核包含了对于”SATA Zero Power Optical Disc Drive (ZPODD) support”的驱动。这会在不使用时关闭SATA光盘驱动器(SATA optical disc drives (ODD))。这节约了能源以及减少损耗。

贴士:即使你在编译一个高性能的内核,尝试启用所有的电源管理特性。则减少了电源消耗、操作开销、热量产生(热量会降低性能),以及老化。

SATA端口复用器需要这个驱动(SATA Port Multiplier support)。端口复用器是一个拥有许多端口但是自己仅需插入一个端口的设备。举例来说,如果一个硬件有一个SATA口,但是还需要更多的口,在这个口上插入端口复用器。现在设备可以有许多SATA口了。

下一个驱动用于AHCI SATA(AHCI SATA support)。高级主机控制器接口(Advanced Host Controller Interface (AHCI))是一种SATA总线适配器的操作标准。

对于要在Soc硬件上支持AHCI SATA设备,必须启用这个驱动(Platform AHCI SATA support)。Soc代表片上系统(System-on-a-Chip)。

下面是一些特殊设备的驱动

  • Initio 162x SATA support
  • ACard AHCI variant (ATP 8620)
  • Silicon Image 3124/3132 SATA support

再说一次,等着下一篇精彩的文章。


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

译者:geekpi 校对:wxy

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

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

Linux:怎样使用linux的iptables工具进行网络共享

在本教程中,我将解释多个设备怎样在linux下共享一个网络连接。目前无线路由器已经成为主流的消费品,从而解决了本文这一问题。这里假设你家中并没有一台无线路由器,不过,你却有一台已经有”猫”和有线网卡的的linux主机。”猫”是以动态公有IP地址的模式连接到互联网,主机的网卡连接到你的交换机或者集线器。其他设备(如linux或者windows的PC或者笔记本)以网桥的形式连接,并且没有连接到互联网。为了共享linux主机的互联网,你必须把主机转换成网关,以便它能实现从其他设备中传送和接受信息。

Linux:怎样使用linux的iptables工具进行网络共享
Linux:怎样使用linux的iptables工具进行网络共享

术语字汇

  • 私有IP地址(路由不可达地址)是一个被用于本地局域网的IP地址(在互联网中不可见)。
  • 公用IP地址(路由可达地址)是一个在互联网中可见的IP地址。
  • IP伪装是一项允许一系列机器通过MASQ网关连接互联网的功能。这些MASQ网关之外的机器在互联网中是不可见的。MASQ之后的机器中任何流入或流出的数据必须经过MASQ网关。
  • 网络地址转换(NAT)是一项通过IP伪装技术可以使私有IP地址访问互联网的功能。

Hardware Requirements

硬件要求

  • 一台有两个接口(一个公有IP地址和其他的私有IP地址)的linux主机,这个主机将被用作网关。
  • 一台或者多台拥有私有IP地址的linux/windows系统的PC或者笔记本。
  • 交换机/集线器(可选)。

教程步骤

接下来的过程需要在linux主机(用于共享的网关)上完成。

1、激活IP转发

为了设置网络共享,你需要在linux主机上更改一个内核参数来使能IP转发功能。内核启动参数设定在/etc/sysctl.conf文件中。

打开这个文件,定位到含有”# net.ipv4.ip_forward = 0″的这一行,移除#号(即取消注释),然后将其值设置为1,改好之后应该和下面的一致。

net.ipv4.ip_forward = 1

你还要使激活IP转发功能生效,通过执行下面的命令:

$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo sysctl -p

2、NAT配置

另一个网络共享的重要部分是NAT配置,这可以通过使用iptables的命令,iptables包含四个防火墙的规则表:

  • FILTER (默认表格)
  • NAT
  • MANGLE
  • RAW

这个教程中我们将仅使用两个表格:FILTER和NAT表格。

首先,刷新所有活跃的防火墙的规则。

$ sudo iptables -X
$ sudo iptables -F
$ sudo iptables -t nat -X
$ sudo iptables -t nat -F

在输入表格中,你需要设置转发链(FORWARD)成可接受的(ACCEPT)目的地,因此所有通过主机的数据包将会被正确的处理。

$ sudo iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

在NAT表中,你必须为你的WAN口启用IP伪装功能,我们假设WAN口协议是ppp0。为了在ppp0接口上使能IP伪造技术,我们使用以下的命令:

$ sudo iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE

3、配置私有IP地址

在linux主机上的所有配置完成后,你需要配置其他设备(linux/windows的PC或笔记本)的DNS服务器以及默认网关,让它们的数据流可以指向linux主机。注意你不需要在linux主机上设置一个DNS服务器,从其他设备发出的每一个DNS请求都会通过上游的ISP自动转发到linux主机上。

如果你的其他设备上用的系统是linux,你可以通过以下命令来更改他们的默认网关和DNS服务器。假设你的网段是192.168.1.0/24的私有IP地址网段,linux主机上绑定的IP地址是192.168.1.1。

$ sudo ip route del default
$ sudo ip route add default via 192.168.1.1
$ sudo sh -c "echo 'nameserver 192.168.1.1' > /etc/resolv.conf"

如果还有其他的linux设备,那么你可以重复以上命令。

如果你有windows设备,你可以通过控制面板的网络连接属性来更改默认网关和DNS服务器。

4、完整的脚本

这是一个在linux主机上设置网络连接共享的一个完整的脚本。WAN口(ppp0协议)需要根据你具体的网络接口协议来替换。

$ sudo vi /usr/local/bin/ishare

#!/bin/bash
## Internet connection shating script
sysctl -w net.ipv4.ip_forward=1
sysctl -p
iptables -X
iptables -F
iptables -t nat -X
iptables -t nat -F
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD  -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE

保存以上的脚本为/usr/local/bin/ishare,然后添加可执行权限通过执行下面的命令。

$ sudo chmox +x /usr/local/bin/ishare

如果你需要这个脚本开机启动,你需要在/etc/rc.local文件中执行这个脚本,并在该文件中的”exit 0″之前添加下面一行。

/usr/local/bin/ishare

via: http://xmodulo.com/2014/06/internet-connection-sharing-iptables-linux.html

译者:yujianxuechuan 校对:wxy

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

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

Linux:戴文的Linux内核专题:27 配置内核 (23)

Linux:戴文的Linux内核专题:27 配置内核 (23)
Linux:戴文的Linux内核专题:27 配置内核 (23)

欢迎来到内核配置的下一章!本篇中我们会配置密码API,虚拟化和运行库。密码学指的是在需要的计算机之间加密和安全通信的科学。用户可能加密数据以保证是收件人而不是黑客收到数据。

Linux内核需要在内核中启用”Cryptographic algorithm manager”(密码算法管理器)。这个特性提供了操作内核的加密特性所需的软件。

当启用这个它,用户空间提供了配置加密特性(Userspace cryptographic algorithm configuration)。注意:这个配置指的是内核运行时的加密设置,不是编译内核的工具。

为了加强性能,启用这个会在加密算法中停止自我检测的特性 (Disable run-time self tests)。

“GF(2128) multiplication functions”是一种被一些密码使用特殊算法。GF代表的是” Galois field”(伽罗瓦域),是一种有限数的集合。这写集合称之为域并且有不同的大小。

“Null algorithms”是用于IPSec的算法。NULL加密意味这没有加密,因此这个驱动允许IPSec不使用加密。

任意算法可以转换成并行算法(Parallel crypto engine)。这个特性提供了转换器。

任意算法同样可以转换成异步算法(Software async crypto daemon)。

IPsec需要”Authenc support”。”Authenc support”代表”Authenticated Encryption and offers multiple encryptions to IPsec”(认证加密并对IPSec提供多重加密)。

CCM代表的是”Counter with CBC MAC”(CBC MAC计数器),IPSec需要它(CCM support)。

这个驱动提供了”GCM/GMAC support”。GCM意思是”Galois/Counter Mode”(伽罗瓦/计数器 模式),GMAC是”Galois Message Authentication Code”(伽罗瓦消息验证码)。

注意:我不会明确地解释一些特性的使用和细节。密码学是计算机中的特定领域,解释加密学超出了这篇文章的范围。

“Sequence Number IV Generator”是一个被某些加密软件使用的特殊的号码生成器。

Linux内核提供了不同的密码算法(CBC support)、 (CTR support)、 (CTS support)、 (ECB support)、 (LRW support)、 (PCBC support)、 (XTS support)、 (HMAC support)、 (XCBC support) 和 (VMAC support)。

“CRC32c CRC algorithm” 明确被SPARC64处理器使用。

“CRC32c INTEL hardware acceleration”是另外一个特定处理器的算法。它工作于带SSE4.2的Intel处理器。

内核提供了很多摘要、密码和其他加密软件。通常上,默认允许它们除非你有特殊的理由来启用或禁用这些特性。

注意:摘要(像MD5)会基于一个文件生成一个哈希值(字符序列)。哈希值接着被用于检查文件。比如,如果你从Canonical网站上下载了Ubuntu ISO安装盘,你可能想要知道你硬盘上的文件就是服务器上的文件的复制品。用户这么做的原因是ISO可能在长时间下载中被损坏。哈希值被用来证明文件没有被改变。

注意:密码是一种加密/解密算法。加密是使文件对除了接受者/拥有者之外的人都不可读。解密是浏览加密文件的过程。

Linux内核同样支持用户被强烈建议启用的不同的压缩算法(Deflate compression algorithm)、 (Zlib compression algorithm) 和 (LZO compression algorithm)。

内核可以生成用于加密软件的随机数(Pseudo Random Number Generation for Cryptographic modules)、(User-space interface for hash algorithms) 和 (User-space interface for symmetric key cipher algorithms)。

“Hardware crypto devices”是一个子菜单,包含了基于硬件加密工具的驱动。这个硬件在固件中含有算法。

“Asymmetric (public-key cryptographic) key type” 菜单中存在着不同的非对称公开密钥。

下面,我们可以进入配置工具主菜单(基于菜单接口)的下一个入口。虚拟化是寄放一个操作系统的 能力。这意味这Linux(和其他的系统)可以运行其他的操作系统,仿佛客户机是一个应用一样。

“Kernel-based Virtual Machine (KVM) support”运行内核本身管理客户机。带Intel处理器的计算机需呀这个驱动(KVM for Intel processors support),AMD的则需要(KVM for AMD processors support)。

用于内核虚拟机(KVM)的内存管理单元(MMU)可以有一个审计系统。

启用这个特性使客户机的网络变得更快(Host kernel accelerator for virtio net)。

在配置哇内核虚拟机特性后,配置工具主菜单下的最后菜单是内核配置的最后一部分。这个菜单用于”Library Routines”(库运行时),同样也成为库函数。一部分内核可以被作为可以链接的库。比如,XZ过滤(压缩算法)可以被外部程序访问。下面列出了不同的库。

注意:CRC函数大多数都相同但有不同的特性和性能,通常来讲,最好启用这些特性。

CRC-CCITT functions – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC16 functions – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC calculation for the T10 Data Integrity Field – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC ITU-T V.41 functions – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC32/CRC32c functions – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC32 perform self test on init – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC32 implementation (Slice by 8 bytes) – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC7 functions – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC32c (Castagnoli, et al) Cyclic Redundancy-Check – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

CRC8 function – 循环冗余校验测试(Cyclic Redundancy Check)用于测试原始数据中的改变。

* BCJ filter decoder – 为特定处理器设计的XZ解码器,这里的”*”是处理器。内核列出了一些不同的架构。

XZ decompressor tester – 用于测试XZ解码器的调试函数。

Averaging functions – “uptime”在”uptime”中看到的平均负载。

CORDIC algorithm – 双曲线和三角函数。

JEDEC DDR data – JEDEC双倍数据速率SD-RAM规范

你猜怎么了?我们已经完成配置内核。在23篇之后,我敢肯定这是你的感觉 –

视频链接:http://www.youtube.com/embed/barWV7RWkq0?wmode=opaque

下面,我们可以编译并安装了

在遥远的地方,我仍然在听 –

视频链接:http://www.youtube.com/embed/ELoUppY1esw?wmode=opaque


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

译者:geekpi 校对:wxy

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

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

Linux:戴文的Linux内核专题:28 编译与安装

Linux:戴文的Linux内核专题:28 编译与安装
Linux:戴文的Linux内核专题:28 编译与安装

你好!在花费了大量的时间在配置你需要的内核后,你现在可以编译它了。源代码是纯文本形式的C代码。这对人来可读但是对机器可不是这样。编译会将代码转换成计算机可理解的一种称之为二进制码的形式(1是 [开],0 是 [关])。编译同样会将所有内核代码文件变成一个内核的文件。

为了编译内核,在内核源代码相同目录下,在终端内输入”make”。这会花费一些时间。完成之后,必须通过”make modules”来编译模块。为了从一开始就简化编译过程,输入”make; make modules”。这会先编译接着是模块,而不用用户再回来输入”make modules”。

Linux:戴文的Linux内核专题:28 编译与安装
Linux:戴文的Linux内核专题:28 编译与安装

警告:在你安装一个内核时,备份所有的重要数据,确保有一份/boot目录备份在FAT32的存储卡上。这可以在如果安装失败后帮助修复系统。FAT32不会存储权限,因此它更容易被用作live盘来还原数据。记住设置原始文件权限和可执行位。

一旦编译已经成功完成,我们可以安装内核到本地系统中(我会马上解释如何在其他系统上安装内核[交叉编译])。在相同的终端下,在编译完成后,输入”make install”。这会在/boot目录下存放一些文件。”vmlinuz”(或者其他相似的名字)是内核自身。”initrd”是基于内存的文件系统,它被置于内存中且在启动中使用。”System-map”包含了一张内核符号列表。这些全局变量和函数用于内核代码。”config” 是内核的配置文件。grub.cfg会自动更新。然而,有些bootloder需要手动配置。内核安装器会自动配置Grub,LILO和SysLinux bootloder。像BURG这类bootloder需要手动配置。模块的安装同样需要输入”make modules install”。

Linux:戴文的Linux内核专题:28 编译与安装
Linux:戴文的Linux内核专题:28 编译与安装

注:内核和模块的安装可以写在一行-“make install && make modules_install”。

Linux:戴文的Linux内核专题:28 编译与安装
Linux:戴文的Linux内核专题:28 编译与安装

一旦上面的过程完成了,用户可以通过重启系统并在开机后在终端内输入”uname -r”来确保内核已经安装。如果系统无法启动或者uname报告你预期外的版本号,这个问题可能众多问题之一引起。或者是bootloader没有正确设置,特性/配置冲突,编译失败,不正确的安装,或者其他原因。找出问题源头最好的方法是查看系统日志(如果系统已经启动到足以产生日志)。”dmsg”是一个在屏幕上打印内核日志的命令。查看错误、警告或者未预料的结果。如果系统没有启动或者没有足够启动完全来生成日志,使用live linux盘来执行诊断和修复。如果所有的都失败了,再次编译内核并确保你已经用root或者”sudo”安装了内核。

注:最好的修复系统的方式是使用live Linux发行版来移除新的/损坏的内核,接着手动修复Grub文件(或者复制一个备份)。

一些Linux用户也喜欢安装内核文档,但这并不是必要。对于那些想要安装文档的用户,输入这行,这里的version是你的内核版本号 “install -d /usr/share/doc/linux-VERSION && cp -r Documentation/* /usr/share/doc/linux-VERSION”(VERSION 是内核版本号)。很明显,这需要root特权。

要是想编译一个如你目前内核一样特性的内核,输入这条命令”zcat /proc/config.gz > .config”。这个文件可能不存在,如果是这样,你可能需要询问你发行版/内核的开发者这个文件。”zcat”命令解压并写入数据到一个”.config”文件中。记住把”.config”放到合适的位置。这个文件应该放置在Linux内核目录下,并允许它替换当前的文件。接着,像往常一样编译安装你的内核即可。

交叉编译稍微有点不同。为目标系统配置内核。确保内核配置完后,它是以交叉编译配置的。当交叉编译时,需要熟悉两条术语。”Host”是执行编译的系统,”Target”是接收新内核的系统。确保Host主机系统有合适的编译器。比如,对于ARM系统的交叉编译,用户需要在主机系统上有gcc-arm-linux-gnueabi。通常来说,开发者可以在他们的包管理器上搜寻或者Google到合适/最好的适合他们需要的交叉编译器。比如用于ARM系统交叉编译的命令是”make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-“。”ARCH=arm”指的是目标处理器的类型,”CROSS_COMPILE”指明了交叉编译器。注意交叉编译器前面缺少了”gcc-“并以连字符结束。这是用户在使用交叉编译器作为参数使用时必须使用的格式。模块可以通过输入”make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules”来交叉编译。为了在目标系统上安装内核,将内核文件夹复制到目标系统上。一旦文件已在目标系统上并在该目录下打开了终端,输入”make install && make modules_install”。当然你必须是root或者使用”sudo”。

信息:Kernel.org放了一个支持的交叉编译器列表(https://www.kernel.org/pub/tools/crosstool/)。

安装编译总结:

标准:

make && make modules && make install && make modules_install

做一个更新的版本或者重整你的内核:

zcat /proc/config.gz > .config &&  make && make modules && make install && make modules_install

交叉编译:

make ARCH={TARGET-ARCHITERCTURE} CROSS_COMPILE={COMPILER}; make ARCH={TARGET-ARCHITERCTURE} CROSS_COMPILE={COMPILER} modules && make install && make modules_install

下篇文章中,我们会讨论加入和激活模块。谢谢!


via: http://www.linux.org/threads/the-linux-kernel-compiling-and-installing.5208/

译者:geekpi 校对:wxy

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

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

Linux:如何在Debian中启用测试版/不稳定版的软件库

为何要启用测试版/不稳定版?

测试版/不稳定版的Debian给开发者提供了一个比当前稳定版更新的环境以及软件。你们注意到了么?其实这些稳定版啊不稳定版啊神马的都是别名,比方说稳定版其实就是Debian的稳定发行版,而测试版将会是下一个Debian的稳定发行版(当然那是测试后的事了)。截至发稿为止,当前Debian的稳定发行版是Wheezy 7.x,将会成为下一个稳定版的测试版则是Jessie。

当你需要一款应用的最新版本的时候,启用测试版/不稳定版将会是不二的选择。当初我因为工作需要,要安装个Apache的 2.4.x到我的Debian Wheezy。测试版需要的是2.4.x的,可是我的软件库里面只有2.2.x的。所以最好的解决方案当时是将测试版下下来啦。

通常来说当我们想尝试最新版本的应用时,都应该只在测试版软件库中搜索。

Linux:如何在Debian中启用测试版/不稳定版的软件库
Linux:如何在Debian中启用测试版/不稳定版的软件库

(题图来源)

在这篇文章里我将教大家如何在不弄坏你系统的前提下设置好测试、不稳定版的Debain系统并在上面安装软件。

Stable < Testing < Unstable (稳定 < 测试版 < 不稳定版)
Wheezy < Jessie < Sid

1. 设置测试版/不稳定版的apt源

第一步是把测试版/不稳定版的源加到你的sources.list文件里。在Debian Wheezy系统上,/etc/apt/sources.list理应长得像这样:

$ cat /etc/apt/sources.list

...
deb http://security.debian.org/ wheezy/updates main
deb http://http.us.debian.org/debian/ wheezy main
deb-src http://security.debian.org/ wheezy/updates main
...

把你repo服务器的链接记下来,比如:http://http.us.debian.org/debian/

这个repo服务器将会是离你最近的一个服务器; 在不同的地理位置会有不同的url,这个将会用于下一步。

如果想加测试/不稳定源,则需要在sources.list文件加上这些东西:

# Testing repository - main, contrib and non-free branches
deb http://http.us.debian.org/debian testing main non-free contrib
deb-src http://http.us.debian.org/debian testing main non-free contrib
# Testing security updates repository
deb http://security.debian.org/ testing/updates main contrib non-free
deb-src http://security.debian.org/ testing/updates main contrib non-free
# Unstable repo main, contrib and non-free branches, no security updates here
deb http://http.us.debian.org/debian unstable main non-free contrib
deb-src http://http.us.debian.org/debian unstable main non-free contrib

格式将会是

deb   
(deb <上一步弄的服务器或镜像url>  )

当然啦,除了用testing或者unstable这么烂的词,也能使用他们的发行版代号,比如Jessie或者Sid

deb http://http.us.debian.org/debian jessie main non-free contrib
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://http.us.debian.org/debian sid main non-free contrib

2. 钉住 apt!这非常重要

在加了测试/不稳定的repo之后,当你更新系统的时候所有安装过并且可用的软件就会立马更新,而后你的系统就被你玩火自焚了。

所以需要设置一些规则,以便选定的软件包在正常的更新时不会被更新到一个不稳定的测试版本。

我们需要使用“钉住APT”的方式来告诉apt系统,除了我们希望使用测试版或不稳定版的特定软件包之外,其它的总是使用稳定版的软件包来更新。

可以通过如下两个文件之一来设置如何设置APT的优先级来“钉住”。

/etc/apt/preferences
或
/etc/apt/preferences.d/my_preferences

打开这两个文件之一(如果没有的话就创建一个),然后输入如下内容:

Package: *
Pin: release a=stable
Pin-Priority: 700
Package: *
Pin: release a=testing
Pin-Priority: 650
Package: *
Pin: release a=unstable
Pin-Priority: 600

前面我们提到过,稳定版指的是你当前的debian版本,测试版是下一个,而不稳定版则是更远的将来发行版。上面的设置中最主要的是优先级(Pin-Priority)。当前的稳定版应该有最高的优先级,这就是说,正常的apt-get操作只会从当前的稳定版的软件库(现在是wheezy)里面安装软件。

更新包缓存

在增加了新的软件库和指定了优先规则后,需要更新一下包缓存。

$ sudo apt-get update

确认APT规则

我们必须确认“钉住”的设置正确,优先级也没问题。使用 apt-cache 的 policy 参数来检查:

$ apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.2.22-13
  Version table:
     2.4.7-1 0
        600 http://http.us.debian.org/debian/ unstable/main amd64 Packages
     2.4.6-3 0
        650 http://http.us.debian.org/debian/ testing/main amd64 Packages
     2.2.22-13 0
        700 http://http.us.debian.org/debian/ wheezy/main amd64 Packages

如上的输出,确认在wheezy 稳定版中, 2.2.22 版本的Apache是选定的版本,它有最高的优先级。

3. 从测试版/不稳定版软件库中安装软件

现在可以从测试版或不稳定版中选择一个特定的软件来安装它了。假如说我们要从测试版软件源中安装 apache2。

有两个不同的方法,并且其结果也有所不同。

方式一

# apt-get install apache2/testing

上述命令会从测试版软件库中安装 apache2,并从稳定版软件库中安装其依赖包(稳定版通过apt规则确定)。这个命令在某些情况下会失败,比如安装的软件包(apache2)所需的依赖包在稳定版软件库中没有更新到可以支持该软件时。

方式二

# apt-get -t testing install apache2

上述命令会从测试版软件库中安装apache2,并从测试版软件库中安装其依赖包。这要比上面的命令工作的更好。

所以,要安装较新的软件包,直接从测试版/不稳定版的软件库中安装就行了。注意,优先级号码不只是一个数字而已,还有其特定意义。可以查看 apt_preferences的man页面了解更多:

$ man 5 apt_preferences

总结

使用“钉住”方式的测试版/不稳定版的软件库是一个获取较新版本软件包的一个好办法,不过其实并不推荐使用它们。如果弄错了,可能会从也许不兼容的分支上下载软件包,这会把你的系统搞乱。

一个更好的方式是,使用向后移植的软件库来安装更新的包。它从测试版和不稳定版的软件库中获取较新版本的软件包,但是为当前的稳定版软件库而编译。所以,对于 debian wheezy来说,你可以使用wheezy-backports 软件库。访问http://backports.debian.org/ 了解更多。

资源


via: http://www.binarytides.com/enable-testing-repo-debian/

译者:213edu wxy 校对:wxy

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

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

Linux:14个可以提升Linux桌面体验的应用程序

转战到Ubuntu,或者是别的流行的Linux发行版,不仅仅是操作系统的操作方式的改变,更多的是你还需要一些能支持你完成工作的好的应用。

在这篇文章中,我将分享一些我精选出来不可或缺的应用程序,并谈谈在我的日常工作中如何有效地使用它们。

Linux:14个可以提升Linux桌面体验的应用程序
Linux:14个可以提升Linux桌面体验的应用程序

日常使用的应用程序

一般当说到Linux桌面上的应用,我总是将这些应用划分为两大类,频繁使用的和一些别的应用。下边我为大家介绍的是一些自己日常使用的应用。

1) Firefox — 有时我也会使用用其他的浏览器,但最近火狐浏览器已经成为我可以长期信赖的朋友。可靠的、 安全的、 跨平台的,火狐浏览器完全满足了我的日常冲浪需求。

除了访问书签和网页,我还依靠火狐浏览器来处理我的各种部署在局域网服务器上的工作,如 Plex, Zoneminder, 路由器/WEB应用防火墙, 及我的文件服务器。所有这些均可以使用火狐浏览器进行访问。

2) Parcelite — 如果没有一个像样的剪贴板管理器我简直没法开始工作,至少对我来说,你无法找到在GNOME 下的Parcelite有什么不足。使用简单,易于访问而且它提供了很多的有用的选项。Parcelite选项应有尽有,包括了从热键设置到空格处理方式。尽管已经有很多的剪贴板管理器,但它们却很难击败 Parcelite。

3) Bittorrent Sync — 我已经使用过了各种开源替代方案进行文件同步,但是他们在正式发布之前还需要进行进一步开发。应该说Bittorrent Synchas从来没有让我失望过。它运行和安装都很简单和方便,这多亏了新的GUI的实现,而且 Bittorrent Sync 允许我快速地从一台机器到另外一台机器传输巨大的视频文件,而无需浪费时间去将大量的文件同步到“云端”。

我还发现它是与别人分享大型文件的最佳方法,在分享的同时能一直保持 IP 地址和目录的隐蔽。尽管有许多的替代品,我仍然坚定地成为了Bittorrent Sync的骨灰粉丝。

4) System Monitor — 因为TOP实在是滚动地太快了,所以我个人更喜欢一个具有选项卡式的 GUI,因为它能够让我的眼睛更轻松些。使用 GNOME 的系统监视器,我可以很快地发现一个失控的进程,并且轻松地kill掉它而不需吹灰之力。与TOP这样的终端程序不同的是,我可以实时的以图形化的方式去查看我的 CPU、 内存和磁盘的使用情况。作为一个拥有正常视觉的人,很难找到一个比用条形图来展示我还拥有多少的空间的更好方式。当然这也同样适用于其它的实时资源使用情况的监视。

5) PulseAudioControl — 每一天,我总是需要在多个声音设备之间来回穿梭。有时我需要将其中一个设为默认设备,然后却可能会从火狐浏览器音频完全切换到到另一个设备。因为我想控制我的尽可能多的音频,然后我就发现 PulseAudioControl是一个无价的工具。

一些别的软件

在本节中,我将分享我使用,但可能并不一定是每天都使用的应用程序。许多这些应用程序都是开放源代码的,有一些不是,但是它们对我个人都非常具有价值。

6) Skype — 无论是拨入Jupiter Broadcasting 收听每周共同主持的播客,或者只是简单联系一个业务,Skype 见证了互联网视频会议的发展史。测试完成无数的替代品后,我总是会发现自己还是终回到了Skype。即使有真的很棒的开源选择像EkigaJitsi,而在最后Skype总是与大家同在 —— 切换到Skype是一件很幸运的事。

7)Kdenlive — 我使用两个不同的视频编辑器,当我要处理一个需要大量编辑的视频剪辑项目的时候,Kdenlive是我用于图片合成和编辑大型的复杂的视频的工具。我已经成功地在 Kdenlive 里边做过6个素材轨道的编辑,但同样的负载量早已经让别的视频剪辑软件崩溃了。

8)OpenShot — 大多数情况下,我会将OpenShot作为视频剪辑任务的首选神兵利器。快速的编辑和两个素材轨道工作区让你可以流畅而操作简单。我还发现它提供了很棒的无与伦比的特效。调制标题效果和超赞的的视频转场效果使OpenShot在我自己的视频项目上成为一款超棒的视频制作软件。

9)SpiderOak — 在使用了无数云备份服务这么多年后, SpiderOak 已经成为了我的至爱。易于安装和使用,我超喜欢它所提供的增量选项而且使用起来是如此的简单。只需一次设置,不再操心,之后SpiderOak将会挑起你的文件搬运大任。

10) Dropbox — 许多年来,我已经与Dropbox 爱恨交织。尽管它的跨平台特性这意味着我可以从任何位置访问文件,我慢慢地发现我自己越来越少依赖这个基于云计算的备份解决方案。尽管如此,它允许我从任何 web 浏览器中访问文件,即使是从我不经常使用的计算机,这使得抛弃 Dropbox 更是难上加难。

11) Writer — 自从我第一次在Windows的OpenOffice里面使用过它之后,我一直都在使用Writer。今天,我使用LibreOffice 所带的Writer来满足我的需求,它可以做一切一个文字处理器可以做的事情。现在,公正地说,一些专有的办公套件可能会提供附加功能在Writer中是没有的,但是99%的人需要的功能在Writer这里都有。就我个人而言,我会永远是一个LibreOffice Writer粉。

12)SimpleScreenRecorder — 多年来,我发现自己使用 SimpleScreenRecorder远超过其他同类软件,它能很好支持多监视器模式,再加上它甚至可以捕获基于 OpenGL 的应用程序的视频。易于使用和可靠的 SimpleScreenRecorder 让我的工作更加得心应手。我把它推荐给那些只是偶尔需要,懒得使用其它屏幕捕捉软件的同学们。

13)SimpleScan — 当我需要扫描文档的时候,我一点都不想将大把大把的时间花费在配置的臃肿的程序上。 Simple Scan 可以在这方面做得很好。智能的SANE扫描数据库,Simple Scan将与市面上的任何扫描仪或多功能一体打印机/扫描仪很好的进行协作。此外还有一点好处就是它会设置成的最佳分辨率,当然你还可以很方便手动调整任何你需要的设置。

14)Baobab(磁盘使用分析器) — 我不断听到关于如何硬盘价格已回落。这或许没错,但现实却是我却囊中羞涩。这意味着我需要充分利用我能利用的所有硬盘空间,为了实现这个目的,我使用 Baobab 来观察我在我的硬盘上的可用空间,而且还可以直观地看到到底是哪一个目录正在蚕食我宝贵的硬盘空间。

真正的具有生产力的软件

谈到我所依赖的这些软件,我们真正关心的是他们能为我们完成什么样的任务,而不是它们所拥有的光辉头衔和自身的许可证。linux不需要软件的传奇时代早已过去。多数的计算机上的工作,除了有限的几个例外,大都可以在linux桌面上轻松地如我所说的那样完成。

很明显有一些对于你来说是必不可少的软件,但是也许不是我必须用的。你所倚重的软件是什么?您可在下方进行评论并与我们的读者进行分享那些优秀的软件。

题图来源


via: http://www.datamation.com/applications/14-apps-to-boost-ubuntu-1.html

译者:owen-carter 校对:wxy

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

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

Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录

Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录
Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录

如果你和其他人共享Ubuntu机器,那么你可能要设置多个用户,希望其他用户登录到他们自己的帐号,并只能访问他们自己的家目录。但是,默认情况下,任何一个用户都可以访问任何一个家目录。

当你在Ubuntu中添加一个新用户时,adduser工具为新的帐号添加了一个新的家目录。默认情况下,该目录位于根下面的/home/目录下,并以该帐号的用户名命名。例如,/home/lori。Ubuntu中创建的用户家目录具有其它人可读/执行权限,这就给系统中所有其他用户可以读另外外一些用户的家目录中的内容的权利。具体请阅读我们的文件权限在Linux中是如何工作的一文。

:当我们在文中提到输入什么时,输入的文字内容是在引号中的,不要输入引号,除非我们另外指定。

你可以很容易地修改你的家目录的权限来保护你的私人文件。要检查你家目录的权限,输入Ctrl + Alt + T打开终端窗口,并在提示符后输入以下命令,然后按回车。使用你自己的用户名来替换下面的“用户名”。

ls -ld /home/lori

:该命令仅包含小写的L,而不是数字1。(LCTT译注:这是给完全小白的提示,绝大部分人可以无视这个备注了)

在该行的开头,列出了该文件的权限。就像我们在文章中关于Linux权限部分讲的那样。

r表示“读”,w表示“写”,而x表示“执行”。目录权限以“d”开头,而不是“-”。你也会注意到权限值占了10个位置。你可以忽略第一个,后面是3个一组,分为3组。第一组是属主(owner)权限,第二组是属组(group)权限,最后一组是其它人(other或world)权限。

因此,下面列出的家目录的属主具有读、写和执行权限,而属组和其它人具有读和执行权限。

要修改这些权限,在提示符下输入以下行并回车

sudo chmod 0750 /home/lori

当提示你输入密码时,请输入并回车。

:chmod命令使用八进制数作为一种指定权限的方式。我们讲Linux权限的文章中使用了一种不同的方法,它需要几个步骤,但是可能更易于理解。使用八进制数来指定权限,是一种更快的方法。不管使用什么方法,只要你用着舒服就好。要学习使用八进制数设置权限,请阅读此文章

按上箭头两次,再次调用“ls -ld /home/用户名”命令来检查权限。注意,其它人权限现在都是破折号(-),这就意味着其它人将无法读、写或执行你家目录中的任何东西了。

然而,和你同组的用户可以读和执行你家目录中的文件和文件夹。如果你不想除你之外的任何人访问你的家目录,可以在chmod命令中输入“0700”。

:要获取关于Linux中用户和组管理的更多信息,请查看我们的文章

要关闭终端窗口,在提示符下输入“exit”并回车。

现在,当其系统中的其他用户试着要访问你的家目录时,下面的对话框就会弹出来了。

Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录
Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录

甚至你也可以在创建新用户时让Ubuntu使用指定的权限。要完成此项任务,你需要编辑adduser配置文件。要编辑该文件,在提示符下输入以下命令并回车。

gksudo gedit /etc/adduser.conf

我们使用gedit来编辑该文件,你也可以使用你想要的其它文本编辑器。

注:gksudo命令看似和sudo命令一样,但是它是用来以root身份运行图形化程序的,而sudo命令用来以root身份运行命令行程序。

在弹出对话框中的密码编辑框内输入你的密码并按回车或点击确定(OK)。

Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录
Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录

在adduser.conf文件中向下滚动到DIR_MODE命令处,这里的默认值是“0755”。修改该值来反映你想要授权给各种用户类型(属主,属组,其它人)的不同权限(r,w,x),如我们先前讨论过的“0750”或“0700”。点击保存(Save)。

Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录
Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录

从gedit的文件(File)菜单选择退出(Quit)来关闭gedit,你也可以点击窗口左上角的X按钮来关闭它。

Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录
Linux:[小白技巧]如何在Linux中阻止其它用户访问你的家目录

点击窗口左上角的X来关闭终端窗口。

现在,你家目录中文件会保持私有。切记,如果有其他用户和你处于同一组中,你也许要为你的家目录权限剔除组和大众权限。


via: http://www.howtogeek.com/190084/how-to-prevent-other-users-from-accessing-your-home-directory-in-ubuntu-14.04/

译者:GOLinux 校对:wxy

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

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

Linux:命令行星期二 —— 序

嗨,极客们!

今天,我们介绍给大家一个新的系列节目,它叫命令行星期二。为什么叫命令行星期二?因为在该系列节目中,每天坐在计算机前的你们,将会试着走出图形用户界面(GUI)文化的藩篱,从今天开始“让事情变得简单而大众化”。

当然,如果你访问过任何与GNU/Linux相关的社区论坛的话,你可能已经看到了,关于GUI和命令行哪个更好的讨论非常热烈。是让GUI掌控一切,还是只是学习并享受命令行界(CLI)面带来的乐趣呢?

Linux:命令行星期二 —— 序
Linux:命令行星期二 —— 序

对于使用或抛弃GUI工具的争论有很多。正方最常提到的优点之一,就是我们是在点击的计算模式下长大的,所以它基本上就是我们和机器进行交互的一种语言,或者你可以说是一种文化。我们日复一日重复着这样的模式,点击那个大按钮来让它干我们需要它干的事。

而对于反方,我读到的关于命令行的优点的最有趣的评论之一,就是你可以通过命令行来更快,更简单地做更多事情,比GUI工具来得快。但你需要明白的是:你需要学习命令。是的,学习它们,就像学一首诗一样。

现在,因为对于我们,半知半解毫无头绪的用户们,它让人听起来就像是某个没用的杂记小丑表演得表演过头,太过火了。让我来用个寓言讲得通俗一点吧:

寓言

我已经用了Linux超过3年了。27岁,是个文学专业学生,我对任何形式的技术都没有太大的兴趣。我直到中学才有了一台属于自己的计算机,我想大概是17岁那年吧。对于我而言,只用了10年的计算机。我只用过三个程序,BS播放器,Winamp和足球经理,偶尔也用用MS Word。大约三年多以前,我做临时工时的一位同事,在我正和另外一位同僚谈话时告诉我说,有个新版的东西,它一下子就抓住了我的心,它看起来确实与众不同。我现在想想,它就是Ubuntu的“敏捷的独角鲸”。在和这位同事讨论这个新版本后,他指出了一些常见的优点,这些优点也是我们经常向新手宣传的,不需要杀毒软件,启动快捷,安全性更高,附带有软件中心等等之类。最突出的一点:它背后的自由和开源(FOSS)哲学。他用他温和而优雅的方式把我带了进去。

我决定来一次尝试,而从那以后便一发不可收拾。而至于我是怎么又从第一次对Ubuntu的浅尝辄止转而投向openSUSE 11.4的,咋们下回再讲吧。而我发现它只是一个完美而甜蜜的小插曲时,那就完完全全另外一回事了。问题在于,我最终进入了Linux领域。这很有趣,感觉很不一样,它让我的计算机跑得更好,它也更稳定,我也和它相处得很好(似乎我是在不经意间买到了相当普通的硬件)。似乎Linux并不是一个完全的桌面系统,所以我有时不得不使用终端。但是这么说吧,它是Linux中一个最为讨厌的,最为可怕,最令人不爽的工具之一。如果某些操作没有GUI可以做的话,我马上会诚惶诚恐,十分不安了。因为当我从论坛复制/粘贴命令的时候,我都不知道我究竟在干些什么。

随着时间流逝,情况发生了变化。相对于其他以消费者为导向的系统,发生在我身上的事可能有点与一般人相反。在那三年中,我感觉不是我在玩系统,而是系统在玩我。我学会了怎样寻找基本问题,提交bug报告,怎样正确地在论坛上提问。对于碰到的每个问题,我学会了为那些更有能力帮我解决问题的人提供更有用的信息。

不久以前,我女朋友发泄说,她简直不敢相信,我主要为了用计算机而用计算机,而不是用它来做一些别的事情。“你只用它来进行音乐收藏和做些Linux的乱七八糟的事情,Nenad. Gaawd”它让我想啊,使劲想。Linux,特别是openSUSE发行版它成了我的爱好之一。我不是一个专家,不管怎么看都是这样,Linux不在我的专业知识范畴内。但我有足够的知识来搞定它,搞定一些小问题,修改一些配置文件等等。但是我终于认识到,随着玩Linux日久,对系统的调整日多,我真的需要熟悉一下命令行(CLI)了。我也了解到,我在对底层的东西一无所知的情况下对系统胡作非为。我要对着etc大喊大叫了,它究竟是个什么东西?bin又是个什么东西?为什么会有个.sh在后面?问什么这个文件在这里?那个文件又在那里?为什么我得点击那一大堆的文件夹来找到正确的文件进行修改?然后,我读到“你可以用一个命令来简单地列出某个地方的所有文件”时,它又变得很有趣了,我突然感到迫不及待要想试试了。

好吧,让我们干吧!

我们来了……。作为一位新的openSUSE的新闻发布者,我会试着以我所见最有成效的方式来发表我的看法,这样的方式我想对社区中绝大多数人会奏效。该高举旗帜,一起开始学习命令行了。如果是哲学理念吸引你到Linux和openSUSE中来的,就像我一样,那么是时候走得更远一点了。

Linux:命令行星期二 —— 序
Linux:命令行星期二 —— 序

看,我就知道在那外头有一大堆像我这样的人。我知道,你也许没有抓住90后极客们的要点,黑屏-绿字-手指在键盘上乱飞-让一切都激情澎湃。但这在很多地方都很有用。我们将以一种有趣的,而又通用的方式来学习,目录是用来干什么,什么文件放在什么地方,以及一些最常用的终端命令。在我们在控制台处理一些任务时,这将让我们更轻松一些;在碰到一些问题时,获得更大的回报。它也会让bug处理者更轻松些,如果他们从我们这头收到正确的信息的话。它也让我们的爱好变得乐趣无穷。

我是说,我的天啊,你已经过渡到连Dilber和xkcd都感到有趣的阶段了。是时候到终端下去了。

附录:

要用到的一些参考资料:威廉·肖茨—— 《Linux命令行》,以及克罗地亚黑客韦利米尔·巴克沙,别名鲁塞拉斯,《关于最常用命令的简短教程》。对于你们的要求:

  • 每周1到2小时的空闲时间
  • 一品脱冰冻啤酒或者其它饮料
  • 有人已经指出,使用Gedit,或者手工记录本(你懂的,笔和纸,呵呵)可以让学习更简单一些。

肖茨写的书可是精品,但读它可要花点时间和毅力。这里,我尽力让课程变得更通俗易懂一点,花点时间来帮助你们,而最重要的是——我希望我们能一起学习,一起互相帮助(评论还有论坛,人!!),并且加入一个组织严密的openSUSE社区!下周的这个时间(已经会是六月了吧),我们讲学习我们的第一部分命令。切记……

尽情享受吧!


via: https://news.opensuse.org/2014/05/27/command-line-tuesdays-the-introductory/

译者:GOLinux 校对:wxy

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

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