新建会话
本文中所有的指令都会在普通用户中进行介绍,而非root账号,这是由于root账户在进行部分指令的同时并不会出现警告,影响操作。在root账户下新建普通用户的方法在前文中已经有展示,这里不做介绍。
这里首先会介绍如何在xshell下新建会话以便快速登陆。
刚打开xshell的时候,会弹出会话窗口,这里就可以点击连接进入普通用户账户,而非输入指令。
那么如何创建这样的会话呢?
点击新建按钮,修改名称和主机即可,说明可写可不写。
再次打开xshell的时候,就会在弹出的会话窗口中显示。
初次点击的时候,会显示登陆的用户名,也就是输入你使用root账号新建的普通用户名称(记住用户名可以下次直接登陆)。
登陆时直接输入密码即可。
时间相关的指令——date显示
在计算机事件中,需要有日志的概念,类似于于在写日记本的时候需要记录对应的时间一样,程序每运行到自己的每一个关键时刻,都要自己打日志。
日志会以行的形式打印到文件中(日志文件);
日志内容:时间,日志等级,日志信息,其他信息date指的格式显示时间:date +%Y:%m:%d
date用法:date[OPTION]...[+FORMAT]
1.在显示方面,使用者可以设定想要显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下:
%H:小时(00..23)%M:分钟(00..59)%S:秒(00..61)%X:相当于%H:%M:%S%d:日(00..12)%m:月份(01..12)%Y:完整年份(0000..9999)%F:相当于%Y-%m-%d2.在设定时间方面
date -s // 设置当前时间,只有root权限才能设置,其他只能查看date -s 20241014 // 设置成 20241014,这样会把具体时间设置成空00:00:00date -s 01:01:01 // 设置具体时间,不会对日期做更改date -s "01:01:01 2024-10-14" // 这样可以设置全部时间date -s "01:01:01 20241014" // 这样可以设置全部时间date -s "2024-10-14 01:01:01" // 这样可以设置全部时间date -s "20241014 01:01:01" // 这样可以设置全部时间3.时间戳
时间——>时间戳:date +%s
时间戳——>时间:date -d@1508749502
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 [4]。时间戳是使用数字签名技术产生的数据,签名的对象包括了原始文件信息、签名参数、签名时间等信息。时间戳系统用来产生和管理时间戳,对签名对象进行数字签名产生时间戳,以证明原始文件在签名时间之前已经存在。
多次打印时间戳,可以发现时间戳是在一直变化着的。这个时间戳可以算是计算机规定的一个时间,这是由于全球维度的不同,时间是对不上的,对于计算机行业来说,需要有一个标准来统一时间。
将此刻的时间戳换成时间,这与当地时间是可以对的上的。
我们试着打印时间戳为0时的时间,发现是1970年的1月1日的早上8点,这是由于此时已经换成了北京时间(东八区)。
那么这个时间戳这个时间变量会不会溢出呢???
答案是会的。
cal指令
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。
命令格式:cal [参数][月份][年份]
功能:用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有俩个参数,则表示月份和年份
常用选项:
-3 显示系统前一个月,当前月,下一个月的月历-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月再一年中的天数)-y 显示当前年份的日历。下面是一些案例展示:
在听课的时候听老师讲过这样的一个例子:现在大家查看日历都是在手机上直接点开日历app直接看的,以前不一样,以前用的是老黄历。
就是这种可以一张一张手撕下来的,这种日历可以看黄道吉日。
现在条件好了,家里可以不用买这种老黄历了,可以让大家的爷爷奶奶学一学Linux,直接输上一行指令,就可以-查看日历了(哈哈哈哈哈)
find指令(重要)
find指令就像其汉语意思一样,可以用于查找。
Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得学习了解。即使系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,具有相应的权限。在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统会花费很长的时间(这里指的是30G字节以上的文件系统)语法:find pathname -options
功能:用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)
常用选项:
-name 按照文件名查找文件find ~ -name test.c
在特定路径下寻找特定文件。
这里find的是在全部文件下,去查找text.c文件
(需要注意的是,由于这里是普通用户,所以只能在普通用户所管辖的范围内查找文件)
find /ure/ -name pwd输入这条指令的时候,可能会出现报错Permission denied,这是因为普通用户只能在自己/home/名字,家目录下进行查找,find可以在指定的路径下进行文件的搜索——真的是在文件磁盘中搜索。
which指令和whereis指令也可以进行查找:
which可以在指令路径下,/urs/bin/搜索指令文件 whereis 是在系统特定的路径下查找,既可以找到可执行程序,又可以找到手册,安装包,压缩包这些。grep指令
语法:grep[选项] 搜寻字符串文件
功能:在文件中搜索字符串,讲找到的行打印出来
常用选项:
-i:忽略大小写的不同,所以大小写视为相同-n:顺便输出行号-v:反向选择,即显示除没有‘搜寻字符串’内容的那一行。输入shell脚本:
cnt=0; while [ $cnt -le 100000 ]; do echo "hello Linux $cnt"; let cnt++; done >> log.txt
这个shell脚本是将hello Linux 1到100000的数字循环打印到log.txt文件中去。
该指令可以将包含9999的行打印出来,也就是说grep是一个行文本过滤工具。
>log.txt可以清空log.txt(前文讲过)
nano指令可以在文本文件中编写内容。我们将上述内容编写到og.txt文件中,以便后面学习grep指令。
grep选项举例:
grep也可以和管道(以前讲过)一起结合使用。
这句指令的意思就是,将log.txt里面的内容输出到管道里面,grep指令从管道里面过滤出来含有字符串blog的行。
zip/unzip指令
语法:zip压缩文件.zip目录或文件
功能:将目录或文件压缩成zip格式
常规选项:
-r 递归处理,将指定目录下的所有文件和子目录一并处理一个问题,为什么需要打包和压缩呢?
这个问题对于这个时间段的我们来说,可以说是不陌生了,打包压缩嘛!就是将文件放在一起,将内存缩小。
能被打包压缩的,一定是一个整体,由多个文件变成一个文件,不容易造成文件缺失。打包压缩,体积变小——下载时间变短,存储占据的控件变小。如果出现上面这种情况,可能没有安装zip/unzip,需要根据自己的操作系统进行安装,这里只有root用户才可以进行安装。
如上图所示,在目录d1下面有多个目录和文本文件,可以将这些文件打包压缩。
通过d1进行打包压缩,将d1.zip文件移到d2目录下面,然后在d2目录下面继续解压,解压后发现,!what!东西呢??只有一个d1目录死皮赖脸的跟过来了,d1下面的目录和文件都哪里去了??
所以,需要添加选项才能将这些目录和文件一起捆绑过来,我们重新写几条指令试试。
这里加上-r选项就可以将文件中的所有内容都打包带走了。
上面说的打包和压缩,其中压缩表示清楚了,但是上面的打包好像意识是将文件放在一个目录下面,这好像不是打包吧。
这里我们将.zip文件后面的文件添加了很多,并且都放在d1.zip压缩文件下面,这样就有点打包的意思了。
tar指令(重要)
tar指令可以打包/解压,不打开它,直接查看内容。
ter [-cxtzjvf]文件与目录 ...参数:
-c:建立一个压缩文件的参数指令(create的意思)-x:解开一个压缩文件的参数指令-t:查看tarfile里面的文件-z:是否同时具有gzip的属性?即是否需要gzip压缩?-j:是否同时具有bzip2的属性?即是否需要用bzip2压缩?-v:压缩的过程中显示文件!这个比较常用,但是不建议用在背景执行过程中-f:使用档名,请留意,在f之后要立即接档名,不要加参数-C:解压到指定目录在linux下,常见的后缀名有如下:
tar指令也是可以进行压缩和解压的。
这里的选项-czf的意思是:
使用tzf选项可以预览已经压缩的文件。
使用xzf可以进行解压缩包
注意:这里的.tgz是压缩包的缩写,正常写法是.tar.gz
tar -xzf code.tgz -c ..带上-C选项之后可以将压缩包解压到指定目录下面。
bc指令
bc命令可以很方便的进行浮点运算。
bc指令相当于linux下的计算器
也可以与管道进行结合使用
uname -r指令
语法:uname [选项]
功能:uname用来获取电脑和操作系统的相关信息。
补充说明:uname可以显示Linux主机所用的操作系统的版本,硬件的名称等基本信息。
常用选项:
-a或-all详细输出所有信息,依次为内核名称,主机名,内核版本号,硬件名,处理器类型,硬件平台类型,操作系统名称。重要的几个热键
[Tab]按键——具有【命令补全】和档案补齐的功能[Ctrl]按键+r——历史命令搜索可以使用ctrl+r回看历史命令,说明Linux下记录了历史命令。
可以使用history指令来查看历史命令列表。
一般来讲,Linux会记录默认最新的1000条指令,这1000条是可以修改的。
[Ctrl]-c按键——让当前的程序【停止】[Ctrl]-d按键——通常代表着:【键盘输入结束(End Of File,EOF 即 End OfInput)】的意思;另外,他也可以用来取代exit[shift]-insert按键——粘贴[Ctrl]-insert按键——复制关机指令
语法:shutdown [选项]
常见选项:
-h:将系统的服务停止后,立即关机-r:在将系统的服务停掉之后就重新启动-t sec:-t后面加描述,即【过几秒后关机】shutdown -s -t 200
想尝试的可以试一试,这里由于忙着赶稿子~~呜呜呜~~就不测试了
其他扩展命令:
安装和登陆命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、In;系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup;系统安全相关命令:passwd、su、umask、chgrp、chmod、chattr、sudo ps、who;其他命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode;指令的运行原理
以本人为例:
dabai:用户名@... ... ... :主机名~/blog4/d2 :当前目录$ :命令行提示符这些都被统称为bash命令行。
Linux严格意义上说是一个操作系统,我们称之为”核心(kernel)“,但我们一般用户,不能直接使用kernel。而是通过kernel的”外壳“程序,也就是所谓的shell,来与kernel沟通。
这是为什么呢?为什么不能直接使用kernel?输入指令的过程,本质就是输入字符串。
举个例子:
张三是一个比较腼腆害羞的男孩(就像我一样~),上完大学四年,技术没学多少,对象也没找到(就像我一样~)。
回到家,他老爹也愁的很,说:”你看看你,你一天天不好好学习,工作也没落实下来,大学四年嘴皮子也没有练出来“。张三不敢找对象,他老爹看见他就想锤他,那咋办?只能找村里的王婆来给说说。
给王婆说的时候,张三说的可积极了(不知道还以为看上王婆了),他说他就喜欢小学班上的如花,就喜欢如花那样的。
王婆听到这就懂了张三的意思了,马上去看找村里如花去说媒去了。
【看到这里,王婆就是命令行解释器,张三就是用户,如花就是操作系统,张三不能直接找如花,需要王婆这个中间媒介来介绍】
王婆找到如花家里,看到如花正和村长的儿子李四手拉着手,卿卿我我。王婆看了看,回去就给张三说,哎呀,这个如花呀,这我感觉呀,你们呀,不是很配,我感觉如花配不上你,王婆我呀重新给你找一个更好的。
【这里,张三不能直接找操作系统就是为了保护操作系统】
从技术角度,Shell最简单的定义:命令行解释器(command Interpreter)主要包含:
将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。指令的本质就是编译好的程序和脚本,一定会在系统的特定路径下存放。我们所有的指令最终都要在操作系统内部运行,但是直接使用操作系统难度比较高,我们用户不能直接和操作系统打交道。
对比Windows Gui,我们操作Windows不是直接操作Windows内核,而是通过图形接口,进行点击操作从而完成我们的操作。
Shell对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。
指令存在的意义:
进行命令行解释保护操作系统,对于用户的非法请求,直接拦截bash/sh与shell的区别:
bash:王婆sh:李婆shell:媒婆