1. 按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。

Linux发行版很多,但具体的做法大同小异,就是使用Linux内核在根据需要整合需要的软件,来做成操作系统发布。在众多Linux发行版本中有几大知名版本和众多不知名的版本。

业内比较流行的版本:国内红帽的REHL系列,CENTOS系列,欧洲SUSE系列,还有Ubuntu系列当然国内也有公司使用Ubuntu作为生产环境服务器,日本的托林斯系列等。但是它们都遵循GNU相关规范。


Linux系统安装

Linux系统安装的介质通常有光盘,U盘,网络三种。

Linux系统的安装形式有图形界面安装,字符界面安装,以及无人值守的kickstart安装

详细步骤可参看网上的介绍。


2. 说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。


系统安装好就可以登录了。如果安装时没有创建一个普通用户,就使用root用户来登录,

在命令行提示符中输入用户名root,以及root用户对应的密码

事例中使用CentOS6.6版

CentOS release 6.6(final)

Kernel 2.6.32-504.el6.x86_64 on an x86_64

localhost login:root

Password:

实际上密码在命令行是无法看到的,如果用户名和密码都正确,会登录到root用户的工作目录

[root@localhost ~]# 

这时你可以使用tty命令查看,当前用户是使用那个终端登录的。

[root@localhost ~]# tty

/dev/tty3

显示的结果不一定一样,但是无非是/dev/tty1~/dev/tty6系统默认有六个虚拟终端,

如果使用SSH登录工具比如Secure Shell的话,输入tty

[root@localhost ~]# tty

/dev/pts0

这个可能会有很多,只是可能(根据具体情况)。主要是模拟终端。

通过快捷键Ctrl+Alt+F1~F6的任何一个可以切换六个虚拟终端


[root@localhost ~]# startx

在某个虚拟终端上输入startx命令可以启动一个GUI图形界面来管理(图形终端即模拟终端)。

具体什么界面不同的发行版不一样,但是图形终端在实际工作中基本不用,

所以只是简单介绍。Ctrl+Alt+Fn(n可能是1~n中的任何一个数字根据具体情况而定)可以在命令行终端和图形终端进行切换。在图形终端打开一个console窗口

[root@localhost ~]#tty

/dev/pts2

可能会显示出不同的结果可能是/dev/ptsn(n代表某个数字)


要查看当前登录用户所在的目录可以使用pwd命令

[root@localhost pts]#pwd

/dev/pts

[root@localhost pts]#cd

[root@localhost ~]#pwd

/root

练习几次就会了


如果你想查看当前用户的系统变量(环境变量)比如$PS1 $PS2(命令行提示符的设置)

可以进行如下操作

[root@localhost ~]#echo $PS1

[\u@\h \W]\$

[root@localhost ~]#echo $PS2

>

输出结果随实际的环境变量设置而不同。


显示当前用户使用的shell程序

[root@localhost ~]# echo $SHELL

/bin/bash

[root@localhost ~]# echo ${SHELL}

/bin/bash


如果你要查看或管理历史命令可以如下使用

当用户登录时,其执行的命令会放在相应的系统缓存中,当用户登出时,命令会被保存到

登录用户工作目录的.bash_history文件里。

先清空当前目录下的.bash_history文件

[root@localhost ~]# cat /dev/null > .bash_history

[root@localhost ~]# cat .bash_history

[root@localhost ~]# 

文件里没有任何数据了,在命令行里输入

[root@localhost ~]# history

 672  ls

  673  ls -a

  674  vi .bash_history 

  675  ll

  676  cat /dev/null > .bash_history

  677  vi .bash_history

  678  cat .bash_history

  679  history

有679条数据,登出系统

[root@localhost ~]# logout

再次进入

[root@localhost ~]# cat .bash_history

history

vi .bash_profile

vi .bash_hisotry

ll

ll -a

ls

ls -a

vi .bash_history 

ll

cat /dev/null > .bash_history

vi .bash_history

cat .bash_history

history

logout

原有的历史命令消失了,新的历史命令被记录到了.bash_history文件里。

要清除当前登录用户缓存的历史命令使用如下命令

[root@localhost ~]# history -c

[root@localhost ~]# history

    1  history

同时你可以使用

[root@localhost ~]# help history来查看history命令的其他相关命令行选项

有了history就可以使用!#(#代表某个历史命令序号)再次执行该命令

[root@localhost ~]# history

187  cd /var/log/

  188  ls

  189  less messages

部分截取,这时可使用

[root@localhost ~]# !187

