1、通常来说,计算机硬件是由运算器、控制器、存储器、输入/输出设备等共同组成的,而让各种硬件设备各司其职且又能协同运行的东西就是系统内核。Linux系统的内核负责完成对硬件资源的分配、调度等管理任务。
2、Shell(也称为终端或壳)是一种命令行工具,充当人与内核(硬件)之间的翻译官。用户把一些命令“告诉”终端,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是Bash(Bourne-Again SHell)解释器。
3、Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。目前国内Linux更多的是应用于服务器上,而桌面操作系统更多使用的是Windows。
4、RPM(红帽软件包管理器)类似windows系统中的控制面板,会建立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系,帮助用户查询软件相关的依赖关系。
Yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。
5、常见执行Linux命令的格式:命令名称 [命令参数] [命令对象]
命令对象一般是指要处理的文件、目录、用户等资源;而命令参数可以用 -- 长格式(完整的选项名称),也可以用 - 短格式(单个字母的缩写),两者分别用--和-作为前缀。
6、Linux文件基本属性:
- 在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用户和组:
(1)在Linux中第一个字符代表这个文件是目录、文件或链接文件等等:
当为[d]则是目录;当为[-]则是文件;当为[l]则是链接文档;当为[b]则是装置文件里面的可供储存的接口设备(可随机存取装置);当为[c]则是装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
(2)接下来的字符中,以三个为一组,且均为[rwx]的三个参数的组合。其中,[r]代表可读,[w]代表可写,[x]代表可执行。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[-]而已。
(3)Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
- chgrp –change group 更改文件属组:chgrp [-R] 属组名 文件名
- chown –change own更改文件属主,也可同时更改文件属组:
chown [-R] 属主名 文件名 –chown bin install.log
chown [-R] 属主名:属组名 文件名 –chown root:root install.log
- chmod –change mod 更改文件9个属性。
chmod [-R] xyz 文件或目录 –chmod 777 text1 --chmod u=rwx,g=rx,o=rx text1
xyz就是数字类型的权限属性,为rwx属性数值的相加, -R 进行递归的持续变更,亦即连同次目录下的所有文件都会变更。
Linux文件属性有两种设置方法:数字,符号。Linux文件的基本权限有9个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
文件的权限字符为:rwxrwxrwx,这9个权限是3个3个一组的,其中,各权限的分数对照表如下:r—4,w—2,x—1 。每种身份各自的三个权限分数是需要累加的,例如当权限为[-rwxrwx---],分数则是:owner=rwx=4+2+1=7;group=rwx=4+2+1=7;others=0+0+0=0.
7、处理目录的常用命令:
- ls 列出目录 – ls [-aAdfFhilnrRSt] 目录名称 ,
-- ls [--color={never,auto,always}] 目录名称 ,
--ls [--full-time] 目录名称
-a :全部的文件,连同隐藏档一起列出了;
-d :仅列出目录本身,而不是列出目录内的文件数据;
-l :长数据串列出,包含文件的属性与权限等等数据。
- cd –change directory切换目录
使用绝对路径切换: cd /root/runoob/ ,使用相对路径切换: cd ./runoob/
去到上一级目录: cd .. ,回到家目录: cd ~
- pwd -- print working directory显示目前的目录 --pwd
- mkdir -- make directory创建新目录
-m:配置文件的权限; -- mkdir -m 711 test2
-p:帮助你直接将所需要的目录递归的创建起来 –mkdir -p test/test1/test2/test3
- rmdir 删除空的目录
-p:连同上一级【空的】目录也一起删除 -- rmdir -p test/test1/test2/test3
- cp 复制文件或目录 – cp [-adfilprsu] 来源档 目标档,
--cp [options] source1 source2 source3 ... directory
-- cp ~/.bashrc /tmp/bashrc , -- cp -i ~/.bashrc /tmp/bashrc
-a:相当于 -pdr的意思;
-d:若来源档位连结档的属性,则复制连结档属性而非文件本身;
-f:为强制(force),若目标文件已经存在且无法开启,则移除后再尝试一次;
-i:若目标档已经存在时,在覆盖前先询问动作的进行(常用);
-l:进行硬式连结的连结档创建,而非复制文件本身;
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r:递归持续复制,用于目录的复制行为(常用);
-s:复制成为符号连结档,亦即【捷径】文件;
-u:若目标档比来源档旧 才升级目标档。
- rm 移除文件或目录 -- rm [-fir] 文件或目录
-f:force,忽略不存在的文件,不会出现警告信息;
-i:互动模式,在删除前会询问使用者是否动作;
-r:递归删除(危险)
-- rm -i bashrc
- mv 移动文件与目录,或修改名称 – mv [-fiu] source destination ,
-- mv [options] source1 source2 source3 ... directory
-f:force,如果目标文件已经存在,不会询问而直接覆盖;
-i:若目标文件已经存在,就会询问是否覆盖;
-u:若目标文件已经存在,且source比较新,才会升级(update)
-- mv bashrc mvtest (先复制,再移动)
8、Linux文件内容查看:
- cat 由第一行开始显示文件内容 -- cat [-AbEnTv] -- cat /etc/issue
-A:可列出一些特殊字符而不是空白而已;
-b:列出行号,仅针对非空白行做行号显示,空白行不标行号;
-E:将结尾的断行字号$显示出来;
-n:列印出行号,连同空白行也会有行号,与-b的选项不同;
-T:将[tab]按键以^|显示出来;
-v:列出一些看不出来的特殊字符;
- tac 从最后一行开始显示 -- tac /etc/issue
- nl 显示的时候,顺道输出行号 – nl [-bnw] 文件 – nl /etc/issue
-b a:表示不论是否为空行,也同样列出行号(类似cat -n);
-b t:表示如果有空行,空的那一行不要列出行号(默认值);
-n ln:行号在荧幕的最左方显示;
-n rn:行号在自己栏位的最右方显示,且不加0;
-n rz:行号在自己栏位的最右方显示,且加0;
-w:行号栏位的占用的位数
- more 一页一页的显示文件内容 – more /etc/man.config
- space:代表向下翻一页;
- enter:代表向下翻一行;
- /字串:代表在这个显示的内容当中,向下搜寻[字串]这个关键字;
- :f:立即显示出档名以及目前显示的行数;
- q:代表立即离开more,不再显示该文件内容;
- b或[ctrl]-b:代表往回翻页,不过这动作只对文件有效,对管线无效
- less 与more类似,但可以往前翻页 -- less /etc/man.config
- space:向下翻动一页;
- [pagedn]:向下翻动一页;
- [pageup]:向上翻动一页;
- /字串:向下搜寻[字串]的功能;
- ?字串:向上搜寻[字串]的功能;
- n:重复前一个搜寻(与/ 或?有关!);
- N:反向的重复前一个搜寻(与/或?有关!);
- q:离开less这个程序;
- head 只看头几行 – head [-n number] 文件 – head -n 20 /etc/man.config
-n:后面接数字,代表显示几行的意思
- tail 只看尾巴几行 – tail [-n number] 文件 – tail -n 20 /etc/man.config
-n:后面接数字,代表显示几行的意思;
-f:表示持续侦测后面所接的档名,要等到按下[ctrl]-c 才会结束tail的侦测
9、Linux用户和用户组管理。Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
10、用户的账号一方面可以帮助系统管理员对用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
11、每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
12、实际用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改;
- 用户口令的管理;
- 用户组的管理。
13、添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录shell等资源。刚添加的账号是被锁定的,无法使用。
-- useradd 选项 用户名
-c :comment指定一段注释性描述;
-d:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录;
-g:用户组 指定用户所属的用户组;
-G:用户组 指定用户所属的附加组;
-s:shell文件 指定用户的登录shell;
-u:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
# useradd -d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr 为默认的用户主目录所在的父目录)
# useradd -s /bin/sh -g group -G adm,root gem 此命令新建了一个用户gem,该用户的登录shell是/bin/sh,它属于group用户组,同时又属于adm和root用户,其中group用户组是其主组,这里可能新建组:# groupadd group及 # groupadd adm
14、删除账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
-- userdel 选项 用户名 # userdel -r sam
-r:将用户的主目录一起删除
15、修改账号就是根据实际情况更改用户的有关属性,如用户名、主目录、用户组、登录shell等。
-- usermod 选项 用户名
-c :comment指定一段注释性描述;
-d:指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录;
-g:用户组 指定用户所属的用户组;
-G:用户组 指定用户所属的附加组;
-s:shell文件 指定用户的登录shell;
-u:指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号;
-l 新用户名:将原来的用户名更改为新的用户名。
# usermod -s /bin/ksh -d /home/z -g developer sam 此命令将用户sam的登录shell修改为ksh,主目录改为/home/z,用户组改为developer
16、用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其制定口令后才能使用,即使是制定空口令。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令:
-- passwd 选项 用户名
-l:锁定口令,即禁用账号;
-u:口令解锁;
-d:使账号无口令;
-f:强迫用户下次登录时修改口令。
为用户指定空口令: # passwd -d sam
锁定用户,使其不能登录:# passwd -l sam
17、Linux系统用户组的管理。每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
18、增加用户组。 --groupadd 选项 用户组 # groupadd group1,# groupadd -g 101 group2
-g GID:指定新用户组的组标识号(GID);
-o:一般与-g同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
19、删除用户组。 --groupdel 用户组 # groupdel group1
20、修改用户组权限。 --groupmod 选项 用户组
-g GID:为用户组指定新的组标识号;
-o:与-g同时使用,用户组的新GID可以与系统已有用户组的GID相同;
-n:将用户组的名字改为新名字。
将组group2的标识号改为102 # groupmod -g 102 group2
将组group2的标识号改为100,组名修改为group3 # groupmod -g 100 -n group3 group2
21、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。 将当期用户切换到root用户组: $ newgrp root
22、与用户账号有关的系统文件。与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括/etc/passwd, /etc/shadow, /etc/group等。
- Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性,这个文件对所有用户都是可读的。 # cat /etc/passwd
/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
用户名:代表用户账号的字符串
口令:存放着加密后的用户口令字
用户标识号:一个整数,系统内部用它来标识用户,取值范围0~65535
组标识号:记录用户所属的用户组
注释性描述:记录用户的一些个人情况
主目录:用户的起始工作目录
shell:用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即shell
伪用户;登录shell为空,不能登录,主要是方便系统管理,满足相应的系统进程对文件属主的要求,如:bin、sys、adm、uucp、lp、nobody
- 用户组的所有信息都存放在/etc/group文件中。
23、添加批量用户。
- 先编辑一个文本用户文件。每一行按照/etc/passwd密码文件的格式书写user.txt
- 以root身份执行命令/usr/sbin/newusers,从刚创建的用户文件user.txt中导入数据,创建用户: # newusers < user.txt
- 执行命令/usr/sbin/pwunconv。将/etc/shadow产生的shadow密码解码,然后回写到/etc/passwd中,并将/etc/shadow的shadow密码栏删掉。 # pwunconv
- 编辑每个用户的密码对照文件passwd.txt
- 以root身份执行命令/usr/sbin/chpasswd。创建用户密码,chpasswd会将经过命令编码过的密码写入/etc/passwd的密码栏。 # chpasswd < passwd.txt
- 确定密码经编码写入/etc/passwd的密码栏后。执行命令/usr/sbin/pwconv将密码编码为shadow password,并将结果写入/etc/shadow。 # pwconv
24、Linux磁盘管理。常用的三个命令为df、du和fdisk。
- df:列出文件系统的整体磁盘使用量 – df [-ahikHTm] [目录或文件名]
-a:列出所有的文件系统,包括系统特有的/proc等文件系统;
-k:以KBytes的容量显示各文件系统;
-m:以MBytes的容量显示各文件系统;
-h:以人们较易阅读的GBytes、MBytes、KBytes等格式自行显示;
-H:以M=1000K取代M=1024K的进位方式;
-T:显示文件系统类型,连同该partition的filesystem名称也列出;
-i:不用硬盘容量,而以inode的数量来显示。
# df -aT
# df -h /etc/
- du:检查文件和目录磁盘空间使用量。-- du [-ahskm] 文件或目录名称
-a:列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已;
-h:以人们较易读的容量格式显示;
-s:列出总量而已,而不列出每个各别的目录占用容量;
-S:不包括子目录下的总计,与-s有点差别;
-k:以KBytes列出容量显示;
-m:以MBytes列出容量显示。
# du
# du -sm /*
- fdisk:用于磁盘分区。 -- fdisk [-l] 装置名称
-l:输出后面接的装置所有的分区内容。若仅有fdisk -l时,则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
# fdisk -l
- 磁盘格式化。 -- mkfs [-t 文件系统格式] 装置文件名
-t: 文件系统格式 查看mkfs支持的文件格式: # mkfs [tab][tab]
- 磁盘检验。 -- fsck [-t 文件系统] [-ACay] 装置名称
- 磁盘挂载与卸除。挂载使用mount命令,卸载使用umount命令。
-- mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
-- umount [-fn] 装置文件名或挂载点
25、Linux yum命令。yum(Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令。 -- yum [options] [command] [package ...]
26、yum 常用命令:
- 列出所有可更新的软件清单命令:yum check-update;
- 更新所有软件命令:yum update;
- 仅安装指定的软件命令:yum install <package_name>; # yum install pam-devel
- 仅更新指定的软件命令:yum update <package_name>;
- 列出所有可安装的软件清单命令:yum list; # yum list pam*
- 删除软件包命令:yum remove <package_name>; # yum remove pam-devel
- 查找软件包命令:yum search <keyword>;
- 清除缓存命令:
- 清除缓存目录下的软件包:yum clean packages;
- 清除缓存目录下的headers:yum clean headers;
- 清除缓存目录下旧的headers:yum clean oldheaders;
- 清除缓存目录下的软件包及旧的headers:yum clean,yum clean all
27、Linux vi/vim
所有的Unix Like系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
28、vim是从vi发展出来的一个文本编辑器。代码补齐、编译及错误跳转等方便编程的功能特别丰富,在程序猿中被广泛使用。vim可以说是程序开发者的一项很好用的工具。
vi/vim共分为三种模式:
- 命令模式(Command mode):用户刚刚启动vi/vim,便进入了命令模式,此状态下敲击键盘动作会被vim识别为命令,而非输入字符。常用的几个命令:
- i 切换到输入模式,以输入字符;
- x 删除当前光标所在处的字符;
- :切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动vim,进入了命令模式,按下i,切换到输入模式。
- 输入模式(Insert mode):在命令模式下按下i就进入了输入模式。可以使用以下按键:
- 字符按键以及shift组合,输入字符;
- enter,回车键,换行;
- backspace,退格键,删除光标前一个字符;
- del,删除键,删除光标后一个字符;
- 方向键,在文本中移动光标;
- home/end,移动光标到行首/行尾;
- pageup/pagedn,上/下翻页;
- insert,切换光标为输入/替换模式,光标将变成竖线/下划线;
- esc,退出输入模式,切换到命令模式
- 底线命令模式(Last line mode):在命令模式下按下: 就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令。基本命令有:
- q 退出程序;
- w 保存文件
- esc 退出底线命令模式
29、Linux常用系统工作命令:
- echo命令。用于在终端输出字符串或变量提取后的值:
echo [字符串] [$变量] # echo Linuxprobe.com ,# echo $SHELL
- date命令。用于显示及设置系统的时间或日期:
date [选项] [+指定的格式]
查看当前系统时间: # date ,
格式化当前系统时间:# date “+%Y-%m-%d %H:%M:%S” ,
设置系统时间: # date -s “20170901 8:30:00”,
查看今天是当年中的第几天:# date “+%j”。
- reboot命令。用于重启系统,默认只能使用root管理员来重启。 # reboot
- poweroff命令。用于关闭系统,默认只能使用root管理员来关闭。 # poweroff
- wget命令。用于在终端中下载网络文件: wget [参数] 下载地址
- ps命令。用于查看系统中的进程状态: ps [参数]
-a:显示所有进程(包括其他用户的进程);
-u:用户以及其他详细信息;
-x:显示没有控制终端的进程。
- top命令。用于动态地监视进程活动与系统负载等信息: top
- pidof命令。用于查询某个指定服务进程的pid值: pidof [参数] [服务名称]
# pidof sshd
- kill命令。用于终止某个指定pid的服务进程: kill [参数] [进程pid]
# kill 2156
- killall命令。用于终止某个指定名称的服务所对应的全部进程:
killall [参数] [服务名称] # killall httpd
30、系统状态检测命令
- ifconfig命令。用于获取网卡配置与网络状态等信息: ifconfig [网络设备] [参数]
- uname命令。用于查看系统内核与系统版本等信息:uname [-a] :# uname -a
- uptime命令。用于查看系统的负载信息:uptime
- free命令。用于显示当前系统中内存的使用量信息:free [-h]:# free -h
- who命令。用于查看当前登录主机的用户终端信息: who [参数] # who
- last命令。用于查看所有系统的登录记录: last [参数] # last
- history命令。用于显示历史执行过的命令(最近1000条记录):history [-c]
在使用history命令时,若使用-c参数则会清空所有的命令历史记录;还可以使用“!编码数字”的方式来重复执行某一次的命令。 # history ,# !111 ,# history -c
- sosreport命令。用于收集系统配置及架构信息并输出诊断文档:# sosreport
31、工作目录切换命令
- pwd命令。用于显示用户当前所处的工作目录:pwd [选项]:# pwd
- cd命令。用于切换工作路径:cd [目录名称] # cd /etc
使用“cd -”命令返回到上一次所处的目录;使用“cd ..”命令进入上级目录;使用“cd ~”命令切换到当前用户的家目录;使用“cd ~username”切换到其他用户的家目录。
- ls命令。用于显示目录中的文件信息: ls [选项] [文件]
32、文本文件编辑命令
- cat命令。用于查看纯文本文件(内容较少的):cat [选项] [文件]
查看纯文本文件,顺便显示行号:# cat -n runoob.txt
- more命令。用于查看纯文本文件(内容较多的):more [选项] 文件
可通过回车键或空格键向下翻页:# more runoob.txt
- head命令。用于查看纯文本文档的前N行:head [选项] [文件]
查看文本中前20行内容:# head -n 20 runoob.txt
- tail命令。用于查看纯文本文档的后N行或持续刷新内容:tail [选项] [文件]
查看文本中后20行内容:# tail -n 20 runoob.txt
持续刷新文件内容:tail -f 文件名:# tail -f /var/log/messages
- tr命令。用于替换文本文件中的字符:tr [原始字符] [目标字符]
先使用cat命令读取待处理的文本,然后通过管道符把这些文本内容传递给tr命令进行替换操作.
把某个文件内容中的英文全部替换为大写: # cat runoob.txt | tr [a-z] [A-Z]
- wc命令。用于统计指定文本的行数、字数、字节数:wc [参数] 文本
-l :只显示行数; # wc -l /etc/passwd
-w:只显示单词数;
-c:只显示字节数。
- stat命令。用于查看文件的具体存储信息和时间等信息:stat 文件名称
- cut命令。用于按“列”提取文本字符:cut [参数] 文本
按列搜索,不仅要使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号: # cut -d: -f1 /etc/passwd
- diff命令。用于比较多个文本文件的差异: diff [参数] 文件
- 先使用cat命令分别查看diff_A.txt和diff_B.txt文件的内容:
# cat diff_A.txt ,# cat diff_B.txt
- 接下来使用 diff --brief 命令显示比较后的结果,判断文件是否相同:
# diff --brief diff_A.txt diff_B.txt
- 最后使用带有 -c 参数的diff命令来描述文件内容具体的不同:
# diff -c diff_A.txt diff_B.txt
33、文件目录管理命令
- touch命令。用于创建空白文件或设置文件的时间:touch [选项] [文件]
创建空白文件:# touch linuxprobe
修改文件时间:# touch -d “2017-05-04 15:44 ” runoob.txt
-a:仅修改“读取时间”(atime)
-m:仅修改“修改时间”(mtime)
-d:同时修改atime和mtime
- mkdir命令。用于创建空白目录:mkdir [选项] 目录
创建单个空白目录:# mkdir linuxprobe
递归创建具有嵌套叠层关系的文件目录:# mkdir -p a/b/c/d/e
- cp目录。用于复制文件或目录:cp [选项] 源文件 目标文件
备份文件: # touch install.log ,# cp install.log x.log
- mv命令。用于剪切文件或文件重命名:mv [选项] 源文件 [目标路径|目标文件名]
如果在同一个目录中对一个文件进行剪切操作,其实就是对其进行重命名:
# mv x.log linux.log
- rm命令。用于删除文件或目录:rm [选项] 文件
删除文件:# rm install.log
强制删除文件:# rm -f install.log
- dd命令。用于按照指定大小和个数的数据块来复制文件或转移文件:dd [参数]
使用dd命令从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件:# dd if=/dev/zero of=560_file count=1 bs=560MB
- file命令。用于查看文件的类型:file 文件名: # file runoob.txt
34、打包压缩与搜索命令
- tar命令。用于对文件进行打包压缩或解压:tar [选项] [文件]
打包压缩指定文件:# tar czvf etc.tar.gz /etc
解压指定压缩包:# tar xzvf etc.tar.gz -C /root/etc
- grep命令。用于在文本中执行关键词搜索,并显示匹配的结果:grep [选项] [文件]
使用grep命令来查找出当前系统中不允许登录系统的所有用户信息:
# grep /sbin/nologin /etc/passwd
- find命令。用于按照指定条件来查找文件:find [查找路径] 寻找条件 操作
获取etc目录下所有以host开头的文件列表:# find /etc -name “host*” -print
搜索权限中包括SUID权限的所有文件:# find / -perm -4000 -print
35、命令的输入重定向和输出重定向原理。输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。
- 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
- 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
- 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
通过标准输出重定向将原本要输出到屏幕的信息写入到文件中,然后显示文件内容:
# man bash > readme.txt ,# cat readme.txt
输出重定向的覆盖写入模式:# echo “welcome to linuxprobe.com” > readme.txt
输出重定向的追加写入模式:# echo “quality linux learning materials” >> readme.txt
36、虽然都是输出重定向技术,但是不同命令的标准输出和错误输出还是有区别的。例如查看当前目录中某个文件的信息,这里以zxm文件为例,因为这个文件是真实存在的,因此使用标准输出即可将原本要输出到屏幕的信息写入到文件中,而错误的输出重定向则依然把信息输出到了屏幕上。
将命令的报错信息写入到文件中(xxx为不存在的文件):
# ls -l xxx cannot access xxx:No such file or directory
# ls -l xxx > /root/stderr.txt cannot access xxx:No such file or directory
# ls -l xxx 2> /root/stderr.txt
# cat /root/stderr.txt ls: cannot access xxx:No such file or directory 报错信息成功写入
37、管道符命令。把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入。
统计所有被限制登录系统的用户:# grep “/sbin/nologin” /etc/passwd | wc -l 33
用翻页的形式查看/etc目录中的文件列表及属性信息:# ls -l /etc/ | more
密码重置:# echo “linuxprobe” | passwd --stdin root
38、命令行的通配符:通用的匹配信息的符号。星号(*)代表匹配零个或多个字符;问号(?)代表匹配单个字符;[0-9]代表匹配0~9之间的单个数字的字符;[abc]代表匹配a、b、c、三个字符中的任意一个字符。
匹配所有在/dev目录中且以sda开头的文件:# ls -l /dev/sda*
查看文件名为sda开头,后面还紧跟其他某一个字符的文件的相关信息:# ls -l /dev/sda?
匹配0~9之间的单个数字:# ls -l /dev/sda[0-9]
匹配指定数字中的一个:# ls -l /dev/sda[135]
39、常用的转义字符:
定义PRICE变量并赋值为5:# PRICE=5
输出以双引号括起来的字符串与变量信息:# echo “Price is $PRICE” Price is 5
$$作用是显示当前程序的进程ID号:# echo “Price is $$PRICE” Price is 3352PRICE
使用\进行转义:# echo “price is \$$PRICE” Price is $5
输出某个命令的输出值(反引号):# echo `uname -a` Linux xiaomei.zhang....
40、变量是计算机系统用于保存可变值的数据类型。Linux系统中的环境变量是用来定义系统运行环境的一些参数。
41、用户执行了一条命令后,Linux系统中发生了什么事情?
- 判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
- Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。
创建命令别名:alias 别名=命令 ; 取消命令别名:unalias 别名
- Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;外部命令交由下一步骤继续处理。
- PATH的作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bah解释器在这些位置中逐个查找。 # echo $PATH ,# echo $HOME
42、Vim文本编辑器的三种模式:命令模式、末行模式、编辑模式。
- 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作;
- 输入模式:正常的文本录入;
- 末行模式:保存或退出文档,以及设置编辑环境。
在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后,需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。
43、在命令模式中最常见的一些命令:
44、末行模式中可用的命令:
45、编写简单文档:
- 给文档取个名字,如果存在该文档,则是打开它,如果不存在,则是创建一个临时的输入文件:# vim practice.txt
- 打开practice.txt文档后,默认进入的是Vim编辑器的命令模式,需切换到输入模式。a键和i键分别是在光标后面一位和光标当前位置切换到输入模式,o键是在光标的下面再创建一个空行:a
- 进入输入模式后,可随意输入文本内容,输入的文本内容不会被当做命令执行:You can write in it.
- 在编写完之后,想要保存并退出,必须先敲击键盘Esc从输入模式返回命令模式,然后再输入:wq!切换到末行模式才能完成(强制)保存退出操作: :wq!
- 要在原有文本内容的下面追加内容,在命令模式中敲击o键进入输入模式:vim practice.txt , o
46、配置主机名称:
48、配置Yum仓库。Yum软件仓库像是一个硕大的软件仓库,里面保存着几乎所有常用的工具,而且只需要说出所需的软件名称,系统就会自动为你搞定一切。
49、编写Shell脚本。Shell脚本命令的工作方式有两种:
- 交互式(Interactive):用户每输入一条命令就立即执行。
- 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。
查看当前所在的工作路径并列出当前目录下所有文件及属性信息:# vim example.sh ...
第一行的声明脚本(#!)用来告诉系统使用哪种shell解释器来执行该脚本;
第二行的注释信息(#)是对脚本功能和某些命令的介绍信息;
第三、四行的可执行语句就是Linux命令。
shell脚本文件的名称可以任意,但为了避免被误以为是普通文件,建议将.sh后缀加上,以表示是一个脚本。
执行shell脚本:# bash example.sh
50、接收用户的参数。Linux系统中的shell脚本已经内设了用于接收参数的变量,变量之间用空格间隔。$0对应的是当前shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3...则分别对应着第N个位置的参数值。
51、判断用户的参数。shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。
按照测试对象来划分,条件测试语句可分为4种:
- 文件测试语句。使用指定条件来判断文件是否存在或权限是否满足等情况。
-
-d:测试文件是否为目录类型。
判断/etc/fstab是否为一个目录类型的文件:# [ -d /etc/fstab ] ,# echo $? 1
若返回值为0,则目录存在;否则目录不存在。
-
-f: 判断是否为一般文件。
判断/etc/fatab是否为一般文件:# [ -f /etc/fstab ] ,# echo $? 0
若返回值为0,则代表文件存在,且为一般文件。
-
-e:判断文件是否存在。
判断/dev/cdrom文件是否存在,存在则输出Exist:# [ -e /dev/cdrom ] && echo “Exist” Exist
- 逻辑测试语句
-
&& 逻辑“与”:# [ -e /dev/cdrom ] && echo “Exist” Exist
-
|| 逻辑“或”:# [ $USER = root ] || echo “user” user
-
! 逻辑“非”:# [ $USER != root ] || echo “administrator” administrator
# [ $USER != root ] && echo “user” || echo “root” root
- 整数值比较语句。仅是对数字的操作,不能将数字与字符串、文件等内容一起操作。
- 字符串比较语句。用于判断测试字符串是否为空值,或两个字符串是否相同。
-
= :比较字符串内容是否相同
-
!= :比较字符串内容是否不同
# [ $LANG != “en.US” ] && echo “Not en.US” Not en.US
-
-z :判断字符串内容是否为空 # [ -z $String ] ,# echo $? 0
52、流程控制语句
1. if 条件测试语句。
- 单分支结构:由if、then、fi关键词组成。
- 双分支结构:由if、then、else、fi关键词组成。
- 多分支结构:由if、then、else、elif、fi关键词组成。
2. for条件循环语句。允许脚本一次性读取多个信息,然后逐一对信息进行操作处理。
3. while条件循环语句。
4. case条件测试语句。
53、用户身份与能力:
管理员UID为0:系统的管理员用户;
系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围;
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
(UID是不能冲突的。)
- useradd命令:用于创建新的用户。 useradd [选项] 用户名
创建一个普通用户并指定家目录的路径、用户的UID以及shell解释器:
# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
查看新建用户信息:# id linuxprobe
- groupadd命令:用于创建用户组。groupadd [选项] 群组名 # groupadd ronny
- usermod命令:用于修改用户的属性。usermod [选项] 用户名
将用户加入到root用户组中,基本组不会受到影响:# usermod -G root linuxprobe
修改用户的UID号码值:# usermod -u 8888 linuxprobe
- passwd命令:用于修改用户密码、过期时间、认证信息等。passwd [选项] [用户名]
- userdel命令:用于删除命令。userdel [选项] 用户名
-f:强制删除用户; # userdel -f linuxprobe
-r:同时删除用户及用户家目录 # userdel -r linuxprobe
54、文件权限与归属。Linux系统使用了不同的字符来加以区分:
-:普通文件; d:目录文件; l:链接文件; b:块设备文件; c:字符设备文件;p:管道文件。
在Linux系统中,每个文件都有所属的所有者和所有组,并且规定了文件的所有者、所有组以及其他人对文件所拥有的可读(r)、可写(w)、可执行(x)等权限。
55、文件的特殊权限。在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID 、SGID、 SBIT的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
- SUID
- SGID
- SBIT(Sticky Bit)特殊权限位之粘滞位
56、文件的隐藏属性。
- chattr命令:用于设置文件的隐藏权限。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”;如果想要把某个隐藏功能移出文件,则需要追加“ - 参数”。 chattr [参数] 文件
- lsattr命令:用于显示文件的隐藏权限。 lsattr [参数] 文件 # lsattr linuxprobe
57、文件访问控制列表( ACL )。对某个指定的用户进行单独的权限控制。
- setfacl命令:用于管理文件的ACL规则。文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。 setfacl [参数] 文件名称
-R:递归参数,针对目录文件; -m:针对普通文件;-b:删除某个文件的ACL
- getfacl命令:用于显示文件上设置的ACL信息。 getfacl 文件名称 # getfacl /root
58、su命令与sudo服务。
- su命令:解决切换用户身份的需求,使当前用户在不退出登录的情况下,顺畅地切换到其他用户。 # su - linuxprobe ,# su root
- sudo命令:用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务。 sudo [参数] 命令名称
- visudo命令
59、存储结构与磁盘划分。
- Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次标准(FHS,Filesystem Hierarchy Standard)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux系统中的文件和目录名称是严格区分大小写的。
/boot | 开机所需文件--内核、开机菜单以及所需配置文件等 |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户主目录 |
/bin | 存放单用户模式下还可以操作的命令 |
/lib | 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录 |
/opt | 放置第三方的软件 |
/root | 系统管理员的家目录 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共享”临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/var | 主要存放经常变化的文件,如日志 |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
- 物理设备的命名规则
“/dev/sda5”表示的是“这是系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件”。
“/dev/hdc8”表示的是“这是第三块IDE设备中编号为8的逻辑分区”。
- 文件系统与数据资料
用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。
- Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并且能自动修复数据的不一致与错误。并不能百分之百地保证资料不会丢失。
- Ext4:Ext3的改进版本,支持的存储容量高达1EB,且能够有无限多的子目录。Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
- XFS:是一种高性能的日志文件系统,在发生意外宕机后,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能,并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。
60、挂载硬件设备。
- 挂载:当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。
mount命令:用于挂载文件系统。 mount 文件系统 挂载目录 # mount /dev/sdb2 /backup
umount命令:用于撤销已经挂载的设备文件。 umount [挂载点/设备文件]
61、添加硬盘设备。操作思路:首先需要在虚拟机中模拟添加入一块新的硬盘存储设备,然后再进行分区、格式化、挂载等操作,最后通过检查系统的挂载状态并真实地使用硬盘来验证硬盘设备是否成功添加。
- fdisk命令:用于管理磁盘分区,提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。 fdisk [磁盘名称] # fdisk /dev/sdb
- du命令:用于查看一个或多个文件占用了多大的硬盘空间。 du [选项] [文件]
查看newFS占用的硬盘空间: # du -sh /newFS/
62、添加交换分区。SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。
对磁盘进行格式化操作:mkswap [磁盘名称] # mkswap /dev/sdb2
63、磁盘容量配额:使用此服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。 quota命令
64、软硬方式链接。