Linux基础介绍

2023-11-19

         Linux的创始人Linus Torvalds。Linux的官方标准发音为['linəks]。Linux和Unix是非常像的,Linux就是根据Unix演变过来的。Linux是免费的,其实只是说Linux的内核免费。在Linux内核的基础上产生了众多的Linux版本。Linux的发行版说简单点就是将Linux内核与应用软件做一个打包。

         Linux系统目录结构:在命令窗口下输入:ls /

         (1)、/bin:bin是Binary的缩写。这个目录存放这最经常使用的命令。

         (2)、/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些链接文件及镜像文件。

         (3)、/dev:dev是Device(设备)的缩写。该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。

         (4)、/etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录。

         (5)、/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账户命名的。

         (6)、/lib:这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的dll文件。几乎所有的应用程序都需要用到这些共享库。

         (7)、/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

         (8)、/media:Linux系统会自动识别一些设备,如U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。

         (9)、/mnt:Linux系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

         (10)、/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库就可以放到这个目录下。默认是空的。

         (11)、/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不再硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

         (12)、/root:该目录为系统管理员,也称作超级权限者的用户主目录。

         (13)、/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。

         (14)、/srv:该目录存放一些服务启动之后需要提取的数据。

         (15)、/sys:系统核心文件。系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。

         (16)、/tmp:这个目录是用来存放一些临时文件的。

         (17)、/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的Program Files目录。

         (18)、/var:这个目录中存放着不断扩充着的东西,我们习惯将这些经常被修改的文件放在这个目录下,包括各种日志文件。

         Linux中的绝对路径和相对路径:(1)、绝对路径的写法一定由根目录”/”写起,如/home/spring/tmp这就是绝对路径。(2)、相对路径:相对路径的写法不是由根目录”/”写起。

         Linux中的环境变量PATH:在命令窗口下输入:echo $PATH ,可以查看由哪些目录加入到了系统环境变量中。

Linux文件的所属主以及所属组:一个Linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。Linux这样设置文件属性的目的是为了文件的安全。例如,test文件的所属主是user0 而test1文件的所属主是user1,那么user1是不能查看test文件的,相应的user0也不能查看test1文件。然后有这样一个应用,我想创建一个文件同时让user0和user1来查看怎么办呢?可以通过“所属组”。即,创建一个群组users,让user0和user1同属于users组,然后建立一个文件test2,且其所属组为users,那么user0和user1都可以访问test2文件。Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user)、所属组(group)以及其他用户(others)对该文件的权限。可以通过命令ls -l来查看这些属性。

         Linux文件属性:用ls -l查看当前目录下的文件时,共显示了9列内容(用空格划分列),每一列所代表的含义为:

         (1)、第1列,包含的东西有该文件类型和所属主、所属组以及其他用户对该文件的权限。第1列共10位。其中第1位用来描述该文件的类型。”d”表示该文件为目录;”-”表示该文件为普通文件;”l”表示该文件为链接文件(Linux file),如软链接(ln命令)即为该类型;”b”表示该文件为块设备文件,比如磁盘分区;”c”表示该文件为串行端口设备,例如键盘、鼠标;”s”表示该文件为套接字文件(socket),用于进程间通信。后边的9位,每三个为一组,均为rwx三个参数的组合。其中”r”代表可读,”w”代表可写,”x”代表可执行。前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。如一个文件的属性为-rwxr-xr--,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读。对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有”x”权限才能打开并查看该目录。

         (2)、第2列,表示为连接占用的节点(inode),若为目录时,通常与该目录下还有多少目录有关系。

         (3)、第3列,表示该文件所属主。

         (4)、第4列,表示该文件所属组。

         (5)、第5列,表示该文件的大小。

         (6)、第6列、第7列、第8列,为该文件的创建日期或者最近的修改日期,分别为月份、日期以及时间。

         (7)、第9列,为文件名。如果前面有一个”.”,则表示该文件为隐藏文件(可通过快捷键Ctrl+h来查看当前目录的隐藏文件)

         更改Linux文件权限:更改文件的权限,也就是更改所属主、所属组以及他们对应的读写执行权限:

         (1)、更改所属组用chgrp命令:chgrp [组名]  [文件名] ,通过groupadd命令用来增加一个用户组,通过groupdel命令来删除一个用户组。

         (2)、更改文件的所属主用chown命令:chown [所属主名(或账号名)] [文件名] ,通过useradd命令来增加一个账户,通过userdel命令来删除一个账号。

         (3)、改变用户对文件的读写执行权限用chmod命令:在Linux中为了方便更改这些权限,Linux使用数字去代替rwx,具体规则为r:4, w:2, x:1, -:0.在Linux系统中,默认一个目录的权限是755,而一个文件的默认权限是644.chmod还支持使用rwx的方式来设置权限。可以使用chattr命令来修改文件的特殊属性。

         在Linux下搜索一个文件

         (1)、which命令用来查找可执行文件的绝对路径。注意,which命令只能用来查找PATH环境变量中出现的路径下的可执行文件

         (2)、whereis命令通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件。

         (3)、locate命令类似于whereis,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里。后面直接跟文件名。

         (4)、find命令:find [路径]  [参数],如find .  -name  “*.txt”

         Linux文件系统:Linux文件系统格式为Ext2、Ext3、ReiserFS等,目前大部分Linux都使用了Ext3. windows下的文件系统格式有FAT、NTFS。

         Linux文件类型:在Linux文件系统中,主要有以下几种类型的文件:

         (1)、正规文件(regular file):就是一般类型的文件,当用ls -l查看某个目录时,第一个属性为”-”的文件就是正规文件,或者叫普通文件。正规文件又可分成纯文本文件(ascii)和二进制文件(binary)。纯文本文件是可以通过cat、more、less等工具直接查看内容的,而二进制文件并不能。

         (2)、目录(directory):就是目录,跟windows下的文件夹一个意思,只是在Linux下不叫文件夹而叫做目录。用ls -l查看第一个属性为”d”。

         (3)、连接档(link):用ls -l查看的第一个属性为”l”,类似windows下的快捷方式。用”ln”命令建立连接档。

         (4)、设备档(device):与系统周边相关的一些档案,通常都集中在/dev这个目录之下。通常又分为两种:区块(block)设备档,就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘。用ls -l查看的第一个属性为”b”。字符(character)设备档,即是一些串行端口的接口设备。用ls -l查看的第一个属性为”c”。

         Linux文件后缀名:在Linux系统中,文件的后缀名并没有具体意义,也就是说,你加或者不加,都无所谓。但是为了容易区分,Linux爱好者们都习惯给文件加一个后缀名,这样当用户看到这个文件名时就会很快想到它到底是一个什么文件。例如1.sh, 2.tar.gz,my.cnf, test.zip等等,其中1.sh代表它是一个shell script ,2.tar.gz 代表它是一个压缩包,my.cnf 代表它是一个配置文件,test.zip 代表它是一个压缩文件。Linux中,文件名最长可以支持到256个字符。

         /etc/passwd文件:用”:”分割成7个字段,每个字段的含义是:

         (1)、第1个字段:用户名(如第1行中的root就是用户名),代表用户账号的字符串。用户名字符可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其它字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。

         (2)、第2个字段:存放的就是该账号的口令。为什么是”x”呢,早期的Unix系统口令确实是存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,在这里只用一个”x”代替。

         (3)、第3个字段:这个数字代表用户标识号,也叫做uid。系统识别用户身份就是通过这个数字来的,0就是root,也就是说你可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。通常uid的取值范围是0~65535,0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始,如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于500的。

         (4)、第4个字段:表示组标识号,也叫做gid。这个字段对应着/etc/group 中的一条记录,其实/etc/group和/etc/passwd基本上类似。

         (5)、第5个字段:注释说明,该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等。不过,当你使用finger的功能时就会显示这些信息的。可以通过chfn命令来更改。

         (6)、第6个字段:用户的家目录,当用户登录时就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,这个字段是可以自定义的,比如你建立一个普通用户test1,要想让test1的家目录在/data目录下,只要修改/etc/passwd文件中test1那行中的该字段为/data即可。

         (7)、第7个字段:shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh, csh,ksh, tcsh, bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash。

         /etc/shadow文件:用”:”分割成9个字段,每个字段的含义是:

         (1)、第1个字段:用户名,跟/etc/passwd对应。

         (2)、第2个字段:用户密码,这个才是该账号的真正的密码,不过这个密码已经加密过了,但是有些黑客还是能够解密的。所以为了安全,该文件属性设置为600,只允许root读写。

         (3)、第3个字段:上次更改密码的日期,这个数字是这样计算得来的,距离1970年1月1日到上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是365*(2012-1970)+1=15331.

         (4)、第4个字段:要过多少天才可以更改密码,默认是0,即不限制。

         (5)、第5个字段:密码多少天后到期。即在多少天内必须更改密码,例如这里设置成30,则30天内必须更改一次密码,否则将不能登录系统,默认是99999,可以理解为永远不需要改。

         (6)、第6个字段:密码到期前的警告期限,若这个值设置成7,则表示当7天后密码过期时,系统就发出警告告诉用户,提醒用户他的密码将在7天后到期。

         (7)、第7个字段:账号失效期限。你可以这样理解,如果设置这个值为3,则表示:密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了。

         (8)、第8个字段:账号的生命周期,跟第三段一样,是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号作废。

         (9)、第9个字段:作为保留用的,没有什么意义。

         创建/修改一个用户的密码:等创建完账号后,默认是没有设置密码的,虽然没有密码,但该账户同样登录不了系统。只有设置好密码后方可登录系统。可以通过passwd命令来创建/修改用户密码。passwd 后面不跟用户名则是更改当前用户的密码,当前用户为root,所以此时修改的是root的密码,后面跟test则修改的是test用户的密码。

         Linux下用户身份切换:Linux系统中,有时候普通用户有些事情是不能做的,除非是root用户才能做到。这时就需要临时切换到root身份来做事了。

         在不知道root密码的情况下,从spring普通用户切换到root下,则执行:sudo  -s 即可;如果从root再次切换到spring,则执行:su  -  spring即可

         设置root密码:在终端输入命令sudo  passwd,然后输入当前用户的密码,enter,终端会提示我们输入新的密码并确认,此时的密码就是root新密码。修改成功后,输入命令su  root,再输入新的密码就会进入root账号了。可以使用命令:echo  $LOGNAME,来查看当前登录的用户名。

         su的语法为:su [-]  username ,后面可以跟”-”也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样su到普通用户。加”-”后会连同用户的环境变量一起切换过来。如suspring后虽然切换到了spring用户,但是当前目录还是切换前的/root目录。然后当用su - spring时切换用户后则到了spring的家目录/home/spring。当用root切换到普通用户时,是不需要输入密码的。这也体现了root用户至高无上的权利。使用sudo命令执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。

         查看磁盘的容量可以用df命令:df命令可以查看已挂载磁盘的总容量、使用容量、剩余容量等,可以不加任何参数,默认是按k为单位显示的。df命令常用的参数有-i、-h、-k、-m等:(1)、-i,使用inodes显示结果;(2)、-h,使用合适的单位显示;(3)、-k、-m,分别为使用K、M为单位显示。对列进行说明:(1)、Filesystem,表示扇区,也就是你划分磁盘时所分的区;(2)、1K-blocks/1M-blocks,表示以1K/1M为单位;(3)、Used和Available,分别是已使用和剩余;(4)、Use%,就是已经使用的百分比,如果这个这个值大于90%那么你就应该注意了,磁盘很有可能马上就会变满的;(5)、Mounted on,则表示该分区(扇区)所挂载的地方。

         查看某个目录所占空间大小可以用du命令:语法,du  [-abckmsh] [文件或者目录名] :(1)、-a,全部文件或目录大小都列出来。如果不加任何选项和参数只列出目录(包含子目录)大小;(2)、-b,列出的值以bytes为单位输出,默认是以Kbytes;(3)、-c,最后加总;(4)、-k,以KB为单位输出;(5)、-m,以MB为单位输出;(6)、-s,只列出总和;(7)、-h,系统自动调节单位,例如文件太小可能就几K,那么就以K为单位显示,如果大到几G,则就以G为单位显示。

         磁盘的分区:通过命令fdisk -l ,会直接列出系统中所有的磁盘设备以及分区表,-l 后加设备名会列出该设备的分区表。如果不加-l则进入另一个模式,在该模式下,可以对磁盘进行分区操作。在Linux中最多可以创建4个主分区,一旦创建4个主分区后就不能增加任何分区了。另外最多也只能创建一个扩展分区。

         格式化Linux硬盘分区:通过命令mkfs.ext2、mkfs.ext3、mke2fs来完成。

         挂载/卸载磁盘:用mount命令挂载设备;用umount命令卸载设备。

         磁盘配额:磁盘配额其实就是给每个用户分配一定的磁盘额度,只允许他使用这个额度范围内的磁盘空间。在Linux系统中,是多用户多任务的环境,所以会有很多人共用一个磁盘的情况。针对每个用户去限定一定量的磁盘空间是有必要的。在Linux中,用来管理磁盘配额的东西就是quota了。quota在实际应用中是针对整个分区进行限制的。

         文本编辑工具vim:早期的Unix都是使用vi作为系统默认的编辑器。vim是vi的升级版。

         vim的三种模式即一般模式、编辑模式、命令模式

         一般模式:当vim filename编辑一个文件时,一进入该文件就是一般模式了。在这个模式下,可以做的操作有:上下移动光标、删除某个字符、删除某行、复制、粘贴一行或者多行。

         编辑模式:一般模式下,是不可以修改某一个字符的,只能到编辑模式了。从一般模式进入编辑模式,只需按一个键即可(i、I、a、A、o、O、r、R)。当进入编辑模式时,会在屏幕的最下一行出现”INSERT”或”REPLACE”的字样。从编辑模式回到一般模式只需要按一下键盘左上方的Esc键即可。

         命令模式:在一般模式下,输入”:”或者”/”即可进入命令模式。在该模式下,你可以搜索某个字符或者字符串,也可以保存、替换、退出、显示行号等等。

         文档的压缩与打包:在Linux下最常见的压缩文件通常都是以.tar.gz为结尾的,除此之外还有.tar, .gz, .bz2, .zip(.zip格式文件在Windows和Linux下都能使用)等等:(1)、.gz:gzip压缩工具压缩的文件(注意,gzip不可以压缩目录);(2)、.bz2:bzip2压缩工具压缩的文件;(3)、.tar:tar打包程序打包的文件(tar并没有压缩功能,只是把一个目录合并成一个文件);(4)、.tar.gz:可以理解为先用tar打包,然后再gzip压缩;(5)、.tar.bz2:先用tar打包,然后再bzip2压缩。

         shell:简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。

         bash(Redhat/CentOS系统默认安装的shell叫做bash,它是sh的增强版本。Ubuntu默认安装的shell是dash。通过执行:ll /bin/sh ,可以发现Ubuntu中的/bin/sh指向的是dash而不是bash,/bin/sh是个软连接,你也可以通过软连接的方式使/bin/sh指向bash:sudo ln -s /bin/bash  /bin/sh 。)的特点:

