每个优秀的人,都有一段沉默的时光。
那段时光,是付出了很多努力,却得不到结果的日子,我们把它叫做扎根。
xshell是一款支持多种网络协议,能够通过互联网远程连接主机,是一款强大的安全终端模拟软件并且具有很多创新性的设计,我们linux的学习便是通过这款软件。
Linux中指令操作几乎所有的平台都是支持的,macos,windows,linux等等,只不过指令操作是Linux上专业程序员应该要懂得。
xshell可以配置登陆的用户名和IP,主题颜色等,全屏Alt+Enter。
可以选择ssh+root+@+公网IP登录xshell,也可以直接左上角新建会话属性,配置登录时的用户名。
配置好之后我们以后直接点击连接就可以登录xshell了,不用ssh+root那样登录了,可以省下一些时间。
登录时,我们可以选择记住用户名,这样你以后连接你创建的会话时就不需要重新再输入用户名了,直接输入密码登录就可以了。
前言:
开机的本质就是加载操作系统。
计算机的软硬件是一个层状结构。
我们平常买回来外置的键盘或鼠标,如果插到电脑上之后,其实是要等一会儿才能使用,即使你插上之后显示灯已经亮起来了,操作系统也已经开机了,但短期内还是用不了的,这是因为在我们的操作系统和硬件层之间还有一层软件层,就是驱动程序。
我们的硬件如果想要投入使用,其实是要被驱动的,这个工作就交给了我们的驱动程序。,每一套硬件都会配套一款驱动程序,所以驱动程序是直接和硬件打交道的。
再往上就是用户层了,我们平常写的代码等都是用户层的应用软件,我们是没有在操作系统里写过系统级软件的,也没有在驱动程序里写过驱动软件。
1.什么是操作系统呢?
操作系统是一款进行软硬件管理的软件!
2.操作系统的意义是什么?
操作系统对软硬件进行合理的管理(手段),以达到为上层用户提供,良好的,稳定的,安全的运行环境的目的!
所以操作系统是非常重要的,我们需要操作系统对下面的软硬件管理好,让它别老是出错,崩溃,否则没人愿意使用这款笔记本或者手机了。
ls命令会显示根目录下的目录和普通文本文件
tree命令以树状形式列出当前目录下的所有文件和子目录,并且告诉我们当前路径下,还有几个目录和文件
ll后面如果没有+目录或文件,那就默认显示当前路径或称之为当前目录下的详细信息
进入子目录dir中,我们用ls -l显示出当前目录下文件更多的属性
这是根目录下文件的更多属性
我们在dir目录中新建了一个隐藏目录.youcannotseeme和一个隐藏文件.seeme
如果我们使用ls -l只会显示文件的更多属性,我们看不到隐藏文件或目录,如果我们使用ls -l -a就能看到dir目录下原本就有的隐藏文件或目录和我们刚刚创建的隐藏目录和隐藏文件
当然,我们也可以将-l -a连在一起,同时将文件和目录属性以及隐藏文件或目录都给我们显示出来。
除此,我们也可以使用ll -a,其中的ll就相当于我们的ls -l,我们用ll,Linux也是可以识别的。
当然ls -al 和ls -la 和ll -a等都是一样的操作,聪明的Linux都是可以识别的
如果没有-d选项,我们会列出dir目录中的子目录以及文件的详细信息,不包括隐藏文件,但如果加上-d,我们就不会进入目录,直接将目录看作文件,列出他的详细信息
如果没有-d选项的话,我们会直接将根目录/中的所有子目录或文件的详细信息显示出来。带上-d选项之后我们就可以直接显示根目录本身的详细信息了,将其看作成一个文件。
通过tree和ls -R两个命令的对比,我们可以看出ls -R可以以递归的形式列出当前路径下所有的子目录或文件
dir目录中的dirnext子目录就是我们通过mkdir创建出来的
使用-p选项之后我们就可以递归建立多个目录了。
我们每一次登录,或者长时间没操作,建议都先执行一下pwd,确认一下自己在哪里
比如,我现在就在根目录中的子目录dir中,/root/dir这就是我当前所处的路径。
我们在dir目录下,新创建了一个dirnext目录,当然这个目录看起来是什么都没有的,因为我们ls过后,没发现这个目录中有什么文件或子目录,但当我们ls -l -a过后我们可以看到有两个隐藏的文件出来了,一个是.一个是…,这两个分别代表的是当前路径和上级路径。
为什么我们新建目录时,目录中会自动带有这两个隐藏文件呢?道理很简单,这就可以方便我们任意的切换路径,这种切换路径的方式也被称为相对路径,另一种切换路径的方式就是我们退回到根目录下,一层一层的往下走,这样切换路径的方式称之为绝对路径。
一下操作中我们可以看到,cd …之后我们路径就切换为/root/dir了
D:\linux操作系统\Linux课件.zip这就是windows下的路径,其中反斜杠\称之为windows下的路径分隔符,\用于分隔各个文件夹
/root/dir/dirnext这是Linux下的路径,其中斜杠/称之为Linux下的路径分隔符,/用于分隔各个目录
绝对路径:从根目录/(斜杠)开始找我们想要访问的目录
相对路径:在我们当前目录dirnext下,我们可以通过相对路径的方式直接进入到根目录/下的home目录
不管是windows还是Linux,每个文件夹或目录下都可以有新的子文件夹或者子目录,所以Linux的目录结构就是一个树的结构。
只要我们有cd命令,我们就可以访问到Linux下所有的路径。
我们刚刚是在根目录/下的home目录,我们可以通过cd ~直接回到根目录/下的root目录中,这个目录也是我们超级用户root的工作目录
我们可以通过whoami看到当前用户类型。比如我们现在就是root用户,其工作目录也就是家目录,也就是我们的/root目录。
我们进入了根目录中home中的lighthouse目录,通过cd -我们就可以直接返回到我们的工作目录(家目录)/root。
所以这个指令可以帮助我们快速回到两个热点访问的目录。
当我们忘记某个命令时,我们只记得前几个字母,这时我们可Tab两下,它会自动帮我找出所有含我们输入的命令,例如下面的mkd,连续Tab两下,我们可以找出mkdir指令了就。
当我们想进入某个目录时,但不知道这个目录中的目录名时,我们可以选择Tab两下,他会自动补齐dir目录中还有哪些目录可以进入。由下面的图片可知,还有dirnext和youcannotseeme目录可以进入
文件名后面加个目录分隔符表示当前文件不是一般文件而是一个目录。
我们可以使用crtl+c键,终止疯狂刷屏的程序。
dir目录中的test.c以及text.c等文件都是touch出来的。
我们创建目录用的是mkdir,创建文件用的是touch,不要搞混了。
这里有三个时间
Access time :表示最后一次访问(仅仅是访问,没有改动)文件的时间。
Modify time :表示最后一次修改文件的时间。
Change time :表示最后一次对文件属性改变的时间,包括权限,大小,属性等等。
我们可以通过nano指令创建一个test2.c的文件,并向其中写一些c语言代码,然后利用gcc运行起来最后通过./a.out运行可执行程序a.out然后就出来我们的运行结果了。
当我们运行text.c文件后会产生可执行程序文件a.out我们可以通过gcc编译器完成a.out的运行。
我们新建了一个mycode的空目录,我们现在不想要它了,直接rmdir删除这个目录就OK了。
但如果我们想要删除刚刚递归创建的dir1目录的话,他说目录不能为空,我们是删除不了这个dir1目录的。由此可见我们的rmdir指令只能删除空目录。
并且如果我们想要删除test.c文件,他也会报错说这不是一个目录,这也更能说明了我们的rmdir只能删除空目录
我们这里就已经把test.c文件删除了,ll显示文件详细信息时,我们可以看到test.c已经没有了
这里递归删除dir1时,它老是问我是否要删除,非常烦人阿,我们直接用rm -rf强制递归将这个一连串路径全给他删除了
rm -rf直接强制递归删除,删库跑路就用这个,但我们可不要做这样的人哦,简直太没良心了。
rm -rf ./*删除当前路径下的所有文件,比如下方我们递归建立了一串路径,使用rm删除不行,因为dir1是一个目录,使用rm -r他老是问我同不同意删除,所以我们使用rm -rf ./*删除当前路径下的所有文件。
我们也可以看到当执行过后,我再使用tree命令dirnext中什么文件都没有了,全被我们删除了。
删除目录-r,强制删除文件-f,强制删除目录中的所有文件-rf
man man可以查到man到底是干什么的
最常用的就是前三个手册,命令手册,系统调用,库函数(c语言),其他的手册,我们暂时还用不上。
man 3 printf就可以查到printf这个接口了
你直接使用man printf出来的就是printf这个指令,而不是c接口里的printf,因为我们的man查找你如果不事先声明手册的类型,他就会从1手册开始往后找,直到找到位置,printf也是一条指令,所以如果你不用man 3 printf,用man printf就会从1手册里把printf指令显示出来。
我们把当前路径中dirnext中的file.txt文件拷贝到当前路径dirnext2目录中,tree一下当前路径就可以看到file.txt已经被我们拷贝到dirnext2目录中了
我们在dirnext目录中创建了一个dirnext3目录,然后递归式的将其拷贝到上级目录中,我们tree一下上级目录即可看到dirnext3已经被我们拷贝到dir这个路径下了。
默认登录Linux,所处的目录就是你的家目录 /home/xxx,普通用户,一般而言,在自己的家目录下能够畅通无阻
我们这里把当前目录下的file.txt文件剪切到上级目录中
我们还可以将上级目录中的file.txt文件再剪切回来
我们也可以将一个目录dirnext3直接剪切到上级目录也就是dir
我们也可以将dir中的dirnext3目录剪切回dirnext目录当中
如果mv的dst跟的是当前文件名,只会做重命名工作
如果mv的dst跟的是某个路径,他就是纯正的剪切
如果mv的dst跟的是某个路径,且路径后面又跟了个不存在的文件名,它即完成剪切又做了重命名的工作
我们下面就将mydirnext3剪切并重新命名到dirnext2目录当中。
我们要注意的是路径是要有分隔符的,我们剪切并重命名时,dst里面就是/之前的是路径,/之后的是重新命名的名字
这里还有一个问题,我其实是想把mycode 重命名为MYCODE的,可是我没有加路径,所以Linux自动默认为当前路径,Linux就把它理解为,我要把mycode剪切到当前路径并且重新命名为MYCODE了,就出现下面的事故了。
想要在并不处于当前目录下的文件,不改变其路径位置然后重新命名的话,应该是下面那样的指令,但如果我们进入了Mydirnext3中,自然就不用那么麻烦了,直接拿出当前路径的文件并对其重命名就OK了,麻烦的原因就是我们当前的路径位置让我们重命名起来有点麻烦,有点像递归了,我们的目录就是递归定义的,所以这里指令操作起来也有点递归的意思哈,你不觉得吗?
echo “hello rygttm” > mylog.txt,输出重定向,如果目标文件不存在,会自动创建并把本来显示到显示器的文本写入到文件中 – 输出重定向
向显示器打印,可以理解为向显示器写入,可以把显示器看作一种"文件",平常c程序获取数据都是从键盘获取到的,所以键盘也可以看作成一种文件。
输出重定向是一种覆盖式写入,在准备写入之前,会先清空文件,然后在写入。
echo “hello rygttm” >> mylog.txt,称之为追加重定向,不断地向目标文件新增内容
Linux下一切皆文件
cat < mylog.txt和cat 前者我们将输入重定向由键盘改为从mylog.txt获取输入了,后者cat后面什么都不加,就是等我们从键盘里写东西,然后获取我们输入的东西,输入方向是我们的键盘。
另一个指令wc可以统计指定文件中的字节数,字数,行数,加选项-l我们可以只看到文本的行数
打印适应屏幕大小的文本内容,敲Enter键可将内容向下翻阅,并且只能向下翻阅
支持上下翻阅,按住上下方向键,敲q可以退出
也可以在冒号部分输入关键字进行文本内容的搜索。
对于计算机来说,最重要的资源就是数据,所以管道指令 | 就会被shell解释为连接两条指令,用来传送数据的一个指令。
如果我们想要提取文本中的500到520行的内容,我们可以通过创建临时文件存储前520行的内容,然后再通过tail -20拿到后20行的内容,这样我们就就可以完成需求了。
但我们其实也可以不用创建临时文件,使用多个管道。
管道最核心的意义在于,可以集联多条命令,让命令和命令组合来完成批量化文本处理的任务,以完成对数据的加工
例如我们下面便通过cat head tail wc等指令得到了文本某些行的内容和具体行的行数
对于date,使用者可以设定任意想要显示的格式
date +%Y:%m:%d
将时间以时间戳的方式显示,时间戳是指格林威治时间自1970年1月1日00:00:00至当前时间的总秒数
相应的我们也可以将时间戳转换为当前时间,并且按照我们想要的形式,由于我们在东八区所以时间戳为0时,我们当前时间是北京时间,8点整,格林威治是在英国。
通过指令我们也可以获得任意年份的日历
我们可以通过Linux中的time接口获得当前时间的时间戳
我们的alias可以重命名ls -a -l -i -n指令,我们通过which指令可以找到我们的myls是一个重命名指令,大家可以看到ls指令中alias带有color,这也可以解释为什么使用ls指令时某些目录带有颜色了。
带有颜色的目录
(大于号)>my.txt,可以清空我们的my.txt文件
采用命令行管道的方式,也可以完成过滤文本的功能
排序的原则是从左开始比较每一个字符的Ascll码值,从小到大排列,如果你带-r选项,那就是从大到小排列。
由于回车字符ascll码值小于哪些字符数字,所以排序时,前面的部分是回车字符
借助管道命令,我们可以完成去掉相邻文本内容的重复项并且完成文本内容的升序排序
打包:可以防止文件丢失。
压缩:利用特定的算法将我们的文件进行体积的减少,可以帮助我们在网络传输过程中节省时间。
打包一个目录时,我们应该带上-r选项,进行递归式的打包,打包普通文件不用-r
当我们解压压缩包的时候,一般有两种解压目的地,一种是默认解压到我们当前的位置,另一种是解压到我们默认的目录下。
从下图我们便可以看到,当unzip带上-d选项之后,我们就可以将dirnext.zip压缩包解压到我们根目录下的home目录下。
并且test.txt文件中也依然有我们的you can see me文本
通配符是指通用的字符,用来模糊查找信息,通配符能够代替任意字符,我们可以利用通配符删除某一个目录底下的所有文件,或用来删除某一个特定的后缀名的文件。
他就是用来匹配全部字符的一个通用符号
匹配所有字符之后我们就将home目录下面的所有文件全部删除了
我们也可以通过.txt后缀名的匹配,将dirnext目录下面的.txt文件全部删除。
严格的说,tar 只是一种打包格式,并不对文件进行压缩,主要是为了便于文件的管理,所以打包后的文档大小一般远远大于 zip 和 tar.gz,但这种格式也有很明显的优点,例如打包速度非常快,打包时 CPU 占用率也很低,因为不需要压缩嘛。
我们现在通过tar -cvf name.tar name命令其实就可以看到一个被打包好的dirnext.tar文件包
当然我们也可以通过tar -xvf name.tar name对这个文件包进行解包,如果不带-v选项,我们自然也就无法直观的看到解包过程中文件的显示了。这个选项怎么说呢?就是能让我们解包的时候看的更加全面一点。
我们对tar的选项进行一下解释
-c:建立一个压缩文件的参数指令(create的意思)
-x:解开一个压缩文件的参数指令!
-v:压缩的过程中显示文件!
-f:使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
我们这里要再提醒一下大家,我们确实通过cvf进行了目录的打包,但是由于我们没有利用算法对文件进行压缩,这就导致其实我们通过上述命令只能进行打包的操作。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
我们可以通过带-zcvf选项来对目录进行打包并利用LZ77 算法将-cvf之后的归档文件进行压缩,因此就有了tar.gz的文件 (为遵循 8.3 MS-DOS 文件名称限制,又被简称为.tgz)。
由下图可知,我们利用了LZ77算法的gzip格式进行目录的打包和压缩,与上面的.tar命令不同的其实就是,tar指令执行的选项多加了一个z,这个z其实就是进行gzip算法压缩。
当然如果我们相对一个tar.gz形式的目录进行解压,可以使用-zxvf选项来进行解压,解压就是解包并压缩。
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
相比以上几种格式,tar.gz2 拥有最高的压缩率,但是压缩的时候所需要的时间也最长,CPU 占用率也最高。
如果我们相对一个目录进行超高压缩,以便于我们传输时,就可以采用-jcvf的选项来进行打包和压缩,这里的j就是是否采用bzip2的压缩
当然解包的话我们只需要将c选项换为x选项就可以进行bz2格式的解包了。
这里给大家演示一下,解压到指定路径下,其实这个-C选项和我们unzip的-d选项作用是相同的,我们可以看到通过-C选项我们就把压缩包解压到根目录下的home1目录当中了
这个指令就是一个小玩意,和我们的cal一样,大家了解一下就好。
-a或–all 选项详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
el就是centos的简称,el7就是centos7的简称
x86_64是我们的硬件结构
3.10.0-1160.71.1是我们的软件结构
el7是我们的商业化用户采用的发行版本,centos7
我们可以通过cat指令单独打印出来linux的发行版本,不显示内核版本信息。
强制终止前台影响我输入指令的程序
自动退出
ctrl+r在历史命令中进行智能搜索,然后按住左右键可对命令搜索
下面我们就搜索到了之前,我们打印的文本内容,并执行了一下。
将我们整个输入历史的指令全部保存起来
直接打印出来我们的历史指令
我们这里将历史搜索指令重定向到cmd.txt文件当中,然后通过less分批显示,并打印cmd.txt的内容
其实像这种抽象的知识,我们一般会通过3种方式将其完美掌握
思考,重复,动手,翻译过来就是,多查查linux指令,多用用linux指令,多重复你上面的操作,你未来肯定是个大佬。