echo命令:使用echo命令可以打印变量的值,也可以打印系统变量
echo有显示、印出的意思,在PATH前面加$表示后面接的是变量,所以会显示出目前的PATH!
echo $PATH 输出结果
/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
五个放在3个文件夹:/usr/local /usr /root 环境变量
目的:把它当成根目录,可以直接使用它的命令
除了系统变量还可以自己定义变量:
定义变量的方法:export //声明,在定义Java环境变量的时候使用过
echo相当于Java中的sout
注意:这种叫做临时变量,作用范围:在当前页签session(会话)可以使用,外界Windows用户使用moba与Linux虚拟机之间的远程通信/远程会话
ssh root@cent01 这个时候 echo $a 也不可使用
exit还原到原来的会话。 继续有效
第二种方式:在文件里使用export外界可以看到么?
不能。如果想要让外界看到,可以使用sourceecho $PATH 已经可以看到一部分环境变量了,如果想要看的更多一点可以使用printenv命令
printenv命令:printenv命令可以打印环境变量
如果以后想要做Linux操作系统,可以参考它的环境变量是怎么做的。它的环境变量的做法,就可以体现文件是怎么组织的。
在小黑界面的时候,大文件展示不全,但是无法上翻,在一定的特殊工作场景就是看不了。不能使用工具查看,该怎么办?
more命令:more命令可以查看文件内容 printenv | more
more + 文件名 按空格下一页,按回车下一行,按b键向上返回一页,还有搜索字符串的功能(与vi相似),按q退出
比较常用的 -s 当遇到有连续两行以上的空白行,就替换为一行的空白行
还有一种用法 cat Hello.txt | more 与 more Hello.txt 命令是一致的,只不过底下不显示 %了 - - More - -
less命令:less命令可以查看文件内容 printenv | less
less和more的区别:more是一次性全部把文件加载,只是一部分一部分的显示,less在查看之前不会全部加载,而是你要查看多少我加载多少。less在查看巨大文件的时候当时的效能会比较快,不会因为文件过大而读取缓慢,但是每一步都要重新去加载,折合下来,总效率都是一样的。所以less比more使用的更普遍,特别是查看大文件的时候。
less命令也与more命令类似,但是有一个查看缓冲区大小,指的是一次多少个字符。
Linux less命令
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
语法
less [参数] 文件
参数说明:
-b <缓冲区大小> 设置缓冲区的大小
//在加载完之后,会加载多少个字节在缓冲区里,下次再加载的时候,缓冲区的部分就不需要重新加载了,加载效率,与缓冲流类似。但是缓冲区不适合设置的太大
-e 当文件显示结束后,自动离开
//more在文件显示结束后会自动离开,less不会,到最后了按q退出,但是加上 -e 读完之后就会退出,不需要手动输入q
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
//-g 只标记最后搜索的关键字,可能有多次搜索的时候
-i 忽略搜索时的大小写
//比较常用,驼峰命名法有时比较烦人
-m 显示类似more命令的百分比
-N 显示每行的行号
//比较常用 搜索可以快速看到多少行
-o <文件名> 将less 输出的内容在指定文件中保存起来
//输出的内容是指加载查看了多少
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时将超出部分舍弃
//超过一页,出现在只需要看开头一部分,不需要看后边的部分
-x <数字> 将"tab"键显示为规定的数字空格
//先把tab键都换成空格,再去替换查找的时候。数字如果是4就把一个tab键替换成4个空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向上翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
wc命令:wc命令用于计算字数
-w 统计单词个数
-l 统计行数
-L 计算最长行的长度
可以通过这种方式让程序知道查询结果有多少行!!以后的脚本会使用到grep命令
管道符 | 把左侧程序的输出作为右侧程序的输入
printenv | less
grep命令用法
printenv | grep path //环境变量中寻找小写path
printenv | grep -i path //寻找path,不区分大小写
查找出来两条:
PATH=/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
CLASSPATH=.:/opt/jdk1.8.0_221/lib/rt.jar:/opt/jdk1.8.0_221/lib/tools.jar:/opt/jdk1.8.0_221/lib/dt.jar
如果只想看PATH不想看CLASSPATH:
[root@localhost ~]# printenv | grep -iw path
PATH=/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/opt/jdk1.8.0_221/bin:/opt/jdk1.8.0_221/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
grep -ir python . //在当前和所有子目录中的任何文件中查找python
grep -ir python file1 //在file1中找到python
grep -ir --include *.py math ~ //在home和所有子目录中的py文件中查找包含'math'的行,不区分大小写
file命令:
Linux file命令用于辨识文件类型。
通过file指令,我们得以辨识该文件的类型。
语法
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
参数:
-b 列出辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
-L 直接显示符号连接所指向的文件的类别。
-m<魔法数字文件> 指定魔法数字文件。
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。
[文件或目录...] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
I/O Stream
但是在Linux命令行里不使用stdin stdout stderr,这种只在脚本里写。在命令行里基本上直接使用重定向
在免密登录的时候见过
which命令
用于查找命令
which bash
which hexdump
which+命令 使用比较频繁,特别是使用yum去安装的东西,实际上在哪我们并不知道,使用which可以查看,注意:只是看到命令在哪,而不是安装目录在哪,所以which后加的一般是命令,而不是文件夹
ln命令
在文件之间建立连接
ln -s /usr/bin/hexdmp d
#创建了一个符号d链接到/usr/bin/hexdump
软链接和快捷方式一样好用,相当于快捷方式
删除软链接会把原目录删掉么?
rm -rf 软链接 并不会把原目录删掉
find命令
搜索目录层次结构中的文件
find / -name 'tar'
#从根目录访问所有目录以查找'tar'
find ~/tmp -name '*.txt' -type f -exec d -C {} \;
#从〜/ tmp目录开始,找到所有'.txt'文件并将其转换为hexdump
find常用的参数:
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-type c : 文件类型是 c 的文件
d: 目录/c: 字型装置文件/b: 区块装置文件/p: 具名贮列/f: 一般文件/l: 符号连结/s: socket
-pid n : process id 是 n 的文件
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
find的复合用法:
-size的用法:
date命令
打印或设置系统日期和时间
date +%Y-%m-%d #2017-12-23
date +%H:%M:%S #13:29:03
date +%I:%M:%S #12小时时间显示
date +%c #locale的完整日期和时间
date -u #UTC日期和时间
date -R #RFC-2822格式
date -Iseconds #ISO-8601格式
date也是比较常用的命令
Linux date命令可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:
时间方面:
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面:
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
cut命令
从文件中提取字段
date -u | cut -d ' ' -f2,3,6
#输出的日期格式按空格分割,取出2,3,6位
cut -d ' ' -f1,2 /etc/mtab
#此示例从文件/etc/mtab中读取数据
tr命令
用于转换或删除文件中的字符
date -u | tr 'a-z' 'A-Z' # 小写转大写
echo 'abcdefg' | tr -d 'b-e' # 删除
echo 'abbbbg' | tr -s 'b' # 重复单词显示一次
tr命令只能是字符,替换要使用sed命令。。
ping命令
用于测试与目标主机的连通性
ping www.ibm.com
ping 192.168.0.16
Windows环境下ping命令只测试4次,Linux环境下如果不停止就一直ping
需要使用CTRL+C停止
sed命令:
Linux sed 命令
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
使用sed命令和vi的末行模式命令相似,但文件没有变
其他的一些命令:
chgrp :change group 为文件夹更换群组
chown:为所属用户和群组一起更换
paste:用于合并文件的列,会把文件以列对列的方式,一列一列的加以合并,默认都是以空格来分隔
split:把大文件切分成比较小的文件,与paste相反,指定每多少行切成一个小文件
scp:不同虚拟机之间远程文件传输
whereis:查找文件而不是命令,一般不太去用
read:控制台输入,脚本的时候会使用 -n 后跟一个数字,定义输入文本的长度
look:查询单词,给它首字符串,查询开头字符串符合条件的单词
查找以字母L开头的所有行:look L testfile
let:用于计算的工具,主要脚本中使用,定义变量计算,自加,自减,+=,-=
df:df -h 当前Linux虚拟机磁盘的使用情况
du:查看某个目录/文件的大小占用磁盘的空间 默认是-a的所有都显示 -s 仅显示总计
//一般是批量查看某些大文件,如果文件过大要进行清理的情况
dirs:显示目录和记录,作用不大和pwd没啥差别
mount:用于挂载设备
tree:显示目录树
fdisk:格式化硬盘,创建和维护分区表 fdisk -l 当前设备的使用情况
telnet:用于远程登陆,云计算会使用,cmd命令行也有,用于测试两台机器间的网络是否连通
netconf:网络管理
logout:当前session连接,退出登陆
poweroff:关机
reboot:重启
系统管理用的不多,主要有:systemcontroller和service,export定义变量,ulimit使用到的时候再说,clear清屏,clock时钟
备份压缩:zip gzip unziip tar 都是说过的
使用都非常灵活!多练习!
8.28课前复习:
1、如何查看a.txt的第8~10行,并替换到b.txt中,如果出错则追加到c.txt
head a.txt | tail -3 > b.txt 2>> c.txt
2、查找yum命令的位置,可以使用哪几个命令
which yum
whereis yum
find / -name ‘*yum’
3、如何显示当前日期的日月年,时分秒
date ‘+%d%m%Y %H%M%S’
4、在Linux中定义变量的几种方式,作用范围分别是什么
export 在命令行使用:当前会话有效
export 在文本中使用:只在文本中有效,如果要全局有效,则 source 文本