magedu basic 第一次作业

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Linux的主流发行版本分为:slackware、debian及redhat。

其中很多发行商通过以上三个版本的开源代码进行二次开发甚至于三次开发,得出的主流版本结构图如下:

slackware

suse

sles:suse的企业级发行版

opensuse:suse的开源发行版



debian:唯一一个由社区组织维护的发行版

ubuntu:debian的二次发行版,也是迄今为止最能被用户接受的linux桌面系统。

mint:ubuntu的二次发行版,debian的三次发行版,有多种桌面版本供用户选择。

deepinos:由深之度(深度)公司开发的一款切合国人使用习惯的桌面linux系统,起先基于ubuntu,现基于debian。



redhat

rhel:redhat的企业版

fedora:redhat的社区维护版,目的用于测试最新的软件和驱动。

centos:由redhat开源代码用完全兼容rhel的格式重新编译而成,后被redhat招安,成为官方开源版本。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# ifconfig用于查看当前网络信息,获取IP地址及网卡相关信息

[hzz@e25f88eebde1 ~]$ ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 648 (648.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[hzz@e25f88eebde1 ~]$

# echo用于输出指定内容,可使用-e参数输出特定格式,具体支持的格式可通过man echo查看

[hzz@e25f88eebde1 ~]$ echo 123
123
[hzz@e25f88eebde1 ~]$ echo -e "\n123\n"

123

[hzz@e25f88eebde1 ~]$

# tty用于显示当前连接的终端类型

[hzz@e25f88eebde1 ~]$ tty
/dev/console
[hzz@e25f88eebde1 ~]$

# startx用于启动gnome桌面

# export用于设定系统变量

[hzz@e25f88eebde1 ~]$ export hzz=handsomeBoy
[hzz@e25f88eebde1 ~]$ echo $hzz
handsomeBoy
[hzz@e25f88eebde1 ~]$

# pwd用于显示当前位置的绝对路径
# -L 显示逻辑路径,默认
# -P 显示物理路径

[hzz@e25f88eebde1 ~]$ ln -s /usr/local local
[hzz@e25f88eebde1 ~]$ cd local/
[hzz@e25f88eebde1 local]$ pwd -L
/home/hzz/local
[hzz@e25f88eebde1 local]$ pwd -P
/usr/local
[hzz@e25f88eebde1 local]$

# history用于显示历史命令
# -c 用于清空历史命令
# -n 显示历史记录中的第几行命令
# 还可以通过以下系统变量来控制历史命令的记录:
# HISTCONTROL=ignoredups; # 忽略连续重复的命令
# HISTCONTROL=ignorespace; # 忽略以空格开头的命令
# HISTCONTROL=ignoreboth; # 上述两者都生效
# 更多功能可通过man history查看

[hzz@VM_203_97_centos ~]$ history -c
[hzz@VM_203_97_centos ~]$ export HISTCONTROL=ignoreboth
[hzz@VM_203_97_centos ~]$ ls # 此命令不记录
test.sh
[hzz@VM_203_97_centos ~]$ echo 111
111
[hzz@VM_203_97_centos ~]$ echo 111 # 此重复命令不记录
111
[hzz@VM_203_97_centos ~]$ history
1 2016-12-08 22:30:50 export HISTCONTROL=ignoreboth
2 2016-12-08 22:31:05 echo 111
3 2016-12-08 22:31:10 history
[hzz@VM_203_97_centos ~]$

# shutdown关机命令
# -h 关机
# -r 重启
# -s 睡眠
# -c 取消
# 后面跟时间设置倒计时

[hzz@VM_203_97_centos ~]$ sudo shutdown -h 10
[sudo] password for hzz:
Shutdown scheduled for 日 2016-12-11 18:23:10 CST, use 'shutdown -c' to cancel.
[hzz@VM_203_97_centos ~]$
Broadcast message from root@VM_203_97_centos (Sun 2016-12-11 18:13:10 CST):

The system is going down for power-off at Sun 2016-12-11 18:23:10 CST!


[hzz@VM_203_97_centos ~]$ sudo shutdown -c

Broadcast message from root@VM_203_97_centos (Sun 2016-12-11 18:13:20 CST):

The system shutdown has been cancelled at Sun 2016-12-11 18:14:20 CST!

[hzz@VM_203_97_centos ~]$

# poweroff是关机命令
# root直接执行即可关机
# -f 强制关机

# reboot是重启命令
# root直接执行即可重启
# 用法和poweroff相似

# hwclock查看及设置硬件时钟
# -s 从硬件时钟设置系统时间
# -w 从当前系统时间设置硬件时钟

# date用于查看及设置系统时钟
# 一般用于格式化时间输出,如:

[hzz@e25f88eebde1 ~]$ date +%Y-%m-%d-%H-%M-%S
2016-12-11-10-25-25
[hzz@e25f88eebde1 ~]$

# 更多格式及功能可通过man date查看

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 获取命令的帮助信息方式有以下集中,以XXX命令为例:

type XXX; # 用于获取命令是否是内建命令
help XXX; # 主要用于内建命令
man XXX; # 使用手册
info XXX; # 获取信息页
XXX --help; # 程序内建的帮助信息
XXX -h; # 程序内建的帮助信息

# 除了以上方式,还可以查看官方文档及借助搜索引擎。

# man文档的章节划分:

# 为了区分命令权限,man分为9个章节,存放于/usr/share/man目录。

# man1: 用户命令
# man2: 系统调用
# man3: C库调用
# man4: 设备文件及特殊文件
# man5: 配置文件格式
# man6: 游戏
# man7: 杂项
# man8: 管理类的命令

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 常用的文件管理类命令有:cp,mv,rm

# cp是一个拷贝命令,的常用参数:
# -i # 交互式
# -r # 递归
# -a # 全属性复制(包含-dR --preserve=all)
# 示例:

[hzz@e25f88eebde1 ~]$ cp -i test.txt /tmp/
cp: overwrite '/tmp/test.txt'? y
[hzz@e25f88eebde1 ~]$

[hzz@e25f88eebde1 ~]$ ls -ld test
drwxrwxr-x 2 hzz hzz 6 Dec 9 08:09 test
[hzz@e25f88eebde1 ~]$ cp -r test /tmp/
[hzz@e25f88eebde1 ~]$ ls -ld /tmp/test
drwxrwxr-x 3 hzz hzz 17 Dec 9 08:11 /tmp/test
[hzz@e25f88eebde1 ~]$

[hzz@e25f88eebde1 ~]$ ln -s test.txt test123
[hzz@e25f88eebde1 ~]$ cp -a test123 /tmp/test
[hzz@e25f88eebde1 ~]$ ls -l /tmp/test
total 0
lrwxrwxrwx 1 hzz hzz 8 Dec 9 08:17 test123 -> test.txt
[hzz@e25f88eebde1 ~]$

# mv命令相当于windows下的剪切粘贴,可用于移动文件或文件夹,也可用户给文件或文件夹重命名。
# 常用参数有-i和-f,参数功能和cp命令的类似。
# 使用示例:

[hzz@e25f88eebde1 ~]$ touch 123
[hzz@e25f88eebde1 ~]$ mkdir 123dir
[hzz@e25f88eebde1 ~]$ ls
123 123dir
[hzz@e25f88eebde1 ~]$ mv 123 123dir/
[hzz@e25f88eebde1 ~]$ tree
.
`-- 123dir
`-- 123

1 directory, 1 file
[hzz@e25f88eebde1 ~]$ mv 123dir 456dir
[hzz@e25f88eebde1 ~]$ tree
.
`-- 456dir
`-- 123

1 directory, 1 file
[hzz@e25f88eebde1 ~]$

# rm命令用于删除文件和文件夹,常用的参数有-i,-r和-f,参数功能和cp命令的类似。
# 人为操作尽量使用-i选项,避免使用-f选项,除非是删除含有大量文件的文件夹并进行反复确认。
# 使用示例:

[hzz@e25f88eebde1 ~]$ rm -ir 456dir/
rm: descend into directory '456dir/'? y
rm: remove regular empty file '456dir/123'? y
rm: remove directory '456dir/'? y
[hzz@e25f88eebde1 ~]$

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# bash的命令执行状态返回通过$?显示,其中0代表执行成功,1-255代表各种错误,如:

[root@e25f88eebde1 ~]# mkdir -p /tmp/123
[root@e25f88eebde1 ~]# echo $?
0
[root@e25f88eebde1 ~]# mkdir /tmp/123
mkdir: cannot create directory '/tmp/123': File exists
[root@e25f88eebde1 ~]# echo $?
1
[root@e25f88eebde1 ~]# mmkdir /tmp/123
bash: mmkdir: command not found
[root@e25f88eebde1 ~]# echo $?
127
[root@e25f88eebde1 ~]#

# 命令行展开,~默认展开为当前用户${HOME}路径,~username展开为指定用户${HOME}路径,如:

[root@e25f88eebde1 tmp]# cd /tmp
[root@e25f88eebde1 tmp]# pwd
/tmp
[root@e25f88eebde1 tmp]# cd ~
[root@e25f88eebde1 ~]# pwd
/root
[root@e25f88eebde1 ~]# cd ~hzz
[root@e25f88eebde1 hzz]# pwd
/home/hzz
[root@e25f88eebde1 hzz]#

# 命令行展开,{}以逗号分隔,展开进行轮询,如:

[root@e25f88eebde1 ~]# echo {123,456}789
123789 456789
[root@e25f88eebde1 ~]#

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

(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

1
2
3
4
5
6
7
8
9
10
11
12
[root@e25f88eebde1 ~]# mkdir -pv /tmp/{a,b}_{c,d}
mkdir: created directory '/tmp/a_c'
mkdir: created directory '/tmp/a_d'
mkdir: created directory '/tmp/b_c'
mkdir: created directory '/tmp/b_d'
[root@e25f88eebde1 ~]# tree /tmp|egrep 'tmp|a|b'
/tmp
|-- a_c
|-- a_d
|-- b_c
|-- b_d
[root@e25f88eebde1 ~]#

(2)、创建/tmp/mylinux目录下的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@e25f88eebde1 ~]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/initd.d,sysconfig/network-script},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var,lock,log,run}
mkdir: created directory '/tmp/mylinux'
mkdir: created directory '/tmp/mylinux/bin'
mkdir: created directory '/tmp/mylinux/boot'
mkdir: created directory '/tmp/mylinux/boot/grub'
mkdir: created directory '/tmp/mylinux/dev'
mkdir: created directory '/tmp/mylinux/etc'
mkdir: created directory '/tmp/mylinux/etc/rc.d'
mkdir: created directory '/tmp/mylinux/etc/rc.d/initd.d'
mkdir: created directory '/tmp/mylinux/etc/sysconfig'
mkdir: created directory '/tmp/mylinux/etc/sysconfig/network-script'
mkdir: created directory '/tmp/mylinux/lib'
mkdir: created directory '/tmp/mylinux/lib/modules'
mkdir: created directory '/tmp/mylinux/lib64'
mkdir: created directory '/tmp/mylinux/proc'
mkdir: created directory '/tmp/mylinux/sbin'
mkdir: created directory '/tmp/mylinux/sys'
mkdir: created directory '/tmp/mylinux/tmp'
mkdir: created directory '/tmp/mylinux/usr'
mkdir: created directory '/tmp/mylinux/usr/local'
mkdir: created directory '/tmp/mylinux/usr/local/bin'
mkdir: created directory '/tmp/mylinux/usr/local/sbin'
mkdir: created directory '/tmp/mylinux/var'
mkdir: created directory '/tmp/mylinux/lock'
mkdir: created directory '/tmp/mylinux/log'
mkdir: created directory '/tmp/mylinux/run'
[root@e25f88eebde1 ~]# tree /tmp/mylinux/
/tmp/mylinux/
|-- bin
|-- boot
| `-- grub
|-- dev
|-- etc
| |-- rc.d
| | `-- initd.d
| `-- sysconfig
| `-- network-script
|-- lib
| `-- modules
|-- lib64
|-- lock
|-- log
|-- proc
|-- run
|-- sbin
|-- sys
|-- tmp
|-- usr
| `-- local
| |-- bin
| `-- sbin
`-- var

