这篇文章是当时参加网络系统空间竞赛时老师给的总结性的文章让我们好好看,当时不以为然,觉得没啥好看的,都是些基础的命令。
但是过了两年时间,期间也用了好长时间的Linux系统,在回头看这篇文章时还是能够学到一些东西,我甚至想要添加一些能够使其更加完善,结果发现一句也加不进去,除了这句感叹。。真的为当时的自以为是的自负感到万分的惭愧
如果能够回到两年前,我定是会好好的珍惜的。哎,可惜没如果!!
目录
使用Linux命令行技术提高工作效率
情景描述
学习目标
工作过程
项目实施概述:
工作流程1:开始使用shell命令行
任务目标:
任务要求:
任务过程:
命令行Tab键补全功能
Bash历史记录功能
使用命令别名
命令的物理位置
Bash命令行的快捷键
--help帮助输出
使用man读取帮助文档
使用pinfo读取文档
/usr/share/doc中的文档
工作流程2:使用命令行完成系统任务
任务目标:
任务要求:
任务过程:
切换工作路径
查看目录文件列表
文件的基本操作
Bash命令行重要的高阶功能
工作总结
使用Linux命令行技术提高工作效率
情景描述
在学习和使用Linux系统的过程中,shell命令行是非常重要的组成部分。虽然图形桌面环境如GNOME提供了一个友好的操作界面,但在实践中,shell命令行提供了更多的功能,更好的灵活性,以及自动化和批量处理的能力,可以简化或实现那些使用图形工具难以有效完成的操作。shell环境还提供了在Linux服务器无法使用图形界面交互的可能,例如在系统非正常启动的情况下,或基于字符界面的远程连接管理。
学习目标
-
- 理解命令行的格式及用法;
- 熟练使用--help和man获得命令的帮助信息;
- 理解命令行中工作路径的意义和使用。
工作过程
项目实施概述:
Linux(or Unix) shell也叫做命令行界面,它是Linux/Unix操作系统下传统的用户和计算机的交互界面。用户直接输入命令来执行各种各样的任务。普通意义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏了操作系统低层的细节。Linux操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。
在Linux系统中被广泛使用的shell是Bash,在1987年由布莱恩·福克斯(Brian J. Fox)为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。在Novell NetWare与Android在上也有移植。
除此之外,Shell还有ash、dash、ksh、zsh、csh、tcsh等。
Debian中的默认Shell是Bash。
工作流程1:开始使用shell命令行
任务目标:
使用命令行对系统进行管理操作,掌握命令的用法。
任务要求:
- 理解命令行的格式及用法;
- 熟练使用--help和man获得命令的帮助信息;
- 理解命令行中工作路径的意义和使用。
任务过程:
- 使用shell命令行
默认DEBIAN8提供了7个虚拟控制台,可以使用[ctrl]+alt+F1~F7来进行切换,其中控制台1(或7)是图形界面,其余为命令行控制台,如图 0-1所示。
图 0-1 虚拟控制台
图 0-1 虚拟控制台
在桌面环境下,可以使用虚拟终端来运行命令。GNOME中的默认终端模拟器是gnome-terminal。可以通过如下方式启动:
-
- 从顶部面板依次选择单击“应用程序”Ò“系统工具”Ò“终端”打开;
- 在桌面空白区域或Nautilus窗口空白区域右击,选择“在终端中打开”;
- 按快捷键alt+F2,在运行应用程序的对话框中输入“gnome-terminal”,回车运行,如图所示。
通过以上任一种方式打开虚拟终端窗口,如图所示。图 03 虚拟终端窗口
在shell提示符终端输入命令。如图 03所示,标准提示符列出了当前用户的登录名称、计算机的较短主机名、当前目录的名称(用方括号括起来)、后跟$提示符。如果以超级用户(root)身份运行shell(参见下文示例),$将替换为#,以便更明显地说明这是超级用户在工作。
用户可以从命令控制台,虚拟终端,远程客户端登录系统并执行命令。
- 在命令行中启动图形工具
就像其他任何其他程序一样,您可以从命令行启动包含图形界面的程序。例如,您可以在一个图形虚拟终端窗口中的shell提示符下键入firefox的命令启动图形的web浏览器。
示例:在命令行中启动firefox浏览器。
[demo@365linux ~]$ firefox
但是,这种做法的缺点是只要图形程序仍然在运行,用于启动的shell提示符就会被占用而一直不可用,这种情况称为程序在前台运行。为了避免这种不便,可以在提示符下的命令行末尾处添加一个&,以在后台启动程序。
示例:使用后台运行的方式在命令行中启动firefox浏览器。
[demo@365linux ~]$ firefox &
Bash还提供了通过shell提示符更改进程的运行方式(前台、后台):
-
- 在Bash中可以使用Ctrl+c快捷键终止前台进程;
- 使用Ctrl+z快捷键暂停前台进程并返回shell提示符;
- 在终端中执行jobs命令列出该与该shell相关联的在后台运行或已停止的进程;
- 在终端中使用fg命令可以向前台发送作业;
- 在终端中使用bg命令可以运行后台暂停的进程。
示例:进程的前后台切换:
- 1. 在前台打开gedit文件编辑器。
[demo@365linux ~]$ gedit
- 1. 按Ctrl+z组合键将进程暂停。
^Z
[1]+ Stopped gedit
- 2. 查看该shell终端的后台或已暂停的进程。
[demo@365linux ~]$ jobs
[1]+ Stopped gedit
- 3. 使用bg命令将进程在后台恢复运行。
[demo@365linux ~]$ bg 1
[1]+ gedit &
- 4. 使用fg命令将进程发送至前台,并使用Ctrl+c结束进程。
[demo@365linux ~]$ fg 1
gedit
^C
工作技巧
通常在shell终端提示符中运行的作业(非服务进程)是和该shell相关联的,当该shell终端被关闭时,运行的作业也会停止,这时可以使用nohup的命令来脱离这种关联性。
如果出于某些原因您需要以root用户身份运行图形程序,而PolicyKit(普通用户特权获取机制管理)不支持以普通用户身份运行该图形程序时在必要时进行root用户的授权(比如Nautilus文件管理器),那么则需要在命令行下切换到root用户,然后在命令行中以root的身份打开该图形程序。
示例:以root用户身份打开nautilus文件管理器。
[demo@365linux ~]$ su -
密码:
[root@365linux ~]# nautilus &
[root@365linux ~]# exit
工作技巧
在命令后中使用su – 命令切换用户后,想要回到之前的登录用户,要使用exit命令退出当前用户,则退回到之前的用户,而不能使用su – 来回反复切换。
- 命令的格式
在shell提示符下面输入的命令由三部分组成:
命令 选项 参数
command [-options] [parameter1] [parameter2] ……
示例:执行ls命令,-l –r是短选项,--size是长选项 /boot是命令执行的参数。
[demo@365linux ~]$ ls -l --size -r /boot
Bash命令至少有如下特点:
-
- 一条命令必须是以可执行的命令开头,以空格隔开;选项是可选的,但在大多数情况下被使用以满足用户的功能定制要求;参数一般是命令要操作的对象,一条命令的参数可以是一个或多个,没有参数则取命令参数默认值。输入完命令后按“Enter”键执行。
- “-”后面接简写的选项(字母),可以把多个简写的选项串在一起,不过有时要注意顺序;长选项(由单词或单词缩写组成)用“--”分隔。选项也可以有自己的参数,如“--width=40”。
- 命令中间的空格不论几格,Bash都视为一格,命令太长时用“\”转义“Enter”,使用命令可以换行继续输入。
- Linux命令严格区分大小写。
- 在大部分情况下,对于命令执行的结果,“No news is good news!”。
- Tab键补全命令和路径。
- Bash具有历史命令功能(history)。
- 命令可以使用别名的形式(alias)。
- 有大量的快捷键可以使用;
- 有完善的帮助文档。
以下对Bash的部分重要功能做详细的解释:
命令行Tab键补全功能
Tab补全允许您在提示符下键入足够的内容以使其唯一后快速补全命令和文件名。如果键入的字符匹配到的命令或文件名不唯一,则按Tab键两次,以显示所有以键入的字符开头的命令或文件名的情况。Tab补全的功能可以提高命令的输入速度,且可以判断输入的命令或文件名的正确性。
示例:使用两次Tab键显示出以pas开头的命令。
[demo@365linux ~]$ pas<Tab><Tab>
passwd paste pasuspender
示例:使用Tab键自动补全命令passwd。
[demo@365linux ~]$ pass<Tab>
[demo@365linux ~]$ passwd
示例:使用Tab键自动补全路径。
[demo@365linux ~]$ ls /etc/sysco<Tab>/ipt<Tab>
[demo@365linux ~]$ ls /etc/sysconfig/iptables
Bash历史记录功能
Shell历史记录允许您查看之前运行过的命令并对其进行编辑或再次执行。使用history命令查看所有之前命令,或者使用上箭头和下箭头一次滚动浏览一个历史记录命令。历史记录命令的输出包含数字值。在感叹号(!)后面使用该数字可以再次运行该命令。在感叹号后面使用非数字值则运行最后一个以这些字符开头的命令。
示例:使用history命令显示当前会话所有的历史命令。
[demo@365linux ~]$ history
1 su -
2 cd
3 firefox &
4 su -
5 history
示例:执行编号为3的历史命令firefox &。
[demo@365linux ~]$ !3
使用命令别名
对于一些较长的命令执行格式或者命令组合,而又经常使用的,可以使用别名的方式进行定义,减少反复较长的输入。使用alias命令可以显示和定义别名,使用unalias取消命令别名。除非将别名的定义写到用户的配置文件,否则别名只在当前会话中有效。
示例:显示当前会话所有别名。
[demo@365linux ~]$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
示例:自定义别名p2。
[demo@365linux ~]$ alias p2='ping -c 3 192.168.148.2'
[demo@365linux ~]$ p2
PING 192.168.148.2 (192.168.148.2) 56(84) bytes of data.
64 bytes from 192.168.148.2: icmp_seq=1 ttl=128 time=0.112 ms
64 bytes from 192.168.148.2: icmp_seq=2 ttl=128 time=0.386 ms
64 bytes from 192.168.148.2: icmp_seq=3 ttl=128 time=0.141 ms
--- 192.168.148.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.112/0.213/0.386/0.122 ms
示例:取消自定义的别名p2。
[demo@365linux ~]$ unalias p2
[demo@365linux ~]$ p2
-bash: p2: command not found
工作技巧
用户常用的命令别名定义命令应该写到用户家目录下的.bashrc文件中,以保证每次用户登录都能使用该别名。
命令的物理位置
Linux命令分为两种类型:
内部命令:Bash在本身内建的命令,这些命令在shell启动时被加载到内存;
外部命令:内建命令之外的可执行程序,通常是由系统的组件或者应用程序安装提供。
通过which命令可以定位命令在系统中的真实路径。
示例:使用which命令定位ls命令的路径。
[demo@365linux ~]$ which ls
alias ls='ls --color=auto'
/bin/ls
示例:使用which命令定位history命令,结果显示history并不存在于系统命令路径中,可见history命令是Bash内建的命令。
[demo@365linux ~]$ which history
/usr/bin/which: no history in (/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin: \
/usr/local/sbin:/usr/sbin:/sbin:/home/demo/bin)
示例:显示Bash在系统中查找命令路径的环境变量。
[demo@365linux ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/demo/bin
Bash命令行的快捷键
RHEL系统Bash命令行环境有大量的快捷键可以使用,方便操作。这里仅例出常用的快捷键。如下表 01所示:
表 01 Bash快捷键
快捷键 |
功能 |
Ctrl + c |
非常规中断,中止前台进程 例如:中断命令 cat /dev/zero |
Ctrl + d |
输入完成的正常信号 例如:命令 wc 和 at 的操作 |
Ctrl + z |
挂起前台进程,用fg恢复 用bg恢复后台执行 |
Ctrl + l |
清屏, 等同命令clear |
Ctrl + u |
删除当前行 |
Ctrl + h |
删除光标前一个字符 |
Ctrl + w |
清除光标之前的字符串 |
Ctrl + k |
清除光标之后的字符串 |
Ctrl + a |
光标移动到命令行的行首 |
Ctrl + e |
光标移动到命令行的行尾 |
Ctrl + r |
从历史命令中找含有键入字符的命令 |
Alt + b |
光标往前移动一个字符串 |
Alt + f |
光标往后移动一个字符串 |
Ctrl + y |
恢复Ctrl+w或Ctrl+k 清除的内容 |
Ctrl + B |
光标往前移动一个字符 |
Ctrl + F |
光标往后移动一个字符 |
Ctrl + X |
在光标所在位置与行首切换 |
Alt+ . |
补全之前输入过的参数 |
Alt + U |
换成大写 |
Ctrl + S |
锁住终端输出 |
Ctrl + Q |
解锁终端 |
工作技巧
在某些情况下(比如使用cat命令查看了不能直接打开的文件),会导致终端显示乱码并无法正常输入,则可以盲打reset命令进行终端复原。
- 获得命令的帮助信息
只了解命令单一的作用是不够的。为了有效地使用命令,还需要了解每个命令可以接受哪些选项和参数,以及命令希望如何排列这些选项和参数(命令的语法)。一个完整的系统里包含了数千个命令,而每个命令都有自己众多不同的选项和参数,这样庞大繁多的命令用法极大的体现了Linux命令行的灵活性,同时也增加了使用者的学习和应用难度。
然而几乎所有的命令和配置文件的语法格式和用法都有帮助文档。我们可以通过以下几种方式获得帮中信息:
-
- 使用命令 -h (--help)或者 -?的选项来获得命令使用的规范和选项、参数的信息;
- 使用man来获得命令的使用手册;
- 使用pinfo读取文档;
- 查看/usr/share/doc中的文档。
--help帮助输出
大多数命令都有-h(有的命令-h有其他特定的功能,则只能使用--help)的帮助选项,执行命令的该选项时会在终端输出简洁的帮助信息。
示例:使用--help选项获取ls命令的帮助信息。
[demo@365linux ~]$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
……
关于帮助输出的几个基本惯例:
-
- 方括号([ ])中的任何内容都为可选;
- 省略号(…)表示此字符串可以任意长度列表;
- 以竖线(|)分隔的多个选项,这表示可以选择其中任意一项;
- 尖括号(< >)中的文本表示必须出现变量数据。因此<filename>表示“在此插入要使用的文件名”。
使用man读取帮助文档
Linux man手册提供了比help输出更为详尽的帮助文档,类似于一本分成许多章节的大型书籍。用户可以通过在终端执行man命令来相关命令或文件的帮助文档信息。终端以每次一个屏幕的形式显示内容,并可通过键盘命令来控制导航man手册。man导航按键如下表 02所示。
表 02导航man手册
按键/命令 |
结果 |
空格键 |
向前滚动一个屏幕 |
方向键下 或J |
向前滚动一行 |
方向键上 或k |
向后滚动一后 |
/string |
在man手册中向前搜索string |
n |
在man手册中重复之前的向前搜索 |
N |
在man手册中重复之前的向后搜索 |
q |
退出man并返回到终端提示 |
示例:查看ls命令的man手册。
[demo@365linux ~]$ man ls
LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
……
man文件主要包括以下几个部分(各命令可能有区别):
NAME 程序名和简介
SYNOPSIS 命令的格式,显示所有的选项和参数
DESCRIPTION 命令功能的描述和选项的详解
OPTIONS 所有选项清单和描述
EXAMPLES 用法举例
AUTHOR 作者
REPORTING BUGS 报告BUG
CCOPYRIGHT 许可证
SEE ALSO 相关内容
man手册分为多个章节,所以可能会出现相同名称的多个帮助文档内容。为了区人不同的man手册,在编写对man手册的引用时,通常在man手册的名称后面添加手册的章节号并用括号括起来。比如,用户命令passwd的帮助文档是passwd(1),存储本地用户信息的配置文件/etc/passwd的帮助文档是passwd(5)。
关于man的章节,可以通过man man来查看相关信息,如下表 03所示:
表 03 man手册的章节
章节 |
man手册类型 |
1 |
用户命令 |
2 |
内核系统调用(从用户空间到内核的进入点) |
3 |
库函数 |
4 |
特殊文件和设备 |
5 |
文件格式和规范 |
6 |
游戏 |
7 |
规范、标准和其他页面 |
8 |
系统管理命令 |
9 |
Linux内核API(内核调用) |
man命令会按特定顺序搜索手册中的各节,并显示找的第一个匹配项;例如man passwd默认情况下将显示passwd(1)。要找到特定节中的man手册,则必须在命令行中以参数的形式指定节号:man 5 passwd 将显示passwd(5)。
示例:查看/etc/passwd配置文件的帮助文档。
[demo@365linux ~]$ man 5 passwd
可以使用man -k keyword 对man手册执行关键字搜索,这将产生一个相关man手册的列表,包括对应的章节。
[demo@365linux ~]$ man -k passwd
chpasswd (8) - update passwords in batch mode
fgetpwent_r [getpwent_r] (3) - get passwd file entry reentrantly
getpwent_r (3) - get passwd file entry reentrantly
gpasswd (1) - administer /etc/group and /etc/gshadow
htpasswd (1) - Manage user files for basic authentication
kpasswd (1) - change a user's Kerberos password
lpasswd (1) - Change group or user password
lppasswd (1) - add, change, or delete digest passwords
pam_localuser (8) - require users to be listed in /etc/passwd
pam_passwdqc (8) - Password quality-control PAM module
passwd (1) - update user's authentication tokens
passwd2des [xcrypt] (3) - RFS password encryption
passwd (5) - password file
……
NOTE
关键字搜索需要makewhatis更新数据库,通常系统每天会自动运行更新。
使用pinfo读取文档
GNU Project开发的软件使用info系统来提供其部分文档,info文档通常以书籍的形式提供,其由包含超链接的info节点组成。此格式比man手册更加灵活,允许对复杂命令和概念进行更加彻底的说明。在某些情况下,某个命令同时存在相应的man手册和info文档;大多数情况下,info文档的信息更加详细。
示例:比较tar的man手册和info文档。
[demo@365linux ~]$ man tar
[demo@365linux ~]$ pinfo tar
/usr/share/doc中的文档
对于在man手册,info手册,或者GNOME帮助实用程序都不能找到相关帮助文档,则可以在系统目录/usr/share/doc中查找。许多应用程序和系统命令的帮助文档位于该目录下以RPM软件包命令的子目录中。
示例:查看mdadm.conf配置文件的示例文件。
[demo@365linux ~]$ less /usr/share/doc/mdadm-3.2.6/mdadm.conf-example
工作流程2:使用命令行完成系统任务
任务目标:
使用命令行功能完成实际的系统任务,通过实践深刻了解命令行的工作方式。
任务要求:
- 从命令行管理文件;
- 设置系统时间;
- 退出和关闭系统。
任务过程:
- 从命令行管理文件
Linux文件系统具有层次结构,其组织方式采用“倒树”模型。顶级目录称为根目录(/目录),是整文件系统层次结构的起点,而根分区挂载到/目录。要在系统中指定文件的位置,可以指定该文件的绝对路径(从根目录到各级子目录到文件),或者使用相对路径(从当前工作目录到其下的各级子目录到文件)。
在命令行中文件的路径,如:/usr/share/doc,位于最前面的/表示根目录,即绝对路径的起点,之后的/则表示路径中目录的分隔符。
NOTE
在某些系统或说法中,经常将根目录(/)称作文件系统层次结构的root(这里的root表示根的意思),而系统中存在的/root目录是管理员用户root的家目录,容易造成混淆,一定要理解清楚。
切换工作路径
示例:使用pwd命令查看当前的工作目录。
[demo@365linux ~]$ pwd
/home/demo
示例:使用cd命令切换工作目录。
- 2. 使用绝对路径方式进入doc目录。在命令行中,绝对路径作为参数一定是从根目录(/)开始,依次连接各级子目录。切换到目标目录后,终端提示符会改变成为当前目录的简写。
[demo@365linux ~]$ cd /usr/share/doc/
[demo@365linux doc]$
- 5. 使用相对路径方式进入当前doc目录下的zip-3.0目录。在命令行中,使用相对目录,即相对于当前的工作目录,使用相对目录时,要省略目录前的路径分隔符,否则会和绝对路径产生混淆。示例中的的zip-3.0等同于/usr/share/doc/zip-3.0。
[demo@365linux doc]$ cd zip-3.0/
[demo@365linux zip-3.0]$
- 6. 返回上一级目录,参数“..”表示上一级目录;“.”表示当前目录。
[demo@365linux zip-3.0]$ cd ..
[demo@365linux doc]$
- 7. 快速返回当前用户的家目录,参数“~”表示当前用户的家目录。“~zhangsan”则表示用户zhangsan的家目录。
[demo@365linux doc]$ cd ~
[demo@365linux ~]$ pwd
/home/demo
- 8. 快速进入上一次工作目录。参数“-”表示切换到当前目录之前的目录。
[demo@365linux ~]$ cd -
/usr/share/doc
[demo@365linux doc]$
查看目录文件列表
在Linux系统中,一个基本原则是“一切皆文件”,包括硬件设备。这样,通过简单工具即可完成某些功能非常强大的操作。根据文件的特点,Linux系统将文件分为七种类型:
-
- -:一般文件;
- d:目录;
- l:链接文件;
- b:块设备文件;
- c:字符设备文件;
- s:套接字文件;
- p:管道文件
符号或字母是在命令行中的标示符。
示例:用ls命令查看文件列表并显示文件属性(包括类型)。
[demo@365linux ~]$ ls -l /boot
总用量 26149
-rw-r--r--. 1 root root 109953 11月 11 11:26 config-2.6.32-431.el6.i686
drwxr-xr-x. 3 root root 1024 3月 5 03:02 efi
ls –l 命令产生的效果等同于ll命令,ll是该命令用法别名。ll命令列出的文件属性包含七个字段,分别是,文件类型及文件权限、连接数、拥有者、所属组、文件大小、文件最近修改时间、文件名。
示例:在Bash命令中使用通配符“*”来匹配目录或文件名的引用。
[demo@365linux ~]$ ls /etc/a*.conf
/etc/asound.conf /etc/autofs_ldap_auth.conf
查找系统文件
示例:使用find命令查找系统文件。
[demo@365linux ~]$ find /home/demo -name *bash*
/home/demo/.bash_history
/home/demo/.bash_logout
/home/demo/.bashrc
/home/demo/.bash_profile
文件的基本操作
示例:对于目录和文件的基本操作命令。
- 3. 在用户的家目录创建一个新的文件夹test03。
[demo@365linux ~]$ mkdir test03
- 9. 进入刚刚创建的新目录test03,创建一个空文件hello.txt。
[demo@365linux ~]$ cd test03/
[demo@365linux test03]$ touch hello.txt
- 10. 查看文件的类型。
[demo@365linux test03]$ ll hello.txt
-rw-rw-r--. 1 demo demo 0 3月 17 18:13 hello.txt
- 11. 建立hello.txt的软链接文件。
[demo@365linux test03]$ ln -s hello.txt ln_hello.txt
[demo@365linux test03]$ ll
总用量 0
-rw-rw-r--. 1 demo demo 0 3月 18 08:34 hello.txt
lrwxrwxrwx. 1 demo demo 9 3月 18 08:35 ln_hello.txt -> hello.txt
在Linux系统中,软链接文件即指向目标文件的快捷方式,但源文件被删除时,软链接则成为一个失效的文件。除了软链接文件,Linux系统还支持硬链接文件(同样使用ln命令创建,不使用-s选项)。
- 12. 删除该文件和链接文件。
[demo@365linux test03]$ rm hello.txt
[demo@365linux test03]$ ll
总用量 0
lrwxrwxrwx. 1 demo demo 9 3月 18 08:35 ln_hello.txt -> hello.txt
[demo@365linux test03]$ rm ln_hello.txt
[demo@365linux test03]$ ls
- 13. 复制一个文件到当前工作目录。
[demo@365linux test03]$ cp /etc/man.config ./
[demo@365linux test03]$ ls
man.config
- 14. 创建一个新的目录test04,并将当前目录中的man.config移动到test04目录中。
[demo@365linux test03]$ mkdir test04
[demo@365linux test03]$ mv man.config test04/
[demo@365linux test03]$ ls
test04
[demo@365linux test03]$ ls test04/
man.config
- 15. 进入test04目录,查看当前绝对路径。
[demo@365linux test03]$ cd test04/
[demo@365linux test04]$ pwd
/home/demo/test03/test04
- 16. 返回上一级目录,删除含有文件的目录test04。
[demo@365linux test04]$ cd ..
[demo@365linux test03]$ rm -rf test04
[demo@365linux test03]$ ls
- 17. 回到上一级目录,并删除空目录test03。
[demo@365linux test03]$ cd ..
[demo@365linux ~]$ rmdir test03/
工作技巧
rm –rf命令会强制删除一切它的目标目录下的所有内容,所以要谨慎使用,特别是root用户使用时。
NOTE
关于Linux文件系统、文件类型、权限等概念会在后面的章节中提及。
- 设置系统时间和时区
示例:使用date命令查看当前的时间。
[demo@365linux test03]$ date
2014年 03月 18日 星期二 08:42:51 CST
示例:使用date命令设置时间。
[root@365linux ~]# date -s "2014/03/18 08:45:00"
2014年 03月 18日 星期二 08:45:00 CST
示例:修改系统的时区。
[root@365linux ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
另外,建议同时修改配置文件/etc/sysconfig/clock的内容为ZONE="Asia/Shanghai"。
工作技巧
使用date命令查看和修改的是系统时间。而在系统内部还有另外一个时间概念,硬件时钟,Linux系统重启后时间会与硬件时钟保持同步,所以修改系统时间,同时也要修改硬件时钟。在命令行中使用hwclock命令查看和设置硬件时钟。
- 退出、关闭系统
示例:使用poweroff命令关闭Linux系统。
[root@365linux ~]# poweroff
在Linux系统中,有多种方式实现关机或重启。可以使用poweroff、shutdown、halt、init命令关机。使用shutdown、halt、init、reboot可以实现系统重启。关机命令之间存在互相调用,且对于关闭系统和关闭电源在不同的系统版本上存在差异。一般情况下,建议使用poweroff关机,使用reboot重启。
Bash命令行重要的高阶功能
- 管道
在Linux系统中,管道允许用户将标准输出信息从程序连接至一个程序的输入,这样可以将多个程序(命令)连接成一个管道,后一个程序的作用对象即为前一个程序的输出结果。
RHEL系统使用竖线“|”连接程序管道操作。
示例:ls命令列出/usr/lib目录下的所有文件,其结果并不直接显示到屏幕输出,而是通过管道发送到下一个命令grep,通过grep命令过滤出结果中文件名含有jpeg的文件。
[demo@365linux ~]$ ls /usr/lib/ |grep "jpeg"
示例:用find命令找到/var目录中大小超过1M的文件,将结果用grep过滤出文件路径中包含cache的文件,再将文件列出结果交给wc统计行数,最终得到/var/目录中大小超过1M且与cache有关的文件有多少个。
[root@365linux ~]# find /var -size +1M |grep "cache" |wc -l
- I/O重定向
Linux命令行I/O重定向允许用户将标准输出或错误输出从程序发送至文件,以进行保存或屏蔽在终端的输出显示。重定向还支持反过来将文件内容读取至命令行程序。关于I/O重定向的定义如表 04所示。
表 04标准输入输出
名称 |
说明 |
编号 |
默认 |
STDIN |
标准输入 |
0 |
键盘 |
STDOUT |
标准输出 |
1 |
终端 |
STDERR |
标准错误 |
2 |
终端 |
示例:将date命令的标准输出重定向到文件,操作会覆盖文件原来的内容。
[demo@365linux ~]$ date > file
[demo@365linux ~]$ cat file
2014年 03月 19日 星期三 12:21:43 CST
[demo@365linux ~]$ date > file
[demo@365linux ~]$ cat file
2014年 03月 19日 星期三 12:21:56 CST
示例:使用重定向功能合并文件。
[demo@365linux ~]$ echo "1" > file1
[demo@365linux ~]$ echo "2" > file2
[demo@365linux ~]$ cat file1 file2 > file3
[demo@365linux ~]$ cat file3
1
2
示例:使用追加模式(不覆盖)将标准输出重定向到文件。
[demo@365linux ~]$ date >> test.txt
[demo@365linux ~]$ date >> test.txt
[demo@365linux ~]$ ls >> test.txt
[demo@365linux ~]$ cat test.txt
2014年 03月 19日 星期三 12:27:00 CST
2014年 03月 19日 星期三 12:27:07 CST
a
b
c
……
示例:将标准错误输出重定向到文件(覆盖)。
[demo@365linux ~]$ ls /boot /root 2> file
示例:将标准错误输出重定向到文件(追加)。
[demo@365linux ~]$ ls /boot /root 2>> file
示例:将标准错误输出重定向到设备文件/dev/null,作用是丢弃错误。
[demo@365linux ~]$ ls /xyzabc 2> /dev/null
示例:将标准输出和标准错误输出组合,重定向到文件。
[demo@365linux ~]$ ls /boot /xyzabc >file 2>&1
或者:
[demo@365linux ~]$ ls /boot /xyzabc &> file
示例:使用标准输入做为cat命令的处理对象(效果等同于使用参数方式)。
[demo@365linux ~]$ cat < file
示例: 将文件file的内容读取出来,重定向到test文件。
[demo@365linux ~]$ cat > test < file
示例: 将键盘输入的内容重定向到file03文件,直到用户输入EOF结束输入。
[demo@365linux ~]$ cat > file03 << EOF
> 1234
> abcd
> EOF
[demo@365linux ~]$ cat file03
1234
abcd
- 正则表达式
正则表达式是用来搜索和匹配文本模式的特殊字符串,依赖于特定的Linux命令行工具工作,比如less、man、vim、locate、grep、sed、awk等。多用于脚本中批量处理。
示例:匹配文件中以b开头的行,这里的“^”是正则表达式,表示行首。
[demo@365linux ~]$ grep '^b' /etc/passwd
NOTE
正则表达式将在下面shell脚本编程中详细介绍。
- 编写Bash脚本
Linux Bash除了能够在终端中进行交互执行命令外,还可以通过编写shell脚本完成自动化、批处理的任务。Shell脚本实际上就是按语句序列执行的命令组合的文本文件,当然,在Bash提供了很多的编程结构,比如判断,循环,函数等。
示例:查看本网段哪些IP可以ping通。
[demo@365linux ~]$ vim ping.sh
#!/bin/bash
#Name : ping.sh
#Last revision date : 2014-01-07
#usage : ./ping.sh
#Evironment
Net=“192.168.1”
#script start
for i in {1..254}
do
(
ping -c 1 $Net.$i &>/dev/null
if [ $? -eq 0 ];then
echo "$i is up."
fi
)&
#wait
done
工作总结
Linux具有强大的命令行功能,命令行具有简洁高效,功能全面,传输数据量小等特点,在系统管理中发挥巨大的作用。即使操作系统图形界面日益成熟,对于服务器系统而言,命令行功能一直被保留下来,并得到加强。
对于Linux命令行的学习,不能死记硬背命令的语法或用法示例,而要掌握Linux命令的书写规范,理解每条命令背后的逻辑、原理和命令执行后产生的效果。至于命令的用法,则要通过帮助文档,手册获得其相关的选项,参数的意义。对于常用的命令,则能熟能生巧,举一反三。
对于初学者而言,命令的使用往往成为入门的门槛,觉得生涩难懂而又难以记忆。其实不然,对于命令的学习,不要跳脱应用而单一的对于命令选项,参数,用法的去练习、记忆,而应该从实用的角度,当在具体的系统管理操作时,引入命令的学习。比如,我们知道了在图形见面下的文件管理、时间配置、退出登录关闭系统,那么在命令行下如何控制实现这些操作呢。比如,以后在用户管理中,使用命令行如何添加、删除用户等。自然而然完成了对于命令的学习。学习Linux系统管理不是学习命令,命令只是基本单元,只是工具,利用系统命令完成系统管理的任务才是目的。