(1)、记录命令历史:我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中;

(2)、指令和文件名补全:按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名。连续按两次tab键,系统则会把所有的指令或者文件名都列出来;

(3)、别名:可以通过alias命令把一个常用的并且很长的指令别名一个简洁易记的指令。如果不想用了,还可以用unalias命令解除别名功能。直接敲alias会看到目前系统预设的alias;

(4)、通配符:在bash下,可以使用*来匹配零个或多个字符,而用?匹配一个字符;

(5)、输入输出重定向:输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>> ;

(6)、管道符:”|”, 就是把前面的命令运行的结果丢给后面的命令;

(7)、作业控制:当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)。

变量:通常shell预设的变量都是大写的。变量,说简单点就是使用一个较简单的字符串来替代某些具有特殊意义的设定以及数据。就拿PATH来讲,这个PATH就代替了所有常用命令的绝对路径的设定。因为有了PATH这个变量,所以我们运行某个命令时不再去输入全局路径,直接敲命令名即可。你可以使用echo命令显示变量的值,如:echo  $PATH 。

使用env命令即可全部列出系统预设的全部系统环境变量了。不过登录的用户不一样这些环境变量的值也不一样。

env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来。set不仅可以显示系统预设的变量,也可以连同用户自定义的变量显示出来。

虽然你可以自定义变量,如自定义变量myname,但是该变量只能在当前shell中生效。使用bash命令即可再打开一个shell,此时先前设置的自定义变量已经不存在了,退出当前shell回到原来的shell(可以通过exit命令退出当前的shell),则自定义变量还在:

(1)、要想系统内所有用户登录后都能使用自定义变量:需要在/etc/profile文件最末行加入”export myname=spring”(export其实就是声明这个变量的意思),然后运行”source /etc/profile”就可以生效了;source命令的作用是,将目前设定的配置刷新,即不用注销再登录也能生效;

(2)、只想让当前用户使用该变量:需要在用户主目录下的.bashrc文件最后一行加入“export myname=spring”, 然后运行”source  .bashrc”就可以生效了。

设置自定义变量的规则:

(1)、设定变量的格式为”a=b”,其中a为变量名,b为变量的内容,等号两边不能有空格

(2)、变量名只能由英、数字以及下划线组成,而且不能以数字开头;

(3)、当变量内容带有特殊字符(如空格)时,需要加上单引号,如,myname= ‘spring spring’;有一种情况,需注意,就是变量内容中本身带有单引号,这就需要用到双引号了,如,myname=”spring’spring”;

(4)、如果变量内容中需要用到其他命令运行结果则可以使用反引号,如,myname=`pwd`;

(5)、变量内容可以累加其他变量的内容,需要加双引号(单引号和双引号的区别:用双引号时不会取消掉里面出现的特殊字符的本身作用(这里的$),而使用单引号则里面的特殊字符全部失去它本身的作用),如,myname=”$LOGNAME”spring;

