Linux系统第一小节

linux理念

Linux核心理念:万物皆目录。一切即文件——使用方便而且吧硬件作为文件处理是安全的

Linux并不是一个操作系统,它是一个内核,Centos、Ubuntu才是操作系统,他们都是用Linux内核。

Linux的优点 :

1.开源的,开放的学习环境。

2.漏洞快速修补。

3.因为内核只有几百K,因此适合嵌入式系统。不耗资源。

缺点:

主流软件首先出现在Windows操作系统上,linux版本后续有发布,或者自始至终没有Linux版本。

linux和windows:

linux运行稳定且效率。内核小,不耗资源。(很多服务器都是Linux,运行十年二十年都没有问题)。

linux的分支:

Red Hat >> Red Hat Enterprise Linux 简称 RHEL

Slackware >> SUSE Linux Enterprise 简称 SUSE

Debian >> Ubuntu Server 简称 Ubuntu

Centos7、Rhel7都使用的是XFS文件系统。(ntfs\ext4也是文件系统)

Linux 目录

目录与路径:

Linux下的目录之多,如果每个人都有自己的命名习惯,将会导致后面的人在使用的时候,造成管理困扰,编程中有驼峰命名法则,当然,Linux也有自己的命名标准,就是大名鼎鼎的Filesystem Hierarchy Standard (FHS)标准,根据 https://www.pathname.com/fhs/ 官方文件指出 操作者了解已安装软件通常放置于哪个目录下,就像Windows下默认C盘一样 所以官方希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS的标准。最主要是Linux系统下有 绝对/相对路径的,他们的使用 方法并不相同。


相对路径与绝对路径:

在开始目录的切换之前,你必须要先了解一下所谓的【路径(PATH)】, 有趣的是:什么是【相对路径】与【绝对路径】? 虽然前一章已经稍微针对这个议题提过一次,不过,这里不厌其烦的再次的强调一下!

  • 绝对路径:路径的写法【一定由根目录 / 写起】,例如: /usr/share/doc 这个目录。
  • 相对路径:路径的写法【不是由 / 写起】,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: 【cd …/man】这就是相对路径的写法啦!相对路径意指【相对於目前工作目录的路径!】

  • 相对路径的用途

那么相对路径与绝对路径有什么了不起呀?喝!那可真的是了不起了!假设你写了一个软件, 这个软件共需要三个目录,分别是 etc, bin, man 这三个目录,然而由於不同的人喜欢安装在不同的目录之下, 假设甲安装的目录是 /usr/local/packages/etc, /usr/local/packages/bin 及 /usr/local/packages/man ,不过乙却喜欢安装在 /home/packages/etc, /home/packages/bin, /home/packages/man 这三个目录中,请问如果需要用到绝对路径的话,那么是否很麻烦呢?是的! 如此一来每个目录下的东西就很难对应的起来!这个时候相对路径的写法就显的特别的重要了!


  • 绝对路径的用途

但是对于文件夹名的正确性来说,【绝对路径的正确度要比较好】。 一般来说,如果是在写程序 (shell scripts) 来管理系统的条件下,务必使用绝对路径的写法。绝对路径的写法虽然比较麻烦,但是可以肯定这个写法绝对不会有问题。 如果使用相对路径在程序当中,则可能由于你运行的工作环境不同,导致一些问题的发生。


目录的相关操作:

我们之前稍微提到变换目录的命令是cd,还有哪些可以进行目录操作的命令呢? 例如创建目录啊、删除目录之类的。

.         代表此层目录 
..        代表上一层目录 

需要特别注意的是:在所有目录底下都会存在的两个目录,分别是【.】与【…】 分别代表此层与上一级目录的意思。那么来思考一下底下这个例题:

例题:请问在Linux底下,根目录下有没有上一级目录(…)存在?答:若使用【 ls -al / 】去查询,可以看到根目录下确实存在 . 与 … 两个目录,再仔细的查阅, 可发现这两个目录的属性与权限完全一致,这代表根目录的上一层(…)与根目录自己(.)是同一个目录。

