2015年6月

PowerDNS是一个运行在许多Linux/Unix衍生版上的DNS服务器,它可以使用不同的后端进行配置,包括BIND类型的区域文件、关系型数据库,或者负载均衡/失效转移算法。它也可以被配置成一台DNS递归器,作为服务器上的一个独立进程运行。

PowerDNS授权服务器的最新版本是3.4.4,但是当前EPEL仓库中可以获得的版本是3.4.3。我推荐安装EPEL仓库中提供的那一个,因为该版本已经在CentOS和Fedora中测试过。那样,你也可以在今后很容易地更新PowerDNS。

本文用于向你演示如何安装并配置以MariaDB作为后端的PowerDNS,以及它的界面友好的 Web 管理工具 PowerAdmin。

出于本文的写作目的,我将使用以下服务器:

主机名: centos7.localhost 
IP地址: 192.168.0.102

第一部分: 安装带有MariaDB后端的PowerDNS

1、 首先,你需要为你的系统启用EPEL仓库,只需使用:

# yum install epel-release.noarch 

Enable Epel Repository

启用Epel仓库

2、 下一步是安装MariaDB服务器。运行以下命令即可达成:

# yum -y install mariadb-server mariadb

Install MariaDB Server

安装MariaDB服务器

3、 接下来,我们将配置并启用MariaDB,并设置开机启动:

# systemctl enable mariadb.service
# systemctl start mariadb.service

Enable Start MariaDB System Boot

启用MariaDB开机启动

4、 现在MariaDB服务运行起来了,我们将为MariaDB设置密码进行安全加固,运行以下命令:

# mysql_secure_installation

按照指示做

/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):  Press ENTER
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y     
New password:  ← Set New Password
Re-enter new password:  ← Repeat Above Password
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y ← Choose “y” to disable that user
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n ← Choose “n” for no
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y ← Choose “y” for yes
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y ← Choose “y” for yes
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

5、 MariaDB配置成功后,我们可以继续去安装PowerDNS。运行以下命令即可轻易完成:

# yum -y install pdns pdns-backend-mysql

Install PowerDNS with MariaDB Backend

安装带有MariaDB后端的PowerDNS

6、 PowerDNS的配置文件位于/etc/pdns/pdns,在编辑之前,我们将为PowerDNS服务配置一个MariaDB数据库。首先,我们将连接到MariaDB服务器并创建一个名为powerdns的数据库:

# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE powerdns;

Create PowerDNS Database

创建PowerDNS数据库

7、 接下来,我们将创建一个名为powerdns的数据库用户:

MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY ‘tecmint123’;
MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'powerdns'@'centos7.localdomain' IDENTIFIED BY 'tecmint123';
MariaDB [(none)]> FLUSH PRIVILEGES;

Create PowerDNS User

创建PowerDNS用户

注意: 请将“tecmint123”替换为你想要设置的实际密码。

8、 我们继续创建PowerDNS要使用的数据库表。像堆积木一样执行以下这些:

MariaDB [(none)]> USE powerdns;
MariaDB [(none)]> CREATE TABLE domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
);

Create Table Domains for PowerDNS

创建用于PowerDNS的表domains

MariaDB [(none)]> CREATE UNIQUE INDEX name_index ON domains(name);
MariaDB [(none)]> CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
);

Create Table Records for PowerDNS

创建用于PowerDNS的表 records

MariaDB [(none)]> CREATE INDEX rec_name_index ON records(name);
MariaDB [(none)]> CREATE INDEX nametype_index ON records(name,type);
MariaDB [(none)]> CREATE INDEX domain_id ON records(domain_id);

Create Index of Table

创建表索引

MariaDB [(none)]> CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);

Create Table Supermaster

创建表supermasters

你现在可以输入以下命令退出MariaDB控制台:

MariaDB [(none)]> quit;

9、 最后,我们可以继续配置PowerDNS了,以MariaDB作为后台。请打开PowerDNS的配置文件:

# vim /etc/pdns/pdns.conf 

在该文件中查找像下面这样的行:

#################################
# launch        Which backends to launch and order to query them in
#
# launch=

在这后面放置以下代码:

launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=user-pass
gmysql-dbname=powerdns

修改“user-pass”为你先前设置的实际密码,配置如下:

Configure PowerDNS

配置PowerDNS

保存修改并退出。

10、 现在,我们将启动并添加PowerDNS到系统开机启动列表:

# systemctl enable pdns.service 
# systemctl start pdns.service 

Enable and Start PowerDNS

启用并启动PowerDNS

到这一步,你的PowerDNS服务器已经起来并运行了。要获取更多关于PowerDNS的信息,你可以参考手册http://downloads.powerdns.com/documentation/html/index.html

第二部分: 安装PowerAdmin来管理PowerDNS

11、 现在,我们将安装PowerAdmin——一个界面友好的PowerDNS服务器的 Web 管理器。由于它是用PHP写的,我们将需要安装PHP和一台网络服务器(Apache):