cd /var/log/

[root@localhost log]# pwd

/var/log

进入/var/log目录

[root@localhost log]# !!

pwd

/var/log

使用!!执行上一条命令

 207  cat messages

  208  cat maillog

  209  history

[root@localhost log]# !cat

cat maillog

Dec  1 12:26:59 localhost postfix/postfix-script[1763]: starting the Postfix mail system

Dec  1 12:26:59 localhost postfix/master[1765]: daemon started -- version 2.6.6, configuration /etc/postfix

利用history可以调用最近一次以命令名开头的执行过的命令


如果想查看或设置当前系统的时间可以使用date命令

使用如下方法可查看date命令的帮助

[root@localhost ~]# date --help

[root@localhost ~]# man 1 date


常用的date命令以及选项

[root@localhost ~]# date

Fri Oct 28 11:50:30 EDT 2016

[root@localhost ~]# date +%c

Fri 28 Oct 2016 11:56:02 AM EDT

不同时区的日期时间是不一样的

[root@localhost ~]# date

Sun Dec  4 13:53:13 CST 2016

[root@localhost ~]# date +%c

Sun 04 Dec 2016 01:53:16 PM CST


[root@localhost ~]# date

Fri Oct 28 11:50:30 EDT 2016

[root@localhost ~]# date +%c

Fri 28 Oct 2016 11:56:02 AM EDT

不同时区的日期时间是不一样的

[root@localhost ~]# date

Sun Dec  4 13:53:13 CST 2016

[root@localhost ~]# date +%c

Sun 04 Dec 2016 01:53:16 PM CST


[root@localhost ~]# date +%D

12/04/16

[root@localhost ~]# date +%F

2016-12-04

[root@localhost ~]# date +%T

13:56:18

[root@localhost ~]# date +%x

12/04/2016

[root@localhost ~]# date +%X

01:57:09 PM

[root@localhost ~]# date +%Z

CST

[root@localhost ~]# date +%z

+0800

[root@localhost ~]# date +%F-%H-%M-%S

2016-10-28-12-02-19

[root@localhost ~]# date +%F\ %H-%M-%S

2016-10-28 12-02-47


date 设置时间

date [MMDDhhmm[[CC]YY][.ss]]


MM: 月份

DD: 几号

hh: 小时

mm: 分钟

YY: 两位年份

CCYY: 四位年份

.ss: 秒钟

[root@localhost ~]# date 1114154016.23

Mon Nov 14 15:40:23 EST 2016

[root@localhost ~]# date 111415402016.23

Mon Nov 14 15:40:23 EST 2016


要进行Linux系统时钟和硬件时钟之间的互相同步可以使用hwclock命令

使用如下方法可查看hwclock命令的帮助

[root@localhost ~]# man 8 hwclock

[root@localhost ~]# hwclock --help


[root@localhost ~]# hwclock 

Mon 14 Nov 2016 04:02:53 PM EST  -0.016720 seconds


系统时钟与硬件时钟同步

[root@localhost ~]# hwclock -s

硬件时钟与系统时钟同步

[root@localhost ~]# hwclock -w


如果要关闭Linux系统可使用shutdown、poweroff命令

关闭系统

[root@localhost ~]# man 8 poweroff

[root@localhost ~]# poweroff --help


[root@localhost ~]# poweroff -p


[root@localhost ~]# man 8 shutdown

[root@localhost ~]# shutdown --help


[root@localhost ~]# shutdown -hP now

TIME:

now: 立刻

+m: 相对时间表示法,从命令提交开始多久之后,例如:+3(三分钟后)

hh:mm: 绝对时间表示,指明具体时间(24小时制)

取消关机

[root@localhost ~]# shutdown -c


重启系统

[root@localhost ~]# man 8 reboot

[root@localhost ~]# reboot --help


[root@localhost ~]# reboot

如果要修改和定义当前用户的环境变量可使用export命令

获取export命令的相关帮助

[root@localhost ~]# help export

只对当前shell进程以及其子shell有效


显示当前用户定义过的环境变量和函数

[root@localhost ~]# export -p


修改HISTCONTROL环境变量

[root@localhost ~]# echo $HISTCONTROL

ignorespace

[root@localhost ~]# export HISTCONTROL="ignoredups"

[root@localhost ~]# echo $HISTCONTROL

ignoredups

当前用户定义自己的环境变量

[mysql@localhost ~]$ export PYTHON2=/home/mysql/python2712

[mysql@localhost ~]$ echo $PYTHON2