(6)、在父shell中设定一个变量后,进入子shell后该变量是不会生效的,如果想让这个变量在子shell中生效则要用到export指令。如果在当前shell中运行bash指令后,则会进入一个新的shell,这个shell就是原来shell的子shell了,可以通过pstree指令来查看,此指令会把Linux系统中所有进程通过树形结构打印出来。

系统环境变量的配置文件

(1)、/etc/profile:这个文件预设了几个重要的变量,例如PATH, USER,LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umas等等;

(2)、/etc/bash.bashrc:这个文件主要预设umask以及PS1.

个人环境变量的配置文件:除了两个系统级别的配置文件外,每个用户的主目录下还有几个这样的隐藏文件:

(1)、.profile:定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次;

(2)、.bashrc:该文件包含专用于你的shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。例如你可以将用户自定义的alias或者自定义变量写到这个文件中;

(3)、.bash_history:记录命令历史用的;

(4)、.bash_logout:当退出shell时,会执行该文件。可以把一些清理的工作放到这个文件中。

Linux shell中的特殊符号

(1)、*:代表零个或多个字符或数字;

(2)、?:只代表一个任意的字符;

(3)、#:这个符号在Linux中表示注释说明的意思,即”#”后面的内容Linux忽略掉;在命令的开头或者中间插入”#”,Linux都会忽略掉的;

