Linux 之旅 2:开关机与帮助文档
上一篇Linux 之旅 1:安装中介绍了如何在虚拟机中安装Linux,本文介绍Linux系统的开关机和帮助文档查看。
可能会有人觉得差异,开关机还要学习么,其实一开始我也是同样的想法,但回想一下初中刚接触电脑的时候,可不就是学习怎么开关机以及打字么。
开机及相关设置
开机其实没有什么难度,因为我们安装了图形界面X Window,所以可以通过图形界面登录和进入桌面。但进入桌面后有一些设置是需要留意的。
比如右上角这里的网络设置:
你可以先试试看实用自带的Firefox浏览器能不能上网,如果不能上网的话要在这里调整相关设置。
当然我们实用的是虚拟机,所以不能上网的话必须也要调整虚拟机中的设置。
在虚拟机界面中右键,选择设置。打开虚拟机的相关设置:
需要在网络适配器的选项中确保网络连接是桥接模式。
关于虚拟机中的网络配置相关选项的区别,可以阅读工具-虚拟机的桥接模式和NAT模式的区别。
修改以后进入CentOS,点击之前说过的网络配置的地方,点击【有线设置】
在IPV4中设置手动模式,并设置一个合适的IP地址。
保存后退出,如果此时依然不能联网,可以关闭有线连接后再打开,多半就可以了。
接下来要调整屏保相关设置,因为CentOS默认会在一定事件后自动进入屏幕锁定,这不利于我们学习。
点击齿轮进入系统设置:
在power设置中将空白屏幕从10分钟改为从不。
要知道在Linux中图形界面并非是系统所必须的,是独立存在的。所以在某些情况下图形界面可能崩溃,但并不会影响系统本身,所以我们可能通过设置热键来在图形界面失效的情况下快速中止图形界面并重启。
点击左上角的应用程序,选择【附件】>【优化】:
在键盘和鼠标项目中选择其它布局选项。
在弹出的窗口中勾选上杀死X服务器的按键序列
。
这样就可以在图形界面崩溃的时候按下Ctrl+Alt+Backspace杀死进程了。
此外如果真实电脑的性能不佳,虚拟机反应慢,可以在优化的另一个项目【外观】中关闭动画:
多个终端的切换
Linux和Windows最大的区别之一就是Linux是多用户多任务系统,即一台Linux系统的主机,可以同时登录多个用户,运行多个任务,而Windows同时只有一个用户登录使用。
除了远程连接登录Linux系统以外,Linux对于硬件终端默认提供六个终端供登录,分别称作tty1 ~ tty6。而我们登录时候的图形界面所处的终端就是tty1。
我们可以通过快捷键【Ctrl+Alt+F1 ~ F6】来切换到其它终端。
比如我在图形界面中按下【Ctrl+Alt+F2】:
这就是一个命令行形式的终端,通过这个终端我们可以对Linux进行所有在图形界面下的操作,比如登录和打印当前目录:
当然也可以输入exit
命令进行注销当前用户。
当然我们也可以在tty2上使用X Window,但前提是我们要先在tty1上关闭X Window才行,CentOS中同时只能有一个终端运行图形界面。
可能有人注意到了在tty2中打印一些信息的时候是乱码,那是因为默认情况下字符终端不支持中文显示。
除了可以在tty2中输入命令,其实就是使用Bash
这个壳程序
与Linux交互以外,在图形终端下可以启动Bash
进行交互。
先通过【Ctrl+Alt+F1】返回图形界面,再通过【应用程序】>【系统工具】>【终端】启动一个Bash
程序:
在这个下边同样可以执行Shell
命令,并且可以正常显示中文。
Shell 命令
Bash
是最流行的Linux壳程序,在Bash
中执行的命令就是Shell命令
。
刚打开Bash
后其命令提示符前显示的一般是这样的[icexmoon@xyz ~]$
,其中@
符号前边的是当前的登录用户,后边的是主机名,而~
表示当前所在的工作目录。
工作目录一般会显示目录名,~
比较特殊,表示的是当前登录用户的家目录,比如我这个用户的~
目录对应的就是/home/icexmoon
:
[icexmoon@xyz ~]$ pwd
/home/icexmoon
pwd命令用于显示当前工作目录的完整路径。
此外,命令提示符前还有一个$
符号,这表示当前的登录用户是一般用户,这是相对root
用户而言的。在Linux中root
具有无上权限,所以相对来说也很危险,如果在root
下错误地执行了某些命令,就可能导致不可挽回的损失,所以一般情况下请不要使用root
登录系统。当然某些命令只能在root
下执行,此时我们就需要对当前的普通用户进行“提权”操作,临时提升权限为root
:
[icexmoon@xyz ~]$ su -
密码:
最后一次失败的登录:四 7月 29 16:51:22 CST 2021pts/0 上
最有一次成功登录后有 2 次失败的登录尝试。
[root@xyz ~]# exit
在登录成功前我尝试了2次都输入了错误的
root
密码,所以这里有相关信息显示,这同样是一种安全措施,可以让系统管理员查看到可能的黑客入侵迹象。
可以看到,通过su -
命令提权后,命令提示符前的符号变成了#
,而且用户名也变为了root
,这表明当前具有root
的完整权限。
当然,在执行完操作后记得使用exit
退出root
权限。
除此之外我们再看几个一般性的Shell命令
。
date
date
命令用于显示系统的日期和时间:
[icexmoon@xyz ~]$ date
2021年 07月 29日 星期四 17:04:49 CST
[icexmoon@xyz ~]$ date +%Y-%m-%d
2021-07-29
[icexmoon@xyz ~]$ date +%H:%M
可以使用日期相关的格式化字符串来格式化输出,比如上面展示的+%Y-%m-%d
等,这种写法和编程语言中的日期函数极为相似。
这种相似也不难理解,
Shell命令
的本质就是对工具程序的命令行调用。
cal
cal
命令用于输出日历,并且可以指定年份和月份显示对应的日历。
[icexmoon@xyz ~]$ cal
七月 2021
日 一 二 三 四 五 六
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
[icexmoon@xyz ~]$ cal 01 2021
一月 2021
日 一 二 三 四 五 六
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
bc
bc
命令可以开启一个计算器环境,在这个环境中可以进行各种计算,这可以看作是命令行版本的“windows计算器”。
[icexmoon@xyz ~]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1+2+3
6
15*6
90
20/3
6
scale=2
20/3
6.66
quit
在执行bc
后会进入到计算器模式中,先会输出一些程序的版本信息等,等到光标出现后就可以随意输入各种算数表达式进行计算,回车就可以显示运算结果。
需要注意的是默认情况下输出的结果只会是整数,所以示例中一开始20/3
的结果是6,如果需要显示小数可以执行scale=2
,可以将返回结果设置为两位小数。
最后需要执行quit
才能退出计算器。
几个重要的热键
【Tab键】
在Bash
中可以连按两下【Tab键】进行命令补全:
[icexmoon@xyz ~]$ ca
cacertdir_rehash cal capsh
cache_check ca-legacy captoinfo
cache_dump calibrate_ppa case
cache_metadata_size caller cat
cache_repair canberra-boot catchsegv
cache_restore canberra-gtk-play catman
cache_writeback cancel
cairo-sphinx cancel.cups
可以看到,在输入ca
后连按两下【Tab键】后会显示出所有ca开头的命令。
此外,利用此方法还可以补全文件:
[icexmoon@xyz ~]$ ls -al .bash
.bash_history .bash_logout .bash_profile .bashrc
在ls -al .bash
之后连击两次【Tab键】,就显示出了当前工作目录下以.bash
开头的所有文件。
ls
是用于显示目录下子项目的命令,后边可以跟具体的目录或文件名。
此外,这种方法还可以补全命令参数:
[icexmoon@xyz ~]$ ls --
--all
--almost-all
--author
--block-size=
--classify
--color
--color=
--context
--dereference
--dereference-command-line
--dereference-command-line-symlink-to-dir
--directory
--dired
--escape
--file-type
--format=
--group-directories-first
--help
--hide=
--hide-control-chars
--human-readable
--ignore=
--ignore-backups
--More--
可以看到ls
命令的参数非常多,甚至还需要翻页(按空格可以进行翻页)。
【Shift+Page UP】\【Shift+Page Down】
如果是在非图形化终端下执行Shell
命令,可能需要使用这两个热键进行翻页操作。
如果是缺少数字键盘的笔记本电脑,可能需要使用组合键,比如【Shift+Fn+Page Up】。
【Ctrl+c】
这是个相当常用的热键,在Linux的字符终端下执行Shell命令的时候,我们通常都是非后台模式,即程序在前台执行,在程序开始执行后我们再不能输入其它命令,必须等待该程序执行完毕后才能继续下一步操作。
如果有时候某些程序一直执行,我们等不到其执行结束,可以使用【Ctrl+c】来强制结束该程序。
查看帮助文档
因为不同的程序是不同的开发者开发的,而且因为功能的不同其需要输入的参数项也是五花八门,所以自然我们不可能记住所有的命令的用法,这时候就需要借助帮助文档来理解如何使用具体命令了。
--help
一般来说,任何命令都会有一个最简单也是最常用到的参数--help
,用于输出一般性的帮助信息,通常是命令支持的参数和简单用法。
[icexmoon@xyz ~]$ date --help
用法:date [选项]... [+格式]
或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
Display the current time in the given FORMAT, or set the system date.
Mandatory arguments to long options are mandatory for short options too.
-d, --date=STRING display time described by STRING, not 'now'
-f, --file=DATEFILE like --date once for each line of DATEFILE
-I[TIMESPEC], --iso-8601[=TIMESPEC] output date/time in ISO 8601 format.
TIMESPEC='date' for date only (the default),
'hours', 'minutes', 'seconds', or 'ns' for date
and time to the indicated precision.
-r, --reference=文件 显示文件指定文件的最后修改时间
-R, --rfc-2822 以RFC 2822格式输出日期和时间
例如:2006年8月7日,星期一 12:34:56 -0600
--rfc-3339=TIMESPEC output date and time in RFC 3339 format.
TIMESPEC='date', 'seconds', or 'ns' for
date and time to the indicated precision.
Date and time components are separated by
a single space: 2006-08-07 12:34:56-06:00
-s, --set=STRING set time described by STRING
-u, --utc, --universal print or set Coordinated Universal Time (UTC)
--help 显示此帮助信息并退出
--version 显示版本信息并退出
给定的格式FORMAT 控制着输出,解释序列如下:
%% 一个文字的 %
%a 当前locale 的星期名缩写(例如: 日,代表星期日)
%A 当前locale 的星期名全称 (如:星期日)
%b 当前locale 的月名缩写 (如:一,代表一月)
%B 当前locale 的月名全称 (如:一月)
%c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
%C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
%d 按月计的日期(例如:01)
%D 按月计的日期;等于%m/%d/%y
%e 按月计的日期,添加空格,等于%_d
%F 完整日期格式,等价于 %Y-%m-%d
%g ISO-8601 格式年份的最后两位 (参见%G)
%G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
%h 等于%b
%H 小时(00-23)
%I 小时(00-12)
%j 按年计的日期(001-366)
%k hour, space padded ( 0..23); same as %_H
%l hour, space padded ( 1..12); same as %_I
%m month (01..12)
%M minute (00..59)
%n 换行
%N 纳秒(000000000-999999999)
%p 当前locale 下的"上午"或者"下午",未知时输出为空
%P 与%p 类似,但是输出小写字母
%r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
%R 24 小时时间的时和分,等价于 %H:%M
%s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
%S 秒(00-60)
%t 输出制表符 Tab
%T 时间,等于%H:%M:%S
%u 星期,1 代表星期一
%U 一年中的第几周,以周日为每星期第一天(00-53)
%V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
%w 一星期中的第几日(0-6),0 代表周一
%W 一年中的第几周,以周一为每星期第一天(00-53)
%x 当前locale 下的日期描述 (如:12/31/99)
%X 当前locale 下的时间描述 (如:23:13:48)
%y 年份最后两位数位 (00-99)
%Y 年份
%z +hhmm 数字时区(例如,-0400)
%:z +hh:mm 数字时区(例如,-04:00)
%::z +hh:mm:ss 数字时区(例如,-04:00:00)
%:::z 数字时区带有必要的精度 (例如,-04,+05:30)
%Z 按字母表排序的时区缩写 (例如,EDT)
默认情况下,日期的数字区域以0 填充。
The following optional flags may follow '%':
- (hyphen) do not pad the field
_ (underscore) pad with spaces
0 (zero) pad with zeros
^ use upper case if possible
# use opposite case if possible
在任何标记之后还允许一个可选的域宽度指定,它是一个十进制数字。
作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的
表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号。
Examples:
Convert seconds since the epoch (1970-01-01 UTC) to a date
$ date --date='@2147483647'
Show the time on the west coast of the US (use tzselect(1) to find TZ)
$ TZ='America/Los_Angeles' date
Show the local time for 9AM next Friday on the west coast of the US
$ date --date='TZ="America/Los_Angeles" 09:00 next Fri'
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
请向<http://translationproject.org/team/zh_CN.html> 报告date 的翻译错误
要获取完整文档,请运行:info coreutils 'date invocation'
[icexmoon@xyz ~]$
上面是date
命令的帮助文档,居然还是中文,我是没想到的。
除了--help
,有些命令也支持-h
的简写,但有的不支持,但--help
一般都是支持的。
man page
除了帮助文档以外,还有个操作说明(manual)可以提供帮助,使用方式是man xxx
。
[icexmoon@xyz ~]$ man date
DATE(1) FSF DATE(1)
NAME
date - 打印或设置系统日期和时间
总览
date [选项]... [+格式]
date [选项] [MMDDhhmm[[CC]YY][.ss]]
描述
根据指定格式显示当前时间或设置系统时间.
-d, --date=STRING
显示由 STRING 指定的时间, 而不是当前时间
-f, --file=DATEFILE
显示 DATEFILE 中每一行指定的时间, 如同将 DATEFILE 中的每行作为 --date 的参数一样
-I, --iso-8601[=TIMESPEC] 按照 ISO-8601 的日期/时间格式输出时间.
TIMESPEC=`date' (或者不指定时)仅输出日期,等于 `hours', `minutes', 或`seconds' 时按照指定精度输出日期及时间.
-r, --reference=FILE
显示 FILE 的最后修改时间
-R, --rfc-822
根据 RFC-822 指定格式输出日期
-s, --set=STRING
根据 STRING 设置时间
-u, --utc, --universal
显示或设置全球时间(格林威治时间)
--help 显示本帮助文件并退出
--version
显示版本信息并退出
Manual page date(1) line 1 (press h for help or q to quit)
按空格翻页,按
b
返回上一页,按q
退出。
这里的输出比帮助文档更详细。
man page主要包含下面几个部分的内容:
- NAME 命令的完整名称
- SYNOPSIS 命令的基本用法
- DESCRIPTION 详细说明基本用法相关的选项和参数
- ENVIRONMENT 命令相关的环境参数
- EXAMPLES 示例
- AUTHOR 作者
- COPYRIGHT 版权声明
- SEE ALSO 还可以从哪里看到相关内容
需要注意的是,在man page开头DATE(1)
,这里的1具有特殊的意义,简单来说就是命令的类型,具体的代号和意义说明如下:
- 1 用户在shell环境中可以操作的命令或可执行文件
- 4 设备文件的说明,通常在/dev下的文件
- 5 配置文件或是某些文件的格式
- 8 系统管理员可用的管理命令
这里仅罗列常用的类型,详细的说明可以使用
man man
命令进行查看(对,没错,man
命令本身也是有man page的)。
最后说一下在man page中的按键和对应的操作:
- 【空格键】下一页
- 【Page Down】下一页
- 【Page Up】上一页
- 【Home】第一页
- 【End】最后一页
- /string 向下查找
- ?string 向上查找
- 【n】,【N】 正向、反向查找下一个
- 【q】退出
事实上
man
命令是调用less
命令进行输出的,所以按键操作和后者是一致的。
简单的文本编辑器nano
通常我们在操作Linux时候遇到问题在网上查找到的解决方法都会说“使用vim编辑某某文件”之类的,这里提到的vim是Linux最常用的文本编辑器。
vim是很强大,但同时也非常难以学习,光三个模式就可以把人整懵逼,但事实上很多时候我们需要的是一种简单的方式能编辑文件,并不关心使用的是何种方式。
所以一个更简单和容易使用的编辑器nano是新手的一个不错的选择。
我们在家目录下创建一个python文件:
nano ~/test.py
nano后跟文件名,如果不存在就创建。
输入一行代码后按【Ctrl+o】进行保存,然后按【Ctrl+x】退出。
下方的按键帮助信息中
^
表示Ctrl
,比如^o
表示Ctrl+o
。
关机
Linux的关机命令主要有shutdown
和reboot
,前者是直接关机,后者是重启。这两个比较常用。
shutdown
后需要跟时间,可以在指定时间进行关机,如果没有指定时间将在一分钟后进行关机,如果想立即关机,可以使用shutdown now
。
此外需要记住,Linux是一个多用户多任务系统,所以对关机操作应该慎重,不应当像Windows中那样随意,因为你关机的时候有可能其它用户正在执行某些关键任务,所以在服务器上的做法应该是管理员通过其它方式通知其它用户要进行关机操作了,然后再进行关机。
还有需要注意的是因为性能优化的考量,某些数据并不会及时回写到硬盘,而是在内存中进行操作,所以在关机时候应当进行硬盘回写操作,这样才能保证数据的完整性,否则会导致数据异常,使用sync
命令可以同步数据,所以可以使用下边的命令进行重启:
sync;sync;sync;reboot
因为Linux的关机操作很重要,所以在远程登录连接的时候必须要有root
权限才能执行关机操作,如果是硬件终端(tty1 ~ tty6)则无此限制。
此外还有halt
,poweroff
等关机相关的命令,不常用,这里不做赘述,实际上这些命令都是通过调用systemctl
实现的。
这一部分内容就介绍到这里了,谢谢阅读。