/home/mysql/python2712


如果要查看当前系统的网卡信息,以及ip地址,网关等信息可使用ifconfig命令

获取ifconfig命令的相关帮助


[root@localhost tmp]# man 8 ifconfig

[root@localhost tmp]# ifconfig --help


最常用的用法

[root@localhost tmp]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:3E:96:BE  

          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe3e:96be/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:28371 errors:0 dropped:0 overruns:0 frame:0

          TX packets:25009 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:2934211 (2.7 MiB)  TX bytes:5896460 (5.6 MiB)


lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)



3. 如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的


如果想得到Linux系统上命令的帮助信息可以使用如下途径

1 内部命令

使用type加help来找到

[root@localhost log]# type pwd

pwd is a shell builtin

[root@localhost log]# help pwd

pwd: pwd [-LP]

    Print the name of the current working directory.

    

    Options:

      -L        print the value of $PWD if it names the current working

        directory

      -P        print the physical directory, without any symbolic links

    

    By default, `pwd' behaves as if `-L' were specified.

    

    Exit Status:

    Returns 0 unless an invalid option is given or the current directory

    cannot be read.


2 外部命令自带的

COMMAND --help

COMMAND -h

例如

[root@localhost log]# ls --help

[root@localhost bin]# df --help

3 使用man手册

例如

[root@localhost bin]# man bash

[root@localhost bin]# man free

4 使用info信息页

例如

[root@localhost bin]# info rm

5 使用程序自身的帮助文档

README

INSTALL

ChangeLog

   /usr/share/doc

6 程序官方文档

7 发行版的官方文档

8 神器GOOGLE


man手册分为如下几大部分

man 1   User COMMAND用户命令

man 2   Linux Programmer's Manual 系统调用 Linux系统程序员手册

man 3   C Library CallingC库  Linux系统程序员手册

man 4   Device File设备       Linux系统程序员手册

man 5   Configuration File  配置文件 Linux系统程序员手册

man 6   Game游戏     Linux系统程序员手册

man 7   杂项杂项     Linux系统程序员手册

man 8   System Administration 系统管理


4. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。


文件管理命令:

cp, mv, rm

cp 复制文件(目录)

[root@localhost ~]# cp /etc/fstab /tmp/abc.txt

[root@localhost ~]# cp /etc/fstab  /tmp/abc.txt

cp: overwrite `/tmp/abc.txt'? n

[root@localhost ~]# mkdir -p /tmp/abc

[root@localhost ~]# cp /etc/fstab /tmp/abc

[root@localhost ~]# ls /tmp/abc

fstab

[root@localhost ~]# cp /etc/fstab /etc/inittab /tmp/xyz

cp: target `/tmp/xyz' is not a directory

[root@localhost ~]# mkdir -pv /tmp/xyz

mkdir: created directory `/tmp/xyz'

[root@localhost ~]# cp /etc/fstab /etc/inittab /tmp/xyz

[root@localhost ~]# cp /etc/rc.d /tmp

cp: omitting directory `/etc/rc.d'

[root@localhost ~]# cp -r /etc/rc.d /tmp/

[root@localhost ~]# touch /tmp/pam.d

[root@localhost ~]# cp -rv /etc/pam.d /tmp/pam.d

cp: cannot overwrite non-directory `/tmp/pam.d' with directory `/etc/pam.d'

[root@localhost ~]# cp -rv /etc/security/ /tmp

[root@localhost ~]# ls /tmp/security/

[root@localhost ~]# mkdir -pv /tmp/securitydir

mkdir: created directory `/tmp/securitydir'

[root@localhost ~]# cp -rv /etc/security/ /tmp/securitydir/

[root@localhost ~]# rm -rf /tmp/securitydir/

[root@localhost ~]# cp -rv /etc/security/ /tmp/securitydir/

[root@localhost ~]# ls /tmp/securitydir/

[root@localhost ~]# cp -rv /etc/security/ /tmp/security

cp: cannot overwrite non-directory `/tmp/security' with directory `/etc/security/'

[root@localhost ~]# rm -rf /tmp/security

[root@localhost ~]# cp -rv /etc/security/ /tmp/security

[root@localhost ~]# mkdir -pv /tmp/security

