初识Linux

                          初认识Linux

1.1 Linux的登录界面

在虚拟机安装CentOS 7中有提到,我在安装Linux操作系统的时候,采用的是命令行界面的登录方式,当然也有像Windows那样的图像界面登录方式。它们有个共同特点就是为用户提供了一个接口,这个接口用于接收用户输入的命令,并且解释或执行它,然后根据命令调用相应的应用程序。而这个接口,我们就称之为shell

1.1.1 认识Linux shell

Shell: 在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

基本上shell分为两大类:

图形界面shell(Graphical User Interface shell 即 GUI shell)

例如:应用最为广泛的 Windows Explorer (微软的windows系列操作系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X window manager (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KDE、 XFCE。

命令行式shell(Command Line Interface shell ,即CLI shell)

bash / sh / ksh / csh(Unix/linux 系统)

cmd.exe(Windows 系统)

要注意的是,我们所说的shell如果没有指定特定的shell,默认是CLI界面。所以现在就让我们来谈谈CLI。

要是你按照我们上面介绍过的方式安装操作系统,那么现在你使用Linux的时候应该是一个命令行界面。这个界面是一个叫做bash的程序。至于为什么要使用bash,这个问题我觉得回答不了你,换句话说,兴趣爱好而已。

当然,这里我指的只是CentOS,至于其它发行版使用的是哪种shell,我们可以上网浏览。那么,如果我们要想知道我们当前系统使用的是什么shell,那么可以使用echo $SHELL查看。

[root@mylab7 ~]# echo $SHELL
/bin/bash

终端:terminal

Linux是一个多任务,多用户的操作系统,在早期计算机系统中,由于计算机主机昂贵,因此一个主机(IBM大型计算机)一般会配置多个终端(所谓的终端,简单点来说,就是一个键盘,一个鼠标),这些终端本身不具备计算能力,仅仅承担信息输入输出的工作,运算和处理均由主机来完成。

在linux系统当中,计算机显示器通常被称为控制台(console),而在早期,一台计算机只有一个控制台,人们要想共享一台计算机,需要自己提供通过console相关联的虚拟终端(dev/tty#)将信息显示在屏幕上。

要注意的是,在早期,无论你在哪个虚拟终端中输入,输出的信息都会转到控制台上去,而现在Linux已经将控制台和虚拟终端这两个概念模糊化了,无论你在哪个虚拟终端敲入命令,它执行的结果就会显示在当前的虚拟终端下,也就是说,Linux把当前你敲入命令的那个虚拟终端当作控制台来看待。

当我们登录到虚拟机的时候,我们可以发现,CentOS7系统给我们提供了6个虚拟终端,以tty1-tty6命名。使用组合键[Ctrl]+[Alt]+[F1-F6]可以实现虚拟终端之间的切换。

另外,对于远程用户,他们通过伪终端来实现对Linux的操作,所谓的伪终端,就是一种类似于终端的设备,但是这种设备不与任何终端硬件相关。比如,我们通过Xshell软件,或telnet连接的终端,都是伪终端。

另外还有一种终端类型,叫做串行终端,它是使用计算机串行端口连接的终端设备。计算机把每个串行端口看出是一个终端设备。比如当初学校组织我们在锐捷进行培训,我们使用的路由器就是通过COM2口来进行连接的。那么连接之后我们操作的终端界面就是一个串行终端。

这些终端设备其实都是字符设备的一种表现形式,我们又说过,Linux的哲学思想是一切皆文件,那么这些字符设备在Linux中以文件的形式存在:/dev/tty。/dev/tty指的是我们当前的进程所使用的控制终端。那么根据终端的类型,他们的设备文件分别是:

           终端类型

           设备文件

           控制终端

           /dev/tty

           控制台

           /dev/console

           虚拟终端

           /dev/tty#

           伪终端

           /dev/pts/#

           串行终端

           /dev/ttyS#

所以,要想知道当前的进程与哪个控制终端相连,我们可以使用“ps –ax”来进行查看。所以我们所说的控制终端,其实就相当于我们当前终端的一个链接。

好,我们可以举个例子。我们说过,终端在Linux中被识别成了文件,那么我们现在往这个文件写数据,那么相应的终端将会把信息显示出来,如:

1.  首先,使用命令tty来查看我们当前登录的终端类型:

[root@mylab7 ~]# tty
/dev/pts/1

通过观察我们可以知道,我们是通过远程工具连上去的。

2.  输入echo  “hello world” >/dev/pts/1,然后观察情况

[root@mylab7 ~]# echo "hello world" >/dev/pts/1
hello world

我们发现当前终端上打出了hello world。上述的命令大概的意思是:将“hello world”这段话重定向到/dev/pts1文件中,而/dev/pts1指的就是我们当前的终端,所以“hello world”会显示出来。

3.  打开第二个伪终端,在第二个伪终端中输入:

 echo “hello  pts1”>/dev/pts/1

[root@mylab7 ~]# tty
/dev/pts/2
[root@mylab7 ~]# echo "hello pts1" >/dev/pts/1
[root@mylab7 ~]#

 我们可以发现,这个时候,消息不再显示在第二个伪终端上了,而是显示在了第一个伪终端上。

4.  分布在第一个伪终端输入:echo “hello world” >/dev/tty,在第二个伪终端输入echo “hello pts1”>/dev/tty。然后查看其结果:

[root@mylab7 ~]# tty
/dev/pts/1
[root@mylab7 ~]# echo "hello world" >/dev/tty
hello world
【切换至第二个伪终端】
[root@mylab7 ~]# tty
/dev/pts/2
[root@mylab7 ~]# echo "hello pts1" >/dev/pts/1
[root@mylab7 ~]# echo "hello pts1" >/dev/tty
hello pts1

通过上述实验结果,我们可以知道,/dev/tty是一个控制终端,它相当于当前终端的一个链接形式。

5.  当你在伪终端输入一个echo “hello world”/dev/console。这个文件会被传送到哪里去?

是由结果表明,当你输入一个hello world给控制台,那个虚拟终端打开,哪个就会显示出来。我们刚才也说了,控制台和虚拟终端这两个概念已经模糊化了,所以Linux系统是把当前的虚拟终端当成了控制台。

另外,这里要提一下的是,如果你安装了图形环境,那么可以在当前虚拟终端环境下敲入一个命令:startx,这样就会启动图形界面了,在CentOS7中,你在哪个虚拟终端启动的图像界面,你的虚拟终端就是在哪个位置。

以命令行方式登录Linux

这里我们就不介绍图形环境的使用了,因为我们使用的Linux操作系统在大多数情况下都是以命令行方式来进行的。所以我们就来说说,以命令行方式来使用Linux吧。

当我们以命令行的方式登录到系统后,会出现如下形式:

[root@MyLabC7 ~]#

这是Linux登录的一个提示符,由于一个环境变量PS1所设定的。使用命令echo $PS1,显示如下:

[root@MyLabC7 ~]# echo $PS1
[\u@\h \W]\$
\u     the username of the current user
@      分隔符
\h     the hostname up to the first '.'
\W     the  basename  of  the current working directory
\$     if the effective UID is 0, a #, otherwise a $

这里我就以英文展示了,不要害怕英文,我们需要正视它,战胜它

1.1.2 Linux的命令使用

我们说的,Linux的哲学思想之一就是一切皆文件(这个概念已经说了很多遍了),那么我们使用的命令,其实也是以文件的形式存在。也就是说,命令本身就是一个二进制程序文件。现在,为了让大家更理解这个过程,我们举个例子:

比如,在Linux提示符下输入ls这个命令

[root@MyLabC7 ~]# ls
anaconda-ks.cfg

  可以看到,ls将当前工作目录中的内容显示出来了,那么其中发生的过程我们大致说下:

当用户敲入ls 命令的时候,首先键盘驱动程序识别出敲入的内容。然后键盘控制器将它们传递给bash程序,由bash程序来负责查找同名的可执行程序(ls)。如果在/bin/ls 目录中找到了ls,则通过系统调用将ls 的可执行映象读入虚拟内存并开始执行。此时ls已经是一个进程,那么ls进程调用核心的文件子系统来寻找哪些文件是可用的。文件系统使用缓冲过的文件系统信息,或者调用磁盘设备驱动从磁盘上读取信息。当得到这些信息后,ls 将这些信息通过调用显卡控制器写到显示器屏幕上。

    那么bash程序是在哪里找到ls的可执行程序的呢?那么这就要通过一个叫做PATH路径的环境变量来实现了。也就是说,当我们输入一个命令的时候,bash程序就会通过寻找PATH环境变量去找到命令的可执行文件,我们可以使用命令echo $PATH来查看一下PATH中的变量。

[root@MyLabC7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

   由此可以知道,我们二进制程序文件的存放路径是在/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin中,而一个程序的执行就有可能调用某种库,那么库对应的就是文件就是:/usr/lib、/usr/lib64、/usr/local/lib、/usr/local/lib64。

   另外,我们要知道的是,并非所有的命令都对应着一个可执行的二进制文件,因为有些命令是系统自带的内置命令,如cd。我们把有着对应二进制文件的命令叫做外部命令,那么我们要怎样知道它内置命令还是外部命令?这里有个命令,可以查看命令的类型:type

[root@MyLabC7 ~]# type ls
ls is aliased to `ls --color=auto'
[root@MyLabC7 ~]# type cd
cd is a shell builtin        //内置命令
[root@MyLabC7 ~]# type cat
cat is /usr/bin/cat         //外部命令

  好了,理解了这个,现在我们终于可以知道,命令分为两类,内置命令和外部命令。那么不管是内置命令还是外部命令,他们使用格式上大同小异,大概就是这样:

    COMMAND [-Options [arguments] ] [parameters]

COMMAND

表示命令本身,一般是小写。

Option

表示命令的选项,有些选项可以带“-”,有些选项却没有带“-”。选项有长选项和短选项之分。

短选项:-C, 例如-l, -d

       如果同一命令同时使用多个短选项,多数可合并:-l -d = -ld

    长选项:–word, 例如–help, –human-readable

    注意:长选项不能合并;

arguments

有些选项可以带参数,此称为选项参数;

parameters

    这是命令自带的参数,即命令作用的对象,这个对象可能有多个,使用空格隔开。

例如:

[root@MyLabC7 ~]# ls -ld /etc /var
drwxr-xr-x. 78 root root 8192 Oct  3 22:47 /etc
drwxr-xr-x. 19 root root 4096 Oct  3 22:46 /var

1.2 登录Linux之后的一些操作

1.2.1 关闭防火墙

由于我们现在的学习过程中,对防火墙不是很了解,所以这有可能阻碍我们以后的学习,所以在这里,建议大家先关闭防火墙。

1.  首先查看一下防火墙的状态:iptables -L –n

[root@MyLabC7 ~]# iptables -n -L

然后我们发现,有一大堆的规则,那么我们可以使用iptables –F将这些规则清空。

2.  如果你想关闭防火墙,可以使用: systemctl disable firewalld.service。这不过这是暂时的关闭防火墙,如果你开机重启,那么它又处于开启状态

[root@MyLabC7 ~]# systemctl disable firewalld.service

3.      如果你想永远的关闭防火墙,那么可以使用:systemctl stop firewalld.service

[root@MyLabC7 ~]# systemctl stop firewalld.service

    另外要注意的是,我们这里操作的对象是CentOS7,那么对于CentOS6,你可以使用:

临时关闭:~]# service iptables stop

永久关闭:~]# chkconfig iptables off

1.2.2 yum源的配置

这里提前说一下yum源的配置,因为我们的系统是最小化安装,所以有好多软件都没有装,所以导致有些命令不能使用,所以为了使用某些命令,我们这里配置好yum源。使用yum源去安装一些软件包。

这里只简单介绍yum源的安装,在这里,我简单的使用本地光盘作为yum源,具体内容,我们会到软件包的安装的时候详细介绍。

1.  点击Vmwareworkstation中的虚拟机->设置->CD/DVD(IDE),然后勾上右上角那个已连接。

    

blob.png

2.      挂载光盘

[root@MyLabC7 ~]# mount -t iso9660 /dev/sr0 /media
mount: /dev/sr0 is write-protected, mounting read-only

如果想每次开机自动挂载,可以通过编辑/etc/fstab文件。这里我们还是将它设置为开机自动挂载吧

[root@MyLabC7 ~]# vi /etc/fstab

然后进入了一个编辑文件,输入“G”,跳转至文件内容的最后一行,然后再敲入“o”建,可以进行编辑了。编辑的内容如我们的最后一行:

#
# /etc/fstab
# Created by anaconda on Mon Oct  3 04:39:10 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=d869e593-1508-43bb-94c4-98e625f703c5 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sr0             /media                 iso9660     defaults    0   0

然后,输入“:wq”保存编辑并退出,再使用mount –a启动一下,这样就生效了。

[root@MyLabC7 ~]# mount -a
[root@MyLabC7 ~]#

3.      现在配置yum仓库。进入/etc/yum.repos.d/目录中去,使用ls查看一下,发现如下文件

[root@MyLabC7 ~]# cd /etc/yum.repos.d/
[root@MyLabC7 yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo

  4.      除了CentOS-Media.repo外,其它文件都可以删除。

[root@MyLabC7 yum.repos.d]# rm -rf CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Vault.repo CentOS-CR.repo CentOS-Sources.repo  CentOS-fasttrack.repo
[root@MyLabC7 yum.repos.d]# ls
CentOS-Media.repo

5.      编辑CentOS-Media.repo文件。编辑的内容如下:

[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media     //这个改为光盘所挂载的目录
#        file:///media/cdrom/      将这两个文件注释掉
#        file:///media/cdrecorder/ 
gpgcheck=1
enabled=0      //将这个0变成1         
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

6.      目前为止,我们yum源就配置好了,现在我们安装vim工具

[root@MyLabC7 yum.repos.d]# yum install vim -y

 

当安装文件末尾出现一个complete!的时候,说明这个软件已经安装成功了。

1.2.3 网络的配置

如果你在先开始的时候,没有配置好网络,不要紧,现在你也可以配置你的网络。当然,为了确定一下,我们使用ifconfig或ipaddr来查看一下我们的ip地址

[root@MyLabC7 ~]# ifconfig
-bash: ifconfig: command not found
[root@MyLabC7 ~]# ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:e1:2f:45 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.104/24 brd 192.168.10.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee1:2f45/64 scope link
       valid_lft forever preferred_lft forever

 我们发现,当我们使用ifconfig的时候,系统没有找到这个命令,这是因为我们没有安装这个工具的软件包。而我们输入ip addr list的时候,而能够显示出来我们的网络信息,这说明,ip这个工具逐渐取代了ifconfig这个工具。(当然,这是我自己的理解哈)。

如果你非要用ifconfig这个工具,也没关系,使用yum安装就好。

[root@MyLabC7 ~]# yum install net-tools -y

然后使用ifconfig命令就可以查看了。

1.2.4 获取命令的使用帮助

查看命令的类型

  前面我们说过了 ,命令分为内置命令和外部命令,那么要查看命令是属于哪种,可以使用type命令

[root@MyLabC7 ~]# type cd
cd is a shell builtin

  可以看到,cd是Linux的内置命令。那么当然还有外部命令,我们说过,每个外部命令 都对应了一个二进制程序文件。有时候我们可以使用which命令来查看这个命令属于哪个二进制文件。

[root@MyLabC7 ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls

  刚才我们说了,cd是一个内置命令,那么我们使用which来查看一下,看下会有什么样的结果:

[root@MyLabC7 ~]# which cd
/usr/bin/cd

  我们可以发现,内置命令竟然在也存在二进制文件?这是怎么回事?不是说只有外部命令才有的莫?好的,为了解释这个内容,我们再介绍一个命令的使用:file命令。file命令使用来显示一个文件的类型的。刚才ls是外部命令,对应的二进制文件是:/usr/bin/ls。而cd是内置命令,对应的文件是:/usr/bin/cd。现在我们使用file来观察这两个文件。

[root@MyLabC7 ~]# file /usr/bin/ls /usr/bin/cd
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped
/usr/bin/cd: POSIX shell script, ASCII text executable

  那么,我们现在可以来进行解释了,前面我们说过,外部命令对应了一个二进制程序文件,这句话是不错的,因为这个文件里全是二进制,如果你直接使用文本编辑器查看,会显示出来一堆乱码。而/usr/bin/cd我们可以看到,它并不是二进制程序,而是一个可以被执行的纯文本文档,这个文本文档,我们叫做shell脚本。可以使用文本编辑器查看。说到这里,你应该明白了吧,所谓的内置命令,它是shell对应的一个脚本文件,可以在shell中被执行,而外部命令,则是一个二进制应用程序。

内置命令的使用帮助

    现在我们来 说说如何获取命令的使用帮助,对于内置命令,查看的方式是:

格式:help  COMMAND 。如:

[root@MyLabC7 ~]# help cd
cd: cd [-L|[-P [-e]]] [dir]
    Change the shell working directory.
   
    Change the current directory to DIR.  The default DIR is the value of the
    HOME shell variable.
   
    The variable CDPATH defines the search path for the directory containing
    DIR.  Alternative directory names in CDPATH are separated by a colon (:).
    A null directory name is the same as the current directory.  If DIR begins
    with a slash (/), then CDPATH is not used.
   
    If the directory is not found, and the shell option `cdable_vars' is set,
    the word is assumed to be  a variable name.  If that variable has a value,
    its value is used for DIR.

  那么通过这个我们可以知道,cd命令是用来改变当前工作目录,而且我们可以看到cd后面还使用了“[]”这样的格式,那么我再来说说,这是啥意思吧,等了解这个,我们再重新来查看cd命令的使用。

使用简要命令格式中字符意义。

[   ] :可选部分

{a | b} :分组,a和b只能选一个

<   >:必不可省的部分

………:同类内容可以出现多个

  那么现在,我们重新来看一下cd命令,cd是用来改变当前目录的,如果不加任何选项和参数,默认就是进入用户的家目录。可能到现在你还是不懂,没关系,我们到后面会详细讲述相关概念。这里只是教你,怎样使用命令查看帮助。

外部命令的使用帮助

   对于外部命令,如果想获取命令的一些简要信息可以使用:

格式:COMMAND  –help。如:

[root@MyLabC7 ~]# ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

    那么,可以知道ls可以获取文件的详细信息。这是其中一种方法之一,还有一种方法,也是我们以后会经常用到的。那就是使用man手册。

使用man手册

    我们再次说明一下,前面我们说过,对于一个二进制程序来说,应该包括以下四个组成部分:

1.  二进制程序文件

存放在/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin目录中。

那么一个可执行的二进制程序文件可能会调用某种库,那么从哪里调用呢?

2.  库文件

存放在/usr/lib、/usr/lib64、/usr/local/lib、/usr/local/lib64目录中

另外,除了这些,还应该对于这个二进制程序文档进行相关性的说明,也就是帮助文件,那么帮助文件存放在哪里呢?

3.  配置文件

一般存放在/etc目录中

4.  帮助文件

大多数帮助文档存放在/usr/share/man下。

这个帮助文件我们等下再说,我们现在来看看,这个man是如何使用的。

格式:man COMMAND

使用man的都知道,man是将命令的帮助文件分成了各个部分,常见的部分有:

NAME:命令的名字

SYNOPSIS:语法格式

DESCRIPTION:描述

OPTION:选项

EXAMPLES:使用示例

AUTHOR: 作者

BUGS: 报告程序bug的方式

SEE ALSO: 参考

那么一般我们只有阅读NAME、SYSNOPSIS、DESCRIPTION、OPTION这几个选项,对已SYSNOPSIS来讲,我们还应该要了解简要字符的格式:

[   ] :可选部分

{a | b} :分组,a和b只能选一个

<   >:必不可省的部分

………:同类内容可以出现多个

我们刚才说了,man的帮助文件大多数都保存在/usr/share/man下,那么我们可以查看一下这个文件中的内容,使用ls命令。

[root@MyLabC7 ~]# ls /usr/share/man
cs  de  fr  id  ja  man0p  man1p  man2   man3   man3x  man4x  man5x  man6x  man7x  man8x  man9x  pl     ru  sv  zh_CN
da  es  hu  it  ko  man1   man1x  man2x  man3p  man4   man5   man6   man7   man8   man9   mann   pt_BR  sk  tr  zh_TW

  可以看到,man有man1、man2、…、man9。那么这就告诉我们,其实man是分章节来描述的,具体内容如下:

    1   Executable programs or shell commands

    2   System calls (functions provided by the kernel)

    3   Library calls (functions within program libraries)

    4   Special files (usually found in /dev)

    5   File formats and conventions eg /etc/passwd

    6   Games

    7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)

    8   System administration commands (usually only for root)

    9   Kernel routines [Non standard]

   我们可以使用whatis命令来查看命令属于哪个章节,如:

[root@MyLab6 ~]# whatis ls
ls                   (1)  - list directory contents
ls                   (1p)  - list directory contents
[root@MyLab6 ~]# whatis useradd
useradd              (8)  - create a new user or update default new user information
useradd [adduser]    (8)  - create a new user or update default new user information

  要知道的是,whatis是根据一个数据库来搜索我们所需要的数据。在Linux中一切皆文件,数据库文件的就是:/etc/man_db.conf。那么这个文件有什么用呢?我们看个例子:

[root@MyLabC7 ~]# ifconfig
-bash: ifconfig: command not found

  输入ifconfig命令发现没有这个命令,那么现在我们安装一下这个软件包:

[root@MyLabC7 ~]# yum install *ifconfig –y

 安装完成后,我们再使用whatis来查看ifconfig命令属于哪个章节

[root@MyLabC7 ~]# whatis ifconfig
ifconfig: nothing appropriate.

  出现这样的原因是因为ifconfig这个命令是我们刚才安装的,所以它的信息未导入到数据库中去,所以需要使用mandb这个指令来更新数据库。

[root@MyLabC7 ~]#mandb
Purging old database entries in /usr/share/man...
……………………….(出现的信息省略)
[root@MyLabC7 ~]# whatis ifconfig
ifconfig (8)         - configure a network interface

注意:在CentOS6中,更新数据库使用的是makewhatis。

/etc/man_db.conf文件记录了各种可执行文件的帮助文档所存放的路径,比如:

#               *PATH*        ->        *MANPATH*
#
MANPATH_MAP     /bin                    /usr/share/man
MANPATH_MAP     /usr/bin                /usr/share/man
MANPATH_MAP     /sbin                   /usr/share/man
MANPATH_MAP     /usr/sbin               /usr/share/man
MANPATH_MAP     /usr/local/bin          /usr/local/man
MANPATH_MAP     /usr/local/bin          /usr/local/share/man
MANPATH_MAP     /usr/local/sbin         /usr/local/man
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man
MANPATH_MAP     /usr/games              /usr/share/man
MANPATH_MAP     /opt/bin                /opt/man
MANPATH_MAP     /opt/sbin               /opt/man

 由上可知,/bin,/sbin中的二进制文件的帮助文档存放在/usr/share/man中。使用命令whereis  -m 可查看命令的帮助文档存放在哪个位置。如:

[root@MyLabC7 ~]# whereis -m ls
ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
[root@MyLabC7 ~]# whereis -m ls
ls: /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz
[root@MyLabC7 ~]# whereis -m cat
cat: /usr/share/man/man1p/cat.1p.gz /usr/share/man/man1/cat.1.gz

好的,现在我们再来说说,如何阅读man手册:

1)翻屏

                    按键

                        描述

                    B

                  向上翻一屏

                  空格键

                  向下翻一屏

                    K

                  向上翻一页

                  回车键

                  向下翻一页

                  Pgup

                  向上翻半屏

                  Pgdowm

                  向下翻半屏

 

2)文本搜索

            n

           N

         /keyword

        向下搜索

       向上搜索

        ?keyword

        向上搜索

       向下搜索

 

好的,现在man的介绍基本上已经完毕了,现在我们来使用man手册查看man的用法。

[root@MyLabC7 ~]# man man

然后就出现一大堆的内容,安按照我们上述说的方法进行阅读,如:

NAME

man – an interface to the on-line reference manuals

通过NAME我们可以知道,man是一个命令手册的参考接口。

 

SYSNOPSIS

    这里显示的是它的用法格式,当然有很多,具体情况,具体使用。

DESCRIPTION

  man  is the system's manual pager. Each page argument given to man is normally the name of a program, utility or function.
       The manual page associated with each of these arguments is then found and displayed. A section, if provided,  will direct man to look only in that section of the manual.  The default action is to search in all of the available sections, following a pre-defined order and to show only the first page found, even if page exists in several sections.
       The table below shows the section numbers of the manual followed by the types of pages they contain.
 
       1   Executable programs or shell commands
       2   System calls (functions provided by the kernel)
       3   Library calls (functions within program libraries)
       4   Special files (usually found in /dev)
       5   File formats and conventions eg /etc/passwd
       6   Games
       7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
       8   System administration commands (usually only for root)
       9   Kernel routines [Non standard]
 
       A manual page consists of several sections.
 
       Conventional section names include NAME, SYNOPSIS, CONFIGURATION, DESCRIPTION, OPTIONS, EXIT STATUS, RETURN VALUE, ERRORS,ENVIRONMENT, FILES, VERSIONS, CONFORMING TO, NOTES, BUGS, EXAMPLE, AUTHORS, and SEE ALSO.
 
       The following conventions apply to the SYNOPSIS section and can be used as a guide in other sections.
 
       bold text          type exactly as shown.
       italic text        replace with appropriate argument.
       [-abc]             any or all arguments within [ ] are optional.
       -a|-b              options delimited by | cannot be used together.
       argument ...       argument is repeatable.
       [expression] ...   entire expression within [ ] is repeatable.

EXAMPLES

man ls
    Display the manual page for the item (program) ls.
 
man -k printf
    Search the short descriptions and manual page names for the keyword printf  as  regular  expression.   Print  out  any matches.  Equivalent to apropos -r printf.
 
man -f smail
    Lookup  the  manual  pages  referenced  by  smail  and  print  out the short descriptions of any found.  Equivalent to whatis -r smail.

1.2.5 修改语系

这里我们作一下简单的说明,因为很多人觉得安装英文版看不懂英文,其实我觉得什么事都得慢慢习惯,学习英文的好处就是能让你以后的知识面可以更加的宽敞,那么这里不多介绍,还是建议大家使用英语.

1.  使用locale查看语系环境

[root@MyLabC7 ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=


2.  使用命令localectl查看支持哪些语系.

[root@MyLabC7 ~]#localectl list-locales
中文:zh.如:
[root@MyLabC7 ~]#localectl list-locales
[root@MyLabC7 ~]# localectl list-locales|grep zh
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.big5hkscs
zh_HK.utf8
zh_SG
zh_SG.gb2312
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.big5
zh_TW.euctw
zh_TW.utf8

那么我们可以选择zh_CN.utf8或zh_CN.gbk

3.  设置语言环境

查看系统所支持的语言后,你可以选择你所需的语系来进行设置,比如我要安装中文版,那么可以进行如下操作:

[root@MyLabC7 ~]#localectl set-locale.utf8
重启终端
[root@MyLabC7 ~]#locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=

1.2.6 时间管理命令

时钟类型

real-time clock (RTC):通常被称为硬件时钟,一个实时时钟 (RTC),通常被称为一个硬件时钟(通常是一个集成电路在系统板),完全独立于操作系统的当前状态,即使计算机关闭,系统时钟也还会运行。

system clock:通常被称为软件时钟,它是基于实时时钟的初始值和内核来维护的。一旦系统启动,系统时钟初始化,系统时钟和实时时钟便是两码事了。

在CentOS7中,提供了3个时间管理工具,用于配置和显示系统的时间日期,这三个工具分别是:timedatectl,date,hwclock。

timedatectl

timedatectl命令对于CentOS 7来说,是一个新工具,它是systemd系统和服务管理器的一部分。可以用来改变当前的日期和时间,设置时区,或启用自动同步与远程服务器的系统时钟。

1.  显示当前日期和时间

[root@MyLabC7 ~]# timedatectl
      Local time: Sun 2016-09-04 11:52:45 CST    //本地时间
  Universal time: Sun 2016-09-04 03:52:45 UTC   //世界标准时间
        RTC time: Sun 2016-09-04 03:52:45            //硬件时间
       Time zone: Asia/Shanghai (CST, +0800)      //时区
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

2.  改变当前时间

格式:timedatectl set-time CCYY-mm-dd HH:MM:SS。

如,修改时间为2016年9月1号中午12点整

[root@MyLabC7 ~]#timedatectl set-time "2016-09-01 12:00:00"

注意:使用timedatectl改变当前时间的时候,硬件时间也会进行同步更新。

3.  改变时区

    a.查看时区

[root@MyLabC7 ~]# timedatectl list-timezones

    b.改变时区

[root@MyLabC7 ~]# timedatectl set-timezone time_zone

4.  调整硬件时间。

现在,我们知道了,我们的机器里有一个本地时间,还有一个世界标准时间。默认情况下,硬件时间是同步UTC时间的,如果你想将硬件时间同步成本地时间,可以进行如下操作:

[root@MyLabC7 ~]# timedatectl set-local-rtc yes         //同步本地时间
[root@MyLabC7 ~]# timedatectl set-local-rtc no     //同步UTC时间

date

date命令适用于脚本,用来访问软件时间。

格式:date [OPTION]… [+FORMAT]

1.  显示当前日期

[root@MyLabC7 ~]# date
Thu Sep  1 12:56:55 CST 2016

如果我想以utc的时间来显示,可进行如下操作:

[root@MyLabC7 ~]# date –u  或 --utc
Thu Sep  1 04:57:45 UTC 2016

当然,我们还可以自定义格式:

控制序列

描述

%H

小时的HH格式(例如,17)

%M

分钟MM格式(例如,30)

%S

秒钟的SS格式(例如,24)

%d

日期DD格式(例如,16)

%m

月的mm格式(例如,09)

%Y

年的YYYY格式(例如,2013)

%F

完整的日期YYYY-MM-DD格式(例如,2013-09-16)。这个选项=%Y-%m-%d

%T

时间HH:MM:SS格式(例如,17:30:24)。这个选项=%H:%M:%S

 

2.  改变当前日期和时间

格式:date –set  “YY-mm-dd HH:MM:SS”

[root@MyLabC7 ~]# date --set "2016-09-01 13:01:00"
Thu Sep  1 13:01:00 CST 2016

如下你要设置时间为utc时间,那么操作如下:

[root@MyLabC7 ~]# date --set "2016-09-01 13:01:00" --utc
Thu Sep  1 13:01:00 UTC 2016

hwclock

hwclock是用来访问硬件时钟的,要知道的是硬件时钟独立于操作系统使用。在CentOS6中,hwclock在系统开机或重启的时候会自动运行,而在CentOS7中,当系统时钟通过NTP或PTP同步的时候,内核会每隔11分钟自动的同步系统时钟。

1.  显示当前硬件时间

–utc:显示的是本地时间

–localtime:显示的是utc时间

[root@MyLabC7 ~]#  hwclock
Mon 05 Sep 2016 09:59:21 AM CST  -0.599798 seconds

2.  设置日期和时间

格式:hwclock –set –date="yyyy-mm-dd HH:MM:SS"

–utc:以utc形式保存在/etc/adjtime配置文件中

–localtime:以本地形式保存在/etc/adjtime配置文件中。

 [root@MyLab ~]# hwclock --set --date "2016-09-05 10:33" --utc
[root@MyLab ~]# timedatectl
      Local time: Mon 2016-09-05 10:35:57 CST
  Universal time: Mon 2016-09-05 02:35:57 UTC
        RTC time: Mon 2016-09-05 02:33:01
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@MyLab ~]# date
Mon Sep  5 10:36:03 CST 2016
[root@MyLab ~]# date --utc
Mon Sep  5 02:36:08 UTC 2016
[root@MyLab ~]# hwclock           //hwclok默认显示的本地的硬件时间
Mon 05 Sep 2016 10:33:24 AM CST  -0.662492 seconds

3.  硬件时间同步系统时间

-w或–systohc

–utc:以utc方式同步

–localtime:以本地时间的方式同步

[root@MyLab ~]# hwclock -w --localtime
[root@MyLab ~]# timedatectl
      Local time: Mon 2016-09-05 10:51:28 CST
  Universal time: Mon 2016-09-05 02:51:28 UTC
        RTC time: Mon 2016-09-05 10:51:27
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: yes
      DST active: n/a

当你手动设置硬件时间或硬件时间同步系统时间时,hwclock会将配置信息保存在/etc/adjtime文件中。

【小结】

要知道的是,在linux里面有两个时间:

1.  硬件时间

硬件时钟是存储在CMOS里的时钟,关机后该时钟依然运行,主板的电池为它供电。那个时钟依照主板石英晶体振荡器频率工作,在启动系统后,系统从该时钟读取时间信息,之后独立运行。当调整系统时钟或与internet同步后,不会改变硬件时钟,下次启动又会变成硬件时钟的时间

2.  软件时间:

开机时读取硬件时间。当调整系统时钟或与internet同步后,不会改变硬件时钟,下次启动又会变成硬件时钟的时间。

那么我们可以使用命令hwclock来调整硬件时间,在这里,有两个常用的关于hwclock的选项:

-s :把软件时钟设置成和硬件时钟一样。

-w:把硬件时钟设置为软件时钟一样。

1.2.7 关机管理命令

在CentOS7中,systemctl工具代替了大量的电源管理工具,在之前的版本的开机重启命令在CentOS7中仍然适用,只不过建议使用systemctl工具。

关机

对于一个系统来说,若不正常关机,则可能造成文件系统的毁损(因为来不及将数据写回到文件中,所以有些服务的文件会有问题)。

关机前要注意一下情况:

1.      观察系统的使用状态

用户在线状态:who

[root@MyLab ~]# who
wali     pts/0        2016-09-03 21:00 (192.168.10.1)

网络状态:netstat –an(后续章节讲述)

进程状态:ps –aux (后续章节讲述)          

2. 通知在线使用者关机的时刻

3. 将数据同步到磁盘:sync

常见的关机命令:

shutdownsystemctl haltsystemctl poweroff

在CentOS 7中,systemctl工具提供了系统关机命令,并且传统的shutdown命令还能够使用,只不过在使用传统的shutdown命令的时候,将会调用systemctl程序来执行关机指令,而且shutdown命令还可以设置关机前的警告,取消关机等操作,这也算是它的一种优势了吧。

我们现在man shutdown查看一下

man  shutdown
NAME
       shutdown - Halt, power-off or reboot the machine
 
SYNOPSIS
       shutdown [OPTIONS...] [TIME] [WALL...]
                                                                                           
OPTIONS:
-k:不会真的关机,只是发出警告信息
-r [time]:将系统服务停掉之后就重启
-h [time]:将系统服务停掉之后就关机
-c:取消已经在进行的shutdown指令
time:系统指定,若没有这个项目,则默认1分钟。
now:马上关机

使用systemctl命令

关闭系统,关闭机器电源。

[root@MyLab ~]# systemctl poweroff

关闭系统,但是没有关掉机器电源。

[root@MyLab ~]# systemctl halt

 

重启

[root@MyLab ~]# systemctl reboot

 

挂起系统

[root@MyLab ~]# systemctl suspend

 这个指令将会在内存中保存系统状态,不可断电,不然运行的程序都会消失,如果要重新使用系统,系统恢复快速,不过缺点就是在这个过程中不可断电。

系统的休眠

[root@MyLab ~]# systemctl hibernate

 系统的休眠是指,将系统状态保存在磁盘上,但你再次需要使用的时候,系统再次恢复而无需重启,这个过程中可以断掉电源,不过恢复的过程会要慢些。



原创文章,作者:N24_小辉,如若转载,请注明出处:http://www.178linux.com/54917

(0)
N24_小辉N24_小辉
上一篇 2016-10-27
下一篇 2016-10-27

相关推荐

  • haproxy 动静分离负载均衡、​stats页面实现​。

    实验环境:一台主机提供haproxy、nfs、mariadb,后端2台apache部署wordpress。 实验目的:haproxy使得动静分离、以及开启stats页面。 haproxy简单介绍 负载均衡的解决方案,支持4、7层,特点是单进程模型(可配置为多进程模型)单进程能支持非常大的并发链接数量(相比较其他软件)。 到今天,马哥课程中的负载均衡方案(lv…

    Linux干货 2017-02-18
  • 第六周

      第6周   1 复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; cp /etc/rc.d/rc.sysinit ; sed -i 's@^[[:space:]]\+@#@g&#03…

    Linux干货 2017-02-13
  • Centos7基于虚拟主机的Lamp配置bbs、Blog、PhpMyAdmin应用程序

    Centos7实现基于虚拟主机的各应用程序搭建: 一、配置三个基于名称的虚拟主机;      (a) discuzX      (b) wordpress      (c) https: phpMyAdmin 1.安装Lamp环境及安装mo…

    Linux干货 2016-10-09
  • rpm实现LAMP

    rpm实现LAMP部署 LAMP概述 LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件) 和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台。常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同…

    Linux干货 2016-11-02
  • 马哥教育网络班22期+第9周课程练习

    week9: 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin); 分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # SHELL1="/sbin/nologin" declare -i sum1=sum2=0 for&nb…

    Linux干货 2016-10-17
  • grep与基本正则表达式基本用法

    正则表达式:Regual Expression  REGEXP      由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字母意义,而是用于表示控制或通配的功能;       分两类:             &nbsp…

    Linux干货 2016-11-03

评论列表(2条)

  • N24_小呆
    N24_小呆 2016-10-27 14:25

    厉害了,我的歌。

  • 马哥教育
    马哥教育 2016-11-02 15:53

    总结的不错,希望你能熟知这些基础的命令,加油!