底下我们就来谈一谈几个常见的处理目录的命令吧:

  • cd:变换目录
  • pwd:显示目前的目录
  • mkdir:创建一个新的目录
  • rmdir:删除一个空的目录

  • cd (变换目录)

cd是Change Directory的缩写,这是用来更换当前目录的命令。注意,目录名称与cd命令之间存在一个空格。 登陆Linux系统后,root会在root的根目录!那回到上一层目录可以用【 cd … 】。 利用相对路径的写法必须要确认你目前的路径才能正确的去到想要去的目录。例如上表当中最后一个例子, 你必须要确认你是在/etc/mail当中,并且知道在/etc/mail当中有个yuque的目录才行啊~ 这样才能使用cd …/yuque去到正确的目录说,否则就要直接输入cd /etc/mail/yuque

Tips: 还是要一再地提醒,我们的 Linux 的默认命令列模式 (bash shell) 具有文件补齐功能, 你要常常利用 [tab] 按键来达成你的目录完整性啊!这可是个好习惯啊~ 可以避免你按错键盘输入错导致报错懵逼呢~ _


  • pwd (显示目前所在的目录)
┌──(root㉿ndd)-[~/Desktop]
└─# pwd
/root/Desktop

┌──(root㉿ndd)-[~/Desktop]
└─# 

pwd是Print Working Directory的缩写,也就是显示目前所在目录的命令,


  • mkdir (创建新目录)
┌──(root㉿ndd)-[~/Desktop/ndd]
└─# mkdir vb

┌──(root㉿ndd)-[~/Desktop/ndd]
└─# ls
vb

--------------------------------------------------------------------
┌──(root㉿ndd)-[~/Desktop/ndd]
└─# mkdir -p test1/ndd/test2

加了这个 -p 的选项,可以自行帮你创建多层目录!
---------------------------------------------------------------------------------
┌──(root㉿ndd)-[~/Desktop/ndd]
└─#  mkdir -m 711 test2 

┌──(root㉿ndd)-[~/Desktop/ndd]
└─# ls -l
total 16
drwxr-xr-x 2 root root 4096 Apr 11 20:12 vb
drwxr-xr-x 3 root root 4096 Apr 11 20:15 test1
drwx--x--x 2 root root 4096 Apr 11 20:18 test2
仔细看上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。

如果想要创建新的目录的话,那么就使用mkdir (make directory)吧! 不过,在默认的情况下, 你所需要的目录得一层一层的创建才行!例如:假如你要创建一个目录为 /home/ndd/testing/test1,那么首先必须要有 /home 然后 /home/ndd ,再来 /home/ndd/testing 都必须要存在,才可以创建 /home/ndd/testing/test1 这个目录!假如没有 /home/ndd/testing 时,就没有办法创建 test1 的目录罗!

不过,现在有个更简单有效的方法啦!那就是加上 -p 这个选项喔!你可以直接下达:【 mkdir -p /home/ndd/testing/test1 】 则系统会自动的帮你将 /home, /homendd , /home/ndd/testing 依序的创建起目录!


  • rmdir (删除【空】的目录)
┌──(root㉿ndd)-[~/Desktop/ndd]
└─# mkdir [-mp] 目录名称
选项与参数:
-m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
-p :帮助你直接将所需要的目录(包含上一级目录)递回创建起来!

演示:到/tmp底下尝试创建数个新目录看看:
┌──(root㉿ndd)-[~/Desktop/ndd]
└─# cd /tmp

┌──(root㉿ndd)-[~/Desktop/ndd]
└─#  mkdir test    <==创建一名为 test 的新目录

┌──(root㉿ndd)-[~/Desktop/ndd]
└─#  mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4': 
No such file or directory       <== 没办法直接创建此目录啊!

┌──(root㉿ndd)-[~/Desktop/ndd]
└─#  mkdir -p test1/test2/test3/test4
# 加了这个 -p 的选项,可以自行帮你创建多层目录!

演示:创建权限为rwx--x--x的目录
┌──(root㉿ndd)-[~/Desktop/ndd]
└─# mkdir -m 711 test2

