Avishek Kumar 发布的文章

Linux世界充满了乐趣,我们越深入进去,就会发现越多有趣的事物。我们会努力给你提供一些小技巧,让你和其他人有所不同,下面就是我们准备的3个小技巧。

1. 如何在不使用Cron的情况调度Linux下的任务

在Linux下,调度一个任务/命令称之为Cron。当我们需要调度一个任务时,我们会使用Cron,但你知道我们在不使用Cron的情况也可以调度一个在将来时间运行的任务吗?你可以按照如下建议操作……

每5秒钟运行一个命令(date)然后将结果写入到一个文件(data.txt)。为了实现这一点,我们可以直接在命令提示符运行如下单行脚本。

$ while true; do date >> date.txt ; sleep 5 ; done &

上述脚本的解释:

  • while true :让脚本进入一个条件总为真的循环中,也就是制造一个死循环,将里边的命令一遍遍地重复运行。
  • dodowhile语句中的关键字,它之后的命令会被执行,在它后边可以放置一个或一系列命令。
  • date >> date.txt :运行date命令,并将其输出写入到data.txt文件中。注意我们使用>>,而不是>
  • >> :对文件(date.txt)进行追加写的操作,这样每次运行命令后,输出内容会被追加到文件中。如果使用>的话,则会一遍遍地覆盖之前的内容。
  • sleep 5 :让脚本处于5秒睡眠状态,然后再运行之后的命令。注意这里的时间单位只能用秒。也就是说如果你想让命令每6分钟运行一次,你应该使用sleep 360
  • donewhile循环语句块结束的标记。
  • & :将整个进程放到后台运行。

类似地,我们可以这样运行任何脚本。下边的例子是每100秒运行一个名为script_name.sh的脚本。

另外值得一提的是上面提到的脚本文件必须处于当前目录中,否则需要使用完整路径(/home/$USER/…/script_name.sh)。实现如上功能的单行脚本如下:

$ while true; do /bin/sh script_name.sh ; sleep 100 ; done &

总结:上述的单行脚本并不是Cron的替代品,因为Cron工具支持众多选项,更加灵活,可定制性也更高。然而如果我们想运行某些测试,比如I/O评测,上述的单行脚本也管用。

还可以参考:Linux 下 11 个定时调度任务例子

2. 如何不使用clear命令清空终端的内容

你如何清空终端的内容?你可能会认为这是一个傻问题。好吧,大家都清楚可以使用clear命令。如果养成使用ctrl + l快捷键的习惯,我们会节省大量时间。

Ctrl + l快捷键的效果和clear命令一样。所以下一次你就可以使用ctrl + l来清空终端的内容了。

总结:因为ctrl + l是一个快捷键,我们不可以在脚本中使用。所以如果我们需要在脚本中清空屏幕内容,还是需要使用clear命令。但我能想到的所有其他情况,ctrl + l都更加有效。

3. 在其它目录运行一个命令,然后自动返回当前工作目录

这是一个很多人可能不知道的令人吃惊的技巧。你可能想在其它目录运行任何一个命令,然后再回到当前目录。要实现这样的目的,你只需要将命令放在一个圆括号里。

我们来看一个例子:

avi@deb:~$ (cd /home/avi/Downloads/)

示例输出:

 avi@deb:~

它首先会cd到Downloads目录,然后又回到了之前的家目录。也许你认为里边的命令根本没有执行,或者是出了某种错误,因为从命令提示符看不出任何变化。让我们简单修改一下这个命令:

avi@deb:~$ (cd /home/avi/Downloads/ && ls -l)

示例输出:

-rw-r-----  1 avi  avi     54272 May  3 18:37 text1.txt
-rw-r-----  1 avi  avi     54272 May  3 18:37 text2.txt
-rw-r-----  1 avi  avi     54272 May  3 18:37 text3.txt
avi@deb:~$

在上述命令中,它首先进入Downloads目录,然后列出文件内容,最后又回到了当前目录。并且它证明了命令成功执行了。你可以在括号中包含任何命令,执行完都会顺利返回到当前目录。

这就是全部内容了,如果你知道任何类似的Linux技巧,你可以在文章下面的评论框中分享给我们,不要忘记将本文和朋友分享 :)


via: http://www.tecmint.com/useful-linux-hacks-commands/

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

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

像任何其他的操作系统一样,GNU/Linux 已经实现的内存管理不仅有效,而且更好。但是,如果有任何进程正在蚕食你的内存,而你想要清除它的话,Linux 提供了一个刷新或清除RAM缓存方法。

Clear RAM Cache and Swap in Linux

如何在 Linux 中清除缓存(Cache)?

每个 Linux 系统有三种选项来清除缓存而不需要中断任何进程或服务。

(LCTT 译注:Cache,译作“缓存”,指 CPU 和内存之间高速缓存。Buffer,译作“缓冲区”,指在写入磁盘前的存储再内存中的内容。在本文中,Buffer 和 Cache 有时候会通指。)

  1. 仅清除页面缓存(PageCache)
# sync; echo 1 > /proc/sys/vm/drop_caches       
  1. 清除目录项和inode
# sync; echo 2 > /proc/sys/vm/drop_caches       
  1. 清除页面缓存,目录项和inode
# sync; echo 3 > /proc/sys/vm/drop_caches 

上述命令的说明:

sync 将刷新文件系统缓冲区(buffer),命令通过“;”分隔,顺序执行,shell在执行序列中的下一个命令之前会等待命令的终止。正如内核文档中提到的,写入到drop\_cache将清空缓存而不会杀死任何应用程序/服务,echo命令做写入文件的工作。

如果你必须清除磁盘高速缓存,第一个命令在企业和生产环境中是最安全,"...echo 1> ..."只会清除页面缓存。 在生产环境中不建议使用上面的第三个选项"...echo 3 > ..." ,除非你明确自己在做什么,因为它会清除缓存页,目录项和inodes。

在Linux上释放也许被内核所使用的缓冲区(Buffer)和缓存(Cache)是否是个好主意?

当你设置许多设定想要检查效果时,如果它实际上是专门针对 I/O 范围的基准测试,那么你可能需要清除缓冲区和缓存。你可以如上所示删除缓存,无需重新启动系统(即无需停机)。

Linux被设计成它在寻找磁盘之前到磁盘缓存寻找的方式。如果它发现该资源在缓存中,则该请求不会发送到磁盘。如果我们清理缓存,磁盘缓存就起不到作用了,系统会到磁盘上寻找资源。

此外,当清除缓存后它也将减慢系统运行速度,系统会将每一个被请求的资源再次加载到磁盘缓存中。

现在,我们将创建一个 shell 脚本,通过一个 cron 调度任务在每天下午2点自动清除RAM缓存。如下创建一个 shell 脚本 clearcache.sh 并在其中添加以下行:

#!/bin/bash
# 注意,我们这里使用了 "echo 3",但是不推荐使用在产品环境中,应该使用 "echo 1"
echo "echo 3 > /proc/sys/vm/drop_caches"

给clearcache.sh文件设置执行权限

# chmod 755 clearcache.sh

现在,当你需要清除内存缓存时只需要调用脚本。

现在设置一个每天下午2点的定时任务来清除RAM缓存,打开crontab进行编辑。

# crontab -e

添加以下行,保存并退出。

0 3 * * * /path/to/clearcache.sh

有关如何创建一个定时任务,更多细节你可以查看我们的文章 11 个定时调度任务的例子

在生产环境的服务器上自动清除RAM是否是一个好主意?

不!它不是。想想一个情况,当你已经预定脚本在每天下午2点来清除内存缓存。那么其时该脚本会执行并刷新你的内存缓存。在某一天由于某些原因,可能您的网站的在线用户会超过预期地从你的服务器请求资源。

而在这时,按计划调度的脚本运行了,并清除了缓存中的一切。当所有的用户都从磁盘读取数据时,这将导致服务器崩溃并损坏数据库。因此,清除缓存仅在必要时并且在你的预料之中,否则你就是个呆瓜系统管理员。