mkdir: created directory `/tmp/security'

[root@localhost ~]# cp -rv /etc/security/ /tmp/security


[root@localhost ~]# ls /tmp/security

security

[root@localhost ~]# ls /tmp/security/security/

mv 移动文件(目录)

[root@localhost ~]# mv /tmp/abc.txt /var/tmp/ab.txt

[root@localhost ~]# mv /tmp/pam /var/tmp/pam.d

[root@localhost tmp]# mv mageedu/ mageedu.com

rm 删除文件(目录)

t@localhost tmp]# rm abc

rm: cannot remove `abc': Is a directory

[root@localhost tmp]# rm -r abc

rm: descend into directory `abc'? n

[root@localhost tmp]# rm -rf abc

绝对禁止如下操作,否则会后悔

[root@localhost ~]# rm -rf /*

[root@localhost ~]# rm -rf /


5. bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。


命令的执行结果状态

成功

失败

bash使用特殊变量$?保存最近一条命令的执行状态结果:

0:成功

1-255:失败

[root@localhost ~]# ls /var

account  cache  crash  cvs  db  empty  games  gdm  lib  local  lock  log  mail  nis  opt  preserve  run  spool  tmp  www  yp

[root@localhost ~]# echo $?

0

[root@localhost ~]# mkdir /tmp/test3

[root@localhost ~]# mkdir /tmp/test3

mkdir: cannot create directory `/tmp/test3': File exists

[root@localhost ~]# echo $?

1

[root@localhost ~]# mkddir /tmp/test4

-bash: mkddir: command not found

[root@localhost ~]# echo $?

127

命令行展开

~: 展开用户的主目录(家目录)

~USERNAME:展开指定用户的主目录(家目录)

{}: 可承载一个以逗号分隔的列表,并将其展开为多个路径

/tmp/{a,b} = /tmp/a, /tmp/b

/tmp/hi/{tom, jerry}

/tmp/{tom, jerry}/hi

创建/tmp目录下的:x_m, y_m, x_n, y_n

mkdir -pv /tmp/{x,y}_{m,n}

创建/tmp目录下的:/tmp/bin, /tmp/sbin, /tmp/usr,/tmp/usr/bin, /tmp/usr/sbin

mkdir -pv /tmp/{bin,sbin,usr/{bin,sbin}}

6. 请使用命令行展开功能来完成以下练习:


创建/tmp目录下的:a_c, a_d, b_c, b_d

mkdir -pv /tmp/{a_,b_}{c,d}

创建/tmp/mylinux目录下的目录树:

mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var,lock,log,run}


7. 文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。


[root@localhost ~]# ls -l /etc/fstab 

-rw-r--r--. 1 root root 719 Dec  2 18:13 /etc/fstab


最左侧的第一位,文件类型

-, d, l, b, c, p, s

后面九位, 文件访问权限(permissions)

后面数字     文件被硬链接的次数

后面字符     文件的所有者

后面字符     文件的所有者所在组

后面字符     文件大小

Dec  2 18:13    文件最近一次被修改的时间(文件内容改变)只要文件被修改就一定会改变

文件名称


[root@localhost tmp]# stat /etc/fstab 

  File: `/etc/fstab'

  Size: 719             Blocks: 8          IO Block: 4096   regular file

Device: 802h/2050d      Inode: 1048841     Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2016-12-06 21:19:22.983011260 +0800

Modify: 2016-12-02 18:13:17.650999815 +0800

Change: 2016-12-02 18:13:17.746999963 +0800


使用touch命令可修改文件的最近一次访问时间atime,和最近一次mtime


8. 显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。


ls -d /var/l*[0-9]*[[:lower:]]

ls /var | grep "^l.*[[:digit:]]\+.*[[:lower:]]$"


9. 显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。


ls -d /etc/[0-9]*[^0-9]

ls /etc | grep "^[0-9].*[^0-9]$"

ls /etc | grep "^[[:digit:]].*[^[:digit:]]$"


10. 显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。


ls -d /etc/[^[:alpha:]][[:alpha:]]*

ls /etc | grep "^[^[:alpha:]][[:alpha:]]\+.*"


11. 在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-09-20-09-32-22。


mkdir -pv /tmp/tfile-`date +%F-%H-%M-%S`


12. 复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。


ls -d /etc/*.d

ls /etc | grep ".*.d$"

mkdir -pv /tmp/mytest2

cp -arv /etc/*.d /tmp/mytest2

cp -a /etc/*.d /tmp/mytest2


13. 复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。


ls /etc | grep "^[lmn].*.conf$"

ls /etc/[lmn]*.conf

mkdir -pv /tmp/mytest3

cp -arv /etc/[lmn]*.conf /tmp/mytest3

cp -a /etc/[lmn]*.conf /tmp/mytest3