┌──(root㉿ndd)-[~/Desktop/ndd]
└─# ls -l
drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test
drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1
drwx--x--x  2 root  root 4096 Jul 18 12:54 test2
# 仔细看上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。

如果想要删除已有的目录时,就使用rmdir吧!例如将刚刚创建的test删除,使用【 rmdir test 】即可!请注意!目录需要一层一层的删除才行!而且被删除的目录里面必定不能存在其他的目录或文件! 这也是所谓的空的目录(empty directory)的意思,那如果要将所有目录下的东西都删掉呢?! 这个时候就必须使用【 rm -r test 】!不过,还是使用 rmdir 比较不危险!你也可以尝试以 -p 的选项加入,来删除上一级的目录喔!


运行中路径的变量: $PATH

经过前面FHS的解释后,我们知道查看文件属性的命令ls完整名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:【为什么我可以在任何地方运行/bin/ls这个命令呢? 】 为什么我在任何目录下输入 ls 就一定可以显示出一些信息而不会说找不到该 /bin/ls 命令呢? 这是因为环境变量 PATH 的帮助。

当我们在运行一个命令的时候,举例来说【ls】好了,系统会参照PATH的配置去每个PATH定义的目录下搜寻名为ls的可运行, 如果在PATH定义的目录中含有多个名为ls的可运行,那么先搜寻到的同名命令先被运行!

现在,请下达【echo $PATH】来看看到底有哪些目录被定义出来了? echo有【显示、印出】的意思,而 PATH 前面加的 $ 表示后面接的是变量,所以会显示出目前的 PATH !

演示:先用root的身份列出搜寻的路径
┌──(root㉿ndd)-[~]
└─# echo $PATH
/root/.pyenv/shims:/root/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/opt/010editor  <==这是同一行!

