第一周博客要求

描述计算机的组成及其功能
按系列罗列Linux的发行版本,并描述不同发行版之间的联系与区别
描述Linux的哲学思想,并按照自己的理解对其进行解释性描述
说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff 、reboot、hwclock、date命令的使用,并配合相应的示例来阐述
如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的
请罗列Linux发行版的基础目录名称命令法则及功用规定
描述计算机的组成及其功能

计算机的组成:

计算机由硬件加软件组成;软件由系统软件和应用软件组成;硬件包括运算器、控制器、存储器、输入输出设备;

计算机各部级的功能

运算器和控制器,即我们常见的CPU。运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。

存储器的作用是存储数据,分为内存和外存。通俗的讲,内存即RAM,外存是我们常见的硬盘、U盘、光盘等。内存掉电后信息丢失,外存存储的信息掉电后不丢失。因为硬盘的运行速度远低于CPU,所以将内存作为硬盘与CPU之间的一个缓冲区。

输入输出设备:作为人机交互接口,包括键盘、鼠标、显示器、打印机等设备

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

发行版本查询链接
REDHAT:包括了服务器版的RHEL、社区版的CentOS以及Fedora等

SLS:其中最出名的是S.U.S.E

Debian:包括Debian和Ubuntu等。Debian是社区类Linux的典范,也最遵循GNU规范。

描述Linux的哲学思想,并按照自己的理解对其进行解释性描述

Linux的哲学思想:
一切皆文件; 这里的文件不仅仅是我们通常所指的文件,在linux和unix中它代表的更为宽泛。目录、字符设备、块设备、 套接字、进程、线程、管道等都被视为是一个“文件”

由目的单一的小程序组成;组合小程序完成复杂任务; 比如bash脚本,就是使用多个外部的命令来实现某个复杂的功能

尽量避免捕获用户接口;

配置文件保存为纯文本格式;

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

命令的使用格式

Linux的命令使用格式一般是 ~]#COMMAND [Option] [Argment]

COMMAND:指的是一条Linux命令

Option指的是这个命令的先项,用于调整命令的作用或者功能

Argment指的是参数,一般是指命令的作用对象

例如: 下面的命令ls指的是linux的一条命令, -l 是ls的选项,用于修正命令的显示结果,用长格式来显示; /etc/init.d是参数,指这个命令将作用于/etc/init.d这个目录

~]# ls -l /etc/init.d
命令详解

ifconfig: 配置网络接口、显示接口相关信息;常用于配置和显示接口的IP
ifconfig
参数:
-a: 显示所有接口的信息,包括未启用的接口
-up: 启用某个接口
-down: 关闭某个接口

[root@localhost ~]# ifconfig eth0 192.168.99.20 netmask 255.255.255.0

[root@localhost ~]# route add default gw 192.168.99.254