如何清除Linux的交换空间?

如果你想清除掉的空间,你可以运行下面的命令:

# swapoff -a && swapon -a

此外,了解有关风险后,您可以将上面的命令添加到cron中。

现在,我们将上面两种命令结合成一个命令,写成正确的脚本来同时清除RAM缓存和交换空间。

# echo 3 > /proc/sys/vm/drop_caches && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'

su -c 'echo 3 > /proc/sys/vm/drop_caches' && swapoff -a && swapon -a && printf '\n%s\n' 'Ram-cache and Swap Cleared'

在测试上面的命令之前,我们在执行脚本前后运行“free -m” 来检查缓存。

Clear RAM Cache and Swap Space

就是这样,如果你喜欢这篇文章,不要忘记向我们提供您宝贵的意见,让我们知道,您认为在企业和生产环境中清除内存缓存和缓冲区是否是一个好主意?


via: http://www.tecmint.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/

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

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

我们经常需要到检查家里与办公室之间的网络是否连通,那么我们要怎么做呢?打开网站Speedtest.net然后开始测试。网站是通过加载浏览器中的JavaScript脚本然后选择最佳的服务器测速然后用Flash产生图形化的结果。

那么远程服务器呢?要知道大多数远程服务器是没有浏览器可以打开web页面的。用浏览器打开网页测速的瓶颈就在此,你不能按计划的对服务器进行定期的常规测试。这时需要到一个名为Speedtest-cli的软件来打破这个瓶颈,它能让你通过命令行来测试互联网连接的速度。

Speedtest-cli是什么

此程序是基于Python开发的脚本程序,利用了speedtest.net的服务来测量出上下行的宽带。Speedtest-cli能根据机房离测速服务器的物理距离来列出测速服务器,或者针对某一服务器进行测速,同时还能为你生成一个URL以便你分享你的测速结果。

要在Linux上安装最新版本的speedtest-cli,你必须安装2.4-3.4或者更高版本的Python。

在Linux上安装speedtest-cli

有两种方法可以安装speedtest-cli。第一种方法需要用到python-pip包管理器,第二种方法需要安装Python脚本,生成安装文件然后运行,这里我们分别介绍两种方法:

使用pythin-pip安装speedtest-cli

首先你需要安装python-pip包管理器,之后你就可以用pip命令来安装speedtest-cli

$ sudo apt-get install python-pip
$ sudo pip install speedtest-cli

如果要把speedtest-cli升级至最新版本,你需要输入以下命令

$ sudo pip install speedtest-cli --upgrade

通过Pyhton脚本来安装speedtest-cli

首先要用wget命令从github上下来Python脚本,然后解压提取下载的文件(master.zip)

$ wget https://github.com/sivel/speedtest-cli/archive/master.zip
$ unzip master.zip 

提取出文件后,进入提取出的目录speedtest-cli-master然后使脚本可以执行。

$ cd speedtest-cli-master/
$ chmod 755 speedtest_cli.py 

下一步,把可执行的脚本移动到/usr/bin文件夹,这样你就不用每次都输入完整的脚本路径了。

$ sudo mv speedtest_cli.py /usr/bin/

用speedtest-cli测试互联网连通速度

1. 要测试你的下载与上传速度,只需要运行speedtest-cli命令,不需要带参数。

$ speedtest_cli.py

Test Download Upload Speed in Linux

在Linux下测试上传下载速度

2. 测试上传下载的速度(以字节计算)

$ speedtest_cli.py --bytes

Test Internet Speed in Bytes

测试bytes的速度

3. 工具提供一个链接来下载由你的宽带测试结果生成的图片,你可以分享给你的家人朋友。

Share Internet Speed Results

分享测速结果

下面的图片就是你通过以上的命令行测速而生成的图片

Speed Test Results

测速结果

4.如果你仅仅需要Ping,上传,下载的结果,就运行以下命令:

$ speedtest_cli.py --simple

Test Ping Download Upload Speed

测试Ping,上传,下载的速度

5. 列出speedtest.net所有的服务器距离你的物理距离,单位是千米(km)

$ speedtest_cli.py --list

Check Speedtest.net Servers

列出Speedtest.net的服务器

6. 当获得一个非常长的服务器列表之后,怎么列出我想要的某个服务器?如果我要在speedtest.net服务器列表中找出位于Mumbai(印度)的服务器呢?

$ speedtest_cli.py --list | grep -i Mumbai

Check Nearest Server

列出最近的服务器

7. 对指定的服务器进行测速。我们使用上面例子5和例子6中获取的服务器ID:

$ speedtest_cli.py --server [server ID]
$ speedtest_cli.py --server [5060]              ## 这里使用服务器ID为5060作为例子

Test Connection Against Server

对指定的服务器进行测速

8. 输出speedtest-cli的版本信息和帮助文档

$ speedtest_cli.py --version

Check SpeedCli Version

输出版本号

$ speedtest_cli.py --help

SpeedCli Help

输出帮助文档

提醒:报告中的延迟并不是确切的结果,不应该过于依赖它;这个数值可以当作相对延迟,这对你选择某一测试服务器来说是可靠的。同时,CPU和内存的容量会影响结果的准确度。

结论

系统管理员和开发者应该必备这个简单的脚本工具,这个轻量级的工具功能齐全,真是太赞了。我不喜欢Speedtest.net的原因是它使用来flash,相反speedtest-cli刚好戳中了我的痛点。

speedtest\_cli是一个第三方工具,也不能自动地记录下宽带速度。Speedtest.net拥有上百万的用户,你可以自己配制一个小型的测速服务器

上面就是所有内容,更多内容敬请关注我们。如果你有任何反馈记得在文章下方评论,如果你喜欢别忘了给我们点个赞,分享我们的文章。


via: http://www.tecmint.com/check-internet-speed-from-command-line-in-linux/

作者:Avishek Kumar 译者:NearTan 校对: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中国 荣誉推出

'!'符号在Linux中不但可以用作否定符号,还可以用来从历史命令记录中取出命令或不加修改的执行之前运行的命令。下面的所有命令都已经在Bash Shell中经过确切地检验。尽管我没有试过,但大多都不能在别的Shell中运行。这里我们介绍下Linux命令行中符号'!'那惊人和奇妙的用法。

1. 使用数字从历史命令列表中找一条命令来执行

您也许没有意识到您可以从历史命令列表(之前已经执行的命令集)中找出一条来运行。首先,通过"history"命令查找之前命令的序号。

$ history

使用history命令找到最后执行的命令

使用history命令找到最后执行的命令

现在,只需要使用历史命令输出中显示在该命令前面的数字便可以运行这个命令。例如,运行一个在history输出中编号是1551的命令。

$ !1551

使用命令ID来执行最后运行的命令

使用命令ID来执行最后运行的命令

这样,编号为1551的命令(上面的例子是top命令)便运行了。这种通过ID号来执行之前的命令的方式很有用,尤其是在这些命令都很长的情况下。您只需要使用![history命令输出的序号]便可以调用它。

2. 运行之前的倒数第二个、第七个命令等

您可以以另一种方式来运行之前执行的命令,通过使用-1代表最后的命令,-2代表倒数第二个命令,-7代表倒数第七个命令等。

首先使用history命令来获得执行过的命令的列表。history命令的执行很有必要,因为您可以通过它来确保没有rm command > file或其他会导致危险的命令。接下来执行倒数第六个、第八个、第十个命令。

$ history
$ !-6
$ !-8
$ !-10

通过负数序号运行之前执行的命令

通过负数序号运行之前执行的命令

3. 传递最后执行的命令的参数,以方便的运行新的命令

我需要显示/home/$USER/Binary/firefox文件夹的内容,因此我执行:

$ ls /home/$USER/Binary/firefox

