Linux基础

1. Windows与Linux不同的磁盘分区流程

    Windows:分区-->格式化-->分配盘符

    Linux:分区-->格式化-->给每个分区起“设备文件名”-->分配挂载点

2.设备文件名:Linux中一切皆文件,包括硬件、用户等。硬件的文件名即称作“硬件设备文件名”,硬件设备文件名作为硬件的标准称呼,是由Linux自动检测并分配的。硬件设备文件在目录中处于根目录(“/”代表根目录,最高级目录)下的dev文件夹(专用于放硬件设备文件)下,即“/dev”文件夹下。

分区的设备文件名分配规则:

    hd代表IDE接口,sd代表SCSI接口或SATA接口;

    a代表第一块硬盘,如有多块硬盘b代表第二块硬盘,c代表第三块硬盘,以此类推;

    1代表一块硬盘上的第一个分区,2代表此硬盘的第二个分区,3代表此硬盘第三个分区,以此类推,其中1234编号只能代表主分区或扩展分区,逻辑分区的编号从5开始分配,最大分区编号16

/dev/sda1 第一块SATA接口硬盘的第一个分区

IDE接口,老式硬盘接口,传输速度较慢,理论速度133MB/S

SCSI 接口,老式服务器硬盘接口,理论速度200MB/S

SATA接口(窗口硬盘),目前使用的硬盘接口,分三代,SATA3的理论速度为500MB/S

3.挂载点:参考Windows中的盘符的概念来理解。Windows中使用字母标识符来指定在这个分区上的文件和目录,而Linux中使用目录作为挂载点(盘符)

绝大多数目录都可以作为挂载点(部分必须和根目录放在同一个分区的目录除外,否则将导致系统不能启动)包括你手工创建的目录。

    必须分区:

        根分区 /(挂载点根目录,根目录中要保存其他所有数据,根目录如果没有硬盘空间,根下的很多数据将没有地方存放)

        swap分区(交换分区,可理解为虚拟内存, 当真实内存不足时,可将swap分区中的硬盘空间作为内存使用,如果内存小于等于4GB,推荐swap分配内存的两倍,若内存大于4GB,建议swap空间与内存相等,不需要挂载点)

    推荐分区:

        启动分区,推荐200MB (挂载点/boot目录,/boot中存放了用于系统启动的相关数据,如果不单独分区,将会和根分区存放在同一个存储空间中,如果根分区写满将导致系统无法启动)

 

命令基本格式及文件处理命令

1.起始符:

[root@localhost ~]#

root 当前登录用户

localhost 主机名

~ 当前所在目录(家目录)

# 超级用户的提示符

 

2.ls命令选项:

ls -a 显示所有文件,包括隐藏文件

ls -l 显示详细信息

ls -d 查看目录属性

ls -h 人性化显示文件大小

ls -i 显示inode

 

3.文件权限(10位),第一位为文件类型,后面每3位一组

-rw-r--r--

-文件类型(-文件 d目录 l软链接目录

rw- :u所有者

r-- :g所属组

r-- :o其他人

r读 w写 x执行

 

-rw-r--r--. 1 root root 1207

.代表ACL权限 1应用计数

linux中“.”开头的文件是隐藏文件。

 

4.# 超级用户的提示符 $ 普通用户的提示符 ~ 代表当前目录

目录处理命令(上)

1、linux中一切皆文件。目录为目录文件。普通文件用来保存数据,目录文件用来保存文件。

2、mkdir :建立目录(make directories)
2-1)mkdir -p [目录名]
2-1-1)-p :递归创建,当创建多级目录时需加
2-2)例:
2-2-1)mkdir light
2-2-2) mkdir -p imooc/linux/light

3、cd [目录] :切换目录(change directory)
3-1)简化操作
3-1-1)cd ~/ cd :进入当前用户的家目录
3-1-2)cd - :进入上次目录
3-1-3)cd .. :进入上一级目录
3-1-4)cd . :进入当前目录

4、路径
4-1)相对路径:参照当前所在目录,进行查找
4-2)绝对路径:从根目录开始制定,一级一级递归,进行查找

5、pwd :查询所在目录位置(print working directory)

目录处理命令(下)

