第一周博客要求
- 描述计算机的组成及其功能
- 按系列罗列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<UP,BROADCAST,RUNNING,MULTICAST> 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<link>
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<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
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<UP,BROADCAST,RUNNING,MULTICAST> 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<link>
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<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
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<UP,BROADCAST,RUNNING,MULTICAST> 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<link>
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<UP,BROADCAST,RUNNING,MULTICAST> 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<link>
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<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
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 root@localhost.localdomain (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 root@localhost.localdomain (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 root@localhost.localdomain (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 root@localhost.localdomain (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 root@localhost.localdomain (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 root@localhost.localdomain (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 root@localhost.localdomain (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:
注: 本文部分内容来源于网络及马哥笔记。