PATH(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开, 每个目录是有【顺序】之分的。观察一下上面的输出,你可以发现到root 这个目录在PATH变量内,所以当然就能够在任何地方运行ls来找到/bin/ls运行!

为什么PATH是那么重要的项目?前面我们了解到相对路径和绝对路径的问题,如果我们在某些文件夹中想使用某个软件来打开某个文件,那用很长的文件路径加上 文件名会很麻烦,大多数人也记不住那么多的路径,但是我们只要在环境变量当中配置进去,我们就可以解决这个问题,就像我们常用的 Java c 编译java文件一样,非常的方便。

压缩

压缩文件的用途与技术

您是否有过文件文件太大,导致无法一个磁盘将它复制完成的困扰? 又,您是否有过,发现一个文件夹 / 软件里面有好多文件,这些文件要将它复制与携带都非常不方便的问题? 还有,您是否有过要备份某些重要数据,这些数据量偏偏太大了,耗掉了你很多的磁盘空间呢? 这个时候,那个好用的【文件压缩】技术可就派上用场啦!

因为这些比较大型的文件经过文件压缩技术之后,可以将他的磁盘占用空间降低, 可以达到文件大小降低的效果,另外,有的压缩程序还可以进行容量限制, 使一个大型文件可以分割成为数个小型文件,以方便携带呢!

那什么是【文件压缩】呢?我们来稍微谈一谈它的原理好了。目前我们使用的计算机系统中都是使用所谓的 bytes 单位来计量的!不过,事实上,计算机最小的计量单位应该是 bits 才对啊,此外,我们也知道 1 byte = 8 bits 。如果你的数据为『111…』共有100个1时, 那么压缩技术会记录为『100个1』而不是真的有100个1的位存在!这样也能够精简文件记录的容量呢! 非常有趣吧!

Linux 系统常见的压缩命令:

在Linux的环境中,压缩文件的扩展名大多是:『*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2』,为什么会有这样的扩展名呢?

这是因为 Linux 支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,当然彼此之间可能就无法互通压缩/解压缩文件罗。 所以,当你下载到某个压缩文件时,自然就需要知道该文件是由哪种压缩命令所制作出来的,好用来对照着解压缩啊! 也就是说,虽然 Linux 文件的属性基本上是与档名没有绝对关系的, 但是为了帮助我们人类小小的脑袋瓜子,所以适当的扩展名还是必要的! 底下我们就列出几个常见的压缩文件扩展名吧:

*.Z         compress 程序压缩的文件;
*.gz        gzip 程序压缩的文件;
*.bz2       bzip2 程序压缩的文件;
*.tar       tar 程序打包的数据,并没有压缩过;
*.tar.gz    tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2   tar 程序打包的文件,其中并且经过 bzip2 的压缩

Linux上常见的压缩命令就是 gzip 与 bzip2 ,至于compress 已经退流行了。 gzip 是由GNU所开发出来的压缩命令,该命令已经取代了 compress 。 后来 GNU 又开发出 bzip2 这个压缩比更好的压缩命令!不过,这些命令通常仅能针对一个文件来压缩与解压缩,如此一来, 每次压缩与解压缩都要一大堆文件,岂不烦人?此时,那个所谓的『打包软件, tar』就显的很重要啦!

这个 tar 可以将很多文件『打包』成为一个文件!甚至是目录也可以这么玩。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多文件集结成为一个文件, 事实上,他并没有提供压缩的功能,

压缩命令: tar

Linux不像在 Windows 的系统,可以使用类似Winrar 7zip 这一类的压缩软件来将好多数据『压缩成一个文件』的。

这种将多个文件或目录包成一个大文件的命令功能,我们可以称呼他是一种『打包命令』, 那 Linux 有没有这种打包命令呢?是有的!那就是鼎鼎大名的 tar 这个玩意儿了! tar 可以将多个目录或文件打包成一个大文件,同时还可以透过 gzip/bzip2 的支持,将该文件同时进行压缩! 更有趣的是,由于 tar 的使用太广泛了,目前 Windows 的 WinRAR 也支持 .tar.gz 档名的解压缩呢! 很不错吧!所以下面我们就来玩一玩这个东东!

tar

tar 的选项与参数非常的多!

┌──(root㉿ndd)-[~]
└─# tar

	  tar:

	  -c: 建立压缩档案

	  -x:解压

	  -t:查看内容

	  -r:向压缩归档文件末尾追加文件

	  -u:更新原压缩包中的文件

	  这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

	  -z:有gzip属性的

	  -j:有bz2属性的

	  -Z:有compress属性的

	  -v:显示所有过程

	  -O:将文件解开到标准输出

	  下面的参数-f是必须的

	  -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

	  # tar -cf all.tar *.jpg

	  这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

	  # tar -rf all.tar *.gif

	  这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

	  # tar -uf all.tar logo.gif

	  这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

	  # tar -tf all.tar

	  这条命令是列出all.tar包中所有文件,-t是列出文件的意思

	  # tar -xf all.tar

	  这条命令是解出all.tar包中所有文件,-t是解开的意思

	  压缩:

	  tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg

	  tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz

	  tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2

	  tar -cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z

	  rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux

	  zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

	  解压:

	  tar -xvf file.tar //解压 tar包

	  tar -xzvf file.tar.gz //解压tar.gz

	  tar -xjvf file.tar.bz2 //解压 tar.bz2

	  tar -xZvf file.tar.Z //解压tar.Z

	  unrar e file.rar //解压rar

	  unzip file.zip //解压zip

	  总结:

	  1、*.tar 用 tar -xvf 解压

	  2、*.gz 用 gzip -d或者gunzip 解压

	  3、*.tar.gz和*.tgz 用 tar -xzf 解压

	  4、*.bz2 用 bzip2 -d或者用bunzip2 解压

	  5、*.tar.bz2用tar -xjf 解压

	  6、*.Z 用 uncompress 解压

	  7、*.tar.Z 用tar -xZf 解压

	  8、*.rar 用 unrar e解压

	  9、*.zip 用 unzip 解压

	  解压jdk到指定文件夹:

	  tar -xzvf jdk-8u131-linux-x64.tar.gz -C /usr/local/java

解压命令

笔者常用两个解压命令

  tar -xzvf jdk-8u131-linux-x64.tar.gz
  7z x PatternLocker-master.zip

关于Linux的部分第一小节就写这么多,下一篇将带大家了解及学习 其他部分

猜你喜欢

转载自blog.csdn.net/qq_41100456/article/details/130094514