(4)、\:脱意字符,将后面的特殊符号(如”*”)还原为普通字符;

(5)、|:管道符,它的作用在于将符号前面命令的结果丢给符号后面的命令。这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用,例如cat, less, head,tail, grep(过滤一个或多个字符), cut(截取某一个字段), sort(排序), wc(统计文档的行数、字符数、词数), uniq(去重复的行,在进行uniq之前,需要先用sort排序然后才能uniq,否则你将得不到你想要的), tee(后跟文件名,类似与重定向”>”,但是比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上), tr(替换字符,常用来处理文档中出现的特殊符号), split(切割文档), sed, awk等等,其中grep, sed, awk为正则表达式必须掌握的工具;

(6)、$:除了用于变量前面的标识符外,还有一个妙用,就是和’!’结合起来使用;”!$”表示上条命令中最后出现的那些内容;

(7)、;:分号,想在一行中运行两个或两个以上的命令,则需要在命令之间加一个”;”;

(8)、~:用户的家目录,如果是root则是 /root ,普通用户则是 /home/username;

(9)、&:如果想把一条命令放到后台执行的话,则需要加上这个符号。通常用于命令运行时间非常长的情况;

(10)、>,>>,2>,2>>:>和>>分别表示重定向和追加重定向,2>和2>>分别表示错误重定向和错误追加重定向;当我们运行一个命令报错时,报错信息会输出到当前的屏幕,如果想重定向到一个文本里,则要用2>或者2>>;

(11)、[]:中括号,中间为字符组合,代表中间字符中的任意一个;

(12)、&&与||:作用类似于C++中的&&和||逻辑操作符。

正则表达式:使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本,常用的工具有grep、sed、awk等,这些工具都是针对文本的行操作的。

grep命令:用法如,grep  -in   ‘abc’ tmp.txt ,常用参数介绍:

(1)、-c:打印符号要求的行数;

(2)、-i:忽略大小写;

(3)、-n:在输出符号要求的行的同时连同行号一起输出;

(4)、-v:打印不符合要求的行;

其它说明:

(1)、”[]”:如果是数字的话就用[0-9]这种情势;如果只包含数字1和5,则可以用[15],它不会认为是15;如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z];另外[ ]还有一种形式,就是[^字符] 表示除[ ]内的字符之外的字符;

(2)、在正则表达式中,”^”表示行的开始,”$”表示行的结尾,那么空行则表示”^$”,如果你只想筛选出非空行,则可以使用 “grep -v ‘^$’ filename”得到你想要的结果;

(3)、”.”表示任意一个字符;”*”表示零个或多个前面的字符;”.*” 表示零个或多个任意字符,空行也包含在内;

(4)、可以使用”{}”,其内部为数字,表示前面的字符要重复的次数。

sed命令:grep实现的只是查找功能,而它却不能实现把查找的内容替换掉,而sed工具不仅可以把查找的内容替换掉,而且还能实现把替换的文本输出到屏幕上的功能,而且还有其它更丰富的功能,sed是流式编辑器:

(1)、打印某行或者多行:sed  -n  ‘n’p  filename ,单引号内的n是一个数字,表示第几行;

(2)、删除某行或者多行:sed  ‘1,5’d filename,删除第1行和第5行;

(3)、替换字符或字符串:sed  ‘1,3s/AB/ab/g’ filename,将文件中的第1行和第3行中的字符串AB替换为ab;’s’就是替换的命令,’g’为本行中全局替换,如果不加’g’,只换该行中出现的第一个。除了可以使用’/’外,还可以使用其它特殊字符如’#’或者’@’都没有问题。

awk命令:它和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行,它的功能比sed更加强大:

shell脚本与windows/doc下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。shell脚本能帮助我们很方便的去管理服务器,因为我们可以指定一个任务计划定时去执行某一个shell脚本实现我们想要需求。

凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样做的目的是,一来可以更好的管理文档,二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护。

shell脚本的基本结构:shell脚本通常都是以.sh为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它一定会是一个shell脚本。shell脚本文件中第一行一定是 “#! /bin/bash” 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行。’#’表示注释,后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。当然这些注释并非必须的。该脚本再往下面则为要运行的命令了。

shell脚本的执行很简单,直接”sh  filename.sh”即可,另外也可以通过”./filename.sh”来执行。另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。

shell脚本中的变量:(1)、定义变量的格式为:”变量名=变量的值”;(2)、当在脚本中引用变量时需要加上’$’符号;(3)、read命令可以从标准输入获得变量的值,后跟变量名。”read x”表示x变量的值需要用户通过键盘输入得到;(4)、shell脚本在执行的时候后边是可以跟变量的(预设变量,一个shell脚本的预设变量是没有限制的,$0代表脚本本身的名字),而且还可以跟多个。

注意:Ubuntu的shell默认安装的是dash,而不是bash。可以通过运行ls  -al /bin/sh查看sh的详细信息。dash比bash更轻、更快,当bash却更常用。如果一些命令、脚本等总不能正常执行,有可能是dash的原因。Linux上的shell并非只有一种,而各个shell的语法是由差别的

shell脚本中的逻辑判断:if… fi、if … else… fi、if … elif… else…fi、case。

shell脚本中的循环:for、while。

shell脚本中的函数:function。

Linux系统日常管理:

监控系统的状态:

(1)、用”w”命令查看当前系统的负载(系统整体上的负载):一般情况下,平均负载值不超过服务器的cpu数量就没有关系;可以通过这个命令”grep  -c  ‘processor’  /proc/cpuinfo ”来查看当前系统有几个cpu。

         (2)、用”vmstat”命令监控系统的状态:vmstat命令打印的结果共分为6部分:A、procs:显示进程相关信息,’r’表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;’b’表示等待资源的进程数,比如等待I/O、内存等,这列的值如果长时间大于1,则需要关注下;B、memory:内存相关信息,’swpd’表示切换到交换分区中的内存数量;’free’表示空闲的内存数量;’buff’缓冲大小(即将写入磁盘的);’cache’缓存大小(从磁盘中读取的);C、swap:内存交换情况,’si’由内存进入交换区的数量,’so’由交换区进入内存的数量;D、io:磁盘使用情况,’bi’从块设备读取数据的量(读磁盘),’bo’从块设备写入数据的量(写磁盘);E、system:显示采集间隔内发生的中断次数,’in’ 表示在某一时间间隔中观测到的每秒设备中断数,’cs’ 表示每秒产生的上下文切换次数;F、cpu:显示cpu的使用状态;’us’ 显示了用户下所花费 cpu 时间的百分比,’sy’显示系统花费cpu时间百分比,’id’ 表示cpu处于空闲状态的时间百分比,’wa’ 表示I/O等待所占用cpu时间百分比,’st’ 表示被偷走的cpu所占百分比(一般都为0,不用关注)。

         (3)、用”top”显示进程所占系统资源:这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。

         (4)、用”sar”命令监控系统状态:sar 命令很强大,它可以监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。如果你系统没有安装这个命令,请使用”sudo  apt-get install  sysstat”命令安装。

         (5)、用”free”命令查看内存使用状态:查看内存使用多少,剩余多少看第二行的数据。

         (6)、用’ps”命令查看系统进程:ps  aux

         (7)、用”netstat”命令查看网络状况:A、”netstat -lnp”打印当前系统启动哪些端口;B、”netstat -an”打印网络连接状况。

         (8)、抓包工具tcpdump:想看一下某个网卡上都有哪些数据包,尤其是当你初步判定你的服务器上有流量攻击。这时,使用抓包工具来抓一下数据包,就可以知道有哪些IP在攻击你了。

         Linux网络相关:

         (1)、用”ifconfig”命令查看网卡IP:

         (2)、给一个网卡设定多个IP:在Linux系统中,网卡是可以设定多重IP的。

         (3)、查看网卡连接状态:”mii-tool”这个命令用来查看网卡是否连接,如图显示”link ok”等字样说明连接正常,否则会显示”no link”字样。虚拟机不支持”mii-tool”命令。

         (4)、更改主机名:可以使用”hostname”命令查看你的Linux的主机名是什么。

         (5)、设置DNS:在linux下面设置dns非常简单,只要把dns地址写到一个配置文件中即可。这个配置文件就是/etc/resolv.conf.

         Linux的防火墙:iptables是Linux上特有的防火墙机制,其功能非常强大。

         Linux系统的任务计划:可通过”crontab”命令来完成。

         Linux系统服务管理:chkconfig

         Linux中的数据备份:rsync

         Linux系统日志:日志主要的功能有:审计和检测,它还可以实时的检测系统状态,检测和追踪侵入者等等。

         Linux下同步时间服务器:ntpdate

         LAMP环境搭建:LAMP是LinuxApache MySQL PHP的简写,其实就是把Apache,MySQL以及PHP安装在Linux系统上,组成一个环境来运行php的脚本语言。

         LNMP环境搭建:和LAMP不同的是LNMP中的N指的是Nginx(类似于Apache的一种web服务软件),其它都一样。Nginx设计的初衷是提供一种快速高效多并发的web服务软件。

         NFS服务配置:NFS会经常用到,用于在网络上共享存储。

         配置ftp服务:FTP(File Transfer Protocol)即文件传输协议。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。

         配置squid服务:Squid是比较知名的代理软件,它不仅可以跑在linux上还可以跑在windows以及Unix上。

         配置Tomcat:Tomcat就是用来解析jsp程序的一个软件。

         配置samba服务器:可以通过samba服务来实现windows和Linux的文件共享。

         使用Nagios搭建监控服务器:Nagios是一款用于监控系统和网络的开源应用软件,它的模式是服务器—客户端,也就是说首先要在在一台服务器上(server)部署相应的主要套件,然后在要监控的服务器上部署客户端程序,这样server会和client通信,从而监控client端的各项资源。

 

以上内容总结自:http://www.92csz.com/study/linux/

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux基础介绍 的相关文章

  • 如何成功使用RDAP协议代替whois

    我对新的 RDAP 协议有点困惑 也不知道何时进一步追求它有意义 在我看来 每个人都同意它是 whois 的继承者 但他们的数据库似乎是空的 在 ubuntu 上我尝试了 rdapper nicinfo 甚至他们的 RESTful API
  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • InstaPy:“错误,无法确定 64 位 Linux 的正确文件名”

    有人知道如何解决或解决这个问题吗 来自控制台的堆栈跟踪 执行后报告错误 InstaPy Version 0 6 9 Workspace in use home zanettra InstaPy Error unable to determi
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内