# yum install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

Install Apache PHP

安装Apache 和 PHP

PowerAdmin也需要两个PEAR包:

# yum -y install php-pear-DB php-pear-MDB2-Driver-mysql 

Install Pear

安装Pear

你也可以参考一下文章了解CentOS 7中安装LAMP堆栈的完整指南:

安装完成后,我们将需要启动并设置Apache开机启动:

# systemctl enable httpd.service
# systemctl start httpd.service

Enable Start Apache System Boot

启用Apache开机启动

12、 由于已经满足PowerAdmin的所有系统要求,我们可以继续下载软件包。因为Apache默认的网页目录位于/var/www/html/,我们将下载软件包到这里。

# cd /var/www/html/
# wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz 
# tar xfv poweradmin-2.1.7.tgz

Download PowerAdmin

下载PowerAdmin

13、 现在,我们可以启动PowerAdmin的网页安装器了,只需打开:

http://192.168.0.102/poweradmin-2.1.7/install/

这会进入安装过程的第一步:

Select Installation Language

选择安装语言

上面的页面会要求你为PowerAdmin选择语言,请选择你想要使用的那一个,然后点击“进入步骤 2”按钮。

14、 安装器需要PowerDNS数据库:

PowerDNS Database

PowerDNS数据库

15、 因为我们已经创建了一个数据库,所以我们可以继续进入下一步。你会被要求提供先前配置的数据库详情,你也需要为Poweradmin设置管理员密码:

Enter PowerDNS Database Settings

输入PowerDNS数据库配置

16、 输入这些信息后,进入步骤 4。你将创建为Poweradmin创建一个受限用户。这里你需要输入的字段是:

  • 用户名(Username) - PowerAdmin用户名。
  • 密码(Password) – 上述用户的密码。
  • 主机管理员(Hostmaster) - 当创建SOA记录而你没有指定主机管理员时,该值会被用作默认值。
  • 主域名服务器 - 该值在创建新的DNS区域时会被用于作为主域名服务器。
  • 辅域名服务器 – 该值在创建新的DNS区域时会被用于作为辅域名服务器。

PowerDNS Configuration Settings

PowerDNS配置设置

17、 在下一步中,Poweradmin会要求你在数据库表中创建一个新的受限数据库用户,它会提供你需要在MariaDB控制台输入的代码:

Create New Database User

创建新的数据库用户

18、 现在打开终端并运行:

# mysql -u root -p

提供你的密码并执行由PowerAdmin提供的代码:

MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE
ON powerdns.*
TO 'powermarin'@'localhost'
IDENTIFIED BY '123qweasd';

Grant Mysql Permissions to User

为用户授予Mysql权限

19、 现在,回到浏览器中并继续下一步。安装器将尝试创建配置文件到/var/www/html/poweradmin-2.1.7/inc。

文件名是config.inc.php。为防止该脚本没有写权限,你可以手动复制这些内容到上述文件中:

Configuration Settings of PowerDNS

配置PowerDNS设置

20、 现在,进入最后页面,该页面会告知你安装已经完成以及如何访问安装好的PowerAdmin:

PowerDNS Installation Completed

PowerDNS安装完成

你可以通过运行以下命令来启用用于其他动态DNS提供商的URL:

# cp install/htaccess.dist .htaccess 

出于该目的,你将需要在Apache的配置中启用mod\_rewrite。

21、 现在,需要移除从PowerAdmin的根目录中移除“install”文件夹,这一点很重要。使用以下命令:

# rm -fr /var/www/html/poweradmin/install/

在此之后,你可以通过以下方式访问PowerAdmin:

http://192.168.0.102/poweradmin-2.1.7/

PowerDNS Login

PowerDNS登录

在登录后,你应该会看到PowerAdmin的主页:

PowerDNS Dashboard

PowerDNS仪表盘

到这里,安装已经完成了,你也可以开始管理你的DNS区域了。

第三部分: PowerDNS中添加、编辑和删除DNS区域

22、 要添加新的主区域,只需点击“添加主区域”:

Add Master Zone

添加主区域

在下一页中,你需要填写一些东西:

  • 域(Domain) – 你要添加区域的域。
  • 所有者(Owner) – 设置DNS区域的所有者。
  • 模板(Template)– DNS模板 – 留空。
  • DNSSEC – 域名系统安全扩展(可选——看看你是否需要)。

点击“添加区域”按钮来添加DNS区域。

Master DNS Zone

主DNS区域

现在,你可以点击“首页”链接回到PowerAdmin的首页。要查看所有现存的DNS区域,只需转到“列出区域(List Zones)”:

Check List of Zones

查看区域列表

你现在应该看到一个可用DNS区域列表:

Check List of DNS Zones

检查DNS区域列表

23、 要编辑现存DNS区域或者添加新的记录,点击编辑图标:

Edit DNS Zone

编辑DNS区域

在接下来的页面,你会看到你选择的DNS区域的条目:

