章节简述:
本章节讲述系统内核、Bash解释器的关系与作用,教给读者如何正确的执行Linux命令以及常见排错方法。
经验丰富的运维人员可以恰当的组合命令与参数,使Linux字符命令更加的灵活且相对减少消耗系统资源。
已经收录了上百个最常用的Linux命令,其中有数十个命令被放到了后面的章节,到时候咱们再随用随学~
本章目录结构
- 2.1 强大好用的SHELL
- 2.2 执行查看帮助命令
- 2.3 常用系统工作命令
- 2.4 系统状态检测命令
- 2.5 工作目录切换命令
- 2.6 文本文件编辑命令
- 2.7 文件目录管理命令
- 2.8 打包压缩文件命令
- 2.9 文件查询搜索命令
2.1 强大好用的SHELL
通常计算机硬件是由运算器、控制器、存储器、输入/输出设备等等这些物理设备组成的,而能够让机箱内各种硬件设备各司其职的东西就叫做系统内核。Linux系统的内核负责驱动硬件、管理活动和分配/管理硬件资源等等任务,如此说来系统内核对计算机正常稳定的运行来讲可真的是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于“系统调用接口”开发出的程序/服务来管理计算机,满足我们的日常工作,如图2-1所示。
图2-1 Linux系统的软件结构图,原稿。
通过回顾我在运维行业中将近七年的学习经验,必须肯定在Linux系统中有些诸如逻辑卷管理器(LVM)的图形化工具非常好用,很好的减少了运维人员操作出错的几率,值得称赞。但很多图形化的工具实际就是调用了脚本来工作了,但功能上却被“阉割”了,缺乏了灵活性和可控性,并且相较文字界面的Linux命令来说更加消耗系统资源,因此经验丰富的运维人员甚至都不会给Linux系统安装图形界面,需要工作了则直接远程连接过去,不得不说这样做真的挺高效的。
"Shell"——也可称为“壳”,充当的是人与内核(硬件)的翻译官,用户将一些命令“告诉”Shell,它就会调用相应的程序服务执行工作啦,很厉害吧~~现在包括红帽系统在内的许多热门Linux系统主流默认字符Shell是Bash(Bourne-Again SHell)。
读者要明白bash作为大多数linux系统的默认字符解释器,必须必须必须得学好!Bash的优势主要有四项:
1.通过上下方向键来调取过往执行过的命令。 2.命令或参数仅需输入前几位就可以用tab键补全。 3.强大的批处理脚本。 4.实用的环境变量。
2.2 执行查看帮助命令
既然Linux系统中已经有了如此好用的“翻译官”,那么接下来就有必要好好学习下怎么跟它沟通了~因为要想准确的、高效的完成任务,不能够光靠命令本身,还应该根据实际情况来灵活调整各种命令的参数,就像我们切寿司时也可以用菜刀,但米粒一定会撒的满地到处都是,因此寿司刀上的圆孔就是为了更好的适应场景而额外增加的参数。当您学完了手里这本《Linux就该这么学》书籍后,再积累一段时间的工作经验,一定能够掌握Linux命令的奥义,常见执行Linux命令的格式是这样的:
命令名称 [命令参数] [命令对象]
注意:命令名称,命令参数,命令对象之间请用空格键分隔。
命令对象一般是指要被处理的文件、目录、用户等资源,而命令参数可以选用长格式(完整的选项名称)也可选用短格式(单个字母的缩写),分别用"--"与"-"做前缀。新手不会执行Linux命令的原因大多是因为复杂的参数,参数值会随不同的命令和需求情况而发生改变,因此一定要在参数选择搭配上多花时间来经验积累才可以。
长格式如:man --help
短格式如:man -h
大家现在心里可能会在想:“Linux系统中有如此多的命令,我怎么知道某个命令是干嘛用的?又或者在日常工作中遇到了一个不熟悉的Linux命令,那我们又怎样才能知道有那些可用的参数呢?”。想到这里,那么man命令就肯定能够当之无愧的成为了我们《Linux就该这么学》这本书中第一个教给大家去学习的Linux命令了。并且对于毫无基础的新手读者,您还可以通过下面如图2-2、2-3、2-4所示的实验来学习到如何在RHEL7系统中执行您的Linux命令。
1.在RHEL7系统的桌面上按下右键后点击“Open in Terminal”选项,即可开启一个Linux终端,如图2-2所示。
2-2 在Linux系统上开启终端
2.在终端中输入“man man”来查看man命令自身的帮助信息,如图2-3所示。
图2-3 查看man命令的帮助信息
3.敲击回车后即可看到如图2-4所示的帮助信息。
图2-4 man命令的帮助信息
一般来讲帮助文件都很长很多,如果你想翻看的话,就要理解帮助文档的目录结构与操作方法:
结构名称 | 代表意义 |
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
man命令的常用操作按键:
按键 | 用处 |
空格键 | 向下翻一页。 |
[Page Down] | 向下翻一页。 |
[Page Up] | 向上翻一页。 |
[HOME] | 直接前往首页。 |
[END] | 直接前往尾页。 |
/关键词 | 从上至下搜索某个关键词,如"/linux"。 |
?关键词 | 从下至上搜索某个关键词,如"?linux"。 |
n | 定位到下一个搜索到的关键词。 |
N | 定位到上一个搜索到的关键词。 |
q | 退出帮助文档。 |
很多同学在报名培训课程时都会提到自己的英语基础不好,其实大可不必担心,因为我们的书籍、培训课程甚至红帽考题都是中文的。并且接下来您也就会发现,原来在我们一直使用的是Linux命令,而绝不是纯粹的英语单词,即便它们的拼写100%相同,最终用处肯定也是不一样的,所以在学习Linux系统技术的这件事上,您跟英语达人绝对都是站在同一起跑线上的,更何况还正确的选择了一本适合您的Linux教材,放心开始学习吧!
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
Linux技术交流请加A群:560843(满),B群:340829(推荐),点此查看全国群。
*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。
2.3 常用系统工作命令
您手中的这本《Linux就该这么学》教材是结合刘遄老师七年多的运维学习、及开办数十期培训的授课经验而编写而成,您可能在本章节中找不到某些见过的命令,原因是我在尽力将命令与实践相互结合,真正让读者在操作中理解技术,而不是单纯的把命令堆砌到书中让读者去硬背。因此我花费了将近半年的时间将最常用的Linux命令汇总、归纳、整理、分类,最终将部分常用的命令合理的安排到了后面章节中陆续学习,并且经过数年的培训成果来看,我非常有自信的肯定这也一定是适合于您的Linux命令学习方法。
echo命令用于在终端显示字符串或输出变量提取后的值,格式为:“echo [字符串 | $变量]”。
将指定字符串输出到终端屏幕:
[[email protected] ~]# echo Linuxprobe.Com Linuxprobe.Com
使用$变量的方式提取变量值并输出到屏幕:
[[email protected] ~]# echo $SHELL /bin/bash
date命令用于显示及设置系统的时间或日期,格式为:"date [选项] [+指定的格式]"。
强大的date命令只需键入以"+"号开头的参数即可按照执行的格式输出系统的时间或日期,对于数据打包备份的时候尤其有帮助,常见的格式如下:
参数 | 作用 |
%t | 跳格[TAB键] |
%H | 小时(00-23) |
%I | 小时(01-12) |
%M | 分钟(00-59) |
%S | 秒(00-60) |
%X | 相当于%H:%M:%S |
%Z | 显示时区 |
%p | 显示本地AM或PM |
%A | 星期几 (Sunday-Saturday) |
%a | 星期几 (Sun-Sat) |
%B | 完整月份 (January-December) |
%b | 缩写月份 (Jan-Dec) |
%d | 日(01-31) |
%j | 一年中的第几天(001-366) |
%m | 月份(01-12) |
%Y | 完整的年份 |
按照默认的格式查看当前的系统时间:
[[email protected] ~]# date Mon Aug 24 16:11:23 CST 2015
按照"年-月-日 小时:分钟:秒"的格式查看当前的系统时间:
[[email protected] ~]# date "+%Y-%m-%d %H:%M:%S" 2015-08-24 16:29:12
设置当前的系统时间为2016年9月1日8点30分:
[[email protected] ~]# date -s "20160901 8:30:00" Tue Sep 1 08:30:00 CST 2016
再次按照默认的格式查看当前的系统时间:
[[email protected] ~]# date Tue Sep 1 08:30:01 CST 2016
查看今天是一年中的第几天:
[[email protected] ~]# date "+%j" 245
reboot命令用于重启系统,格式为:"reboot"。
使用root用户的身份重启计算机系统:
[[email protected] ~]# reboot
poweroff命令用于关闭系统,格式为:"poweroff"。
使用root用户的身份关闭计算机系统:
[[email protected] ~]# poweroff
wget命令用于在终端中下载网络文件,格式为:“wget [参数] 下载地址”。
参数 | 作用 |
-b | 后台下载模式。 |
-O | 下载到指定目录。 |
-t | 最大尝试次数。 |
-c | 断点续传 |
-p | 下载页面内所有资源,包括图片、视频等。 |
-r | 递归下载 |
如果您暂时还没有Linux系统的管理经验也不会配置网卡,那么切记急于求成,这次只需要看下书中下面的演示即可,我们将通过后面的章节在日后慢慢学习完Linux系统的管理方法,然后您再回来做这个实验吧,从本站的资源库中下载RHEL7系统镜像:
[root@linuxprobe ~]# wget http://www.linuxprobe.com/Tools/RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
--2015-09-01 18:25:24-- http://www.linuxprobe.com/Tools/RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
Resolving www.linuxprobe.com... 106.185.25.197
Connecting to www.linuxprobe.com|106.185.25.197|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3743416320 (3.5G) [application/octet-stream]
Saving to: ‘RHEL-server-7.0-x86_64-LinuxProbe.Com.iso‘
100%[====================================>] 3,743,416,320 1.82M/s in 32m 27s
2015-09-01 18:57:51 (1.83 MB/s) - ‘RHEL-server-7.0-x86_64-LinuxProbe.Com.iso‘ saved [3743416320/3743416320]
递归下载《Linux就该这么学》的整站页面与所有资料,下载完成后会在当前目录中保存成名为"www.linuxprobe.com"的目录:
[[email protected] ~]# wget -r -p http://www.linuxprobe.com --2015-09-01 18:31:41-- http://www.linuxprobe.com/ Resolving www.linuxprobe.com... 106.185.25.197 Connecting to www.linuxprobe.com|106.185.25.197|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: `www.linuxprobe.com/index.html‘ ………………省略下载过程………………
ps命令用于查看系统中的进程状态,格式为:“ps [参数]”,同样搭配的参数如下:
参数 | 作用 |
-a | 显示所有的进程(包括其他用户的) |
-u | 用户以及其他详细信息 |
-x | 显示没有控制终端的进程 |
Linux系统中时刻运行着许许多多的进程,如果能够合理的管理它们,绝对有益于系统的性能优化,系统进程总共有5种不同的状态:
R(运行):正在运行或在运行队列中等待。
S(中断):休眠中, 在等待某个条件的形成或接受到信号。
D(不可中断):收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
Z:(僵死):进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
T:(停止):进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行。
当执行"ps aux"命令后通常会看到这样格式的进程状态(下表只举例部分的输出值):
USER | PID | %CPU | %MEM | VSZ | RSS | TTY | STAT | START | TIME | COMMAND |
进程的所有者 | 进程ID号 | 运算器占用率 | 内存占用率 | 虚拟内存使用量(单位是KB) | 占用的固定内存量(单位是KB) | 所在终端 | 进程状态 | 被启动的时间 | 实际使用CPU的时间 | 命令名称与参数 |
root | 1 | 0.0 | 0.4 | 53684 | 7628 | ? | Ss | 07:22 | 0:02 | /usr/lib/systemd/systemd |
root | 2 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [kthreadd] |
root | 3 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [ksoftirqd/0] |
root | 5 | 0.0 | 0.0 | 0 | 0 | ? | S< | 07:22 | 0:00 | [kworker/0:0H] |
root | 7 | 0.0 | 0.0 | 0 | 0 | ? | S | 07:22 | 0:00 | [migration/0] |
top命令用于动态的监视进程活动与系统负载等信息,格式为:“top”。
这个top命令可真的是太厉害了,完全可以比喻成是“强化版的Windows任务管理器”,运行界面如图2-5所示:
图2-5 top命令的执行界面
前面的五行为系统整体的统计信息,下面我们来逐行的讲解:
第1行:系统时间,运行时间,登陆用户数,系统负载(分别为1分钟、5分钟、15分钟的平均值)。
第2行:进程总数,运行中的,睡眠中的,停止的,僵尸的。
第3行:用户占用资源,系统内核占用资源,改变过优先级的进程,空闲的资源,等待输入输出的时间。
此行数据均为CPU数据并以百分比格式显示,例如"99.2 id"意味着有99.2%的CPU资源正在空闲中。
第4行:物理内存总量,使用量,空闲量,作为内核缓存的内存量。
第5行:虚拟内存总量,使用量,空闲量,已被提前加载的内存数据。
pidof命令用于查询某个特定程序的进程PID值,格式为:“pidof [参数] [程序名称]”。
查询"sshd"进程的PID值:"pidof sshd"
kill命令用于终止某个特定PID号码的进程,格式为:“kill [参数] [进程PID号]”。
强制终止PID为4674的进程:"kill -9 4674"
?其中的"-9"代表强制终止(SIGKILL),也是最常用的一种信号参数,查看全部请执行"kill -l"
killall命令用于终止某个特定名称的所有进程,格式为:“killall [参数] [进程名称]”。
终止名称为"sshd"的进程:"killall sshd"
在终端中运行一个命令后如果想立即的停止它,可以使用组合键"Ctrl+c",这样命令的进程将会彻底的被终止。
但还有一种玩法是"Ctrl+z",它是将命令的进程暂停(也叫挂载到后台或扔到后台),先来看两条命令吧:
这条命令会每秒向家目录中的jobs.txt中追加一个字符串:
[[email protected] ~]# (while true ;do echo -n " working " >> ~/jobs.txt;sleep 1 ;done;)
自动刷新查看文件内容的变化:
[[email protected] ~]# tail -f ~/jobs.txt
模拟训练:试试"Ctrl+z",学习jobs、bg和fg命令。
开始执行写入命令:
[[email protected] ~]# (while true ;do echo -n " working " >> ~/jobs.txt;sleep 1 ;done;)
确认一直在被写入字符:
[[email protected] ~]# tail -f ~/jobs.txt
敲击"ctrl+z"后,这条命令的进程被暂停了(另外的终端中不再被追加内容):
[[email protected] ~]# (while true ;do echo -n " working " >> ~/jobs.txt;sleep 1 ;done;) ^Z [1]+ Stopped ( while true; do echo -n " working " >> ~/jobs.txt; sleep 1; done )
使用jobs命令可以查看到所有在后台运行着的进程:
[[email protected] ~]# jobs [1]+ Stopped ( while true; do echo -n " working " >> ~/jobs.txt; sleep 1; done )
运行bg命令让后台的程序继续执行,现在后台中只有一个进程,所以省略了编号,完整格式应为"bg 1":
[[email protected] ~]# bg [1]+ ( while true; do echo -n " working " >> ~/jobs.txt; sleep 1; done )
运行fg命令将后台的进程再调回前台,程序依然在运行,此时你可以敲击组合键"ctrl+c"啦:
[[email protected] ~]# fg ( while true; do echo -n " working " >> ~/jobs.txt; sleep 1; done )&
有些命令在执行时会不断的在终端上输出信息,影响到我们继续输入命令了,此时便可以在这条命令后面添加个"&"符号,那么从一开始执行该命令就会是在后台执行(不是在后台暂停,而是在运行的)。
2.4 系统状态检测命令
合格的运维人员必需具备快速查看系统状态的能力,所以这些命令真的很常用呢!
ifconfig用于获取网卡配置与网络状态等信息:格式为"ifconfig [网络设备] [参数]"。
查看本机当前的网卡配置与网络状态等信息:
[[email protected] ~]# ifconfig eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.10 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::20c:29ff:fe9c:6373 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:9c:63:73 txqueuelen 1000 (Ethernet) RX packets 61 bytes 6612 (6.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 32 bytes 4511 (4.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 0 (Local Loopback) RX packets 2 bytes 140 (140.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2 bytes 140 (140.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
uname命令用于查看系统内核版本等信息,格式为:“uname [-a]”。
查看系统的内核名称、内核发行版、内核版本、节点名、硬件名称、硬件平台、处理器类型、操作系统等信息:
[[email protected] ~]# uname -a Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
顺便说下,如果您想查看系统详细版本信息就看redhat-release文件:
[[email protected] ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.0 (Maipo)
uptime命令用于查看系统的负载情况,格式为:“uptime”。
我也经常用"watch -n 1 uptime"来每秒刷新一次获得当前的系统负载情况,输出内容分别为系统当前时间、系统已运行时间、当前在线用户以及平均负载值。而平均负载分为最近1分钟、5分钟、15分钟的系统负载情况,负载值越低越好(小于1是正常)。
获取当前系统状态信息:
[[email protected] ~]# uptime 22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
free命令用于显示当前系统中内存的使用量情况,格式为:“free [-m/-g]”。
以m为单位显示当前系统中内存的使用量情况:
[[email protected] ~]# free -m
总计内存量 | 已用量 | 可用量 | 进程共享的内存量 | 磁盘缓存的内存量 | 缓存的内存量 | |
total | used | free | shared | buffers | cached | |
Mem: | 1483 | 885 | 598 | 9 | 0 | 255 |
-/+ buffers/cache: | 628 | 855 | ||||
Swap: | 2047 | 0 | 2047 |
who命令用于查看当前登入主机的用户情况,格式为:"who [参数]"。
查看当前登入主机用户的情况:
[[email protected] ~]# who
登陆的用户名 | 终端设备 | 登陆到系统的时间 |
root | :0 | 2015-08-24 17:52 (:0) |
root | pts/0 | 2015-08-24 17:52 (:0) |
last命令用于查看所有系统的登入记录,格式为:"last [参数]"。
查看系统的登入记录:
[[email protected] ~]# last root pts/0 :0 Mon Aug 24 17:52 still logged in root :0 :0 Mon Aug 24 17:52 still logged in (unknown :0 :0 Mon Aug 24 17:50 - 17:52 (00:02) reboot system boot 3.10.0-123.el7.x Tue Aug 25 01:49 - 18:17 (-7:-32) root pts/0 :0 Mon Aug 24 15:40 - 08:54 (7+17:14) root pts/0 :0 Fri Jul 10 10:49 - 15:37 (45+04:47)
history命令用于显示历史执行过的命令,格式为:“history [-c]”。
查看当前用户在系统中执行过的命令:
[[email protected] ~]# history 1 tar xzvf VMwareTools-9.9.0-2304977.tar.gz 2 cd vmware-tools-distrib/ 3 ls 4 ./vmware-install.pl -d 5 reboot 6 df -h 7 cd /run/media/ 8 ls 9 cd root/ 10 ls 11 cd VMware\ Tools/ 12 ls 13 cp VMwareTools-9.9.0-2304977.tar.gz /home 14 cd /home 15 ls 16 tar xzvf VMwareTools-9.9.0-2304977.tar.gz 17 cd vmware-tools-distrib/ 18 ls 19 ./vmware-install.pl -d 20 reboot 21 history
历史命令会被保存到用户家目录中的".bash_history"文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,一般会是系统文件。
[[email protected] ~]# cat ~/.bash_history
清空该用户在本机中执行过命令的历史记录:
[[email protected] ~]# history -c
history默认会保存1000条执行过的命令,若要修改可直接编辑/etc/profile文件的HISTSIZE值。
sosreport命令用于收集系统配置并诊断信息后输出结论文档,格式为:“sosreport”。
当我们的红帽系统出现故障需要联系红帽厂商或其他技术支持时,大多数情况都需要提供使用到这个命令。
收集系统本地配置信息并诊断:
[[email protected] ~]# sosreport sosreport (version 3.0) This command will collect diagnostic and configuration information from this Red Hat Enterprise Linux system and installed applications. An archive containing the collected information will be generated in /var/tmp and may be provided to a Red Hat support representative. Any information provided to Red Hat will be treated in accordance with the published support policies at: https://access.redhat.com/support/ The generated archive may contain data considered sensitive and its content should be reviewed by the originating organization before being passed to any third party. No changes will be made to system configuration. Press ENTER to continue, or CTRL-C to quit. Please enter your first initial and last name [linuxprobe.com]: Please enter the case number that you are generating this report for: Running plugins. Please wait ... Running 70/70: yum... Creating compressed archive... Your sosreport has been generated and saved in: /var/tmp/sosreport-linuxprobe.com-20150905230631.tar.xz The checksum is: 79436cdf791327040efde48c452c6322 Please send this file to your support representative.
2.5 工作目录切换命令
虽然后面的章节才会学习到linux的存储结构与“目录”这个概念,但没有关系,现在您也能看懂下面的操作。
pwd命令用于显示当前的工作目录,格式为:“pwd [选项]”。
参数 | 作用 |
-P | 显示真实路径。(即非快捷链接的地址) |
查看当前的工作路径:
[[email protected] etc]# pwd /etc
cd命令用于切换工作路径,格式为:“cd [目录名称]”。
参数 | 作用 |
- | 切换到上一次的目录,如“cd -” |
~ | 切换到“家目录”,如"cd ~" |
~username | 切换到其他用户的家目录,如"cd ~teak" |
.. | 切换到上级目录,如"cd .." |
切换进/etc目录中:
[[email protected] ~]# cd /etc
切换进/bin目录中:
[[email protected] etc]# cd /bin
返回到上一次的目录(即/etc目录):
[[email protected] bin]# cd - /etc
返回用户自己的家目录:
[[email protected] etc]# cd ~ [[email protected] ~]#
ls命令用于查看目录中有那些文件,格式为:“ls [选项] [文件] ”。
查看当前目录下有那些文件(长格式):
[[email protected] etc]# ls -al
参数 | 作用 |
-a | 查看全部文件(包括隐藏文件) |
-d | 仅看目录本身 |
-h | 易读的文件容量(如k,m,g) |
-l | 显示文件的详细信息 |
查看/etc目录中有那些文件:
[[email protected] ~]# ls /etc abrt gss printcap adjtime gssproxy profile aliases gtk-2.0 profile.d aliases.db gtk-3.0 protocols alsa hba.conf pulse alternatives host.conf purple anacrontab hostname qemu-ga asound.conf hosts qemu-kvm at.deny hosts.allow radvd.conf ………省略部分文件………
查看/etc目录的权限与属性:
[[email protected] ~]# ls -ld /etc drwxr-xr-x. 132 root root 8192 Jul 10 10:48 /etc
追加-h参数,以K/M/G为单位显示容量:
[[email protected] ~]# ls -ldh /etc drwxr-xr-x. 132 root root 8.0K Jul 10 10:48 /etc
2.6 文本文件编辑命令
既然已经学会了工作目录间的切换与查看,那么就来试试对文件的一系列操作吧,非常实用。
cat命令用于查看纯文本文件(较短的),格式为:“cat [选项] [文件]”。
查看文本文件:
[[email protected] ~]# cat 文件名
参数 | 作用 |
-n | 显示行号 |
-b | 显示行号(不包括空行) |
-A | 显示出“不可见”的符号,如空格,tab键等等 |
more命令用于查看纯文本文件(较长的),格式为:“more [选项] 文件”。
查看文本文件:
[[email protected] ~]# more 文件名
参数 | 作用 |
-数字 | 预先显示的行数(默认为一页) |
-d | 显示提示语句与报错信息 |
head命令用于查看纯文本文档的前N行,格式为:“head [选项] [文件]”。
查看文本文件前20行:
[[email protected] ~]# head -n 20 文件名
参数 | 作用 |
-n 10 | 显示10行 |
-n -10 | 正常输出(如cat命令),但不显示最后的10行 |
tail命令用于查看纯文本文档的后N行,格式为:“tail [选项] [文件]”。
查看文本文件后20行:
[[email protected] ~]# tail -n 20 文件名
参数 | 作用 |
-n 10 | 显示后面的10行 |
-f | 持续刷新显示的内容 |
od命令用于对查看特殊格式的文件,格式为:“od [选项] [文件]”。
参数 | 作用 |
-t a | 默认字符 |
-t c | ASCII字符 |
-t o | 八进制 |
-t d | 十进制 |
-t x | 十六进制 |
-t f | 浮点数 |
tr命令用于转换文本文件中的字符,格式为:“tr [原始字符] [目标字符]”。
将家目录中anaconda-ks.cfg文件的内容转换成大写(注意到命令中间的|了吗?这个叫管道命令符,后面小节会学习到的)
[[email protected] ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z] #VERSION=RHEL7 # SYSTEM AUTHORIZATION INFORMATION AUTH --ENABLESHADOW --PASSALGO=SHA512 # USE CDROM INSTALLATION MEDIA CDROM # RUN THE SETUP AGENT ON FIRST BOOT FIRSTBOOT --ENABLE IGNOREDISK --ONLY-USE=SDA # KEYBOARD LAYOUTS KEYBOARD --VCKEYMAP=US --XLAYOUTS=‘US‘ # SYSTEM LANGUAGE LANG EN_US.UTF-8 # NETWORK INFORMATION NETWORK --BOOTPROTO=DHCP --DEVICE=ENO16777728 --ONBOOT=OFF --IPV6=AUTO NETWORK --HOSTNAME=LOCALHOST.LOCALDOMAIN # ROOT PASSWORD ROOTPW --ISCRYPTED $6$PDJJF42G8C6PL069$II.PX/YFAQPO0ENW2PA7MOMKJLYOAE2ZJMZ2UZJ7BH3UO4OWTR1.WK/HXZ3XIGMZGJPCS/MGPYSSOI8HPCT8B/ # SYSTEM TIMEZONE TIMEZONE AMERICA/NEW_YORK --ISUTC USER --NAME=LINUXPROBE --PASSWORD=$6$A9V3INSTNBWEIR7D$JEGFYWBCDOOOKJ9SODECCDO.ZLF4OSH2AZ2SS2R05B6LZ2A0V2K.RJWSBALL2FEKQVGF640OA/TOK6J.7GUTO/ --ISCRYPTED --GECOS="LINUXPROBE" # X WINDOW SYSTEM CONFIGURATION INFORMATION XCONFIG --STARTXONBOOT # SYSTEM BOOTLOADER CONFIGURATION BOOTLOADER --LOCATION=MBR --BOOT-DRIVE=SDA AUTOPART --TYPE=LVM # PARTITION CLEARING INFORMATION CLEARPART --NONE --INITLABEL %PACKAGES @BASE @CORE @DESKTOP-DEBUGGING @DIAL-UP @FONTS @GNOME-DESKTOP @GUEST-AGENTS @GUEST-DESKTOP-AGENTS @INPUT-METHODS @INTERNET-BROWSER @MULTIMEDIA @PRINT-CLIENT @X11 %END
wc命令用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。
参数 | 作用 |
-l | 只显示行数 |
-w | 只显示单词数 |
-c | 只显示字节数 |
统计当前系统中的用户个数:
[[email protected] ~]# wc -l /etc/passwd 38 /etc/passwd
stat命令用于查看文件的具体存储信息和时间等信息,格式“stat 文件名称”。
[[email protected] ~]# stat anaconda-ks.cfg File: ‘anaconda-ks.cfg’ Size: 1213 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 68912908 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:admin_home_t:s0 Access: 2016-07-14 01:46:18.721255659 -0400 Modify: 2016-05-04 15:44:36.916027026 -0400 Change: 2016-05-04 15:44:36.916027026 -0400 Birth: -
cut命令用于通过列来提取文本字符,格式为:“cut [参数] 文本”。
参数 | 作用 |
-d 分隔符 | 指定分隔符,默认为Tab。 |
-f | 指定显示的列数。 |
-c | 单位改为字符 |
获取当前系统中所有用户的名称:
参数作用:-d以":"来做分隔符,-f参数代表只看第一列的内容。
[[email protected] ~]# cut -d: -f1 /etc/passwd root bin daemon adm lp sync shutdown halt mail operator games ftp nobody dbus polkitd unbound colord usbmuxd avahi avahi-autoipd libstoragemgmt saslauth qemu rpc rpcuser nfsnobody rtkit radvd ntp chrony abrt pulse gdm gnome-initial-setup postfix sshd tcpdump linuxprobe
获取root用户的默认SHELL解释器:
[[email protected] ~]# grep ^root /etc/passwd | cut -d: -f 7 /bin/bash
diff命令用于比较多个文本文件的差异,格式为:"diff [参数] 文件"。
读者如果想比较实例中的文件,可点此下载文件diff_A.txt与diff_B.txt。
参数 | 命令 |
-b | 忽略空格引起的差异。 |
-B | 忽略空行引起的差异。 |
--brief或-q | 仅报告是否存在差异。 |
-c | 使用上下文输出格式。 |
比较两个文件的差异:
[[email protected] ~]# diff diff_A.txt diff_B.txt 1c1,2 > Welcome to linuxprobe.com --- > Welcome tooo linuxprobe.com > 3c4,5 > Free Linux Lessons --- > Free Linux LeSSonS > ////////.....////////
仅显示比较后的结果,即相同或不相同:
[[email protected] ~]# diff --brief diff_A.txt diff_B.txt Files diff_A.txt and diff_B.txt differ
使用上下文输出的格式:
[[email protected] ~]# diff -c diff_A.txt diff_B.txt *** diff_A.txt 2015-08-30 18:07:45.230864626 +0800 --- diff_B.txt 2015-08-30 18:08:52.203860389 +0800 *************** *** 1,5 **** ! Welcome to linuxprobe.com Red Hat certified ! Free Linux Lessons Professional guidance Linux Course --- 1,7 ---- ! Welcome tooo linuxprobe.com ! Red Hat certified ! Free Linux LeSSonS ! ////////.....//////// Professional guidance Linux Course
2.7 文件目录管理命令
touch命令用于创建空白文件与修改文件时间,格式为:“touch [选项] [文件]”。
我们可以用“touch test”轻松的创建出一个名字为test的空白文档,所以这个功能无须介绍。
对于在Linux中的文件有三种时间:
更改时间(mtime):内容修改时间(不包括权限的)
更改权限(ctime):更改权限与属性的时间
读取时间(atime):读取文件内容的时间
如果黑客执行了touch -d "2 days ago" test,便将访问与修改时间修改为了2天前(伪造了自己没有动过该文件的假象)。
参数 | 作用 |
-a | 仅修改“访问时间”(atime) |
-m | 仅修改“更改时间”(mtime) |
-d | 同时修改atime与mtime |
-t | 要修改成的时间[YYMMDDhhmm] |
mkdir用于创建空白的文件夹,格式为:“mkdir [选项] 目录”。
创建文件夹:
[[email protected] ~]# mkdir 文件夹名
参数 | 作用 |
-m=MODE | 默认的文件目录权限,如"-m 755" |
-p | 连续创建多层目录(若文件夹已存在则忽略) |
-v | 显示创建的过程 |
创建一个名字叫linuxprobe的目录:
[[email protected] ~]# mkdir linuxprobe
使用ls命令查看该目录的权限属性等信息:
[[email protected] ~]# ls -ld linuxprobe/ drwxr-xr-x. 2 root root 6 Aug 24 19:25 linuxprobe/
还记得刚刚用cd命令进入linuxprobe目录吗?这里是个小技巧,变量!$或(键盘按键)代表上一条命令的参数。
[[email protected] ~]# cd !$ cd linuxprobe
pwd命令也是刚刚学习过的,用于显示当前的工作路径。
[[email protected] linuxprobe]# pwd /root/Desktop/linuxprobe
一次创建5个目录a/b/c/d/e:
[[email protected] linuxprobe]# mkdir -p a/b/c/d/e
查看目录的属性,验证是否成功:
[[email protected] linuxprobe]# ls -ld a/b/c/d/e/ drwxr-xr-x. 2 root root 6 Aug 29 10:16 a/b/c/d/e/
cp命令用于复制文件或目录,格式为:“cp [选项] 源文件 目标文件”。
复制命令的三种情况:
目标文件是一个目录,会将源文件复制到该目录中。
目标文件是一个文件,会将源文件覆盖该文件。
目标文件不存在,将会复制源文件并修改为目标文件的名称(重命名)。
参数 | 作用 |
-p | 保留原始文件的属性 |
-d | 若对象为"链接文件",则保留该"链接文件"的属性 |
-r | 递归持续复制(用于目录) |
-i | 若目标文件存在则询问是否覆盖 |
-a | 相当于-pdr(p,d,r为上述的参数) |
创建一个名为install.log的文件:
[[email protected] ~]# touch install.log
将install.log复制为x.log:
[[email protected] ~]# cp install.log x.log
查看到确实出现了文件x.log
[[email protected] ~]# ls install.log x.log
mv命令用于移动文件或改名,格式为:“mv [选项] 文件名 [目标路径|目标文件名]”。
将文件aaa重命名为bbb:
[[email protected] ~]# mv aaa bbb
rm命令用于删除文件或目录,格式为:“rm [选项] 文件”。
删除普通文件并提示确认信息:“rm 文件名”
删除普通文件或目录文件,不提示:“rm -rf 文件或目录名”
参数 | 作用 |
-f | 忽略警告信息 |
-i | 删除前先询问 |
-r | 删除文件夹 |
查看当前目录下的文件:
[[email protected] ~]# ls install.log x.log
删除install.log文件,输入"y"即确认:
[[email protected] ~]# rm install.log rm: remove regular empty file ‘install.log’? y
删除x.log文件而无需确认:
[[email protected] ~]# rm -rf x.log
Linux系统中还有一个rmdir命令,它不同于rm -rf命令会删除一切,而是仅删除空目录,遇到目录内有文件时则报错。
dd命令用于指定大小的拷贝的文件或指定转换文件,格式为:“dd [参数]”。
参数 | 作用 |
if | 输入的文件名称。 |
of | 输出的文件名称。 |
bs | 设置每个“块”的大小。 |
count | 设置要拷贝“块”的个数。 |
conv=ucase | 将字母从小写转换为大写。 |
conv=lcase | 把字符从大写转换为小写。 |
将光驱设备拷贝成镜像文件:
[[email protected] ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso 7311360+0 records in 7311360+0 records out 3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s
生成一个560m的空白文件:
[[email protected] ~]# dd if=/dev/zero of=560_file count=1 bs=560M 1+0 records in 1+0 records out 587202560 bytes (587 MB) copied, 27.1755 s, 21.6 MB/s
将硬盘的MBR信息拷贝出来:
[[email protected] ~]# dd if=/dev/sda of=sda_image count=1 bs=512K 1+0 records in 1+0 records out 524288 bytes (524 kB) copied, 0.0449481 s, 11.7 MB/s
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
Linux技术交流请加A群:560843(满),B群:340829(推荐),点此查看全国群。
*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。
2.8 打包压缩文件命令
tar命令用于对文件打包压缩或解压,格式为:“tar [选项] [文件]”。
打包并压缩文件:“tar -czvf 压缩包名.tar.gz 文件名”
解压并展开压缩包:“tar -xzvf 压缩包名.tar.gz”
参数 | 作用 |
-c | 创建压缩文件 |
-x | 解开压缩文件 |
-t | 查看压缩包内有那些文件 |
-z | 用Gzip压缩或解压 |
-j | 用bzip2压缩或解压 |
-v | 显示压缩或解压的过程 |
-f | 目标文件名 |
-p | 保留原始的权限与属性 |
-P | 使用绝对路径来压缩 |
-C | 指定解压到的目录 |
将/etc目录内文件打包并通过gzip格式压缩:
[[email protected] ~]# tar czvf etc.tar.gz /etc tar: Removing leading `/‘ from member names /etc/ /etc/fstab /etc/crypttab /etc/mtab /etc/fonts/ /etc/fonts/conf.d/ /etc/fonts/conf.d/65-0-madan.conf /etc/fonts/conf.d/59-liberation-sans.conf /etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf /etc/fonts/conf.d/59-liberation-mono.conf /etc/fonts/conf.d/66-sil-nuosu.conf ……………………………………
将etc.tar.gz解压到/root/etc目录中:
[[email protected] ost ~]# mkdir /root/etc
开始解压etc.tar.gz文件:
[[email protected] ~]# tar xzvf etc.tar.gz -C /root/etc etc/ etc/fstab etc/crypttab etc/mtab etc/fonts/ etc/fonts/conf.d/ etc/fonts/conf.d/65-0-madan.conf etc/fonts/conf.d/59-liberation-sans.conf etc/fonts/conf.d/90-ttf-arphic-uming-embolden.conf etc/fonts/conf.d/59-liberation-mono.conf etc/fonts/conf.d/66-sil-nuosu.conf etc/fonts/conf.d/65-1-vlgothic-gothic.conf etc/fonts/conf.d/65-0-lohit-bengali.conf etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
2.9 文件查询搜索命令
grep命令用于对文本进行搜索,格式为:“grep [选项] [文件]”。
搜索某个关键词:“grep 关键词 文本文件”
参数 | 作用 |
-b | 将可执行文件(binary)当作文本文件(text)来搜索 |
-c | 仅显示找到的行数 |
-i | 忽略大小写 |
-n | 显示行号 |
-v | 反向选择——仅列出没有“关键词”的行。 |
搜索在/etc/passwd中"/sbin/nologin"出现的行,找出系统中不允许登陆的用户。
[[email protected] ~]# grep /sbin/nologin /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin ………………………………
找出文件“/usr/share/gedit/plugins/snippets/docbook.xml”中所有包含entry的行并输出到/root/lines:
答案模式:grep entry /usr/share/gedit/plugins/snippets/docbook.xml >> /root/lines
find命令用于查找文件,格式为:“find [查找路径] 寻找条件 操作”。
这里需要注意下find命令非常灵活导致参数非常复杂,这里不要求大家记住,用时来查即可。
对于常用搜索路径有几个小窍门:“~”代表用户的家目录,“.”代表当前目录,“/”代表根目录。
参数 | 作用 |
-name | 匹配名称 |
-perm | 匹配权限(mode为完全匹配,-mode为包含即可) |
-user | 匹配所有者 |
-group | 匹配所有组 |
-mtime -n +n | 匹配修改内容的时间(-n指n天以内,+n指n天以前) |
-atime -n +n | 匹配访问文件的时间-n指n天以内,+n指n天以前 |
-ctime -n +n | 匹配修改权限的时间-n指n天以内,+n指n天以前 |
-nouser | 匹配无所有者的文件 |
-nogroup | 匹配无所有组的文件 |
-newer f1 !f2 | 匹配比文件f1新却比f2旧的文件 |
--type b/d/c/p/l/f | 匹配文件类型(块设备、目录、字符设备、管道、链接文件、文件文件) |
-size | 匹配文件的大小(+50k查找超过50k的文件,而-50k则代表查找小于50k的文件) |
-prune | 忽略某个目录 |
-exec {} \; | 后面可接对搜索到结果进一步处理的命令(下面会有演示) |
搜索在/etc/中所有以host开头的文件:
其中的"host*"表示所有以host开头的文件:
[[email protected] ~]# find /etc -name "host*" -print /etc/avahi/hosts /etc/host.conf /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/selinux/targeted/modules/active/modules/hostname.pp /etc/hostname
搜索整个系统中所有包含SUID的文件(因SUID的数字表示法是4,而减号表示只要包含即可)。
[[email protected] ~]# find / -perm -4000 -print /usr/bin/fusermount /usr/bin/su /usr/bin/umount /usr/bin/passwd /usr/sbin/userhelper /usr/sbin/usernetctl ………………………………
找出用户linuxprobe的文件并复制到/root/findresults目录。
重点是"-exec {} \;"其中的{}代表find命令搜索出的文件,记住结尾必须是\;
[[email protected] ~]# find / -user linuxprobe -exec cp -arf {} /root/findresults/ \;