Category Archives: Linux

How to install redis server on CentOS

In this tutorial we will learn, how to install redis server on CentOS 7 / RHEL 7 . The abbreviation of redis is REmote DIctionary Server. It is one the of the most popular open source,advanced key-value cache and store.

Project URL :

Follow the given below steps to install redis server on CentOS 7 and Red Hat Enterprise Linux 7.

Install wget utility

Install wget command

yum install wget

Install EPEL repo

First we will install the EPEL repo. For more detail on EPEL repo, we suggest you to read our this post.

Because our system has x86_64 Operating System architecture, we will use only epel repo package for x86_64 . Search epel repo package as per your Operating System architecture(EPEL URL)

wget -r --no-parent -A 'epel-release-*.rpm'

rpm -Uvh*.rpm

It will create two epel’s repo file inside /etc/yum.repos.d
These are –
1. epel.repo

[root@localhost ~]# ls -l /etc/yum.repos.d/
total 28
-rw-r--r--. 1 root root 1612 Jul  4 07:00 CentOS-Base.repo
-rw-r--r--. 1 root root  640 Jul  4 07:00 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 1331 Jul  4 07:00 CentOS-Sources.repo
-rw-r--r--. 1 root root  156 Jul  4 07:00 CentOS-Vault.repo
-rw-r--r--. 1 root root  957 Sep  2 12:14 epel.repo
-rw-r--r--. 1 root root 1056 Sep  2 12:14 epel-testing.repo
[root@localhost ~]#

Install redis server

Now use yum command to install redis server

yum install redis

Two important redis server configuration file’s path
1. /etc/redis.conf
2. /etc/redis-sentinel.conf

Now start the redis server after this.

systemctl start redis.service

Check the running status of redis server

systemctl status redis.service

To test the installation of Redis, use below given command

redis-cli ping

If the response output is PONG, it means installation is completed successfully.

[root@localhost ~]# redis-cli ping
[root@localhost ~]#

Start/Stop/Restart/Status and Enable redis server

To start redis server

systemctl start redis.service

To stop redis server

systemctl stop redis.service

To restart redis server

systemctl restart redis.service

To get running status of redis server

systemctl status redis.service

To enable redis server at system’s booting time.

systemctl enable redis.service

To disable redis server at system’s booting time.

systemctl disable redis.service

Listening Port Of Redis Server

Redis Server listens by default at port number 6379. Use below given ss command. (To learn more about ss command)

[root@localhost ~]# ss -nlp|grep redis
tcp    LISTEN     0      128                    *:*      users:(("redis-server",19706,4))
[root@localhost ~]#

Note: On minimal installed CentOS 7/ RHEL 7,you wont get netstat command. Instead of netstat command, use ss command which is by default available on system.

Learn Redis :

Who is using redis: Who is using Redis



How to Install Apache Tomcat on CentOS

Apache Tomcat is an open source Java Servlet implementation developed by the Apache Software Foundation. Beside Java Servlets, Tomcat implements several other Java server technologies including  JavaServer Pages (JSP), Java Expression Language, and Java WebSocket. Tomcat provides an HTTP Web Server for Java applications with support for HTTP/2, OpenSSL for JSSE and TLS virtual hosting.

In this tutorial, I will show you how to install and configure Apache Tomcat 8.5 on a CentOS 7 server and how to install and configure Java on a CentOS server which is one of the prerequisites for Tomcat.


  • Server with CentOS 7 – 64bit
  • 2 GB or more RAM (Recommended)
  • Root Privileges on the server

Step 1 – Install Java (JRE and JDK)

In this step, we will install the Java JRE and JDK from the CentOS repository. We will install Java 1.8.11 on the server with the yum command.

Run this command to install Java JRE and JDK from CentOS repository with yum:

yum -y install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64

It will take some time, wait until the installation finished.

Then you should check the Java version with the command below:

java -version

You should see results similar to the ones below:

openjdk version “1.8.0_111”
OpenJDK Runtime Environment (build 1.8.0_111-b15)
OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)

Check the Java version

Step 2 – Configure the Java Home Environment

In the first step, we’ve installed Java. Now we need to configure the JAVA_HOME environment variable on the CentOS server so that Java applications can find the right Java version and Tomcat requires the JAVA_HOME environment to be setup properly, so we need to configure it.

Before we configure the JAVA_HOME environment, we need to know where the Java directory is. Check the Java directory with the command below:

sudo update-alternatives –config java

Java directory = “/usr/lib/jvm/java-1.8.0-openjdk-

Then edit the environment file with vim:

vim /etc/environment

Add the JAVA_HOME environment variable by adding the configuration below:


Save the /etc/environment file and exit vim.

Next, edit the .bash_profile file and add the JAVA_HOME variable as well:

vim ~/.bash_profile

At the end of the file, paste the configuration below:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-
export PATH=$JAVA_HOME/bin:$PATH

Save the file, then reload the bash_profile file.

source ~/.bash_profile

Make sure there is no error, Finally check the JAVA_HOME environment variable:


You will see Java path directory.

Setup the Java home environment variable

Step 3 – Install Apache Tomcat 8.5

In this step, we will install Apache Tomcat under the user tomcat (which we have to create first).

Create a user and group named tomcat:

groupadd tomcat
useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

-s /bin/false = disable shell access
-g tomcat = assign new user to the group tomcat
-d /opt/tomcat = define the home directory for the user

Next, go to the /opt directory and download tomcat with the wget command:

cd /opt/

Extract Tomcat and move all the files and directories that are in the ‘apache-tomcat-8.5.6’ directory to the ‘tomcat’ directory.