随机推荐

  • 【Qt】智能指针

    https zhuanlan zhihu com p 364014571 ivk sa 1024320u 代码中出现一个bug 最终发现是由于在某个特殊情况下出现了使用垂悬指针 造成了程序崩溃 进而学习了解了Qt的智能指针机制 一 悬垂指针
  • 【力扣经典题目】链表的回文结构,赶快收藏起来

    题目描述 对于一个链表 请设计一个时间复杂度为O n 额外空间复杂度为O 1 的算法 判断其是否为回文结构 给定一个链表的头指针A 请返回一个bool值 代表其是否为回文结构 保证链表长度小于等于900 测试样例 1 gt 2 gt 2 g
  • Windows10 2004无线网卡电源管理消失 电源计划只有平衡

    问题 升级到了Windows10 2004 发现每次睡眠后QQ和微信消息都收不到了 去网卡的属性界面却找不到电源管理面板 并且电源计划中也只能创建平衡的电源计划 在网上找了很多解决办法 最多的是关于一个改注册表中的更改注册表HKEY LOC
  • 9 变量进阶

    变量进阶 变量的引用 可变和不可变类型 局部变量和全局变量 1 变量的引用 变量和数据都是保存在内存中的 在 python 中 函数 的参数传递以及返回值都是靠引用传递的 引用的概念 在 python 中 变量和数据是分开存储的 数据保存在
  • 应用层、传输层、网络层、数据链路层

    应用层 包括 应用服务 FTP FileTransfer Protocol 文件传输协议 和DNS Domain NameSystem 域名系统 发送HTTP请求 DNS域名解析系统 提供通过域名 www baidu com 查找IP地址
  • 劳务派遣员工转正制度是什么

    一 劳务派遣员工转正制度是什么 要根据不同的单位来看 因为具体的制度还是要看用工单位的相关规定 比如大部分银行每年都会有一定的转正名额 公务员和事业单位的转正机会则较少 想要成为正式员工还是要参加招聘考试 银行招聘的时候会以劳务派遣的方式招
  • DDK&WDM学习 - HelloWDM,WDM驱动加载,INF文件

    转自 http www itstudy net html 200911 30 20091130234443 htm 第十五章 驱动程序的安装 方便的 自动的和容易的安装一个设备驱动程序对于用户来说是一个重要的步骤 对于提供给用户容易的设备管
  • 解决存储vuex数据,页面刷新后vuex数据被清空了的问题

    1 vuex刷新后数据会被清除 2 可以监听用户是否手动刷新页面 刷新之前先把vuex的数据存储在localStorage里面 页面加载时读取localStorage里的状态信息给vuex赋值 赋值后再清空localStorage 打开ap
  • 一篇文章看懂自动引用计数和循环引用到底是怎么回事

    ARC Swift中的ARC Automatic Reference Counting 自动引用计数 是一种内存管理机制 用于跟踪和管理应用程序中的对象引用计数 确保内存中的对象只在需要的时候存在 当对象的引用计数为0时就会被系统析构掉 A
  • 【双流(1)|原理】flink 双流join原理(1)Interval Join:state过大? 回撤现象出现时,sink如何处理,还有如何优化回撤?数据出现shuffle时join是如何处理的?

    先思考几个问题 双流join的基本原理是什么 双流join的分类有哪些 具体的实现是什么 双流join产生的问题 回撤的情况以及优化的可能性 多流join数据倾斜与性能优化思路 多流join的可能性 文章目录 一 流的join和表的join
  • 校验是否是金额或者小数或者数字,是否是数字

    校验是否是金额或者小数或者数字 是否是数字 param val return bool static function isValidMoney val pattern d d 1 5 if preg match pattern val r
  • c++工程模式+配置文件+动态调用类

    前言 主函数 SimpleFactoryRefactor cpp include
  • JVM和Android虚拟机知识点总结

    文章目录 1 JVM Dalvik Art虚拟机的区别 1 1 JVM和Dalvik的区别 1 2 Dalvik和Art的区别 2 Class文件和dex文件的区别 3 基于寄存器的Android虚拟机和基于栈的JVM 3 1 栈和栈帧 3
  • 算法基础/递归回溯

    1 17 电话号码的字母组合 题目描述 示例 示例 1 输入 digits 23 输出 ad ae af bd be bf cd ce cf 示例 2 输入 digits 输出 示例 3 输入 digits 2 输出 a b c 解答描述
  • JSON.stringify()

    JSON stringify 将一个JavaScript值 对象或者数组 转换为一个 JSON字符串 如果指定了replacer是一个函数 则可以选择性的替换值 或者如果指定了replacer是一个数组 可选择性的仅包含数组指定的属性 语法
  • 粤嵌GEC6818开发板-入门感慨篇(续一)

    触摸屏的事件 include
  • Sql几种删除的区别

    Drop drop可用于删除数据库 drop database 数据库名称 删除数据表 use 数据库名称 drop table 数据表1名称 数据表2名 或删除数据表字段 use 数据库名称 alter table 数据表名称 drop
  • mqttxieyi

    Mqtt概述 Mqtt开发最初是用于卫星通讯监控输油管道的项目 一种用于嵌入式设备的通讯协议 这种通讯协议必须满足以下条件 易于实现 数据传输的服务质量可控 占用带宽小 传输数据内容不可预知 设备连接状态可知 MQTT 从诞生之初就是专为低
  • 使用PyCharm进行Python远程调试

    背景描述 在机房中 服务器通过ADB与多台Android设备相连接 并通过Python应用程序 QMSInterceptor 对Android设备进行任务调度 在开发环境中对QMSInterceptor调试完毕后 上传至服务器 发现程序运行
  • Linux基础介绍

    Linux的创始人Linus Torvalds Linux的官方标准发音为 lin ks Linux和Unix是非常像的 Linux就是根据Unix演变过来的 Linux是免费的 其实只是说Linux的内核免费 在Linux内核的基础上产生