Domain DNS Zone Entries

域名的DNS区域条目

24、 在此处添加新的DNS条目,你需要设置以下信息:

  • 名称(Name) – 条目名称。只需添加域/子域的第一部分,PowerAdmin会添加剩下的。
  • 类型(Type) – 选择记录类型。
  • 优先级(Priority) – 记录优先级。
  • TTL – 存活时间,以秒计算。

出于本文目的,我将为子域new.example.com添加一个A记录用于解析IP地址192.168.0.102,设置存活时间为14400秒:

Add New DNS Record

添加新DNS记录

最后,点击“添加记录”按钮。

25、 如果你想要删除DNS区域,你可以回到“列出区域”页面,然后点击你想要删除的DNS区域旁边“垃圾桶”图标:

Delete DNS Zone

删除DNS区域

Poweradmin将问你是否确定想要删除DNS区域。只需点击“是”来完成删除。

如要获取更多关于怎样创建、编辑和删除区域的说明,你可以参与Poweradmin的文档:https://github.com/poweradmin/poweradmin/wiki/Documentation

我希望你已经发现本文很有趣,也很有用。一如既往,如果你有问题或要发表评论,请别犹豫,在下面评论区提交你的评论吧。


via: http://www.tecmint.com/install-powerdns-poweradmin-mariadb-in-centos-rhel/

作者:Marin Todorov 译者:GOLinux 校对:wxy

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

今天我们来谈谈 Centos 7 中的一个文件系统tmpfs,这是一个将所有文件和文件夹写到虚拟内存中而不是实际写到磁盘中的虚拟文件系统。这意味中tmpfs中所有的内容都是临时的,在tmpfs卸载、系统重启或者电源切断后内容都将会丢失。技术的角度上来说,tmpfs将所有的内容放在内核内部缓存中并且会调整大小来容纳文件,并可从交换空间中交换出不需要的页。

CentOS默认使用tmpfs做的几种用途可用df -h命令的输出来看:

# df –h

df

  • /dev - 含有针对所有设备的设备文件的目录
  • /dev/shm - 包含共享内存分配
  • /run - 用于系统日志
  • /sys/fs/cgroup - 用于cgrpups, 一个针对特定进程限制、管制和审计资源利用的内核特性

显然,它也可以用作/tmp目录, 你可以用下面的两种方法来做到:

使用systemctl来在/tmp中启用tmpfs

你可以使用systemctl命令在tmp目录启用tmpfs, 首先用下面的命令来检查这个特性是否可用:

# systemctl is-enabled tmp.mount

这会显示当先的状态,(如果未启用,)你可以使用下面的命令来启用它:

# systemctl enable tmp.mount

systemctl

这会让系统控制/tmp目录并在该目录下挂载一个tmpfs文件系统。

手动挂载/tmp文件系统

你可以在/etc/fstab中添加下面这行,来手工在/tmp下挂载 tmpfs。

tmpfs /tmp tmpfs size=512m 0 0

接着运行这条命令

# mount –a

df

这应该就会在df -h中显示tmpfs了,同样也会在你下次重启时自动挂载。

立即创建tmpfs

如果由于一些原因,你需要在一个文件夹下立即创建tmpfs,你可以使用下面的命令:

# mount -t tmpfs -o size=1G tmpfs /mnt/mytmpfs

当然你可以在size选项中指定你希望的大小和希望的挂载点,只要记住是有效的目录就行了。


via: http://linoxide.com/file-system/use-tmpfs-rhel-centos-7-0/

作者:Adrian Dinu 译者:geekpi 校对:wxy

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

也许你并不知道 Feedly,它是世界上最流行的在线新闻聚合服务之一;它提供了平滑而一致的新闻阅读体验,你可以使用电脑的浏览器扩展,Android 和 iOS 设备上的移动应用程序等来体验Feedly。Feedly 在2013年Google Reader 停用后,迅速的获得了一大批Google Reader的用户。我就是他们之中的一位。从这以后,Feedly就一直是我的默认RSS(简易信息聚合)阅读器。

除了使用我非常喜欢的Feedly浏览器扩展和手机上的Feedly程序,这里还有一种途径来获取Feedly:Linux命令行。没错,你可以用命令行来获取Feedly上的新闻概要。听起来非常傻?但是对于那些在服务器上工作的系统管理员来说,这是非常有用的。

点击进入Feednix,这个用c++编写的开源软件是Feedly的非官方命令行客户端。它允许你在一个基于ncurses的终端界面(例如:bash)下浏览Feedly的新闻。默认模式下,Feednix 关联了一个叫做 w3m 的基于控制台的浏览器,允许你在命令行终端的环境下阅读文章。当然你也可以选择使用你喜欢的网页浏览器。

在这个教程中,我准备示范一下怎样在命令行下安装和配置Feednix 来获取Feedly。

在Linux下安装Feednix

