zoukankan      html  css  js  c++  java
  • 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 "hello" : helo
    # 制表符与换行符, echo -e "h e l l o" : h e l 换行 l o
    # 按照十六进制ASCII码输出, echo -e "x68 x65 x6c x6f " : 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

  • 相关阅读:
    UVa 11181
    UVa 10491
    UVa 1636
    UVa 1262
    UVa 10820
    UVa 1635
    UVa 12716
    [2019杭电多校第六场][hdu6635]Nonsense Time
    [2019杭电多校第五场][hdu6630]permutation 2
    [2019杭电多校第五场][hdu6629]string matching(扩展kmp)
  • 原文地址:https://www.cnblogs.com/wyb628/p/6740987.html
Copyright © 2011-2022 走看看