接下来,我意识到我应该执行'ls -l'来查看哪个文件是可执行文件。因此我应该重新输入整个命令么?不,我不需要。我仅需要在新的命令中带上最后的参数,类似:

$ ls -l !$

这里!$将把最后执行的命令的参数传递到这个新的命令中。

将上一个命令的参数传递给新命令

将上一个命令的参数传递给新命令

4. 如何使用!来处理两个或更多的参数

比如说我在桌面创建了一个文本文件file1.txt。

$ touch /home/avi/Desktop/1.txt

然后在cp命令中使用绝对路径将它拷贝到/home/avi/Downloads

$ cp /home/avi/Desktop/1.txt /home/avi/downloads

这里,我们给cp命令传递了两个参数。第一个是/home/avi/Desktop/1.txt,第二个是/home/avi/Downloads。让我们分别处理他们,使用echo [参数]来打印两个不同的参数。

$ echo "1st Argument is : !^"
$ echo "2nd Argument is : !cp:2"

注意第一个参数可以使用"!^"进行打印,其余的命令可以通过"![命令名]:[参数编号]"打印。

在上面的例子中,第一个命令是cp,第二个参数也需要被打印。因此是"!cp:2",如果任何命令比如xyz运行时有5个参数,而您需要获得第四个参数,您可以使用"!xyz:4"。所有的参数都可以通过"!*"来获得。

处理两个或更多的参数

处理两个或更多的参数

5. 以关键字为基础执行上个的命令

我们可以以关键字为基础执行上次执行的命令。可以从下面的例子中理解:

$ ls /home > /dev/null                      [命令1]
$ ls -l /home/avi/Desktop > /dev/null                       [命令2]   
$ ls -la /home/avi/Downloads > /dev/null                    [命令3]
$ ls -lA /usr/bin > /dev/null                       [命令4]

上面我们使用了同样的命令(ls),但有不同的开关和不同的操作文件夹。而且,我们还将输出传递到/dev/null,我们并未显示输出,因而终端依旧很干净。

现在以关键字为基础执行上个的命令。

$ ! ls                  [命令1]
$ ! ls -l               [命令2]   
$ ! ls -la              [命令3]
$ ! ls -lA              [命令4]

检查输出,您将惊奇发现您仅仅使用关键字ls便执行了您已经执行过的命令。

以关键字为基础执行命令

以关键字为基础执行命令

(LCTT 译注:澄清一下,这种用法会按照命令名来找到最后匹配的命令,不会匹配参数。所以上述执行的四个命令都是执行了 ls -lA /usr/bin > /dev/null,并增加了新的参数而已。)

6. !!操作符的威力

您可以使用(!!)运行/修改您上个运行的命令。它将附带一些修改/调整并调用上个命令。让我给您展示一些实际情境。

昨天我运行了一行脚本来获得我的私有IP,因此我执行了:

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/

接着,我突然发现我需要将上面脚本的输出重定向到一个ip.txt的文件,因此,我该怎么办呢?我该重新输入整个命令并重定向到一个文件么?一个简单的解决方案是使用向上光标键并添加'> ip.txt'来将输出重定向到文件。

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt

在这里要感谢救世主"向上光标键"。现在,考虑下面的情况,这次我运行了下面这一行脚本。

$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:

一旦我运行了这个脚本,Bash提示符便返回了错误消息"bash: ifconfig: command not found"。原因并不难猜,我运行了本应以root权限的运行的命令。

所以,怎么解决呢?以root用户登录并且再次键入整个命令就太麻烦了!而且向上导航键也不管用了(LCTT 译注:当你以新的用户身份登录了,是不能用向上光标键找到之前的另外一个用户的命令历史的)。因此,我们需要调用"!!"(去掉引号),它将为那个用户调用上个命令。

$ su -c !! root

这里su是用来切换到root用户的,-c用来以某用户运行特定的命令,最重要的部分是!!,它将被替换为上次运行的命令。当然!您需要提供root密码。

!!操作符的威力

!!操作符的威力

我通常在下面的情景中使用!!

当我用普通用户来运行apt-get,我通常收到提示说我没有权限来执行。

$ apt-get upgrade && apt-get dist-upgrade

好吧,有错误。但别担心,使用下面的命令来成功的执行...

$ su -c !!

同样的适用于:

$ service apache2 start

$ /etc/init.d/apache2 start

$ systemctl start apache2

普通用户不被授权执行那些任务,这样相当于我运行:

$ su -c 'service apache2 start'

$ su -c '/etc/init.d/apache2 start'

$ su -c 'systemctl start apache2'

(LCTT 译注:使用!!之前,一定要确认你执行的是什么命令!另外,在 root 身份下,千万不要养成使用它的习惯,因为你总是会在不合适的目录执行不合适的命令!)

7.运行一个影响所有除了![FILE\_NAME]的文件命令

!(逻辑非)能用来对除了'!'后的文件的所有的文件/扩展名执行命令。

(LCTT 译注:该功能需要用 shopt 设置 extglob 模式: shopt -s extglob 才行。)

A.从文件夹移除所有文件,2.txt除外。

$ rm !(2.txt)

B.从文件夹移除所有的文件类型,pdf类型除外。

$ rm !(*.pdf)

8.检查某个文件夹(比如/home/avi/Tecmint)是否存在?并打印

这里,我们使用'! -d'来验证文件夹是否存在,当文件夹不存在时,将使用其后跟随AND操作符(&&)进行打印,当文件夹存在时,将使用OR操作符(||)进行打印。

逻辑上,当[ ! -d /home/avi/Tecmint ]的输出为0时,它将执行AND逻辑符后面的内容,否则,它将执行OR逻辑符(||)后面的内容。

$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'

9.检查某文件夹是否存在?如果不存在则退出该命令

类似于上面的情况,但这里当期望的文件夹不存在时,该命令会退出。

$ [ ! -d /home/avi/Tecmint ] && exit

10.如果您的home文件夹内不存在一个文件夹(比方说test),则创建它

这是脚本语言中的一个常用的实现,当期望的文件夹不存在时,创建一个。

[ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint

这便是全部了。如果您知道或偶尔遇到其他值得了解的'!'使用方法,请您在反馈的地方给我们提建议。保持联系!


via: http://www.tecmint.com/mysterious-uses-of-symbol-or-operator-in-linux-commands/

作者:Avishek Kumar 译者:wwy-hust 校对:wxy

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

SUSE( Software and System Entwicklung,即软件和系统开发。其中‘entwicklung‘是德语,意为开发)Linux 是由 Novell 公司在 Linux 内核基础上建立的操作系统。SUSE Linux 有两个发行分支。其中之一名为 openSUSE,这是一款自由而且免费的操作系统 (free as in speech as well as free as in wine)。该系统由开源社区开发维护,支持一些最新版本的应用软件,其最新的稳定版本为 13.2。

另外一个分支是 SUSE Linux 企业版。该分支是一个为企业及商业化产品设计的 Linux 发行版,包含了大量的企业应用以及适用于商业产品生产环境的特性。其最新的稳定版本为 12。

以下的链接包含了安装企业版 SUSE Linux 服务器的详细信息。

Zypper 和 Yast 是 SUSE Linux 平台上的软件包管理工具,他们的底层使用了 RPM(LCTT 译者注:RPM 最初指 Redhat Pacakge Manager ,现普遍解释为递归短语 RPM Package Manager 的缩写)。

Yast(Yet another Setup Tool )是 OpenSUSE 以及企业版 SUSE 上用于系统管理、设置和配置的工具。

Zypper 是软件包管理器ZYpp的命令行接口,可用于安装、删除SUSE Linux上的软件以及进行系统更新。ZYpp为Zypper和Yast提供底层支持。

本文将介绍实际应用中常见的一些Zypper命令。这些命令用来进行安装、更新、删除等任何软件包管理器所能够胜任的工作。

重要 : 切记所有的这些命令都将在系统全局范围内产生影响,所以必须以 root 身份执行,否则命令将失败。

获取基本的 Zypper 帮助信息

  1. 不带任何选项的执行 zypper, 将输出该命令的全局选项以及子命令列表(LCTT 译者注:全局选项,global option,控制台命令的输入分为可选参数和位置参数两大类。按照习惯,一般可选参数称为选项'option',而位置参数称为参数 'argument')。
#  zypper
    Usage:
    zypper [--global-options]
  1. 获取一个具体的子命令的帮助信息,比如 'in' (install),可以执行下面的命令
# zypper help in

或者

# zypper help install
install (in) [options] {capability | rpm_file_uri}

Install packages with specified capabilities or RPM files with specified
location. A capability is NAME[.ARCH][OP], where OP is one
of <, <=, =, >=, >.

  Command options:
--from <alias|#|URI>    Select packages from the specified repository.
-r, --repo <alias|#|URI>    Load only the specified repository.
-t, --type            Type of package (package, patch, pattern, product, srcpackage).
                            Default: package.
-n, --name                  Select packages by plain name, not by capability.
-C, --capability            Select packages by capability.
-f, --force                 Install even if the item is already installed (reinstall),
                            downgraded or changes vendor or architecture.
    --oldpackage            Allow to replace a newer item with an older one.
                            Handy if you are doing a rollback. Unlike --force
                            it will not enforce a reinstall.
    --replacefiles          Install the packages even if they replace files from other,
                            already installed, packages. Default is to treat file conflicts
                            as an error. --download-as-needed disables the fileconflict check.
...... 
  1. 安装之前搜索一个安转包(以 gnome-desktop 为例 )
# zypper se gnome-desktop

Retrieving repository 'openSUSE-13.2-Debug' metadata ............................................................[done]
Building repository 'openSUSE-13.2-Debug' cache .................................................................[done]
Retrieving repository 'openSUSE-13.2-Non-Oss' metadata ......................................................... [done]
Building repository 'openSUSE-13.2-Non-Oss' cache ...............................................................[done]
Retrieving repository 'openSUSE-13.2-Oss' metadata ..............................................................[done]
Building repository 'openSUSE-13.2-Oss' cache ...................................................................[done]
Retrieving repository 'openSUSE-13.2-Update' metadata ...........................................................[done]
Building repository 'openSUSE-13.2-Update' cache ................................................................[done]
Retrieving repository 'openSUSE-13.2-Update-Non-Oss' metadata ...................................................[done]
Building repository 'openSUSE-13.2-Update-Non-Oss' cache ........................................................[done]
Loading repository data...
Reading installed packages...

S | Name                                  | Summary                                                   | Type
--+---------------------------------------+-----------------------------------------------------------+-----------
  | gnome-desktop2-lang                   | Languages for package gnome-desktop2                      | package
  | gnome-desktop2                        | The GNOME Desktop API Library                             | package
  | libgnome-desktop-2-17                 | The GNOME Desktop API Library                             | package
  | libgnome-desktop-3-10                 | The GNOME Desktop API Library                             | package
  | libgnome-desktop-3-devel              | The GNOME Desktop API Library -- Development Files        | package
  | libgnome-desktop-3_0-common           | The GNOME Desktop API Library -- Common data files        | package
  | gnome-desktop-debugsource             | Debug sources for package gnome-desktop                   | package
  | gnome-desktop-sharp2-debugsource      | Debug sources for package gnome-desktop-sharp2            | package
  | gnome-desktop2-debugsource            | Debug sources for package gnome-desktop2                  | package
  | libgnome-desktop-2-17-debuginfo       | Debug information for package libgnome-desktop-2-17       | package
  | libgnome-desktop-3-10-debuginfo       | Debug information for package libgnome-desktop-3-10       | package
  | libgnome-desktop-3_0-common-debuginfo | Debug information for package libgnome-desktop-3_0-common | package
  | libgnome-desktop-2-17-debuginfo-32bit | Debug information for package libgnome-desktop-2-17       | package
  | libgnome-desktop-3-10-debuginfo-32bit | Debug information for package libgnome-desktop-3-10       | package
  | gnome-desktop-sharp2                  | Mono bindings for libgnome-desktop                        | package
  | libgnome-desktop-2-devel              | The GNOME Desktop API Library -- Development Files        | packag
  | gnome-desktop-lang                    | Languages for package gnome-desktop                       | package
  | libgnome-desktop-2-17-32bit           | The GNOME Desktop API Library                             | package
  | libgnome-desktop-3-10-32bit           | The GNOME Desktop API Library                             | package
  | gnome-desktop                         | The GNOME Desktop API Library                             | srcpackage
  1. 获取一个模式包的信息(以 lamp\_server 为例)。
# zypper info -t pattern lamp_server

Loading repository data...
Reading installed packages...

Information for pattern lamp_server:
------------------------------------
Repository: openSUSE-13.2-Update
Name: lamp_server
Version: 20141007-5.1
Arch: x86_64
Vendor: openSUSE
Installed: No
Visible to User: Yes
Summary: Web and LAMP Server
Description: 
  Software to set up a Web server that is able to serve static, dynamic, and interactive content (like a Web shop). This includes Apache HTTP Server, the database management system MySQL,
  and scripting languages such as PHP, Python, Ruby on Rails, or Perl.
Contents:

S | Name                          | Type    | Dependency
--+-------------------------------+---------+-----------
  | apache2-mod_php5              | package |
  | php5-iconv                    | package |
i | patterns-openSUSE-base        | package |
i | apache2-prefork               | package |
  | php5-dom                      | package |
  | php5-mysql                    | package |
i | apache2                       | package |
  | apache2-example-pages         | package |
  | mariadb                       | package |
  | apache2-mod_perl              | package |
  | php5-ctype                    | package |
  | apache2-doc                   | package |
  | yast2-http-server             | package |
  | patterns-openSUSE-lamp_server | package |
  1. 开启一个Zypper Shell 的会话。
# zypper shell 

或者

# zypper sh 
zypper> help
  Usage:
    zypper [--global-options]

注意:在 Zypper shell里面可以通过键入 ‘help‘ 获得全局选项以及子命令的列表。

Zypper 软件库管理

列举已定义的软件库

  1. 使用 'zypper repos' 或者 'zypper lr' 来列举所有已定以的软件库。
# zypper repos

或者

# zypper lr
  | Alias                     | Name                               | Enabled | Refresh
--+---------------------------+------------------------------------+---------+--------
1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No
2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes
3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes
4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes
5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes
6 | repo-oss                  | openSUSE-13.2-Oss                  | Yes     | Yes
7 | repo-source               | openSUSE-13.2-Source               | No      | Yes
8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes
9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes
  1. 在表格里面显示 zypper URI
# zypper lr -u
  | Alias                     | Name                               | Enabled | Refresh | URI
--+---------------------------+------------------------------------+---------+---------+----------------------------------------------------------------
1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No      | cd:///?devices=/dev/disk/by-id/ata-VBOX_CD-ROM_VB2-01700376
2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes     | http://download.opensuse.org/debug/distribution/13.2/repo/oss/
3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes     | http://download.opensuse.org/debug/update/13.2/
4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes     | http://download.opensuse.org/debug/update/13.2-non-oss/
5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes     | http://download.opensuse.org/distribution/13.2/repo/non-oss/
6 | repo-oss                  | openSUSE-13.2-Oss                  | Yes     | Yes     | http://download.opensuse.org/distribution/13.2/repo/oss/
7 | repo-source               | openSUSE-13.2-Source               | No      | Yes     | http://download.opensuse.org/source/distribution/13.2/repo/oss/
8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes     | http://download.opensuse.org/update/13.2/
9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes     | http://download.opensuse.org/update/13.2-non-oss/
  1. 根据优先级列举软件库。
# zypper lr -P
  | Alias                     | Name                               | Enabled | Refresh | Priority
--+---------------------------+------------------------------------+---------+---------+---------
1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No      |   99
2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes     |   99
3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes     |   99
4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes     |   99
5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes     |   85
6 | repo-oss                  | openSUSE-13.2-Oss                  | Yes     | Yes     |   99
7 | repo-source               | openSUSE-13.2-Source               | No      | Yes     |   99
8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes     |   99
9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes     |   99

刷新软件库

  1. 使用 'zypper refresh' or 'zypper ref' 来刷新 zypper 软件库。
# zypper refresh 

或者

# zypper ref
Repository 'openSUSE-13.2-0' is up to date.
Repository 'openSUSE-13.2-Debug' is up to date.
Repository 'openSUSE-13.2-Non-Oss' is up to date.
Repository 'openSUSE-13.2-Oss' is up to date.
Repository 'openSUSE-13.2-Update' is up to date.
Repository 'openSUSE-13.2-Update-Non-Oss' is up to date.
All repositories have been refreshed. 
  1. 刷新一个指定的软件库(以 'repo-non-oss' 为例 )。
# zypper refresh repo-non-oss
Repository 'openSUSE-13.2-Non-Oss' is up to date.
Specified repositories have been refreshed. 
  1. 强制更新一个软件库(以 'repo-non-oss' 为例 )。
# zypper ref -f repo-non-oss 
Forcing raw metadata refresh
Retrieving repository 'openSUSE-13.2-Non-Oss' metadata ............................................................[done]
Forcing building of repository cache
Building repository 'openSUSE-13.2-Non-Oss' cache ............................................................[done]
Specified repositories have been refreshed.

修改软件库

本文中我们使用‘zypper modifyrepo‘ 或者 ‘zypper mr‘ 来关闭或者开启 zypper 软件库。

  1. 在关闭一个软件库之前,我们需要知道在 zypper 中,每一个软件库有一个唯一的标示数字与之关联,该数字用于打开或者关闭与之相联系的软件库。假设我们需要关闭 'repo-oss' 软件库,那么我们可以通过以下的法来获得该软件库的标志数字。
# zypper lr
  | Alias                     | Name                               | Enabled | Refresh
--+---------------------------+------------------------------------+---------+--------
1 | openSUSE-13.2-0           | openSUSE-13.2-0                    | Yes     | No
2 | repo-debug                | openSUSE-13.2-Debug                | Yes     | Yes
3 | repo-debug-update         | openSUSE-13.2-Update-Debug         | No      | Yes
4 | repo-debug-update-non-oss | openSUSE-13.2-Update-Debug-Non-Oss | No      | Yes
5 | repo-non-oss              | openSUSE-13.2-Non-Oss              | Yes     | Yes
6 | repo-oss                  | openSUSE-13.2-Oss                  | No      | Yes
7 | repo-source               | openSUSE-13.2-Source               | No      | Yes
8 | repo-update               | openSUSE-13.2-Update               | Yes     | Yes
9 | repo-update-non-oss       | openSUSE-13.2-Update-Non-Oss       | Yes     | Yes

从以上输出的列表中我们可以看到 'repo-oss' 库的标示数字是 6,因此通过以下的命令来关闭该库。

# zypper mr -d 6
Repository 'repo-oss' has been successfully disabled.
  1. 如果需要再次开启软件库 ‘repo-oss‘, 接上例,与之相关联的标示数字为 6。
# zypper mr -e 6
Repository 'repo-oss' has been successfully enabled.
  1. 针对某一个软件库(以 'repo-non-oss' 为例 )开启自动刷新( auto-refresh )和 rpm 缓存,并设置该软件库的优先级,比如85。
# zypper mr -rk -p 85 repo-non-oss
Repository 'repo-non-oss' priority has been left unchanged (85)
Nothing to change for repository 'repo-non-oss'.
  1. 对所有的软件库关闭 rpm 文件缓存。
# zypper mr -Ka
RPM files caching has been disabled for repository 'openSUSE-13.2-0'.
RPM files caching has been disabled for repository 'repo-debug'.
RPM files caching has been disabled for repository 'repo-debug-update'.
RPM files caching has been disabled for repository 'repo-debug-update-non-oss'.
RPM files caching has been disabled for repository 'repo-non-oss'.
RPM files caching has been disabled for repository 'repo-oss'.
RPM files caching has been disabled for repository 'repo-source'.
RPM files caching has been disabled for repository 'repo-update'.
RPM files caching has been disabled for repository 'repo-update-non-oss'.
  1. 对所有的软件库开启 rpm 文件缓存。
# zypper mr -ka
RPM files caching has been enabled for repository 'openSUSE-13.2-0'.
RPM files caching has been enabled for repository 'repo-debug'.
RPM files caching has been enabled for repository 'repo-debug-update'.
RPM files caching has been enabled for repository 'repo-debug-update-non-oss'.
RPM files caching has been enabled for repository 'repo-non-oss'.
RPM files caching has been enabled for repository 'repo-oss'.
RPM files caching has been enabled for repository 'repo-source'.
RPM files caching has been enabled for repository 'repo-update'.
RPM files caching has been enabled for repository 'repo-update-non-oss'.
  1. 关闭远程库的 rpm 文件缓存
# zypper mr -Kt
RPM files caching has been disabled for repository 'repo-debug'.
RPM files caching has been disabled for repository 'repo-debug-update'.
RPM files caching has been disabled for repository 'repo-debug-update-non-oss'.
RPM files caching has been disabled for repository 'repo-non-oss'.
RPM files caching has been disabled for repository 'repo-oss'.
RPM files caching has been disabled for repository 'repo-source'.
RPM files caching has been disabled for repository 'repo-update'.
RPM files caching has been disabled for repository 'repo-update-non-oss'.
  1. 开启远程软件库的 rpm 文件缓存。
# zypper mr -kt
RPM files caching has been enabled for repository 'repo-debug'.
RPM files caching has been enabled for repository 'repo-debug-update'.
RPM files caching has been enabled for repository 'repo-debug-update-non-oss'.
RPM files caching has been enabled for repository 'repo-non-oss'.
RPM files caching has been enabled for repository 'repo-oss'.
RPM files caching has been enabled for repository 'repo-source'.
RPM files caching has been enabled for repository 'repo-update'.
RPM files caching has been enabled for repository 'repo-update-non-oss'.

增加新的软件库

可以通过这两个 zypper 指令 – 'zypper addrepo' 和 'zypper ar' 来增加新的软件库。在此过程中可以使用 URL 或者软件库的别名。

  1. 增加一个新的软件库( 以 “http://download.opensuse.org/update/12.3/” 为例 )。
# zypper ar http://download.opensuse.org/update/11.1/ update
Adding repository 'update' .............................................................................................................................................................[done]
Repository 'update' successfully added
Enabled     : Yes
Autorefresh : No
GPG check   : Yes
URI         : http://download.opensuse.org/update/11.1/
  1. 更改一个软件库的名字,这将仅仅改变软件库的别名。 命令 'zypper namerepo' 或者 'zypperr nr' 可以胜任此工作。例如更改标示数字为10的软件库的名字为 'upd8',或者说将标示数字为10的软件库的别名改为 'upd8',可以使用下面的命令。
# zypper nr 10 upd8
Repository 'update' renamed to 'upd8'.

删除软件库

  1. 删除一个软件库。要从系统删除一个软件库可以使 'zypper removerepo' 或者 'zypper rr'。例如以下的命令可以删除软件库 'upd8'
# zypper rr upd8
# Removing repository 'upd8' .........................................................................................[done]
Repository 'upd8' has been removed.

使用 zypper 进行软件包管理

用 zypper 安装一个软件包

  1. 在 zypper 中,我们可以通过软件包的功能名称来安装一个软件包。以 Firefox 为例,以下的命令可以用来安装该软件包。
# zypper in MozillaFirefox
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 128 NEW packages are going to be installed:
  adwaita-icon-theme at-spi2-atk-common at-spi2-atk-gtk2 at-spi2-core cantarell-fonts cups-libs desktop-file-utils fontconfig gdk-pixbuf-query-loaders gstreamer gstreamer-fluendo-mp3
  gstreamer-plugins-base gtk2-branding-openSUSE gtk2-data gtk2-immodule-amharic gtk2-immodule-inuktitut gtk2-immodule-thai gtk2-immodule-vietnamese gtk2-metatheme-adwaita
  gtk2-theming-engine-adwaita gtk2-tools gtk3-data gtk3-metatheme-adwaita gtk3-tools hicolor-icon-theme hicolor-icon-theme-branding-openSUSE libasound2 libatk-1_0-0 libatk-bridge-2_0-0
  libatspi0 libcairo2 libcairo-gobject2 libcanberra0 libcanberra-gtk0 libcanberra-gtk2-module libcanberra-gtk3-0 libcanberra-gtk3-module libcanberra-gtk-module-common libcdda_interface0
  libcdda_paranoia0 libcolord2 libdrm2 libdrm_intel1 libdrm_nouveau2 libdrm_radeon1 libFLAC8 libfreebl3 libgbm1 libgdk_pixbuf-2_0-0 libgraphite2-3 libgstapp-1_0-0 libgstaudio-1_0-0
  libgstpbutils-1_0-0 libgstreamer-1_0-0 libgstriff-1_0-0 libgsttag-1_0-0 libgstvideo-1_0-0 libgthread-2_0-0 libgtk-2_0-0 libgtk-3-0 libharfbuzz0 libjasper1 libjbig2 libjpeg8 libjson-c2
  liblcms2-2 libLLVM libltdl7 libnsssharedhelper0 libogg0 liborc-0_4-0 libpackagekit-glib2-18 libpango-1_0-0 libpciaccess0 libpixman-1-0 libpulse0 libsndfile1 libsoftokn3 libspeex1
  libsqlite3-0 libstartup-notification-1-0 libtheoradec1 libtheoraenc1 libtiff5 libvisual libvorbis0 libvorbisenc2 libvorbisfile3 libwayland-client0 libwayland-cursor0 libwayland-server0
  libX11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-render0 libxcb-shm0 libxcb-sync1 libxcb-util1 libxcb-xfixes0 libXcomposite1 libXcursor1 libXdamage1 libXevie1
  libXfixes3 libXft2 libXi6 libXinerama1 libxkbcommon-0_4_3 libXrandr2 libXrender1 libxshmfence1 libXtst6 libXv1 libXxf86vm1 Mesa Mesa-libEGL1 Mesa-libGL1 Mesa-libglapi0
  metatheme-adwaita-common MozillaFirefox MozillaFirefox-branding-openSUSE mozilla-nss mozilla-nss-certs PackageKit-gstreamer-plugin pango-tools sound-theme-freedesktop

The following 10 recommended packages were automatically selected:
  gstreamer-fluendo-mp3 gtk2-branding-openSUSE gtk2-data gtk2-immodule-amharic gtk2-immodule-inuktitut gtk2-immodule-thai gtk2-immodule-vietnamese libcanberra0 libpulse0
  PackageKit-gstreamer-plugin

128 new packages to install.
Overall download size: 77.2 MiB. Already cached: 0 B  After the operation, additional 200.0 MiB will be used.
Continue? [y/n/? shows all options] (y): y
Retrieving package cantarell-fonts-0.0.16-1.1.noarch                                                                                                   (1/128),  74.1 KiB (115.6 KiB unpacked)
Retrieving: cantarell-fonts-0.0.16-1.1.noarch.rpm .........................................................................................................................[done (63.4 KiB/s)]
Retrieving package hicolor-icon-theme-0.13-2.1.2.noarch                                                                                                (2/128),  40.1 KiB ( 50.5 KiB unpacked)
Retrieving: hicolor-icon-theme-0.13-2.1.2.noarch.rpm ...................................................................................................................................[done]
Retrieving package sound-theme-freedesktop-0.8-7.1.2.noarch                                                                                            (3/128), 372.6 KiB (460.3 KiB unpacked) 
  1. 安装指定版本号的软件包,(以 gcc 5.1 为例)。
# zypper in 'gcc<5.1'
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 13 NEW packages are going to be installed:
  cpp cpp48 gcc gcc48 libasan0 libatomic1-gcc49 libcloog-isl4 libgomp1-gcc49 libisl10 libitm1-gcc49 libmpc3 libmpfr4 libtsan0-gcc49

13 new packages to install.
Overall download size: 14.5 MiB. Already cached: 0 B  After the operation, additional 49.4 MiB will be used.
Continue? [y/n/? shows all options] (y): y 
  1. 为特定的CPU架构安装软件包(以兼容 i586 的 gcc 为例)。
# zypper in gcc.i586
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 13 NEW packages are going to be installed:
  cpp cpp48 gcc gcc48 libasan0 libatomic1-gcc49 libcloog-isl4 libgomp1-gcc49 libisl10 libitm1-gcc49 libmpc3 libmpfr4 libtsan0-gcc49

13 new packages to install.
Overall download size: 14.5 MiB. Already cached: 0 B  After the operation, additional 49.4 MiB will be used.
Continue? [y/n/? shows all options] (y): y
Retrieving package libasan0-4.8.3+r212056-2.2.4.x86_64                                                                                                  (1/13),  74.2 KiB (166.9 KiB unpacked)
Retrieving: libasan0-4.8.3+r212056-2.2.4.x86_64.rpm .......................................................................................................................[done (79.2 KiB/s)]
Retrieving package libatomic1-gcc49-4.9.0+r211729-2.1.7.x86_64                                                                                          (2/13),  14.3 KiB ( 26.1 KiB unpacked)
Retrieving: libatomic1-gcc49-4.9.0+r211729-2.1.7.x86_64.rpm ...............................................................................................................[done (55.3 KiB/s)] 
  1. 为特定的CPU架构安装指定版本号的软件包(以兼容 i586 且版本低于5.1的 gcc 为例)
# zypper in 'gcc.i586<5.1'
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 13 NEW packages are going to be installed:
  cpp cpp48 gcc gcc48 libasan0 libatomic1-gcc49 libcloog-isl4 libgomp1-gcc49 libisl10 libitm1-gcc49 libmpc3 libmpfr4 libtsan0-gcc49

13 new packages to install.
Overall download size: 14.4 MiB. Already cached: 129.5 KiB  After the operation, additional 49.4 MiB will be used.
Continue? [y/n/? shows all options] (y): y
In cache libasan0-4.8.3+r212056-2.2.4.x86_64.rpm                                                                                                        (1/13),  74.2 KiB (166.9 KiB unpacked)
In cache libatomic1-gcc49-4.9.0+r211729-2.1.7.x86_64.rpm                                           (2/13),  14.3 KiB ( 26.1 KiB unpacked)
In cache libgomp1-gcc49-4.9.0+r211729-2.1.7.x86_64.rpm                                             (3/13),  41.1 KiB ( 90.7 KiB unpacked) 
  1. 从指定的软件库里面安装一个软件包,例如从 amarok 中安装 libxine。
# zypper in amarok upd:libxine1
Loading repository data...
Reading installed packages...
Resolving package dependencies...
The following 202 NEW packages are going to be installed:
  amarok bundle-lang-kde-en clamz cups-libs enscript fontconfig gdk-pixbuf-query-loaders ghostscript-fonts-std gptfdisk gstreamer gstreamer-plugins-base hicolor-icon-theme
  hicolor-icon-theme-branding-openSUSE htdig hunspell hunspell-tools icoutils ispell ispell-american kde4-filesystem kdebase4-runtime kdebase4-runtime-branding-openSUSE kdelibs4
  kdelibs4-branding-openSUSE kdelibs4-core kdialog libakonadi4 l
.....
  1. 通过指定软件包的名字安装软件包。
# zypper in -n git
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 35 NEW packages are going to be installed:
  cvs cvsps fontconfig git git-core git-cvs git-email git-gui gitk git-svn git-web libserf-1-1 libsqlite3-0 libXft2 libXrender1 libXss1 perl-Authen-SASL perl-Clone perl-DBD-SQLite perl-DBI
  perl-Error perl-IO-Socket-SSL perl-MLDBM perl-Net-Daemon perl-Net-SMTP-SSL perl-Net-SSLeay perl-Params-Util perl-PlRPC perl-SQL-Statement perl-Term-ReadKey subversion subversion-perl tcl
  tk xhost

The following 13 recommended packages were automatically selected:
  git-cvs git-email git-gui gitk git-svn git-web perl-Authen-SASL perl-Clone perl-MLDBM perl-Net-Daemon perl-Net-SMTP-SSL perl-PlRPC perl-SQL-Statement

The following package is suggested, but will not be installed:
  git-daemon

35 new packages to install.
Overall download size: 15.6 MiB. Already cached: 0 B  After the operation, additional 56.7 MiB will be used.
Continue? [y/n/? shows all options] (y): y 
  1. 通过通配符来安装软件包,例如,安装所有 php5 的软件包。
# zypper in php5*
Loading repository data...
Reading installed packages...
Resolving package dependencies...

Problem: php5-5.6.1-18.1.x86_64 requires smtp_daemon, but this requirement cannot be provided
  uninstallable providers: exim-4.83-3.1.8.x86_64[openSUSE-13.2-0]
                   postfix-2.11.0-5.2.2.x86_64[openSUSE-13.2-0]
                   sendmail-8.14.9-2.2.2.x86_64[openSUSE-13.2-0]
                   exim-4.83-3.1.8.i586[repo-oss]
                   msmtp-mta-1.4.32-2.1.3.i586[repo-oss]
                   postfix-2.11.0-5.2.2.i586[repo-oss]
                   sendmail-8.14.9-2.2.2.i586[repo-oss]
                   exim-4.83-3.1.8.x86_64[repo-oss]
                   msmtp-mta-1.4.32-2.1.3.x86_64[repo-oss]
                   postfix-2.11.0-5.2.2.x86_64[repo-oss]
                   sendmail-8.14.9-2.2.2.x86_64[repo-oss]
                   postfix-2.11.3-5.5.1.i586[repo-update]
                   postfix-2.11.3-5.5.1.x86_64[repo-update]
 Solution 1: Following actions will be done:
  do not install php5-5.6.1-18.1.x86_64
  do not install php5-pear-Auth_SASL-1.0.6-7.1.3.noarch
  do not install php5-pear-Horde_Http-2.0.1-6.1.3.noarch
  do not install php5-pear-Horde_Image-2.0.1-6.1.3.noarch
  do not install php5-pear-Horde_Kolab_Format-2.0.1-6.1.3.noarch
  do not install php5-pear-Horde_Ldap-2.0.1-6.1.3.noarch
  do not install php5-pear-Horde_Memcache-2.0.1-7.1.3.noarch
  do not install php5-pear-Horde_Mime-2.0.2-6.1.3.noarch
  do not install php5-pear-Horde_Oauth-2.0.0-6.1.3.noarch
  do not install php5-pear-Horde_Pdf-2.0.1-6.1.3.noarch
....
  1. 使用模式名称(模式名称是一类软件包的名字)来批量安装软件包。
# zypper in -t pattern lamp_server
ading repository data...
Reading installed packages...
Resolving package dependencies...

The following 29 NEW packages are going to be installed:
  apache2 apache2-doc apache2-example-pages apache2-mod_perl apache2-prefork patterns-openSUSE-lamp_server perl-Data-Dump perl-Encode-Locale perl-File-Listing perl-HTML-Parser
  perl-HTML-Tagset perl-HTTP-Cookies perl-HTTP-Daemon perl-HTTP-Date perl-HTTP-Message perl-HTTP-Negotiate perl-IO-HTML perl-IO-Socket-SSL perl-libwww-perl perl-Linux-Pid
  perl-LWP-MediaTypes perl-LWP-Protocol-https perl-Net-HTTP perl-Net-SSLeay perl-Tie-IxHash perl-TimeDate perl-URI perl-WWW-RobotRules yast2-http-server

The following NEW pattern is going to be installed:
  lamp_server

The following 10 recommended packages were automatically selected:
  apache2 apache2-doc apache2-example-pages apache2-mod_perl apache2-prefork perl-Data-Dump perl-IO-Socket-SSL perl-LWP-Protocol-https perl-TimeDate yast2-http-server

29 new packages to install.
Overall download size: 7.2 MiB. Already cached: 1.2 MiB  After the operation, additional 34.7 MiB will be used.
Continue? [y/n/? shows all options] (y): 
  1. 使用一行命令安装一个软件包同时卸载另一个软件包,例如在安装 nano 的同时卸载 vi
# zypper in nano -vi
Loading repository data...
Reading installed packages...
'-vi' not found in package names. Trying capabilities.
Resolving package dependencies...

The following 2 NEW packages are going to be installed:
  nano nano-lang

The following package is going to be REMOVED:
  vim

The following recommended package was automatically selected:
  nano-lang

2 new packages to install, 1 to remove.
Overall download size: 550.0 KiB. Already cached: 0 B  After the operation, 463.3 KiB will be freed.
Continue? [y/n/? shows all options] (y):
...
  1. 使用 zypper 安装 rpm 软件包。
# zypper in teamviewer*.rpm
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 24 NEW packages are going to be installed:
  alsa-oss-32bit fontconfig-32bit libasound2-32bit libexpat1-32bit libfreetype6-32bit libgcc_s1-gcc49-32bit libICE6-32bit libjpeg62-32bit libpng12-0-32bit libpng16-16-32bit libSM6-32bit
  libuuid1-32bit libX11-6-32bit libXau6-32bit libxcb1-32bit libXdamage1-32bit libXext6-32bit libXfixes3-32bit libXinerama1-32bit libXrandr2-32bit libXrender1-32bit libXtst6-32bit
  libz1-32bit teamviewer

The following recommended package was automatically selected:
  alsa-oss-32bit

24 new packages to install.
Overall download size: 41.2 MiB. Already cached: 0 B  After the operation, additional 119.7 MiB will be used.
Continue? [y/n/? shows all options] (y):
..

使用 zypper 卸载软件包

  1. 命令 ‘zypper remove‘ 和 ‘zypper rm‘ 用于卸载软件包。例如卸载 apache2:
# zypper remove apache2 

或者

# zypper rm apache2
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 2 packages are going to be REMOVED:
  apache2 apache2-prefork

2 packages to remove.
After the operation, 4.2 MiB will be freed.
Continue? [y/n/? shows all options] (y): y
(1/2) Removing apache2-2.4.10-19.1 ........................................................................[done]
(2/2) Removing apache2-prefork-2.4.10-19.1 ................................................................[done] 

使用Zypper 进行软件包更新

  1. 更新所有的软件包,可以使用 ‘zypper update‘ 或者 ‘zypper up‘。
# zypper up 

或者

# zypper update

Loading repository data...
Reading installed packages...
Nothing to do. 
  1. 更新指定的软件包,例如更新 apache2 以及 openssh。
 zypper up apache2 openssh
Loading repository data...
Reading installed packages...
No update candidate for 'apache2-2.4.10-19.1.x86_64'. The highest available version is already installed.
No update candidate for 'openssh-6.6p1-5.1.3.x86_64'. The highest available version is already installed.
Resolving package dependencies...

Nothing to do.
  1. 安装一个软件库,例如 mariadb,如果该库存在则更新之。
# zypper in mariadb
Loading repository data...
Reading installed packages...
'mariadb' is already installed.
No update candidate for 'mariadb-10.0.13-2.6.1.x86_64'. The highest available version is already installed.
Resolving package dependencies...

Nothing to do.

安装源文件并且构建依赖关系

命令 ‘zypper source-install‘ 或者 ‘zypper si‘ 可以用于从源文件编译软件包

  1. 安装某一个软件包的源文件及其依赖关系,例如 mariadb。
# zypper si mariadb
Reading installed packages...
Loading repository data...
Resolving package dependencies...

The following 36 NEW packages are going to be installed:
  autoconf automake bison cmake cpp cpp48 gcc gcc48 gcc48-c++ gcc-c++ libaio-devel libarchive13 libasan0 libatomic1-gcc49 libcloog-isl4 libedit-devel libevent-devel libgomp1-gcc49 libisl10
  libitm1-gcc49 libltdl7 libmpc3 libmpfr4 libopenssl-devel libstdc++48-devel libtool libtsan0-gcc49 m4 make ncurses-devel pam-devel readline-devel site-config tack tcpd-devel zlib-devel

The following source package is going to be installed:
  mariadb

36 new packages to install, 1 source package.
Overall download size: 71.5 MiB. Already cached: 129.5 KiB  After the operation, additional 183.9 MiB will be used.
Continue? [y/n/? shows all options] (y): y 
  1. 仅为某一个软件包安装源文件,例如 mariadb
# zypper in -D mariadb
Loading repository data...
Reading installed packages...
'mariadb' is already installed.
No update candidate for 'mariadb-10.0.13-2.6.1.x86_64'. The highest available version is already installed.
Resolving package dependencies...

Nothing to do. 
  1. 仅为某一个软件包安装依赖关系,例如 mariadb
# zypper si -d mariadb
Reading installed packages...
Loading repository data...
Resolving package dependencies...

The following 36 NEW packages are going to be installed:
  autoconf automake bison cmake cpp cpp48 gcc gcc48 gcc48-c++ gcc-c++ libaio-devel libarchive13 libasan0 libatomic1-gcc49 libcloog-isl4 libedit-devel libevent-devel libgomp1-gcc49 libisl10
  libitm1-gcc49 libltdl7 libmpc3 libmpfr4 libopenssl-devel libstdc++48-devel libtool libtsan0-gcc49 m4 make ncurses-devel pam-devel readline-devel site-config tack tcpd-devel zlib-devel

The following package is recommended, but will not be installed due to conflicts or dependency issues:
  readline-doc

36 new packages to install.
Overall download size: 33.7 MiB. Already cached: 129.5 KiB  After the operation, additional 144.3 MiB will be used.
Continue? [y/n/? shows all options] (y): y

在脚本和应用中调用 Zypper (非交互式)

  1. 安装一个软件包,并且在安装过程中跳过与用户的交互, 例如 mariadb。
# zypper --non-interactive in mariadb
Loading repository data...
Reading installed packages...
'mariadb' is already installed.
No update candidate for 'mariadb-10.0.13-2.6.1.x86_64'. The highest available version is already installed.
Resolving package dependencies...

Nothing to do.
  1. 卸载一个软件包,并且在卸载过程中跳过与用户的交互,例如 mariadb
# zypper --non-interactive rm mariadb
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following package is going to be REMOVED:
  mariadb

1 package to remove.
After the operation, 71.8 MiB will be freed.
Continue? [y/n/? shows all options] (y): y
(1/1) Removing mariadb-10.0.13-2.6.1 .............................................................................[done] 
  1. 以 XML 格式显示 zypper 的输出。
# zypper --xmlout
  Usage:
    zypper [--global-options]  [--command-options] [arguments]

  Global Options
....
  1. 在安装过程中禁止详细信息输出到屏幕。
# zypper --quiet in mariadb
The following NEW package is going to be installed:
  mariadb

1 new package to install.
Overall download size: 0 B. Already cached: 7.8 MiB  After the operation, additional 71.8 MiB will be used.
Continue? [y/n/? shows all options] (y):
...
  1. 在卸载过程中禁止详细信息输出到屏幕
# zypper --quiet rm mariadb 
  1. 自动地同意版权或者协议。
# zypper patch --auto-agree-with-licenses
Loading repository data...
Reading installed packages...
Resolving package dependencies...

Nothing to do.

清除 Zypper 缓存以及查看历史信息

  1. 以下指令可以用来清理Zypper缓存。
# zypper clean
All repositories have been cleaned up.

如果需要一次性地清理元数据以及软件包缓存,可以通过 -all 或 -a 选项来达到目的

<pre><code># zypper clean -a
All repositories have been cleaned up.</code></pre>
  1. 查看 Zypper 的历史信息。任何通过 Zypper 进行的软件包管理动作,包括安装、更新以及卸载都会在 /var/log/zypp/history中保留历史信息。可以通过 cat 来查看此文件,或者通过过滤器来筛选希望看到的信息。
 cat /var/log/zypp/history
2015-05-07 15:43:03|install|boost-license1_54_0|1.54.0-10.1.3|noarch||openSUSE-13.2-0|0523b909d2aae5239f9841316dafaf3a37b4f096|
2015-05-07 15:43:03|install|branding-openSUSE|13.2-3.6.1|noarch||openSUSE-13.2-0|6609def94b1987bf3f90a9467f4f7ab8f8d98a5c|
2015-05-07 15:43:03|install|bundle-lang-common-en|13.2-3.3.1|noarch||openSUSE-13.2-0|ca55694e6fdebee6ce37ac7cf3725e2aa6edc342|
2015-05-07 15:43:03|install|insserv-compat|0.1-12.2.2|noarch||openSUSE-13.2-0|6160de7fbf961a279591a83a1550093a581214d9|
2015-05-07 15:43:03|install|libX11-data|1.6.2-5.1.2|noarch||openSUSE-13.2-0|f1cb58364ba9016c1f93b1a383ba12463c56885a|
2015-05-07 15:43:03|install|libnl-config|3.2.25-2.1.2|noarch||openSUSE-13.2-0|aab2ded312a781e93b739b418e3d32fe4e187020|
2015-05-07 15:43:04|install|wireless-regdb|2014.06.13-1.2|noarch||openSUSE-13.2-0|be8cb16f3e92af12b5ceb977e37e13f03c007bd1|
2015-05-07 15:43:04|install|yast2-trans-en_US|3.1.0-2.1|noarch||openSUSE-13.2-0|1865754e5e0ec3c149ac850b340bcca55a3c404d|
2015-05-07 15:43:04|install|yast2-trans-stats|2.19.0-16.1.3|noarch||openSUSE-13.2-0|b107d2b3e702835885b57b04d12d25539f262d1a|
2015-05-07 15:43:04|install|cracklib-dict-full|2.8.12-64.1.2|x86_64||openSUSE-13.2-0|08bd45dbba7ad44e3a4837f730be76f55ad5dcfa|
......

使用 Zypper 进行SUSE系统升级

  1. 可以使用 Zypper 命令的 'dist-upgrade' 选项来将当前的 SUSE Linux 升级至最新版本。
# zypper dist-upgrade
You are about to do a distribution upgrade with all enabled repositories. Make sure these repositories are compatible before you continue. See 'man zypper' for more information about this command.
Building repository 'openSUSE-13.2-0' cache .....................................................................[done]
Retrieving repository 'openSUSE-13.2-Debug' metadata ............................................................[done]
Building repository 'openSUSE-13.2-Debug' cache .................................................................[done]
Retrieving repository 'openSUSE-13.2-Non-Oss' metadata ..........................................................[done]
Building repository 'openSUSE-13.2-Non-Oss' cache ...............................................................[done]

正文至此结束。希望本文可以帮助读者尤其是新手们管理SUSE Linux系统和服务器。如果您觉得某些比较重要的命令被作者漏掉了,请在评论部分写下您的返回,作者将根据评论对文章进行更新。保持联络,保持评论,多谢支持。


via: http://www.tecmint.com/zypper-commands-to-manage-suse-linux-package-management/

作者:Avishek Kumar 译者:张博约 校对:wxy

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