你可以通过以下的步骤从源代码中构建Feednix。同时,在其官方的github仓库的Ubuntu-stable(Ubuntu稳定版本)的分支上有最新的Feednix源代码。现在让我们开始吧:

作为必要组件,你需要安装一组开发包,和w3m浏览器(文字式页面浏览器)。

在Debian、Ubuntu 和Linux Mint 操作

$ sudo apt-get install git automake g++ make libncursesw5-dev libjsoncpp-dev libcurl4-gnutls-dev w3m
$ git clone -b Ubuntu-stable https://github.com/Jarkore/Feednix.git
$ cd Feednix
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

在Fedora 下操作

$ sudo yum groupinstall "C Development Tools and Libraries"
$ sudo yum install gcc-c++ git automake make ncurses-devel jsoncpp-devel libcurl-devel w3m
$ git clone -b Ubuntu-stable https://github.com/Jarkore/Feednix.git
$ cd Feednix
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

Arch Linux

在Arch Linux发行版下,你可以非常容易的从 AUR安装Feednix。

配置Feednix

在安装完软件后,用下面的命令启动Feednix

$ feednix

如果你是第一次运行Feddnix,它会弹出一个网页浏览器窗口,在这个窗口里,你需要登录来创建一个Feedly的账户ID和相应的开发人员密钥。

如果你是在无桌面环境下运行Feednix,先在另外一台电脑上打开一个网页,进入到网站:https://feedly.com/v3/auth/dev

当你登录后,你对应的Feedly账户ID就生成了。

为了得到一个访问密钥,你需要在浏览器上访问发送你的邮箱中的密钥链接。之后就会在浏览器窗口显示你的用户ID,密钥,和密钥的有效期。请注意密钥的长度是非常长的(超过200个字符),所以密钥显示在一个带有垂直滚动条的文本框内,请确保把整个密钥复制下来。

像下面这样,把你的用户ID和密钥输入到Feddnix的命令行提示下:

[Enter User ID] >> XXXXXX
[Enter token] >> YYYYY

成功授权后,你会在屏幕上见到一个初始化为两个窗格的Feednix界面。左边的标题为“Categories”窗格,显示了一个新闻分类栏;右边“Posts”窗格显示了当前类别的新闻文章。

用Feednix读文章

这里我想简要描叙一下怎样通过Feednix来访问Feedly。

在Feednix中导航

像我之前提过的,Feednix窗口包含了两个窗格。想在两个窗口之间进行切换的话,可以使用"TAB"健。想在一个窗格内的列表中上下移动,可以使用"j"和"k"。这些快捷健明显是受到了Vim编辑器的启发。

阅读文章

想阅读一篇特定的文章,可以在当前的文章上使用"o"健。它会调用w3m浏览器,并且在浏览器里面加载文章。当你读完之后,可以使用"q"健来退出浏览器,并返回到Feednix。如果你的电脑环境允许打开网页浏览器,你可以按"0"健来在你默认的网页浏览器里面加载文章,比如使用Firefox。

订阅新闻源

你可以在Feednix界面中来为你的Feedly账户增加任何一种RSS新闻源。要这么做,仅仅只需要按下"a"键,它会在屏幕底部显示一个"[ENTER FEED]:"的提示。在输入完RSS新闻源后,继续输入新闻源的名字和及其首选分类。

总结

如你所见, Feednix 是一个非常方便易用的命令行RSS阅读器。如果你是重度依赖命令行的用户,同时也是一个Feedly用户的话,Feednix 是肯定值得去尝试的。我和Feednix的开发者Jarkore交流解决了一些问题。我想说,对于bug的报告和修复他非常的积极。鼓励大家来试用Feednix,并且给他(Jarkore)一些回馈。


via: http://xmodulo.com/feedly-rss-feed-command-line-linux.html

作者:Dan Nanni 译者:chenzhijun 校对:wxy

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

距离本站上次推荐的GTK主题已经过了很久了。但是看到上图中的Arc主题后,就值得打破冷场了。我们不能不推荐它!

Arc GTK主题

透明,并不符合每个人的口味

Arc是一个扁平化主题并有微妙的配色方案,窗口的选中区域是透明的,如GTK的顶栏和Nautilus的侧边栏。

它的效果不像我们之前介绍的主题那样将程序渲染的像那么混乱。有点像 OSX Yosemite,效果用的不多但是很好。

与之伴随的图标集(称为Vertex)同样工作的很好。

是的它支持Unity

Arc主题支持基于GTK3和GTK2桌面环境,包含Gnome Shell(当然了)和标准的Ubuntu Unity。

它可以很好地游刃于轻量级的Budgie和elementary的Pantheon桌面之间,并且与Cinnamon配合也不错。

Arc中的开关、滑块和小挂件

它并不容易下载与安装- understatement klaxon - 因为它还在密集开发中。

安装包需要GTK 3.14及以上,这意味着Ubuntu 14.04 LTS和14.10的用户无法使用了。