[root@localhost ~]# ifconfig -a
eth0: flags=4163 mtu 1500
inet 192.168.99.20 netmask 255.255.255.0 broadcast 192.168.99.255
inet6 fe80::b107:482e:27bd:7123 prefixlen 64 scopeid 0x20
ether 00:15:5d:63:5a:04 txqueuelen 1000 (Ethernet)
RX packets 346323 bytes 25152778 (23.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3547 bytes 559794 (546.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (Local Loopback)
RX packets 16 bytes 1748 (1.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1748 (1.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@localhost ~]# ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.99.20 netmask 255.255.255.0 broadcast 192.168.99.255
inet6 fe80::b107:482e:27bd:7123 prefixlen 64 scopeid 0x20
ether 00:15:5d:63:5a:04 txqueuelen 1000 (Ethernet)
RX packets 346439 bytes 25165224 (23.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3609 bytes 573382 (559.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (Local Loopback)
RX packets 16 bytes 1748 (1.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1748 (1.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@localhost ~]# ifconfig lo down
[root@localhost ~]# ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.99.20 netmask 255.255.255.0 broadcast 192.168.99.255
inet6 fe80::b107:482e:27bd:7123 prefixlen 64 scopeid 0x20
ether 00:15:5d:63:5a:04 txqueuelen 1000 (Ethernet)
RX packets 346479 bytes 25169946 (24.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3637 bytes 578510 (564.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@localhost ~]# ifconfig lo up
[root@localhost ~]# ifconfig
eth0: flags=4163 mtu 1500
inet 192.168.99.20 netmask 255.255.255.0 broadcast 192.168.99.255
inet6 fe80::b107:482e:27bd:7123 prefixlen 64 scopeid 0x20
ether 00:15:5d:63:5a:04 txqueuelen 1000 (Ethernet)
RX packets 346525 bytes 25175586 (24.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3671 bytes 584138 (570.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (Local Loopback)
RX packets 16 bytes 1748 (1.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1748 (1.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
echo:显示一行文本,用法非常多,常见的是将输入的信息在屏幕上显示出来
echo
参数:
-n: 不输出行尾的换行符
-e: 允许对下面列出的加反斜线转义的字符进行解释.

[root@localhost ~]# echo -n "This is line 1"
This is line 1[root@localhost ~]#

[root@localhost ~]# echo "This is line 1"
This is line 1

[root@localhost ~]# echo -e "\033[31m 红色字 \033[0m"
红色字
tty: 示连接标准输入的终端的文件名,常使用的有虚拟终端和伪终端。 虚拟终端其实是附加在物理终端上的,我们也可以理解为虚拟终端就是Console,使用tty表示 伪终端:在图形界面打开的命令接口,还有远程登录过来的终端,使用pts表示

[root@localhost ~]# tty
/dev/pts/1
startx: 启动图形界面会话
参数
-w: 强制启动x会话
export: 为 shell 变量设定导出属性,用于定义环境变量,环境变量是指在子shell中还可以使用的变量
[root@localhost ~]# export name=liuqing
[root@localhost ~]# echo $name
liuqing

[root@localhost ~]# sh
sh-4.2# echo $name
liuqing
pwd: 显示当前(工作)目录的名称,
[root@localhost ~]# pwd
/root
history: 显示或操纵历史列表。
history: history [-c] [-d 偏移量] [n]
或 history -anrw [文件名]
或 history -ps 参数 [参数...]
显示或操纵历史列表。

带行号显示历史列表,将每个被修改的条目加上前缀 `*'。
参数 N 会仅列出最后的 N 个条目。

选项:
  -c        删除所有条目从而清空历史列表。
  -d 偏移量 从指定位置删除历史列表。

  -a        将当前会话的历史行追加到历史文件中
  -n        从历史文件中读取所有未被读取的行
  -r        读取历史文件并将内容追加到历史列表中
    中
  -w        将当前历史写入到历史文件中
    并追加到历史列表中

  -p        对每一个 ARG 参数展开历史并显示结果
    而不存储到历史列表中
  -s        以单条记录追加 ARG 到历史列表中

示例:
[root@localhost ~]# history
不带参数的history,用于显示所有的命令历史

[root@localhost ~]# history -c
[root@localhost ~]# history
1 history
用于清空内存中的命令历史

[root@localhost ~]# history -r
用于将配置文件中的命令历史读入到内存中,这个配置文件在每个用户的家目录下的.bash_history文件中

[root@localhost ~]# echo $HISTFILE
/root/.bash_history

[root@localhost ~]# history -w
用于将内存中的命令历史写入到配置文件

[root@localhost ~]# history -w
804 history # 当前的内存中,总共有804条命令历史记录,接下来,我们删除从第10条开始,后面的700条

[root@localhost ~]# history
...
797 exit
...
使用命令历史,查看当前的第797条命令历史为exit, 现在我们删除这个命令历史,使用history -c 797

[root@localhost ~]# history -d 797 #这条命令的意思是删除命令历史中的第797条。
[root@localhost ~]# history
...
797 history
...

关于 -d 偏移量 连续值 ,这条命令测试结果无效。
shutdown: 以一种安全的方式关闭系统,阻止用户登录,所有用户都可以看到关机的提示信息。
参数:
选项 OPTIONS

   -t sec 通知    init(8)    在转换到其它运行级别前,发送警告    (warning)
          信号后延时 (sec) 秒数后再发送关闭 (kill) 信号。

   -k     并非真正关机,只向所有人显示警告信息。

   -r     重启。

   -h     停机。

   -n     [DEPRECATED(不应再使用)]             不调用              init(8)
          程序进行关机操作,而由自己进行。不建议用户使用这种关机方式,它的结果一般也不是你希望的那样。

   -f     重启时跳过磁盘检测。

   -F     重启时强制磁盘检测。

   -c     取消运行中的     shutdown     进程。不可能为此选项指定      time
          参数,但你可以在命令行输入一条解释消息来向所有用户说明。(一般的shut‐
          down指令可以用按“+”号来进行中断)

   time   关机时间。

   warning-message
          发送给所有用户的消息。

    time 参数的格式可以有很多种。首先,可以是  hh:mm  格式的绝对时间,其中
   hh   指的是小时(一到二位数),mm   指的是分钟(二位数)。第二种是   +m
   格式,其中 m 指的是等待的分钟数。 now 是 +0 的别名。

   如果 shutdown 在调用时使用了延时,它将自动创建一个咨询 (advisory)  文件
   /etc/nologin  ,作用是禁止  login(1) 允许新用户登陆,除非 shutdown 在向
   init 发信号前意外中止 (就是说,它被取消或出了什么问题)。它会在调用 init
   改变运行级之前删除这个文件。

   -f  标志意味着  `快速重启'。这将创建一个咨询  (advisory) 文件 /fastboot
   ,此文件在系统重启时会被检测到。启动脚本                             rc
   会检测是否存在这样的文件,如果有,就不会再运行
   fsck(1),因为系统是以正常方式关闭的。这之后,启动进程会删除 /fastboot。

示例:

-k选项并不真正关机,只是会出现一个提示信息。

[root@localhost ~]# shutdown -k
Shutdown scheduled for 一 2017-12-04 22:48:28 CST, use 'shutdown -c' to cancel.
[root@localhost ~]#
Broadcast message from [email protected] (Mon 2017-12-04 22:47:28 CST):

The system is going down for power-off at Mon 2017-12-04 22:48:28 CST!

^C
[root@localhost ~]#

-r选项用于重启计算机,可以使用-c来取消关机

[root@localhost ~]# shutdown -r
Shutdown scheduled for 一 2017-12-04 22:51:25 CST, use 'shutdown -c' to cancel.
[root@localhost ~]#
Broadcast message from [email protected] (Mon 2017-12-04 22:50:25 CST):

The system is going down for reboot at Mon 2017-12-04 22:51:25 CST!

^C
[root@localhost ~]# shutdown -c

Broadcast message from [email protected] (Mon 2017-12-04 22:50:35 CST):

The system shutdown has been cancelled at Mon 2017-12-04 22:51:35 CST!

-h选项,可用于关闭计算机,后面需要跟一个时间,时间可以是hh:mm格式,表示小时:分钟,也可以是+m格式,m表示分钟。now表示立即关机

Last login: Mon Dec 4 22:47:24 2017 from 175.9.42.209
[root@localhost ~]# shutdown -h +5
Shutdown scheduled for 二 2017-12-05 14:26:20 CST, use 'shutdown -c' to cancel.
[root@localhost ~]#
Broadcast message from [email protected] (Tue 2017-12-05 14:21:21 CST):

The system is going down for power-off at Tue 2017-12-05 14:26:20 CST!

^C
[root@localhost ~]# shutdown -c

Broadcast message from [email protected] (Tue 2017-12-05 14:21:26 CST):

The system shutdown has been cancelled at Tue 2017-12-05 14:22:26 CST!

#-t选项,指明了shutdown操作的时间,以秒为单位
[root@localhost ~]# shutdown -h -t 1000
Shutdown scheduled for 二 2017-12-05 15:08:49 CST, use 'shutdown -c' to cancel.
[root@localhost ~]#
Broadcast message from [email protected] (Tue 2017-12-05 15:07:49 CST):

The system is going down for power-off at Tue 2017-12-05 15:08:49 CST!

^C
[root@localhost ~]# shutdown -c

Broadcast message from [email protected] (Tue 2017-12-05 15:07:53 CST):

The system shutdown has been cancelled at Tue 2017-12-05 15:08:53 CST!
poweroff 、reboot:停止、关机、重启计算机
选项

   --halt
       Halt the machine, regardless of which one of the three commands is invoked.

   -p, --poweroff
       Power-off the machine, regardless of which one of the three commands is invoked.

   --reboot
       Reboot the machine, regardless of which one of the three commands is invoked.

   -f, --force
       Force immediate halt, power-off, reboot. Do not contact the init system.

hwclock: query or set the hardware clock (RTC) 查询或者设置硬件时钟
[root@localhost ~]# file /usr/sbin/clock
/usr/sbin/clock: symbolic link to `hwclock'

hwclock:显示硬件时钟
hwclock -s hctosys 以硬件时钟为准,将系统时钟设置成硬件时钟一致
hwclock -w systohc 以系统时钟为准,把硬件时钟设置为和系统时钟一致。
date:显示和设置日期、时间
格式 FORMAT 控制着输出格式. 仅当选项指定为全球时间时本格式才有效。 分别解释如下:

   %%     文本的 %

   %a     当前区域的星期几的简写 (Sun..Sat)

   %A     当前区域的星期几的全称 (不同长度) (Sunday..Saturday)

   %b     当前区域的月份的简写 (Jan..Dec)

   %B     当前区域的月份的全称(变长) (January..December)

   %c     当前区域的日期和时间 (Sat Nov 04 12:02:33 EST 1989)

   %d     (月份中的)几号(用两位表示) (01..31)

   %D     日期(按照 月/日期/年 格式显示) (mm/dd/yy)

   %e     (月份中的)几号(去零表示) ( 1..31)

   %h     同 %b

   %H     小时(按 24 小时制显示,用两位表示) (00..23)

   %I     小时(按 12 小时制显示,用两位表示) (01..12)

   %j     (一年中的)第几天(用三位表示) (001..366)

   %k     小时(按 24 小时制显示,去零显示) ( 0..23)

   %l     小时(按 12 小时制显示,去零表示) ( 1..12)

   %m     月份(用两位表示) (01..12)

   %M     分钟数(用两位表示) (00..59)

   %n     换行

   %p     当前时间是上午 AM 还是下午 PM

   %r     时间,按 12 小时制显示 (hh:mm:ss [A/P]M)

   %s     从 1970年1月1日0点0分0秒到现在历经的秒数 (GNU扩充)

   %S     秒数(用两位表示)(00..60)

   %t     水平方向的 tab 制表符

   %T     时间,按 24 小时制显示(hh:mm:ss)

   %U     (一年中的)第几个星期,以星期天作为一周的开始(用两位表示) (00..53)

   %V     (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (01..52)

   %w     用数字表示星期几 (0..6); 0 代表星期天

   %W     (一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (00..53)

   %x     按照 (mm/dd/yy) 格式显示当前日期

   %X     按照 (%H:%M:%S) 格式显示当前时间

   %y     年的后两位数字 (00..99)

   %Y     年(用 4 位表示) (1970...)

   %z     按照 RFC-822 中指定的数字时区显示(如, -0500) (为非标准扩充)

   %Z     时区(例如, EDT (美国东部时区)), 如果不能决定是哪个时区则为空

   默认情况下,用 0 填充数据的空缺部分.  GNU 的 date 命令能分辨在 `%'和数字指示之间的以下修改.

          `-' (连接号) 不进行填充 `_' (下划线) 用空格进行填充

[MMDDhhmm[[CC]YY][.ss]]
表示方法为 月月日日时时分分[[分分]年年年年][秒秒]
总览 date [选项]... [+格式] date [选项] [MMDDhhmm[[CC]YY][.ss]]

[root@localhost ~]# date
2017年 11月 26日 星期日 11:51:00 CST

显示日期 [root@localhost ~]# date
2017年 11月 26日 星期日 11:51:00 CST

调整当前日期为2015年1月1日0点0分0秒
[root@localhost ~]# date 010100002015.00
2015年 01月 01日 星期四 00:00:00 CST

显示日期格式为今天是今年的第多少天
[root@localhost etc]# date +%j
320

只显示年
[root@localhost etc]# date +%y
17

[root@localhost etc]# date +%Y
2017

只显示月
[root@localhost etc]# date +%b
11月
[root@localhost etc]# date +%B
十一月

只显示年月日
[root@localhost etc]# date +%Y年%b%e日
2017年11月16日

显示当前时间,不显示年月日
[root@localhost etc]# date +%H时%M分
12时16分
说明: shutdown实际上是调用init 0, init 0会cleanup一些工作然后调用halt或者poweroff。其实主要区别是halt和poweroff,做没有acpi的系统上,halt只是关闭了os,电源还在工作,你得手动取按一下那个按钮,而poweroff会发送一个关闭电源的信号给acpi。但在现在的系统上,他们实际上都一样了

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

获取帮助

Linux系统上的命令包括内部命令和外部命令两种,它们获取帮助的方法各不相同
使用type命令可以查看命令是内部命令还是外部命令
示例:
[root@localhost ~]# type cd
cd 是 shell 内嵌
[root@localhost ~]# type ls
ls 是 `ls --color=auto' 的别名
[root@localhost ~]# type pwd
pwd 是 shell 内嵌
[root@localhost ~]# type date
date 已被哈希 (/usr/bin/date)
内部命令获取帮助 使用help COMANND来获取命令的帮助

外部命令获取帮助 使用COMMAND --help来获取较为简明的帮助 使用man COMMAND来获取命令的手册

man的使用方法

man分成8个章节
用户命令
系统调用
C库调用
设备文件及特殊文件
文件格式(配置文件格式的说明)
游戏玩法说明
杂项
管理工具及守护进程
如何知道命令有哪些man章节呢,使用whereis命令。 [root@localhost ~]# whereis passwd passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

man的使用方法同 less命令,可以分屏查看,并且进行关键字查找

使用方法

空格键:向文件尾翻一屏,向后翻页;
b: 向文件首部翻一屏;
trl+d: 向文件尾部翻半页;
Ctrl+u: 向文件首部翻半屏;
回车键:一次向文件尾部翻一行;
k: 向文件首部翻一行;
G:跳转最后一行
#G:表示跳到指定行#,比如1G,跳转到第1行

文本搜索:
/keyword:从文件当前首部向文件尾部依次查找;不区分字符大小写
?keyword::从文件尾部向文件首部依次查找;

    n,与查找命令方向相同
    N,与查找命令方向相反

请罗列Linux发行版的基础目录名称命令法则及功用规定

*Linux的发行版,都遵循FHS这个协定,即文件系统层级标准。英文为:Filesystem Hierarchy Standard

维基百科--文件系统层级标准
在FHS中,所有的(包括存储于不同物理/虚拟设备中的)文件和目录都存在于根目录 / 下。其中,部分目录仅当特定系统(如X Window)安装后才会存在。
文件系统的常见的子目录
/lib: -->/usr/lib:基本的共享库和内核共享模块(/lib/modeles)
/lib64: -->/usr/lib64, 专用于x86_64系统上的辅助共享库文件的存放位置
/etc: 配置文件目录,有三个子目录需要关注 ,大多数都是纯文本文件
/etc/opt: 早期第三方程序安装到/opt,现在不常使用, /etc/opt专门为/opt存放配置文件的目录
/etc/X11: 图形界面的相关配置文件
/etc/sgml:
/home: 用户的家目录,普通用户的家目录
/root: 管理员的家目录, 一定不要使用管理员登录操作。
/media: 挂载便携式媒体文件,如U盘
cdrom
usb
/mnt: 挂载临时文件系统
/dev: 设备文件目录,
b: block device: 支持随机访问
c: character device: 线性访问
/opt: 安装第三方应用程序的位置,早期
/tmp 临时文件,所有用户都拥有读写权限
/usr: /usr is shareable read-only data 全局共享、只读数据 universal 通常独立分区
额外其他命令程序,用户用到的只读资源文件
bin: 保证系统拥有完整功能而提供的应用程序
sbin:
lib:
lib64:
配置文件,依旧在/etc目录下
include: 描述库文件的调用,C程序的头文件存放位置,以.h结尾
share: 结构化独立的数据,例如doc, man等
local: 第三方应用程序的安装位置,现在的应用程序一般都安装到此处。
bin sbin lib lib64 etc share
/var: 通常独立分区,可变数据文件,存放经常发生变化的数据文件
cache: 应用程序缓存数据目录
lib: 可变状态信息

/proc: 基于内存的虚拟文件系统, 内核和进程信息的虚拟文件系统,多为内核参数;内核输出的信息,给予用户来查看
例如 net.ipv4.ip_forward,虚拟为net/ipv4/ip_forward,存储在/proc/sys目录下,因此其完整路径为/proc/sys/net/ipv4/ip_forward
/sys: sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径,与/proc类似,主要用来管理设备,如调整硬盘参数等。用于挂载sysfs文件系统,其主要作用是为管理linux设备提供了一种统一模型的接口。
/run:
注: 本文部分内容来源于网络及马哥笔记。