24 directories, 0 files
[root@e25f88eebde1 ~]#

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 文件元数据信息查看方式为stat命令,含义如下:

[root@e25f88eebde1 ~]# stat anaconda-ks.cfg
File: 'anaconda-ks.cfg'
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 46137615 Links: 1
Access: (0600/-rw-------) # 访问权限 Uid: ( 0/ root) # 属主 Gid: ( 0/ root) # 用户组
Access: 2016-12-04 11:53:25.566083527 +0000 # 访问时间(文件被访问)
Modify: 2016-12-04 11:52:39.028907358 +0000 # 修改时间(文件被修改)
Change: 2016-12-04 11:52:39.028907358 +0000 # 变更时间(文件元数据变更)
Birth: -
[root@e25f88eebde1 ~]#

# 修改文件时间戳

# 修改访问时间:

[root@e25f88eebde1 ~]# touch -a -t 201612081312.50 ks-script-1holkM
[root@e25f88eebde1 ~]# stat ks-script-1holkM
File: 'ks-script-1holkM'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 46145311 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-08 13:12:50.000000000 +0000
Modify: 2016-12-09 05:39:11.610559438 +0000
Change: 2016-12-09 05:39:11.610559438 +0000
Birth: -
[root@e25f88eebde1 ~]#

# 修改文件修改时间:

[root@e25f88eebde1 ~]# touch -m -t 201612081312.50 ks-script-1holkM
[root@e25f88eebde1 ~]# stat ks-script-1holkM
File: 'ks-script-1holkM'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 46145311 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-12-08 13:12:50.000000000 +0000
Modify: 2016-12-08 13:12:50.000000000 +0000
Change: 2016-12-09 05:40:43.607265507 +0000
Birth: -
[root@e25f88eebde1 ~]#

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

1
2
3
4
5
[hzz@e25f88eebde1 ~]$ sudo touch /var/l321abctest.txt
[sudo] password for hzz:
[hzz@e25f88eebde1 ~]$ ls -d /var/l*[0-9]*[[:lower:]]
/var/l321abctest.txt
[hzz@e25f88eebde1 ~]$

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

1
2
3
4
5
[hzz@e25f88eebde1 ~]$ sudo touch /etc/1test.txt
[sudo] password for hzz:
[hzz@e25f88eebde1 ~]$ ls -d /etc/[0-9]*[^0-9]
/etc/1test.txt
[hzz@e25f88eebde1 ~]$

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

1
2
3
4
5
6
7
[hzz@e25f88eebde1 ~]$ ls -d /etc/[^a-z][a-z]*
/etc/1test.txt
[hzz@e25f88eebde1 ~]$