那些使用Ubuntu 15.04的用户可以使用这个主题。你可以添加ppa或者双击.deb包来安装。

如果你喜欢它,你需要卷起你的袖子并查看github上的编译指导。

更新6/7:现在可以使用软件库来安装它(由 openSUSE 用户 Horst1380 创建,也可用于 Ubuntu 用户),也可以下载预打包的 .deb 文件。


via: http://www.omgubuntu.co.uk/2015/06/arc-gtk-theme

作者:Joey-Elijah Sneddon 译者:geekpi 校对:wxy

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

我们为你的面试准备选择了 70 个你可能遇到的 shell 脚本面试问题及解答。了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。在过去的几年里,我们注意到所有的 linux 工作职位都要求脚本技能。

1) 如何向脚本传递参数 ?

./script argument

例子 : 显示文件名称脚本

./show.sh file1.txt

cat show.sh
#!/bin/bash
echo $1

(LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。)

2) 如何在脚本中使用参数 ?

第一个参数 : $1,第二个参数 : $2

例子 : 脚本会复制文件(arg1) 到目标地址(arg2)

./copy.sh file1.txt /tmp/

cat copy.sh
#!/bin/bash
cp $1 $2

3) 如何计算传递进来的参数 ?

$#

4) 如何在脚本中获取脚本名称 ?

$0

5) 如何检查之前的命令是否运行成功 ?

$?

6) 如何获取文件的最后一行 ?

tail -1

7) 如何获取文件的第一行 ?

head -1

8) 如何获取一个文件每一行的第三个元素 ?

awk '{print $3}'

9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素

awk '{ if ($1 == "FIND") print $2}'

10) 如何调试 bash 脚本

将 -xv 参数加到 #!/bin/bash 后

例子:

#!/bin/bash –xv

11) 举例如何写一个函数 ?

function example() {
echo "Hello world!"
}

12) 如何向连接两个字符串 ?

V1="Hello"
V2="World"
V3=${V1}${V2}
echo $V3

输出

HelloWorld
据匿名网友评论,本题原答案有误,已经修正。

13) 如何进行两个整数相加 ?

V1=1
V2=2
let V3=$V1+$V2
echo $V3

输出

3

据 @kashu 的意见,本题的更佳回答为:

两个整数相加,还有若干种方法实现:

A=5
B=6

echo $(($A+$B))  # 方法 2
echo $[$A+$B]    # 方法 3
expr $A + $B     # 方法 4
echo $A+$B | bc  # 方法 5
awk 'BEGIN{print '"$A"'+'"$B"'}'   # 方法 6

14) 如何检查文件系统中是否存在某个文件 ?

if [ -f /var/log/messages ]
then
echo "File exists"
fi

15) 写出 shell 脚本中所有循环语法 ?

for 循环 :

for i in $( ls ); do
echo item: $i
done

while 循环 :

#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done

until 循环 :

#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done

16) 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?

这一行说明要使用的 shell。#!/bin/bash 表示脚本使用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python。(LCTT译注:这一行称之为释伴行。)

17) 如何获取文本文件的第 10 行 ?

head -10 file|tail -1

18) bash 脚本文件的第一个符号是什么

#

19) 命令:[ -z "" ] && echo 0 || echo 1 的输出是什么

0

20) 命令 “export” 有什么用 ?

使变量在子 shell 中可用。

21) 如何在后台运行脚本 ?

在脚本后面添加 “&”。

据 @kashu 的意见,更好的答案是:

nohup command &

大部分时间我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command &没了...

22) "chmod 500 script" 做什么 ?

使脚本所有者拥有可执行权限。

23) ">" 做什么 ?

重定向输出流到文件或另一个流。

24) & 和 && 有什么区别

  • & - 希望脚本在后台运行的时候使用它
  • && - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它

25) 什么时候要在 [ condition ] 之前使用 “if” ?

当条件满足时需要运行多条命令的时候。

26) 命令: name=John && echo 'My name is $name' 的输出是什么

My name is $name

27) bash shell 脚本中哪个符号用于注释 ?

#

28) 命令: echo ${new:-variable} 的输出是什么

variable

29) ' 和 " 引号有什么区别 ?

  • ' - 当我们不希望把变量转换为值的时候使用它。
  • " - 会计算所有变量的值并用值代替。

30) 如何在脚本文件中重定向标准输出和标准错误流到 log.txt 文件 ?

在脚本文件中添加 "exec >log.txt 2>&1" 命令。

31) 如何只用 echo 命令获取字符串变量的一部分 ?

echo ${variable:x:y}
x - 起始位置
y - 长度

例子:

variable="My name is Petras, and I am developer."
echo ${variable:11:6} # 会显示 Petras

32) 如果给定字符串 variable="User:123:321:/home/dir",如何只用 echo 命令获取 home\_dir ?

echo ${variable#*:*:*:}

echo ${variable##*:}

33) 如何从上面的字符串中获取 “User” ?

echo ${variable%:*:*:*}

echo ${variable%%:*}

34) 如何使用 awk 列出 UID 小于 100 的用户 ?