tar -xzvf apache-tomcat-8.5.6.tar.gz
mv apache-tomcat-8.5.6/* tomcat/

Now change the owner of the tomcat directory to the tomcat user and group.

chown -hR tomcat:tomcat tomcat

Step 4 – Test Apache Tomcat

In step 3, we installed and configure tomcat. In this step, we just want to run a short test to make sure there are no errors.

Go to the tomcat/bin directory and run the command ‘’ to test Apache Tomcat:

cd /opt/tomcat/bin/

Make sure the result is ‘Tomcat started’.

Tomcat is using port 8080 now, check the open port on the server with the netstat command.

netstat -plntu

Check that Tomcat has been started with netstat

Or visit the server IP address with port 8080 – in my case – with a web browser. You will see the Apache Tomcat default page.

Test Apache Tomcat with a Browser

Next, stop Apache Tomcat and because we will run it Tomcat with a systemd service file in the final configuration. Make sure the tomcat directory is owned by the tomcat user and group.

cd /opt/tomcat/bin/
chown -hR tomcat:tomcat /opt/tomcat/

Shutdown Apache Tomcat server test.

Step 5 – Setup Apache Tomcat Service

In this tutorial, we will run Apache Tomcat as tomcat user with a systemd service file for easy starting and stopping of the service. So the next step is to create a ‘tomcat.service’ file.

Go to the systemd system directory and create a new file ‘tomcat.service’.

cd /etc/systemd/system/
vim tomcat.service

Paste the configuration below:

Description=Apache Tomcat 8 Servlet Container

Save the file and exit vim.

Reload the systemd daemon, then start and add the Apache Tomcat service at boot time.

systemctl daemon-reload
systemctl start tomcat
systemctl enable tomcat

Now check that tomcat is running by checking the open port 8080.

netstat -plntu

And check the tomcat status, make sure the service is active.

systemctl status tomcat

Check Tomcat service started with Systemd

Step 6 – Configure Apache Tomcat Users

In this step, we will configure the users for Apache Tomcat. Tomcat is installed, and it’s running by default on port 8080, we can access it with a web browser, but we can not access the site-manager dashboard yet. To enable and configure Tomcat users, edit the file ‘tomcat-users.xml’.

Go to the tomcat configuration directory and edit the tomcat-users.xml file with vim.

cd /opt/tomcat/conf/
vim tomcat-users.xml

Create a new line under line 43 and paste configuration below:

<role rolename="manager-gui"/>
<user username="admin" password="password" roles="manager-gui,admin-gui"/>

Save the file and exit vim.

Next, go to the manager directory and edit the context.xml file.

cd /opt/tomcat/webapps/manager/META-INF/
vim context.xml

Comment out line 19 and 20.

<Context antiResourceLocking=”false” privileged=”true” >
<!–  <Valve className=”org.apache.catalina.valves.RemoteAddrValve”
allow=”127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1″ /> –>

Save the file and exit vim.

Go to the host-manager directory and edit the context.xml file again.

cd /opt/tomcat/webapps/host-manager/META-INF/
vim context.xml

Comment out again line 19 and 20.

<Context antiResourceLocking=”false” privileged=”true” >
<!–  <Valve className=”org.apache.catalina.valves.RemoteAddrValve”
allow=”127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1″ /> –>

Save the file and exit, then restart tomcat.

systemctl restart tomcat

Step 7 – Configure Firewalld

In CentOS 7, we have a default firewall tool named firewalld. It replaces the iptables interface and connects to the Netfilter kernel code.

In this step, we will start the firewalld service and open port 8080 so we can access the Apache Tomcat server from the outside of the network.

Start the firewalld service and add it to start at boot time with the systemctl command.

systemctl start firewalld
systemctl enable firewalld

Next, add the apache tomcat port 8080 to the firewall with the firewall-cmd command, and reload the firewalld service.

firewall-cmd –zone=public –permanent –add-port=8080/tcp
firewall-cmd –reload

Check that all the services are available in the firewall and check that the Apache Tomcat port 8080 is open.

firewall-cmd –list-ports
firewall-cmd –list-services

Apache Tomcat port 8080 is accessible from outside of the network, and the ssh port is open by default as well.

Start Apache Tomcat Service with Systemd

Step 8 – Testing

Open your web browser and type in your server IP with port 8080. You will see the Apache Tomcat default page.

Apache Tomcat Home page

Go to the manager dashboard with URL below:

Type in the admin username ‘admin‘ with password ‘mypassword‘, the configuration that we made on step 5.

Apache Tomcat Manager Dashboard

Now go to the host-manager dashboard with URL below:

Enter the admin user and password that you set in step 5, you will see the Tomcat Virtual host Manager.

Apache Tomcat Virtual Host Manager Dashboard

Apache Tomcat 8.5 has been installed on a CentOS 7 Server.


学习 Linux-IBM developerWorks

学习 Linux,101: 创建和更改硬链接和符号链接
学习如何创建和管理到 Linux 系统上文件的硬链接和符号链接。可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是探究硬链接与软链接或符号链接之间的区别,以及链接文件(而不是复制文件)的最佳方法。
学习 Linux,101: 文件和目录管理
您或许听说过,Linux 中的所有资源都被视为文件,所以请选择正确的学习途径,掌握文件和目录管理的扎实基础知识:查找、列出、移动、复制和存档。利用本教程中的材料来学习 Linux Professional Institute LPIC-1:Linux 服务器专业认证考试 101,或者仅为了兴趣而学习。
学习 Linux,101: 控制文件系统的安装和卸载
学习安装您的 Linux 文件系统;配置和和使用可移动 USB、IEE 1394 或其他设备;正确访问软盘、CD、和 DVD。您可以使用本文中提供的资料来研究 Linux 系统管理认证的 LPI 101 考试,或者只学习关于访问 Linux 文件系统的信息。
学习 Linux,101: 管理共享库
学习如何为 Linux 中可执行程序选择共享库以及如何加载共享库。 您可以使用本文中的资料来学习,备考 Linux 系统管理员认证的 LPI 101 考试,当然也可以是出于爱好而学习。
学习 Linux,101: LPIC-1 路线图
使用这个路线图,查找可以帮助您学习和复习基本 Linux 任务的 IBM developerWorks 文章。并且,如果您正在准备面向 Linux 系统管理员的专业认证,那么这些文章可以帮助您准备 Linux Professional Institute Certification (LPIC) 考试 101 和考试 102。这个路线图是根据 101 和 102 考试的目标 43 组织的,您需要通过这两门考试来获得 LPI 级别 1 认证。
学习 Linux,101: Debian 包管理
学习如何在 Linux 系统上安装、升级和管理包。本文主要关注 Advanced Packaging Tool (APT),APT 是 Debian 以及从 Debian 衍生出的发行版(比如 Ubuntu)使用的包管理系统。可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是为了了解添加新软件并及时更新系统的最佳方法。
学习 Linux,101: 使用正则表达式搜索文本文件
了解如何使用正则表达式,如何使用它们在文件系统中查找所需内容。本文提供的材料可以帮助您准备 Linux 系统管理员认证 LPI 101 考试,也可以作为一般的兴趣读物。
学习 Linux,101: 进程执行优先级
了解如何设置和更改进程优先级,以便应用程序获得它们需要的进程时间。本文提供的材料可以帮助您准备 Linux 系统管理员认证 LPI 101 考试,也可以作为一般的兴趣读物。
学习 Linux,101: 自定义或编写简单脚本
学习如何使用标准的 shell 语法、循环和控制结构,以及成功或失败测试来自定义现有脚本或编写简单的新 bash 脚本。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 102 考试内容,或者仅为兴趣而学习。
学习 Linux,101: RPM 和 YUM 包管理
学习如何在 Linux 系统上安装、升级和管理包。本文主要关注由 Red Hat 开发的 Red Hat Package Manager (RPM),以及 Duke University 物理系最初为管理 Red Hat Linux 系统开发的 Yellowdog Updater Modified (YUM)。可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是为了了解添加新软件并及时更新系统的最佳方法。
学习 Linux,101: 引导系统
了解如何在引导进程中引导您的 Linux 系统。您可以使用本文中的材料准备 Linux 系统管理员认证 LPI 101 考试,或者只是了解一下该引导过程。
学习 Linux,101: 使用 vi 编辑文件
了解如何使用 vi 编辑器,这款编辑器在大部分 UNIX 和 Linux 系统中都存在。本文提供的材料可以帮助您准备 Linux 系统管理员认证 LPI 101 考试,也可以作为一般的兴趣读物。
学习 Linux,101: 管理文件权限和所有权
学习在您的 Linux 文件系统上管理所有权和权限。了解访问模式,如 suid,sgid 和粘贴位,以及如何使用它们加强安全性。您可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是了解文件所有权、权限和安全性。
学习 Linux,101: 保持文件系统的完整性
学习如何检查 Linux 文件系统的完整性、监控磁盘可用空间并修复简单问题。您可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是检查您的文件系统,将其管理得井然有序,特别是在一次系统故障或断电之后。
学习 Linux,101: 创建分区和文件系统
学习如何在磁盘驱动器上创建分区,以及如何格式化分区以便将其用作 Linux 系统上的交换或数据空间。您可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是探究自己使用的分区和 Linux 文件系统。
学习 Linux,101: 文件和目录管理
您可能已经听说过 “Linux 中的每项内容都可以看作一个文件”,那么就让我们通过牢固地掌握文件和目录管理内容来开始我们的 Linux 学习吧 —— 寻找、列出、移动、复制和归档。您可以利用本文的内容来准备 Linux 系统管理员认证 LPI 101 考试,或者仅仅是从中获取乐趣。
学习 Linux,101: 管理磁盘配额
学习如何设置和检测 Linux 文件系统的磁盘配额,防止个人用户使用超过允许范围的空间,避免造成整个文件系统的意外拥堵。您可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是探究配额。
学习 Linux,101: 创建、监控和终止进程
了解 Linux 上的进程管理:如何在前台和后台之间切换进程,找出正在运行的程序,终止进程,以及在外出时让进程继续运行。本文提供的材料可以帮助您准备 Linux 系统管理员认证 LPI 101 考试,也可以作为一般的兴趣读物。
学习 Linux,101: 管理磁盘配额
学习设置和检查 Linux 文件系统上的磁盘配额,预防用户使用超出允许量的空间,还要预防整个文件系统被意外填满。您可使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅了解配额。
学习 Linux,101: 硬盘布局
了解如何在 Linux 系统中设计磁盘的分区布局。您可以使用本文中的资料来学习,备考 Linux 系统管理员认证的 LPI 101 考试,当然也可以是出于爱好而学习。
学习 Linux,101: 维护文件系统的完整性
学习如何检查您的 Linux 文件系统的完整性,如何监视空闲空间,以及如何修复简单的问题。您可以使用本教程中的资料进行 Linux Professional Institute (LPI) 101 Linux 系统管理员认证考试备考,或者仅使用它们来检查您的文件系统,并让文件系统保持良好的工作秩序,尤其在系统崩溃或断电后。
学习 Linux,101: 创建分区和文件系统
学习如何在磁盘驱动器上创建分区,如何格式化它们以在 Linux 系统上用作交换或数据空间。您可以使用本教程中的资料来为 Linux Professional Institute LPIC-1:Linux 服务器专业认证考试 101 备考,或者仅为了自己的使用而了解分区和 Linux 文件系统。
学习 Linux,101: 流、管道和重定向
您是不是认为流和管道让 Linux 专家听起来像管道工?现在您就有机会了解流和管道以及如何重定向和分离流。您甚至还将了解如何将流转变成命令参数。您可以为准备 Linux 系统管理员认证考试 LPI 101 而学习本文,也可以仅仅是为了从中获得乐趣。
学习 Linux,101: 查找并放置文件系统
学习一个 Linux 系统上 Filesystem Hierarchy Standard (FHS) 下文件的正确位置,并学习如何查找重要文件和命令。您可以使用本文中的资料来准备 Linux 系统管理员认证的 LPI 101 考试,或者只是探究文件组织和管理。
学习 Linux,101: 引导管理器
了解如何为您的 Linux 系统选择和配置一个引导程序。您可以使用本文中的资料来学习,为参加 Linux 系统管理员认证的 LPI 101 考试而做准备,当然也可以是出于爱好而学习。
学习 Linux,101: 运行级别、引导目标、关闭和重新引导
学习关闭并重新引导 Linux系统,警告用户系统即将关闭,切换到限制更多或更少的运行级别。您可以使用本文中的资料学习 LPIC-1:Linux 服务器专业认证,或者单纯地学习关闭、重新引导和更改运行级别。这些资料对应于 LPI 2015 年 4 月 4.0 版目标。
学习 Linux,101: 自定义和使用 shell 环境
学习如何自定义 Linux shell 环境和编写简单的 bash 函数。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 102 考试内容,或者仅为兴趣而学习。
学习 Linux,101: Linux 命令行
GUI 很有用,但要释放 Linux 的真正威力,命令行是必不可少的。在本教程中,Ian Shields 将介绍 bash shell 的一些主要特性,重点介绍对 LPI 认证很重要的一些特性。学完本教程后,您将学会使用 echo 和 exit 等基本 Linux 命令,设置环境变量,以及收集系统信息。使用本教程中的资料学习 Linux Professional Institute LPIC-1:Linux 服务器专业认证考试 101,或者仅为兴趣而学习。
学习 Linux,101: 流、管道和重定向
如果您认为流和管道使 Linux 专家听起来像是水管工,那么您现在就有一个了解它们的机会,了解如何重定向和拆分它们。您甚至还可以了解如何将流转换为命令参数。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅为了兴趣而学习。
学习 Linux,101: 创建、监视和结束进程
学习 Linux 上的进程管理:如何在前台和后台之间切换进程,找到正在运行的进程,结束进程,在您某天离开后保持进程继续运行,并了解终端窗口中的多任务。您可以使用本教程中的资料学习 Linux Professional Institute LPIC-1:Linux 服务器专业认证考试 101,或者仅为了兴趣而学习。
学习 Linux,101: 控制文件系统的挂载和卸载
学习挂载 Linux 文件系统;配置和使用可移动 USB、IEE 1394 或其他设备;以及正确地访问软盘、CD 和 DVD。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅学习访问 Linux 文件系统。
学习 Linux,101: 管理文件权限和所有权
学习管理您的 Linux 文件系统上的文件所有权和权限。了解访问模式,比如 suid、sgid 和粘滞位 (sticky bit),以及如何使用它们提高安全性。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者只是了解文件所有权、权限和安全性。
学习 Linux,101: 查找和放置系统文件
了解在文件系统层级标准 (FHS) 下文件在 Linux 系统上的正确位置,了解如何找到重要的文件和命令。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者只是了解文件组织和管理。
学习 Linux,101: 使用基本 SQL 命令
学习如何使用基本 SQL 命令查询数据库和操作数据。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 102 考试内容,或者仅为兴趣而学习。
学习 Linux,101: 文本流和过滤器
文本处理操作远不止剪切和粘贴,尤其在未使用 GUI 时。在本教程中,Ian Shields 将介绍如何在 Linux 上使用来自 GNU textutils 包的过滤器处理文本。在学习本教程后,您就能像专家一样处理文本。您可以使用本教程中的资料学习针对 Linux Professional Institute LPIC-1:Linux 服务器专业认证的 101 考试内容,或者仅为兴趣而学习。
学习 Linux,101: LPIC-1 学习路线图
使用此路线图查找 IBM developerWorks 教程,这些教程可帮助您学习和复习基本的 Linux 任务。如果您想要通过 Linux 系统管理员专业认证,这些教程可帮助您了解 Linux Professional Institute 的 LPIC-1:Linux 服务器专业认证考试 101 和 102 的知识点。此路线图根据考试 101 和 102 中的 43 个目标而组织,通过 LPIC-1 认证需要掌握这些目标。
学习 Linux,101: Debian 包管理
学习如何在 Linux 系统上安装、升级和管理包。本教程主要关注 Advanced Packaging Tool(或 APT),APT 是 Debian 以及从 Debian 衍生出的发行版(比如 Ubuntu)使用的包管理系统。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者只是为了了解添加软件和保持系统最新的最佳方法而学习。
学习 Linux,101: 管理共享库
学习如何确定 Linux 可执行程序依赖于哪些共享库,以及如何加载它们。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅为兴趣而学习。
学习 Linux,101: 安装引导管理器
学习如何为您的 Linux 系统选择和配置引导管理器。 您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅为兴趣而学习。
学习 Linux,101: 引导系统
学习通过引导过程引导您的 Linux 系统。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPIC-1 101 考试内容,或者仅学习引导过程。这些资料对应于 2015 年 4 月 LPI V4.0 考试目标。
学习 Linux,101: 使用正则表达式搜索文本文件
学习如何使用正则表达式在文件系统上的文件中查找信息。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅为兴趣而学习。
学习 Linux,101: 管理用户和组帐户及相关系统文件
学习如何管理用户和组帐户及相关系统文件。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 102 考试内容,或者仅为了兴趣而学习。
学习 Linux,101: 创建和更改硬链接和符号链接
学习如何创建和管理您的 Linux 系统上的文件的硬链接和符号链接。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅了解硬链接与软或符号链接之间的差异,以及链接到文件而不是复制文件的最佳方式。
学习 Linux,101: 使用 vi 编辑文件
学习如何使用几乎每个 UNIX 和 Linux 系统上都有的 vi 编辑器。您可以使用本教程中的资料学习针对 Linux 系统管理员认证的 LPI 101 考试内容,或者仅为兴趣而学习。
学习 Linux,101: 文本流和过滤器
文本操作不仅仅是指复制和粘帖,在不使用 GUI 的情况下,这一点尤其明显。通过本文为 Linux Professional Institute Certification (LPIC) 101 考试做准备,或者仅仅是从中得到乐趣。在这篇文章中,Ian Shields 向您介绍了在 Linux 上使用 GNU 文本实用程序(textutils)包中的过滤器进行文本操作。在阅读完本文后,您将能够像专家一样熟练地操作文本。
学习 Linux,101: Linux 命令行
GUI 非常优秀,但是要释放 Linux 的真正威力,命令行是任何东西都无法取代的。在这篇文章中,Ian Shields 为您介绍了 bash shell 的一些主要特性,并重点介绍对 LPI 认证非常重要的特性。阅读完本文后,您将可以非常熟练地使用基本的 Linux 命令,比如 echo 和 exit、设置环境变量,以及收集系统信息。


Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算符/if语句/循环控制/… 但在开始之前, 我想先理清Shell语言与Shell之间的关系.


上面说了Shell是一种编程语言但你可能也听说过: sh/bash/csh/zsh/…它们也叫Shell, 实际上这里所说的Shell是一种应用程序, 它负责解释执行你编写的Shell脚本, Mac默认就自带了sh/bash/csh/zsh/tcsh/ksh, 你可以这样查看cat /etc/shells
不同的shell的用法基本相同, 但有些shell提供了一些新特性, 比如我现在在用的就是zsh, 更多zsh的内容可以去看这篇文章。


#! /bin/sh
echo "hello shell!"

依国际惯例这里以在终端里打印一句hello shell!开始, 第一行的#!是一个约定标记, 它告诉脚本这段脚本需要什么解释器来执行. 第二行的echo命令则负责向屏幕上输出一句话.



  1. chmod +x使文件具有可执行权限, 直接运行
  2. 直接调用解释器, 将脚本文件作为参数传入 (比如bash
  3. 使用source(也可用 . 代替)执行文件

通常情况下, 最方便的方式就是方式1, 通过方式1执行你需要在脚本第一行写好这段脚本由哪个解释器来解释, 而通过方式2来执行则没有这个限制, 写了也没用.
除此之外方式1与方式2执行命令就没有区别了, 但方式3执行的方式与前两种都不同:

使用source执行shell脚本时, 不会创建子进程, 而是在父进程中直接执行!

这里不作更多解释, 感兴趣的同学可以去参考Linux Shell编程从入门到精通这本书的第一章的相关部分.


和其它语言一样Shell中也有变量, 而且更简单, 但有一些比较特殊的地方.

  1. Shell中的变量只有字符串这一种类型
  2. Shell中变量名与变量值没有长度限制
  3. Shell的变量也允许比较操作和整数操作, 只要变量中的字符串为数字



需要注意: = 两边不能加空格, 当赋值语句包含空格时请加引号(单引号/双引号均可)比如:

variable_name="ghui's blog"


  1. 局部变量 (定义变量时在前面加local修饰符)
  2. 全局变量 (定义变量时不加任何修饰符)

与其它语言一样局部变量的可见范围是代码块或函数内, 全局变量在全局范围内可见.看个简单的例子:

#! /bin/sh
num=111 #全局变量
  local num=222 #局部变量
  echo $num
echo "before---$num"
echo "after---$num"




使用一个定义过的变量, 只要在变量名前面加$即可, 如:

echo $name
echo ${name} #{} 为了帮助解释器识别变量边界, 非必须

在使用变量时还有一个地方需要注意, 请看下面的例子:

#! /bin/sh
echo "1 print $str"
echo '2 print $str'


1 print abc
2 print $str

被双引号括起来的变量会发生变量替换, 单引号不会


Shell中注释使用#, 而且它不支持多行注释.



sayHi="hello, "$name" !"
sayHi2="hello, ${name} !"
echo $sayHi $sayHi2

注意: 上面说的单双引号引起的变量替换问题


echo ${#string} #输出:4


str="hello shell"
echo ${str:2}  #输出: llo shell
echo ${string:1:3} #输出:ell




if condition
	 do something
elif condition
	do something
elif condition
	do something
	do something

其中, elif语句和else语句非必须的.看个例子:

#! /bin/sh
if [ $1=$a ]
	echo "you input 1"
elif [ $1=2 ]
	echo "you input 2"
	#do nothing
	echo " you input $1"

很简单, 不过这里有两个地方需要注意, 如果某个条件下的执行体为空, 则你就不能写这个条件 即下面这样会报错:

if condition
	#do nothing
elif condition
	# do nothing
	#do nothing

另外, [ ] 两边一定要加空格, 下面这样都会报错:

if [$a=$b]
if [ $a=$b]
if [$a=$b ]

只有这样if [ $a=$b ]才是对的.
注意: 实际上这里的[]test命令的一种形式, [是系统的一个内置命令,存在路径是/bin/[,它是调用test命令的标识, 右中括号是关闭条件判断的标识, 因此下面的两个测试语句是等效的:

if test "2>3"

if [ "2>3" ]

[]之外, shell语言中还有几种其它括号, 比如: 单小括号/双小括号/双中括号/… , 不同的括号有不同的用法, 更多关于shell中, 括号的用法可以看看这个


当条件较多时, 可以选择使用switch语句, shell中的switch语句的写法和其它语言还是有些不同的, 基本结构如下:

case expression in
		do something... ;;
		do something... ;;
		do something... ;;


#! /bin/sh
case $input in
        1 | 0)
echo "---$str"

这个例子会根据你执行此脚本时传入的参数不同在屏幕上输出不同的值, 其中第一个case 1 | 0代表逻辑或.

  1. ;;相当于其它语言中的break
  2. 每个pattern之后记得加)
  3. 最后记得加esac (即反的case)



for name [in list]

其中,[]括起来的 in list, 为可选部分, 如果省略in list则默认为in "$@", 即你执行此命令时传入的参数列表.

for file in *.txt
	open $file

遍历当前目录下的所有txt文件, 并依次打开.



while condition
	do something...


#! /bin/sh
while ((i<5));
	echo "i=$i"



NOTE: 你可能需要去了解一下(())的用法



until condition
	do something...


#! /bin/sh
until ((i==0))
	echo "i=$i"




shell中也支持break跳出循环, continue跳出本次循环.用法与C, Java中相同


要定义一个函数, 可以使用下面两种形式:

function funcname()
	do something


funcname ()
	do something


#! /bin/sh
# 计算sum
	let "sum=$1+$2"
	return $sum
add $1 $2
echo "sum=$?"


ad 1 2



其中, $?在shell中保存的是上一条命令的返回值


  1. 函数必须先定义后使用
  2. 如果在函数中使用exit会退出脚本, 如果想退回到原本函数调用的地方, 则可使用return


先shell脚本传递参数, 非常简单, 只需要在你执行命令的后面跟上即可, 看个例子:

#! /bin/sh
echo "$# parameters";
echo "$@";
echo "$0"
echo "$1"

输入: 11 22


2 parameters
11 22


之所以要写这篇博客, 有以下几个原因:

  1. 想总结一下shell编程中的关键知识点, 方便日后查看.
  2. 想通过shell优化一下我的hexo写作及博客管理流程, 目前相关脚本已完成, 待我下一篇博客分享给大家, 如果你也是在用Hexo写博客, 相信对你会很有用, 尽请期待! 已经发布
  3. 可以看的出这里总结的都是最关键的知识点, 还有很多这里并没有说. 是因为我觉得刚开始学习一个东西没必要太计较一些细节/琐碎的东西, 掌握好大致知识框架, 然后在大家编写具体的脚本时, 遇到具体问题, 再去google寻找即可.


  1. Shell脚本编程30分钟入门
  2. Linux Shell编程从入门到精通