[hzz@e25f88eebde1 ~]$ ls -d /etc/[^[:alpha:]][[:alpha:]]*
/etc/1test.txt
[hzz@e25f88eebde1 ~]$

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

1
2
3
4
[hzz@e25f88eebde1 ~]$ touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
[hzz@e25f88eebde1 ~]$ ls /tmp/tfile-*
/tmp/tfile-2016-12-11-02-05-14
[hzz@e25f88eebde1 ~]$

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[hzz@e25f88eebde1 ~]$ mkdir -p /tmp/mytest2
[hzz@e25f88eebde1 ~]$ ls -d /etc/*.d
/etc/bash_completion.d /etc/depmod.d /etc/ld.so.conf.d /etc/modules-load.d /etc/prelink.conf.d /etc/rc0.d /etc/rc3.d /etc/rc6.d /etc/sysctl.d /etc/yum.repos.d
/etc/binfmt.d /etc/dracut.conf.d /etc/logrotate.d /etc/pam.d /etc/profile.d /etc/rc1.d /etc/rc4.d /etc/rsyslog.d /etc/tmpfiles.d
/etc/chkconfig.d /etc/init.d /etc/modprobe.d /etc/popt.d /etc/rc.d /etc/rc2.d /etc/rc5.d /etc/sudoers.d /etc/xinetd.d
[hzz@e25f88eebde1 ~]$ sudo cp -a /etc/*.d /tmp/mytest2/
[sudo] password for hzz:
[hzz@e25f88eebde1 ~]$ ls -d /tmp/mytest2/*
/tmp/mytest2/bash_completion.d /tmp/mytest2/init.d /tmp/mytest2/pam.d /tmp/mytest2/rc0.d /tmp/mytest2/rc5.d /tmp/mytest2/tmpfiles.d
/tmp/mytest2/binfmt.d /tmp/mytest2/ld.so.conf.d /tmp/mytest2/popt.d /tmp/mytest2/rc1.d /tmp/mytest2/rc6.d /tmp/mytest2/xinetd.d
/tmp/mytest2/chkconfig.d /tmp/mytest2/logrotate.d /tmp/mytest2/prelink.conf.d /tmp/mytest2/rc2.d /tmp/mytest2/rsyslog.d /tmp/mytest2/yum.repos.d
/tmp/mytest2/depmod.d /tmp/mytest2/modprobe.d /tmp/mytest2/profile.d /tmp/mytest2/rc3.d /tmp/mytest2/sudoers.d
/tmp/mytest2/dracut.conf.d /tmp/mytest2/modules-load.d /tmp/mytest2/rc.d /tmp/mytest2/rc4.d /tmp/mytest2/sysctl.d
[hzz@e25f88eebde1 ~]$

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

1
2
3
4
5
6
7
[hzz@e25f88eebde1 ~]$ mkdir -p /tmp/mytest3
[hzz@e25f88eebde1 ~]$ ls -d /etc/[lmn]*.conf
/etc/ld.so.conf /etc/libaudit.conf /etc/libuser.conf /etc/locale.conf /etc/man_db.conf /etc/nsswitch.conf
[hzz@e25f88eebde1 ~]$ sudo cp -a /etc/[lmn]*.conf /tmp/mytest3/
[hzz@e25f88eebde1 ~]$ ls -d /tmp/mytest3/*
/tmp/mytest3/ld.so.conf /tmp/mytest3/libaudit.conf /tmp/mytest3/libuser.conf /tmp/mytest3/locale.conf /tmp/mytest3/man_db.conf /tmp/mytest3/nsswitch.conf
[hzz@e25f88eebde1 ~]$

17-黄中章