awk -F: '$3<100' /etc/passwd

35) 写程序为用户计算主组数目并显示次数和组名

cat /etc/passwd|cut -d: -f4|sort|uniq -c|while read c g
do
{ echo $c; grep :$g: /etc/group|cut -d: -f1;}|xargs -n 2
done

36) 如何在 bash shell 中更改标准的域分隔符为 ":" ?

IFS=":"

37) 如何获取变量长度 ?

${#variable}

38) 如何打印变量的最后 5 个字符 ?

echo ${variable: -5}

39) ${variable:-10} 和 ${variable: -10} 有什么区别?

  • ${variable:-10} - 如果之前没有给 variable 赋值则输出 10;如果有赋值则输出该变量
  • ${variable: -10} - 输出 variable 的最后 10 个字符

40) 如何只用 echo 命令替换字符串的一部分 ?

echo ${variable//pattern/replacement}

41) 哪个命令将命令替换为大写 ?

tr '[:lower:]' '[:upper:]'

42) 如何计算本地用户数目 ?

wc -l /etc/passwd|cut -d" " -f1 或者 cat /etc/passwd|wc -l

43) 不用 wc 命令如何计算字符串中的单词数目 ?

set ${string}
echo $#

44) "export $variable" 或 "export variable" 哪个正确 ?

export variable

45) 如何列出第二个字母是 a 或 b 的文件 ?

ls -d ?[ab]*

46) 如何将整数 a 加到 b 并赋值给 c ?

c=$((a+b))

c=`expr $a + $b`

c=`echo "$a+$b"|bc`

47) 如何去除字符串中的所有空格 ?

echo $string|tr -d " "

48) 重写这个命令,将输出变量转换为复数: item="car"; echo "I like $item" ?

item="car"; echo "I like ${item}s"

49) 写出输出数字 0 到 100 中 3 的倍数(0 3 6 9 …)的命令 ?

for i in {0..100..3}; do echo $i; done

for (( i=0; i<=100; i=i+3 )); do echo "Welcome $i times"; done

50) 如何打印传递给脚本的所有参数 ?

echo $*

echo $@

51) [ $a == $b ] 和 [ $a -eq $b ] 有什么区别

  • [ $a == $b ] - 用于字符串比较
  • [ $a -eq $b ] - 用于数字比较

52) = 和 == 有什么区别

  • = - 用于为变量赋值
  • == - 用于字符串比较

53) 写出测试 $a 是否大于 12 的命令 ?

[ $a -gt 12 ]

54) 写出测试 $b 是否小于等于 12 的命令 ?

[ $b -le 12 ]

55) 如何检查字符串是否以字母 "abc" 开头 ?

[[ $string == abc* ]]

56) [[ $string == abc\* ]] 和 [[ $string == "abc*" ]] 有什么区别

  • [[ $string == abc* ]] - 检查字符串是否以字母 abc 开头
  • [[ $string == "abc*" ]] - 检查字符串是否完全等于 abc*

57) 如何列出以 ab 或 xy 开头的用户名 ?

egrep "^ab|^xy" /etc/passwd|cut -d: -f1

58) bash 中 $! 表示什么意思 ?

后台最近执行命令的 PID.

59) $? 表示什么意思 ?

前台最近命令的结束状态。

60) 如何输出当前 shell 的 PID ?

echo $$

61) 如何获取传递给脚本的参数数目 ?

echo $#

(LCTT 译注:和第3题重复了。)

62) $\* 和 $@ 有什么区别

  • $* - 以一个字符串形式输出所有传递到脚本的参数
  • $@ - 以 $IFS 为分隔符列出所有传递到脚本中的参数

63) 如何在 bash 中定义数组 ?

array=("Hi" "my" "name" "is")

64) 如何打印数组的第一个元素 ?

echo ${array[0]}

65) 如何打印数组的所有元素 ?

echo ${array[@]}

66) 如何输出所有数组索引 ?

echo ${!array[@]}

67) 如何移除数组中索引为 2 的元素 ?

unset array[2]

68) 如何在数组中添加 id 为 333 的元素 ?

array[333]="New_element"

69) shell 脚本如何获取输入的值 ?

a) 通过参数

./script param1 param2

b) 通过 read 命令

read -p "Destination backup Server : " desthost

70) 在脚本中如何使用 "expect" ?

/usr/bin/expect << EOD
spawn rsync -ar ${line} ${desthost}:${destpath}
expect "*?assword:*"
send "${password}\r"
expect eof
EOD

祝你好运 !! 如果你有任何疑问或者问题需要解答都可以在下面的评论框中写下来。让我们知道这对你的面试有所帮助:-)


via: http://linoxide.com/linux-shell-script/shell-scripting-interview-questions-answers/

作者:Petras Liumparas 译者:ictlyh 校对:wxy

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