1、删除空目录
1-1)rmdir [目录名] (remove empty directories)
1-1-1)只能删除空目录
2、删除文件或目录
2-1)rm -rf [文件或目录] (remove)
2-1-1)选项 -r :删除目录
2-1-2)选项 -f :强制
2-1-3)rm [文件名] :提示是否删除
2-1-4)rm -r [目录] :删除目录需加 -r ,目录中含有子文件,将持续询问是否删除
2-1-5)rm -rf [目录] :删除目录, 不会询问是否删除而直接进行
2-1-6)纯字符界面没有回收站。注意自杀指令:rm -rf /
2-2)rm -rf /tmp/* :删除tmp目录下的内容
2-3)rm -rf /tmp/ :删除tmp目录
3、建议:删除文件或目录习惯使用命令 rm -rf [文件或目录]
4、复制命令
4-1)cp [选项] [原文件或目录] [目标目录] (copy)
4-1-1)选项 -r :复制目录
4-1-2)选项 -p :连带文件属性复制
4-1-3)选项 -d :若原文件是链接文件,则复制链接属性
4-1-4)选项 -a :相当于 -pdr 全选
4-2)例子

4-2-1)cp abc /tmp/ 若目标目录不加文件名,则为原名复制
4-2-2)cp abc /tmp/ana 若目标目录后加入文件名,则为改名复制
4-2-3)cp -r japan/ /tmp/ 复制目录
4-2-4)cp -a japan/ /tmp/ 完全复制,包括所有属性
4-3)被复制文件的时间为执行复制命令的时间,若要使被复制的文件与原文件属性完全一致,需加 -a
5、剪切或改名命令
5-1)mv [原文件或目录] [目标目录] (move)
5-1-1)mv japan/ /tmp/ 剪切目录时不需加 -r
5-1-2)mv abc longls 当原文件与目标目录,在同一目录下,则为改名命令
6、当前系统时间命令:date
7、ls -l 命令别名 :ll

 

常见目录作用

1、/ 根目录

2、/bin 命令保存目录(普通用户就可以读取的命令)
2-1)根目录下的bin和sbin,usr目录下的bin和sbin,这四个目录都是用来保存系统命令。其中,bin目录

下的命令任何用户都可以执行,sbin目录下只有root才可以执行。linux使用此方式来区分用户权限。

3、/boot 启动目录,启动相关文件

4、/dev 设备文件保存目录

5、/etc 配置文件保存目录

6、/home 普通用户的家目录

7、/lib 系统库保存目录
7-1)操作系统中并没有把所有功能都写入linux中,而将常用的功能写成一个个程序库,此些库保存在lib

中,当需要时调用即可。避免全部写入linux中,使其无比庞大且运行缓慢。

8、/mnt 系统挂载U盘、移动硬盘目录
* 老师习惯于在mnt下创建CD-ROM来挂载光盘,在mnt下创建USB来挂载U盘。原因在于老师的linux中不存在media、misc目录。

9、/media 挂载光盘目录

10、/misc 外接磁带机挂载目录

11、/root 超级用户的家目录

12、/tmp 临时目录
12-1)可存放临时数据

13、/sbin 命令保存目录(超级用户才能使用的目录)

14、/proc 直接写入内存的
14-1)该目录同sys目录不能直接操作,这两个目录保存的是内存的挂载点。其中的数据直接写在内存中。避免数据丢失或由于内存溢出导致系统崩溃。

15、/sys 

16、/usr 系统软件资源目录
16-1)/usr/bin/ 系统命令(普通用户)
16-2)/usr/sbin/ 系统命令(超级用户)

17、/var 系统相关文档内容

链接命令

1、ln -s [原文件] [目标文件] (link)
1-1)功能描述:生成链接文件
1-2)选项 -s 创建软链接
1-3)硬链接特征
1-3-1)拥有相同的i节点和存储block块,可以看做是同一个文件。(在格式化时,第一将分区划分为等大小的block数据块,该数据块通常为4KB。第二建立分区表,并为每个文件建立一个相关数据。当用户搜索某个文件时,会先到分区表中查找文件所对应的block存储位置,接着到相应位置取出,并返回给用户。)硬链接与原文件拥有相同的i节点。因此,与原文件非常相似。当删除原文件或硬链接文件的任何一文件,不影响文件索引操作。可看做,同一个文件的不通进入点。它是同样的存储空间。
1-3-2)可通过i节点识别
1-3-3)不能跨分区建立
1-3-4)不能针对目录使用,只有文件才可以创建
1-3-5)ln ./source/abc ./target/bcd.hard 创建后,引用计数+1
1-3-6)ls -i ./source/abc ./target/bcd.hard 可使用ls -i 来查看文件i节点号 
1-3-7)不建议创建硬链接文件
1-3-7-1)文件太过隐蔽,除了有i节点这样一个标识之外,很难区分它是不是硬链接
1-3-7-2)硬链接限制较多,不能跨分区,不能针对目录,使用当中容易出现错误使用方法
1-4)软链接特征
1-4-1)类似于Windows快捷方式
1-4-2)软链接拥有自己的i节点和block块,但是数据块中只保存原文件的文件名和i节点号,并没有实际的文件数据。(拥有自己的分区表中索引数据,通过索引找到分区表中文件的目标索引数据,再通过目标索引数据,查找数据)
1-4-3)lrwxrwxrwx l软链接, 软链接文件权限都为rwxrwxrwx, 虽然权限显示为777,但实际权限需要看原文件权限。
1-4-4)修改任意文件,另一个都改变
1-4-5)删除原文件,软链接不能使用
1-4-6)创建软链接,原文件一定要写绝对路径。否则,软链接会到它所在的同一目录去找原文件

文件搜索命令locate只能搜文件

当服务器中文件众多时,便于搜索。
1、locate (支持模糊查询
1-1)搜索速度快
2、whereis与which(搜索系统命令)
3、find(想进行模糊查询需要配置通配符)

格式:find 【搜索范围】【搜索条件】;

例:find /home -name 文件名;

注意:find搜索默认是完全匹配

“*”匹配任意字符

“?”匹配任意一个字符,

“[ ]”匹配任意一个中括号内的字符,例:find /home -name “test【12】”,显示test1和test2文件;或find /home -name “[12]*”,显示以1和2开头的文件。

 


3-1)遍历每一个文件进行搜索
4、grep 字符串搜索命令
5、find 命令与grep 命令的区别

 

文件搜索命令 locate 

1、locate 文件名
1-1)在后台数据库中按文件名搜索,搜索速度更快
1-2)对于新建的文件,由于数据库没有更新,使用locate 不能查到。可以使用 updatedb强制更新数据库后即可查到。
1-3)可使用 locate locate 搜索locate相关文件,可看到locate数据库。 
1-4)在不同linux中,该数据库名字稍微不同,例如,locatedb、slocate、mlocate。

2、/var/lib/mlocate (保存的搜索数据库)
2-1)#locate 命令所搜索的后台数据库
2-2)数据库不是实时的,更新频率大概一天更新一次

3、updatedb
3-1)更新数据库

4、缺点:只能按照文件名进行搜索,但常用。

5、配置文件
5-1)touch /root/cangls
touch /tmp/cangls
updatedb
locate cangls
显示为 /root/cangls 只有一条,而/tmp下的cangls没有显示出来,原因在于locate搜索遵循配置文件 /etc/updatedb.conf, PRUNEPATHS 中配置了/tmp/目录不进行搜索。所以没有进行查找。
5-2)/etc/updatedb.conf 配置文件
5-2-1)PRUNE_BIND_MOUNTS = "yes"
#开启搜索限制,yes为后面三项都生效。no为 后面三项都不生效
5-2-2)PRUNEFS = 
#搜索时,不搜索的文件系统
5-2-3)PRUNENAMES =
#搜索时,不搜索的文件类型
5-2-4)PRUNEPATHS =
#搜索时,不搜索的路径

 

搜索命令的命令whereis

1、whereis 命令名
#搜索命令所在路径及帮助文档所在位置
1-1)只能搜索命令,而不能搜索凭空创建的文件
1-2)whereis ls 查找ls所在的位置,及帮助文档所在位置
1-3)选项 -b :之查找可执行文件
1-4)选项 -m :之查找帮助文件
1-5)不是所有的命令都能找到:whereis cd


2、which 文件名
#搜索命令所在路径及别名
1-1)which ls 出了显示所在位置之外还有对应的别名
alias ls='ls --color=auto'
/bin/ls
当查看 ls 看到文件为黑色、ls / 文件夹为蓝色、 ls /bin/ 可执行文件为绿色字体,是由于调用了 --color=auto
1-2)不是所有命令都有别名:which pwd → /bin/pwd

3、cd 命令不能通过whereis、which找到,它是linux的shell的内置命令,所以不需要有独立的文件。shell可理解为linux与用户交互的东西。

4、PATH环境变量
#定义的是系统搜索命令的路径
4-1)在linux中,想要执行脚本或命令,就需要绝对路径:/bin/ls ,因此而不方便,因此系统提供一个$PATH环境变量(环境变量:定义用户操作环境的变量)。echo $PATH,可查看到用:分隔的路径,指的是,当执行某个命令,会在$PATH指定的路径中搜索,在这些路径当中某一个目录下是否有这个脚本或执行文件。因此执行自己写的脚本或程序,需使用绝对路径,否则,需要将程序路径放入环境变量的所搜索的路径当中。
4-2)[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

5、其他:
5-1)想要知道我在哪:whereis
5-2)想要知道我是谁:whoami
5-3)想要知道这条命令是干什么:whatis

find 命令(一)

1、find [搜索范围] [搜索条件]
#搜索文件
1-1)find / -name install.log: 搜索整个根, 按照文件名叫"install.log"的文件
#避免大范围搜索, 会非常耗费系统资源
#服务器正常使用时, 应避免此类耗费系统操作, 例大数据量的复制、压缩
1-2)find 是在系统当中搜索完全符合条件文件名的文件, 若需模糊查询, 使用通配符进行匹配, 且完全匹配 find /root -name “install.log*”
1-3)find /root -iname install.log
#不区分大小写
1-4)find /root -user root
#按照所有者搜索


1-5)find /root -nouser
#搜索指定目录中没有所有者的文件
1-5-1)对于没有所有者的文件, linux视为垃圾文件, 应手动清除,
1-5-2)两种情况, 不应删除
1-5-2-1)内核产生的文件有可能没有所有者, 例如 proc和 sys 目录, 内核有可能在这两个目录下进行交互, 因而产生的无所有者的文件属于正常, 不应手动删除
1-5-2-2)由windows建立的文件, 通过U盘等设备放置linux中, 该文件没有所有者, 因为windows忽略所有者这个概念


1-6)find /var/log/ -mtime +10
#查找10天前修改的文件
1-6-1) 时间标注方式, 默认单位为天
1-6-1-1) -10 10天内修改文件
1-6-1-2) 10 10天当天修改的文件
1-6-1-3)+10 10天前修改的文件
1-6-2) 时间其他参数

1-6-2-1)atime 文件访问的时间
1-6-2-2)ctime 改变文件属性的时间
1-6-2-3)mtime 修改文件内容的时间

 

1-7)find . -size 25k
#查找当前目录中文件大小为25KB的文件
1-7-1)大小标注方式, 默认单位为数据块(以扇区做的数据块512字节, 非分区时的4KB)
1-7-1-1) -25k 小于25KB的文件
1-7-1-2) 25k 等于25KB的文件
1-7-1-3) +25k 大于25KB的文件
1-7-2) 搜索 千字节需用小写k, 兆字节需用大写M, 否则将不被识别


1-8) find . -inum 262422
#查找当前目录中i节点是25422的文件


1-9) find /etc -size +20k -a -size -50k
#查找/etc 目录下, 大于20KB并且 小于50KB的文件
1-9-1) -a and 逻辑与, 两个条件都满足
1-9-2) -o or 逻辑或, 两个条件满足一个即可


1-10) find /etc -size +20k -a -size -50k -exec ls -lh {} \;
#查找/etc/ 目录下, 大于20KB并且小于50KB的文件, 并显示详细信息
#不是所有命令都可以用命令2执行, 必须是能够处理命令1结果的命令才可以处理
#标准格式 : -exec / -ok 命令 {} \; 对搜索结果执行操作

1-11) find . inum 262422 -exec rm -rf {} \;

find 命令(三)

 

2、linux 中的通配符
2-1) * : 匹配任意内容
# find /root -name "install.log*" : 需注意加双引号, 否则通配符有可能不被识别
# find /root -name "*" : 列出指定目录下所有文件, 包括隐藏文件
2-2) ? : 匹配任意一个字符
# find /root -name "ab?" : 查找root下以ab开头后接任意一个字符的文件
2-3) [] : 匹配任意一个中括号内的字符
# find /root -name "ab[cd]" : 查找root下文件名为ab后接c或者ab后接d的文件
# find /root -name "[cd]" : 查找root下文件名为c或者为d的文件
# find /root -name "*[cd]" : 查找root下任意以c或d为结尾的文件

3、扇区
#将硬盘以圆心及基点划分为多个等大小的扇形区域, 并以圆心为圆心划分多个同心圆, 这些扇形区域与同心圆的交叉区域即为扇区, 每个扇区大小默认为512字节

grep命令在文件中查找对应字符串

1、grep [选项] 字符串 文件名
# grep "size" anaconda-ks.cfg
#在文件当中匹配符合条件的字符串
1-1) -i 忽略大小写
1-2) -v 排除指定字符串(取反)

2、find 命令与 grep命令的区别
1-2) find 命令 : 在系统当中搜索符合条件的文件名, 如果需要匹配, 使用通配符匹配, 通配符是完全匹配#搜索完全一样的匹配

1-2) grep 命令 : 在文件当中搜索符合条件的字符串, 如果需要匹配, 使用正则表达式进行匹配, 正则表达式包含匹配#搜索包含字符串的一句话

帮助命令

1、帮助命令 man
1-1) man 命令
#获取指定命令的帮助, manual 的缩写
1-1-1) man ls : 查看ls的帮助
1-2) 操作
1-2-1) n : 向下翻页
1-2-2) N (shift + n) : 向上翻页
1-2-3) q : 退出
1-3) man 的级别 (存在于左上角的数字)
1-3-1) 1 : 查看命令的帮助
1-3-2) 2 : 查看可被内核调用的函数帮助
1-3-3) 3 : 查看函数和函数库的帮助
1-3-4) 4 : 查看特殊文件的帮助(主要是 /dev 目录下的文件)
1-3-5) 5 : 查看配置文件的帮助
1-3-6) 6 : 查看游戏的帮助
1-3-7) 7 : 查看其它杂项的帮助
1-3-8) 8 : 查看系统管理员可用命令的帮助
1-3-9) 9 : 查看和内核相关文件的帮助
1-4) man -f 命令 : 显示该命令有哪些帮助级别
#相当于 whatis 命令
1-4-1) man -f passwd : 查看passwd命令级别

1-4-2) man 1 passwd : 查看passwd 级别为 1 的帮助文档
1-4-3) man 5 passwd : 查看passwd 级别为 5 的帮助文档
1-4-4) man 4 null
1-4-5) man 8 ifconfig
1-5) man -k 命令 : 查看和命令相关的所有帮助, 包括关键字的帮助, 当忘记命令具体名称时, 可用
#相当于 apropos 命令
1-5-1) man -k passwd
1-5-2) apropos passwd

其他帮助命令

1、选项帮助
1-1) 命令 --help : 获取命令选项的帮助
#例 ls --help
1-2) help shell 内部命令
#获取shell内部命令的帮助
#例 whereis cd : 确定是否是shell内部命令
#例 help cd : 获取内部命令帮助

2、shell : linux 中起命令解释器作用
#用户与计算机交互的接口
#内核在最中间, 外层包裹这的壳就是shell
#将用户的字符命令翻译成机器语言传递给内核

3、linux中有些命令是shell自带, 有些命令是被人写好之后装入的(例 ls)
3-1) 可根据 whereis ls 查看命令所在位置, 即可判断该命令是否为自带的
3-1-1) 若找到可执行文件目录, 则是被人写好装入的 (/bin/ls)
3-1-2) 若找不到可执行文件目录, 而只有帮助文档, 则是自带的 (cd)

4、查看内部命令帮助文档, 用 help 命令 
4-1) man cd : 打开linux, bush文档, 且cd存在于其中, 而非直观的专属帮助文档
4-2) help cd : 打开专属的cd 帮助文档
4-3) help 命令, 只可查看内部命令, 对外部命令无效

5、详细命令帮助info, 非常详细
5-1) info命令
5-1-1) 回车 : 进入子帮助页面(带有*号标记)
5-1-2) u : 进入上层页面
5-1-3) n : 进入下一个帮助小节
5-1-4) p : 进入上一个帮助小节
5-1-5) q : 退出

6、总结
# 可使用 man、 ls --help 查看帮助, 也可用help cd 查看内部命令 , 以及使用info查看非常详细的文档

压缩命令1

1、windows 压缩文件格式
# .zip .rar .7z 其中 .rar 比 .zip 压缩比更先进, 压缩速度更快

2、linux 中常见压缩格式
# .zip .gz .bz2
# .tar.gz .tar.bz2

3、.zip : 该格式在windows与 linux中通用, 可互相操作 
#原则上 压缩文件名无需加扩展名, 为便于而后的维护, 需要加
#压缩文件后的文件未必比源文件要小, 由于压缩时需遵循一定的压缩比格式, 导致文件有可能比源文件大
3-1) zip 压缩文件名 源文件
#压缩文件
3-2) zip -r 压缩文件名 源目录
#压缩目录
3-3) unzip 压缩文件
#解压缩 .zip 文件
# unzip cangls.zip -d ./japan/ : 解压cangls至当前目录的japan中

4、 .gz : 该格式是linux 专有的压缩格式, 但是在windows中可以实现解压缩操作
4-1) gzip 源文件
#压缩为 .gz 格式的压缩文件, 源文件会消失
4-2) gzip -c 源文件 > 压缩文件 : -c 将压缩文件打印到屏幕且不影响源文件, 事实是将源文件进行压缩且打印后写入longzls.gz中
#压缩为 .gz 格式, 源文件保留
# gzip -c longzls > longzls.gz
4-3) gzip -r 目录
#压缩目录下所有的子文件, 但是不能压缩目录
4-4) gzip -d 压缩文件

#解压缩文件
4-5) gunzip 压缩文件
#解压缩文件

5、 > : 把命令的结果写入指定文件
# ls > abc : 将ls执行结果写入abc中, cat abc 可查看

6、 bzip2
6-1) bzip2 源文件
#压缩为 .bz2格式, 不保留源文件
6-2) bzip2 -k 源文件
#压缩之后保留源文件
6-3) 注 : bzip2 命令不能压缩目录
6-4) bzip2 -d 压缩文件
#解压缩, -k 保留压缩文件
6-5) bunzip2 压缩文件
#解压缩, -k 保留压缩文件

压缩命令2

1、.tar.gz .tar.bz2
# .tar : 打包命令, 把目录变成一个叫做 .tar 的一个单一文件包
# 再进而压缩成 .gz .bz2 格式, 以解决不能将目录压缩的问题

2、打包命令 tar
2-1) tar -cvf 打包文件名 源文件
2-1-1) -c : 打包
2-1-2) -v : 显示过程
2-1-3) -f : 指定打包后的文件名
# tar -cvf longzls.tar longzls
2-1-4) -x : 解打包
# tar -xvf longzls.tar
2-1-5) -t : 查看压缩包内容, 但是不解压

3、其实 .tar.gz 格式是先打包为 .tar格式, 再压缩为 .gz 格式

4、 打包压缩命令
4-1) tar -z[cx]vf 压缩包名.tar.gz 源文件
4-1-1) -z : 压缩为 .tar.gz 格式
4-1-2) -x : 解压缩 .tar.gz 格式
4-2) tar -j[cx]vf 压缩包名.tar.bz2 源文件
4-2-1) -j : 压缩为 .tar.bz2 格式
4-2-2) -x : 解压缩 .tar.bz2 格式
*tar -jtvf test.tar.gz(看一下压缩包里的文件,-t=test)
5、 压缩至指定目录中
# tar -zcvf /test/test.tar.gz jp anaconda-ks.cfg

6、 解打包压缩至指定目录
6-1) -C : 使用大写C, 至指定目录中
# tar -zxcf jp.tar.gz -C /tmp/


7、 同时压缩多个文件
7-1) 将源文件以空格连接逐一写在最后
# tar -zcvf test.tar.gz jp anaconda-ks.cfg

关机和重启命令

1、 shutdown 命令
1-1) [root@loacalhost ~]# shutdown [选项] 时间
1-1-1) -c : 取消前一个关机命令
1-1-2) -h : 关机
1-1-3) -r : 重启
1-1-4) 时间 : 可以是 now, 立即关机 ; 可以是小时, 定时关机
# shutdown -r 05:30 凌晨五点三十进行重启, 执行后机器将卡死在当前操作, 用ctrl+C中止退出, 使用后台符 &, 代表把当前命令放入后台执行, 不占用当前操作终端
# 注 : 实际使用中应避免远程关机, 由于服务器放在远程机房
# 其他的一些关机和重启方法都认为不够安全, 在关机重启时不会正确保存当前系统中正在运行的服务, 只有shutdown会正确保存正在运行的服务

2、 其他关机命令 (不够安全)
2-1) [root@localhost ~]# halt
2-2) [root@localhost ~]# poweroff
2-3) [root@localhost ~]# init 0

3、 其他重启命令 
3-1) [root@localhost ~]# reboot (相对安全)
3-2) [root@localhost ~]# init 6 (不够安全)

 

4、 系统运行级别 (init 级别, 调用级别)
4-1) 0 : 关机
4-2) 1 : 单用户 (类似windows安全模式, 可进入做系统修复)
4-3) 2 : 不完全多用户, 不含NFS服务 ( NFS 为文件共享服务)
4-4) 3 : 完全多用户 (正常的字符界面)
4-5) 4 : 未分配
4-6) 5 : 图形界面
4-7) 6 : 重启
4-8) [root@localhost ~]# cat /etc/inittab
#修改系统默认运行级别
id:3:initdefault: 代表开机进入3级别字符界面
4-9) [root@localhost ~]# runlevel
#查询系统运行级别
N 3 5 : 从开始NULL 进入 3级别字符界面, 再进入 5级别图形界面

5、 在linux中 大写 X , 大都指代图形界面

6、 退出登录命令
6-1) [root@localhost ~]# logout

7、 linux允许同时登录256个远程登录, 使用远程工具登录后若不退出而直接关闭工具, 导致远程并未断开而卡在当前, 当达到最大值时, 将无法连接, 只能重启服务器

挂载命令

1、在linux中, 所有的存储设备(U盘、光盘、硬盘等), 都必须挂载相当于win下的分配盘符之后, 才可正常使用.
2、挂载可理解为windows中的分配盘符, linux中使用系统目录作为盘符
3、硬盘和分区都为自动挂载, 而U盘、光盘等需要人为进行挂载

4、 查询与自动挂载
4-1) [root@localhost ~]# mount
#查询系统中已经挂载的设备
# /dev/sda5 on / type ext4 (rw) : sd代表硬盘接口类型, a 代表第一块硬盘, 5 代表第一个逻辑分区, on 挂载, / 根分区, 类型为 ext4, rw代表读写权限
# proc sysfs 是linux内核在内存中进行操作交互的, 自动挂载
4-2) [root@localhost ~]# mount -a
#依据配置文件/etc/fstab的内容, 全部自动挂载

5、不能将光盘、U盘等通过配置文件/etc/fstab做成自动挂载, 否则当linux启动后找不到相应设备时, 直接导致系统无法启动

 

6、挂载命令格式
6-1) [root@localhost ~]# mount [-t 文件系统] [-o 特殊选项] 设备文件名 挂载点
6-1-1) -t : 文件系统, 就是格式化的过程, 格式化就是为了写入文件系统, 加入文件系统类型来指定挂载的类型 , 可以ext3、ext4、iso9660(光盘)等文件系统
6-1-2) -o : 特殊选项, 可以指定挂载的额外选项(如图)
6-2) [root@localhost ~]# mount -o remount,noexec /dev/sda2 /home(由于已经挂载好, 可直接写/home, 省略/dev/sda2)
#重新挂载/home 分区, 并使用noexec权限
6-2-1) [root@localhost ~]# cd /home
6-2-2) [root@localhost ~]# vi hello.sh
6-2-3) [root@localhost ~]# chmod 755 hello.sh
6-2-4) [root@localhost ~]# ./hello.sh
6-2-5) [root@localhost ~]# mount -o remount,exec /dev/sda2 /home(由于已经挂载好, 可直接写/home, 省略/dev/sda2)
#记得修改回来, 否则会影响系统启动使用

 

7、挂载光盘
7-1) [root@localhost ~]# mkdir /mnt/cdrom/
#建立挂载点 : 盘符, 任意一个空目录都可作为挂载点
7-2) [root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom
#挂载光盘 : /dev/cdrom 软链接于 /dev/sr0, 建议使用sr0, 原因在于, 软链接在系统完全启动后才生效, 但是系统出现问题导致未完全启动时, 该链接会失效
7-3) [root@localhost ~]# mount /dev/sr0 /mnt/cdrom
#同上, 建议使用, 由于系统中默认光盘类型为iso9660, 所以可以省略type
7-4) cd /mnt/cdrom 进入目录查看光盘内容

8、卸载命令(必须卸载)
8-1) [root@localhost ~]# umount 设备文件名或挂载点
8-2) [root@localhost ~]# umount /mnt/cdrom

9、挂载U盘
9-1) [root@localhost ~]# fdisk -l
#查看U盘设备文件名
9-2) [root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
#注 : linux默认是不支持NTFS文件系统的, windows与linux安装区别, windows安装后没有任何驱动, linux则安装后将所有认识的驱动放入内核中, 且挂载比较常见的, 因此NTFS驱动未被挂载

, 如需使之支持, 第一可编写内核, 第二可搜"ntfs-3g"下载并安装即可, 但是权限为只读, 而不能写入数据
#vfat : 指的是windows中的fat32
#linux中使用U盘挂载传输数据较不常用, NTFS更为不常用, 常用的是使用网络传输

用户登录查看命令

1、查看登录用户信息
1-1) w 用户名(可不加用户名)
# 命令输出 : 当前系统时间, 系统到现在运行了时长, 当前系统中共登录了几个用户, 系统在1分钟, 5分钟, 15分钟之前的平均负载(CPU和内存的负载压力)
# USER: 登录的用户名;
# TTY : 登录终端, tty1代表本机, pts/0代表第一个远程终端
# FROM : 从哪个IP地址登录
# LOGIN@ : 登录时间
# IDLE : 用户限制时间
# JCPU : 指的是和该终端连接的所有进程占用的时间, 这个时间里并不包括过去的后台作业时间, 但却包括当前正在运行的后台作业所占用的时间(所有进程占用CPU时间)
# PCPU : 是指当前进程所占用CPU的时间
# WHAT : 当前正在运行的命令
1-2) who 用户名(可不加用户名) : 查看当前有哪些用户
# 命令输出
# 用户名
# 登录终端
# 登录时间(登录来源IP地址)
1-3) last : 查询当前登录过去登录的用户信息
# last 命令默认是读取/var/log/wtmp 文件数据
# 命令输出
# 用户名
# 登录终端
# 登录IP 
# 登录时间
# 退出时间(在线时间)
1-4) lastlog : 查看所有用户的最后一次登录时间 
# lastlog 命令默认是读取 /var/log/lastlog 文件内容
# 命令输出
# 用户名
# 登录终端
# 登录IP 
# 最后一次登录时间

Shell基础

1、Shell是什么
1-1) Shell是一个命令行解释器, 它为用户提供一个向linux内核发送请求以便运行程序的界面系统级程序, 用户可以用Shell来启动、挂起、停止甚至是编写一些程序
1-2) Shell还是一个功能相当强大的变成语言, 易编写, 易调试, 灵活性较强, Shell是解释执行的脚本语言, 在Shell中可以直接调用linux系统命令
1-3) Shell作用
1-3-1) 接受用户命令
1-3-2) 将用户命令通过ASCII码翻译为二进制 传递给内核
1-3-3) 由内核调用计算机硬件来处理
1-3-4) 接受内核处理结果
1-3-5) 将结果通过ASCII码翻译给用户

2、 Shell的分类
2-1) Bourne Shell : 从1979起Unix就开始使用Bourne Shell, Bourne Shell的主文件名为 sh (基本淘汰, 不支持历史命令, 上下翻历史命令)
2-2) C Shell : C Shell 主要在BSD版的Unix系统中使用, 其语法和C语法相类似而得名
2-3) Shell 的两种主要语法类型有Bourne和C, 这两种语法彼此不兼容, Bourne家族主要包括sh、ksh、Bash(当前linux的标准shell)、psh、zsh, C 家族(主要给unix使用)主要包括csh、tcsh

3、 查看当前使用的Shell
# echo $SHELL : echo 打印, $ 调用变量, SHELL 变量名

4 、查看兼容的Shell
# cat /etc/shells
# /bin/sh : linux中比较特殊的模式中, 例如单用户模式、系统的光盘修复模式中, 使用的是sh

5、父shell与子shell
# 当系统启动且进入时的shell为父shell, 在当前shell调用其他shell时, 新出现的shell为子shell, 可存在多级子shell, 调用exit退出当前子shell

 

 

脚本执行方式

1、echo 输出命令
1-1) echo [选项] [输出内容]
# -e : 支持反斜线控制的字符转换(具体控制字符如图)
# 删除左侧字符, echo - e "hell\bo" : helo
# 制表符与换行符, echo -e "h\te\tl\nl\to" : h e l 换行 l o
# 按照十六进制ASCII码输出, echo -e "\x68\t\x65\t\x6c\t\x6f\t" : h e l l o
# echo -e "\e[1;31m 嫁人就要嫁凤姐 \e[0m" : \e 表示调用颜色, [1; 表示开启颜色, [0M 表示关闭颜色
# 输出颜色 : 30m=黑色, 31m=红色, 32m=绿色, 33m=黄色, 34m=蓝色, 35m=洋红, 36m=青色, 37m=白色

2、 第一个脚本
2-1) vi hello.sh
#!/bin/bash
#The first program

echo -e "\e[1;34m 天上掉下个林妹妹 \e[0m"

3、脚本执行
3-1) 赋予执行权限, 直接运行
# chmod 755 hello.sh
# ./hello.sh
3-2) 通过Bash调用执行脚本
# bash hello.sh

 

命令别名与快捷键

1、命令别名=人的小名
1-1) alias 
# 查看系统中所有命令的别名
1-1-1) alias cp = 'cp -i'
1-1-2) alias l. = 'ls -d .* --color=auto'
1-1-3) alias ll = 'ls -l --color=auto'
1-1-4) alias ls = 'ls --color=auto'
1-1-5) alias mv = 'mv -i'
1-1-6) alias rm = 'rm -i'
1-1-7) alias which = 'alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
1-2) alias 别名='原命令'
# 设定命令别名
1-2-1) 该方法设置别名后为临时生效, 注销重登陆之后该别名将丧失功能

2、别名永久生效与删除别名
2-1) vi ~/.bashrc
# 写入环境变量配置文件
2-1-1) 重新登录后生效
2-1-2) source .bashrc : 调用文件内容, 直接生效
2-2) unalias 别名
# 删除别名
2-2-1) 临时删除, 若命令写入配置文件中, 则下次登录仍然生效, 故需要同时删掉配置文件中信息

3、命令生效顺序
3-1) 第一顺位执行用绝对或相对路径执行的命令
3-2) 第二顺位执行别名
3-3) 第三顺位执行Bash的内部命令
3-4) 第四顺位执行按照$PATH 环境变量定义的目录查找顺序找到的第一命令
4、常用快捷键如图

历史命令

1、历史命令指的是把操作过的命令保留在系统当中, 当需要的时候可以重新进行调用
1-1) history [选项] [历史命令保存文件]
# 直接cat ~./history时, 该文件下记录的命令是上次登录, 正确注销之后保存的
# 使用history 命令查看的, 不止有之前保存下来的, 还有本次登录后新操作的命令, 这些命令只有本次正确退出之后才会写入 ~./bash_history
1-1-1) -c : 清空历史命令
# 不建议清空原因1 : 当本次操作出现错误可用过历史命令进行比对排错
# 不建议清空原因2 : 当登录后发现历史命令被清空, 则可判断出有人登录过该账户或服务器
# 不建议清空原因3 : 即使命令保存数目众多, 文件大小也不大, 不会给服务器造成多大压力
1-1-2) -w : 把缓存中的历史命令强制写入历史命令保存文件 ~/.bash_history

2、历史命令默认保存1000条, 可以再环境变量配置文件 /etc/profile 中进行修改 (HISTSIZE)

3、历史命令的调用
3-1) 使用上、下箭头调用以前的历史命令
3-2) 使用 "!n" 重复执行一次第 n 条历史命令

3-3) 使用 "!!" 重复执行一次上一条命令
3-4) 使用 "!字串" 重复执行一次最后一条以该字串开头的命令
# service network restart

---> !ser

4、命令与文本补全
4-1) 在Bash中, 命令与文件补全是非常方便与常用的功能, 我们只要在输入命令或文件时, 按"Tab"键就会自动进行补全
4-2) 系统进行命令补全是依赖 : $PATH

 

 

输出重定向

1、输入与输出
1-1) 输入 : 把数据写入电脑中
1-2) 输出 : 将处理结果显示出来

2、标准输入输出设备
# 设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

3、输出重定向
# 正常输出是将结果输出到显示器中, 重定向是将输出方向做以改变, 不再输出到到显示器中, 而一般输出到文件中
3-1) 标准输出重定向
# 只能保存命令的正确输出, 当命令错误时, 会报错, 不被输出
3-1-1) 命令 > 文件 
# 以覆盖的方式, 把命令的正确输出输出到指定的文件或设备当中
3-1-2) 命令 >> 文件
# 以追加的方式, 把命令的正确输出输出到指定的文件或设备当中
3-2) 标准错误输出重定向
3-2-1) 错误命令 2>文件
# 以覆盖的方式, 把命令的错误输出输出到指定的文件或设备当中
3-2-2) 错误命令 2>>文件
# 以追加的方式, 把命令的错误输出输出到指定的文件或设备当中
3-3) 正确输出和错误输出同时保存
3-3-1) 命令 > 文件 2>&1
# 以覆盖的方式, 把正确输出和错误输出都保存到同一文件当中
3-3-2) 命令 >> 文件 2>&1
# 以追加的方式, 把正确输出和错误输出到保存到同一文件当中
3-3-3) 命令 &>文件
# 以覆盖的方式, 把正确输出和错误输出都保存到同一文件当中
3-3-4) 命令 &>>文件
# 以追加的方式, 把正确输出和错误输出都保存到同一文件当中
3-3-5) 命令 >> 文件1 2>>文件2
# 把正确的输出追加到文件1中, 把错误的输出追加到文件2中

 

4、丢掉黑洞
# ls &> /dev/null

5、输入重定向
5-1) wc [选项] [文件名]
# wc 回车之后, 输入完毕, ctrl + D
5-1-1) -c : 统计字节数
5-1-2) -w : 统计单词数
5-1-3) -l : 统计行数
5-2) 命令 < 文件把文件作为命令的输入

5-3) 命令 << 标识符
# wc << ddy : 在输入中遇到ddy 停止开始统计
# 标识符标识符之间内容作为命令的输入

管道符

1、多命令顺序执行
1-1) ;
1-1-1) 命令1 ; 命令2 
# 多命令顺序执行, 命令之间没有任何逻辑联系, 其中命令出错, 后面仍会执行
1-2) &&
1-2-1) 命令1 && 命令2
# 逻辑与, 当命令1正确执行, 则命令2才会执行; 当命令1执行不正确, 则命令2不会执行
1-3) ||
1-3-1) 命令1 || 命令2
# 逻辑或, 当命令1执行不正确, 则命令2才会执行; 当命令1正确执行, 则命令2不会执行

2、 命令 && echo yes || echo no
# 判断命令是否正确执行, 正确输出 yes, 否则输出no

3、 管道符
3-1) 命令1 | 命令2
# 命令1的正确输出作为命令2的操作对象 : ls -l /etc/ | more, 命令2一定要可以操作命令1的结果才可以, 此处使用echo就会报错

4、more 命令
# 查看并分屏显示文件内容, 不可查看命令的分屏结果
# 可先将查询结果写入文件, 再分屏查看文件内容
# 亦可用管道符分屏查看结果 : ls -l /etc | more

5、 netstat -an 查看系统中所有的网络连接
# netstat -an | grep "ESTABLISHED" : 在命令行中, 查询包含ESTABLISHED的行
# netstat -an | grep "ESTABLISHED" | wc -l : 可查看服务器中连接了多少人

 

通配符

1、通配符 : 可以匹配其他内容的符号
1-1) ? : 匹配一个任意字符
1-2) * : 匹配0个或任意多个任意字符, 也就是可以匹配任何内容
1-3) [] : 匹配中括号中任意一个字符, 例如, [abc] 代表一定匹配一个字符, 或者是a, 或者是b, 或者是c
1-4) [-] : 匹配中括号中任意一个字符, - 代表一个范围, 例如 [a-z]代表匹配一个小写字母
1-5) [^] : 逻辑非, 表示匹配不是中括号内的一个字符, 例如, [^0-9] 代表匹配一个不是数字的字符

2、 Bash中其他特殊符号
2-1) '' : 单引号, 在单引号中所有的特殊符号, 如"$" 和"`" 都没有特殊含义
# '$a' → $a
2-2) "" : 双引号, 在双引号中特殊符号都没有特殊含义, 但是 "$"、"'" 和 "\" 是例外, 拥有"调用变量的值", "引用命令"和"转义符"的特殊含义
# "#a" → 值
2-3) `` : 反引号, 反引号括起来的内容是系统命令, 在Bash中会先执行它, 和 $()作用一样, 不过推荐使用 $(), 因为反引号非常容易看错
# ① a = `ls` ② echo $a 先调用ls, 再将结果赋给变量a
2-4) $() : 和反引号作用一样, 用来引用系统命令
# ① a = $(ls) ② echo $a 先调用ls, 再将结果赋给变量a
2-5) # : 在shell脚本中, # 开头的行代表注释
2-6) $ : 用于调用变量的值, 如需调用变量name的值时, 需要用$name 的方式得到变量的值
# ① a = 123 ② echo $a
2-7) \ : 转义符, 跟在 \ 之后的特殊符号将失去特殊含义, 变为普通字符, 如 \$ 将输出 "$" 符号, 而不是当做变量引用
# \$bb → $bb

posted @ 2017-04-20 21:43  _AlbertWang  阅读(389)  评论(0编辑  收藏  举报