在网络世界我们可以用电脑做所有事情,电子商务(e-commerce)即是其中之一。电子商务并不是什么新鲜事,它起源于早期的阿帕网,当时就出现了麻省理工学院和斯坦福大学人工智能实验室的学生之间的交易。

近些年出现了上百家电子商务网站,如 Flipcart, eBay, Alibaba, Zappos, IndiaMART, Amazon, 等等。你想做一个自己的亚马逊和Flipcart这样的基于web的应用程序服务器吗?如果是!这个文章正适合你。

Opencart是一个免费开源的使用PHP语言编写的电子商务程序,它可以用来架设一个类似于亚马逊和Flipcart的购物车系统。如果你想在线卖你的产品或想在关门时为你的客户提供服务,Opencart就是给你准备的。你可以使用可靠和专业Opencart应用程序建立一个成功的网上商店(网上商家)。

OpenCart 网页面板演示

------------------ 管理登录 ------------------

用户名: demo
密码: demo

Opencart的特点

Opencart是一个符合所有在线商家需求的应用程序。它具备您用来制作自己的电子商务网站的所有特性(见下文)。

  • 它是一个免费(如啤酒般免费)而开源(如言论般自由)的应用,在GNU GPL许可下发布。
  • 每个东西都有完善的文档,你不需要到谷歌喊救命。
  • 任意时间的支持和更新。
  • 支持无限数量的类别、产品和制造商。
  • 一切都是基于模板的。
  • 支持多语言和多币种。它确保你的产品遍及全球。
  • 内置产品评论和评级功能。
  • 支持可下载的产品(即电子书)。
  • 支持自动缩放图像。
  • 类似多税率(许多国家都是这样)、查看相关产品、资料页、装船重量计算,使用折扣优惠券,等等功能默认都有了。
  • 内置的备份和恢复工具。
  • 搜索引擎优化做的很好。
  • 发票打印、错误日志和销售报告等都做的很好。

系统需求

  • Web 服务器 (首选 Apache HTTP服务器)
  • PHP (5.2 或以上)
  • 数据库 (首选MySQL,但是我这里用的是MariaDB)

PHP需要的库和模块

这些扩展必须在您的系统上安装并启用,才能确保Opencart正确安装在web服务器上

  • Curl
  • Zip
  • Zlib
  • GD Library
  • Mcrypt
  • Mbstrings

第一步: 安装 Apache、 PHP 和 MariaDB

  1. 像我说的,OpenCart需要一定的技术要求,比如在系统上安装Apache,PHP扩展和数据库(MySQL或MariaDB),才能正常运行Opencart。

让我们使用命令行安装Apache,PHP和MariaDB。

安装 Apache

# apt-get install apache2        (在基于Debian系统上)
# yum install httpd          (在基于RedHat系统上)

安装 PHP and Extensions

# apt-get install php5 libapache2-mod-php5 php5-curl php5-mcrypt    (在基于Debian系统上)
# yum install php php-mysql php5-curl php5-mcrypt           (在基于RedHat系统上)

安装 MariaDB

# apt-get install mariadb-server mariadb-client             (在基于Debian系统上)
# yum install mariadb-server mariadb                    (在基于RedHat系统上)
  1. 在安装所有需要上面的东西后,你可以使用如下命令启动 Apache 和 MariaDB 服务。
------------------- 在基于Debian系统上 ------------------- 
# systemctl restart apache2.service                 
# systemctl restart mariadb.service 
------------------- 在基于RedHat系统上 ------------------- 
# systemctl restart httpd.service       
# systemctl restart mariadb.service                 

第二步:下载和设置 OpenCart

  1. 最新版本的OpenCart(2.0.2.0)可以从OpenCart 网站下载,或直接从github获得。

作为一种选择,你可以使用wget命令直接从github库下载最新版本的OpenCart,如下所示。

# wget https://github.com/opencart/opencart/archive/master.zip
  1. 下载压缩文件后,拷贝到Apache工作目录下(例如/var/www/html)然后解压缩master.zip文件。
# cp master.zip /var/www/html/
# cd /var/www/html
# unzip master.zip
  1. 提取‘master.zip’文件后,切换到提取目录下,然后移动upload目录到应用程序的根文件夹(opencart-master)
# cd opencart-master
# mv -v upload/* ../opencart-master/
  1. 现在需要重命名或复制OpenCart配置文件,如下所示。
# cp /var/www/html/opencart-master/admin/config-dist.php /var/www/html/opencart-master/admin/config.php
# cp /var/www/html/opencart-master/config-dist.php /var/www/html/opencart-master/config.php
  1. 下一步,设置/var/www/html/opencart-master的文件和文件夹正确的权限。您需要提供RWX权限给文件和文件夹,用递归方式。
# chmod 777 -R /var/www/html/opencart-master 

重要: 设置权限777可能是危险的,所以一旦你完成所有设置,递归恢复755权限到上层的文件夹。

第三步: 创建 OpenCart 数据库

  1. 下一步是给你的电子商务网站创建一个数据库(比如叫做 opencartdb)来存储数据。连接到数据库服务器并创建一个数据库和用户,并授予用户正确的权限以完全控制该数据库。
# mysql -u root -p
CREATE DATABASE opencartdb;
CREATE USER 'opencartuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEDGES ON opencartdb.* TO 'opencartuser'@'localhost' IDENTIFIED by 'mypassword';

第四步: OpenCart 网站安装

  1. 一旦所有设置正确,到web浏览器地址栏输入http://<web服务器IP地址>访问OpenCart web安装。

点击“继续”,同意许可证协议。

Accept OpenCart License

同意OpenCart许可证

  1. 下一个屏幕是安装前服务器设置检查,查看服务器所需的所有模块是否安装正确并且有OpenCart文件的权限。

如果在第1和2区域有红色标志突出显示,这意味着你需要在服务器上正确安装这些组件满足web服务器的要求。

如果在第3和4区域有红色标志突出显示,这意味着你的文件有问题。如果一切正确配置您应该看到所有都是绿色标志(见下面),你可以按“继续”。

Server Requirement Check

服务器需求检查

  1. 在下一个屏幕上输入数据库凭证信息,如数据库驱动类型、主机名、用户名、密码、数据库。你不应该改动数据库端口和前缀,除非你知道你在做什么。

另外输入管理员账号的用户名、密码和邮箱地址。注意这些凭证将用于管理员登录到Opencart管理面板,所以保证它的安全。完成后单击继续!

OpenCart Database Details

OpenCart数据库详情

  1. 下一个屏幕显示的信息如“Installation Complete”和“Ready to Start Selling”。这里还警告说,要记得删除安装目录,所有需要这个目录安装的设置已经完成。

OpenCart Installation Completes

OpenCart安装完成

删除安装目录,你可以执行下面的命令。

# rm -rf /var/www/html/opencart-master/install

第四步: 进入OpenCart 及其管理界面

  1. 现在打开浏览器到http://<web server IP address>/opencart-master/然后你会看到类似下面的截屏。

OpenCart Product Showcase

OpenCart产品示例

  1. 要登录到Opencart管理面板,你需要浏览http://<web server IP address>/opencart-master/admin然后填写之前设置的凭证。

OpenCart Admin Login

OpenCart管理登录

  1. 如果全部OK你应该可以看到Opencart的控制台。

OpenCart Dashboard

OpenCart控制台

在管理控制台可以设置很多选项,如类别、产品、选择、制造商、下载、评论、信息、扩展安装、运输、付款选项、订单总数、礼品券、贝宝、优惠券、子公司、营销、邮件、设计风格和设置、错误日志、内置分析等等。

测试了这个工具之后呢?

如果您已经测试了这个应用程序,就会发现它可定制、灵活、稳定、易于维护和使用,您可能需要一个好的主机托管提供商托管你的OpenCart应用,以便保持24 x7的在线支持。尽管有很多选择,我们建议Hostgator主机提供商。(广告硬植-.-!,以下硬广和 LCTT 无关~)

Hostgator是以服务和功能出名的域名注册和虚拟机托管提供商。它为你提供无限的磁盘空间、无限带宽、易于安装(一键安装脚本)、99.9%的正常运行时间、荣获24x7x365技术支持和45天退款保证,这意味着如果你不喜欢这个产品和服务就可以在45天内拿回你的采购费,注意这45天是一个长的测试时间。

所以如果你有什么想卖的你可以免费地去做了(我的意思是免费,想想你会花在实体存储上的费用,然后比较其与建设虚拟商店的成本。你就会感受到它的免费了)。

: 当你从Hostgator购买虚拟主机(和/或域名)你将获得一个25%折扣。这只提供给Tecmint网站的读者。

你所要做的就是在购买虚拟机支付时输入优惠码“TecMint025”。付款预览截屏优惠码以供参考用。

Hostgator 25% Discount - TecMint025

注册 Hostgator (折扣码: TecMint025)

: 还值得一提的,每个你从Hostgator购买的托管OpenCart的虚拟机,我们将得到少量的佣金,只是为了保持Tecmint存活 (通过支付带宽和托管服务器)。

所以如果你使用上面的代码买它,你得到折扣,我们会得到少量收入。还要注意,你不会支付任何额外的费用,事实上你支付的账单总额将减少25%。

总结

OpenCart是一个开箱可用的应用。它易于安装,您可以选择选择最适合的模板,添加你的产品然后你就成为了一个在线店主。

很多社区开发的扩展(有免费和付费的)使它变得丰富。这是一个给那些想要建立一个保持24X7小时用户可访问的虚拟商店的美妙应用。让我们知道你对这个应用程序的体验吧。欢迎任何建议和反馈。


via: http://www.tecmint.com/create-e-commerce-online-shopping-store-using-opencart-in-linux/

作者:Avishek Kumar 译者:wyangsun 校对:wxy

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