linux实用基础

来源:互联网 发布:centos命令'exit' 编辑:程序博客网 时间:2024/06/01 19:34

linux主要的应用领域:

1、基于Linux的企业服务器
2、嵌入式应用

linux与windows的不同(主要的几点):

1、linux严格区分大小写.
2、linux中所有内容以文件形式保存,包括硬件.
3、linux不靠扩展名区分文件类型.
     约定俗成:(linux不靠扩展名区分文件,而是靠权限)
     压缩包: *.gz  *.bz2  *.tar.bz2  *.tgz
     二进制软件包: .rmp
     网页文件: *.html  *.php
     脚本文件: *.sh
     配置文件: *.conf  

字符界面:(安全稳定)
占用的系统资源少

[root@localhost ~]# 
root:当前登录的用户(默认为root,管理员)
localhost:主机名
~ 波浪线:代表所在位置(默认为~,家目录)
#:超级用户提示符
$: 普通用户提示符

超级用户的家目录 :/root
普通用户的家目录 :/home/xxx
pwd:显示当前所在路径

硬件文件目录 /dev

用户,用户组:一个人,一类人
用户组:为了分配权限

-rw-r--r--. 1 root root 50606 Aug  5 17:47 install.log
第一个root :所有者
第二个root : 所属组 
1 : 引用的次数
文件i节点,id号
ls -i 查看文件的id号

快捷键:

     ctrl+l清屏
     tab 命令、文件目录的补全
     date 当前系统时间
     ls -l = ll
     fdisk -l 识别系统中存在的硬盘
     ctrl+c 终止执行当前命令
     ctrl+u 从光标所在位置删除到行首
     ctrl+a 光标快速跳到行首
     ctrl+e 光标快速跳到行尾
     ctrl+z 把命令放入后台
     ctrl+r 搜索历史命令

一、目录处理命令

    mkdir bols
    mkdir -p japan/bols  (递归创建)

    cd 切换目录
    cd - 进入上次所在目录

    相对路径,绝对路径
    cd ../usr/local/src/ 从当前目录上一级目录开始找
    cd /etc/ 绝对路径
    pwd 打印当前所在路径

    rm -rf 删除目录 (强制删除,无保留)
    rm -rf /tmp/*  删除tmp目录下的所有文件

    cp -r japan/ /tmp/ 拷贝目录
    cp -a japan/ /tmp/ 目标文件和原文件属性一模一样

    mv japan/ /tmp/ 剪切文件和目录(不需要-r)
    mv ana zy 将ana文件重命名为zy

    常见目录的作用:
    1>下面两个目录都是用来保存系统命令的(usr目录下也有)
         bin  :所有用户都可以执行的命令
         sbin :只有root用户可以执行的命令

    2>boot:系统的启动数据存放目录

    3>etc:配置文件存放目录

    4>home:普通用户家目录
         root:超级用户家目录

    5>lib:函数库的保存位置(用的时候调用)

    6>media,mnt,misc
      存储设备挂载,分配盘符
      这三个空目录作为外接存储设备的盘符

     7>sys,proc:内存相关目录
      不能修改,因为数据放内存易丢失,数据太大会导致系统内存被填,崩溃

    8>usr:系统资源目录

二、链接命令

    1>硬链接 ln (不建议使用) 

      和原文件在文件分区表中指向同一个i节点
      原文件 和 硬链接其中的某一个删了,另外一个都能正常打开
      原文件 和 硬链接其中一个对文件修改了,另外一个都有修改后的        状态

    2>软链接 ln -s (相当于快捷方式,原文件删除,软链接也不能打开)

      用户使用软链接 ->  找到软链接的i节点 -> 找到对应的数据块block -> 找到数据块中的原文件的i节点 -> 找到原文件对应的数据块block

      注意,这里创建软链接需要写绝对路径

三、文件搜索命令

    1>locate 文件名(数据库为每天更新一次,updatedb手动更新数据库)
      在后台数据库中按文件名搜索,搜索速度快

    2>find 搜索范围 搜索条件 文件名
      find / -name book.xml 
      通配符:
            *  任意内容
            ?  任意一个字符
           []  任意一个中括号中的字符
      find /root -name "*?[abcdvh]"
    
      find /var/log -mtime +10
      在对应目录下查找10天前修改过的文件

      find . -size -25k
      查找当前目录下小于25k的文件

      find /etc -size +20k -a -size -50k
      find /etc -size +20k -o -size -50k
      -a:and 查找etc目录下大小大于20k小于50k的文件
      -o:or  查找etc目录下大于20k或小于50k的文件

      find /etc -size +20k -a -size -50k -exec ls -l {} \;
      第一条命令 -exec 第二条命令 {} \;
      -exec {} \;配套使用
      将第一条命令的执行结果交给第二条命令处理 

      grep搜索文件中符合条件的字符串
      grep "size" anaconda-ks.cfg 
      grep -v "size" anaconda-ks.cfg
      -v 取反,搜索文件中不包含size的内容  
      grep -rnl "size"
      搜索包含响应内容的文件  

四、压缩与解压缩

      zip压缩格式的文件与windows中的zip格式是通用的
      zip longzls.zip longzls  压缩文件
      zip -r jp.zip jp  压缩文件夹
      unzip longzls.zip 解压文件
      unzip jp.zip 解压文件夹

      gzip longzls 压缩文件为.gz格式,并且删除原文件
      gzip -r jp 压缩目录,将目录中的子文件压缩为.gz格式
      gzip -d longzls.gz 解压缩文件
      gunzip -r jp 解压目录
      
      tar -cvf jp.tar jp 打包文件/文件夹
      tar -xvf jp.tar  解包

      tar -zcvf jp.tar.gz jp 将文件压缩为tar.gz格式
      tar -zxvf jp.tar.gz  解压缩.tar.gz格式的文件

      tar -zxvf jp.tar.gz -C /tmp/ 解压缩文件到指定的目录下(tmp)

      tar -zcvf /tmp/test.tar.gz jp anaconda-ks.cfg
      压缩多个文件到指定目录下

      tar -ztvf jp.tar.gz  只查看压缩文件中的内容,不解压

五、关机重启命令

      shutdown -r now 指定重启时间
      shutdown -c 撤销重启命令
      shutdown -h 关机(服务器在远程,不要去关机,关机就不方便开)
      
      reboot 重启(推荐使用)
      logout 退出登录命令(特别是管理window少用户的服务器)

六、挂载命令(分盘符)

      [root@localhost ~]# mount (查看当前盘符挂载情况)
      /dev/sda3 on / type ext4 (rw)
      proc on /proc type proc (rw)
      sysfs on /sys type sysfs (rw)
      devpts on /dev/pts type devpts (rw,gid=5,mode=620)
      tmpfs on /dev/shm type tmpfs       (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
      /dev/sda1 on /boot type ext4 (rw)
      none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
      gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon       (rw,nosuid,nodev)

       自动挂载配置: /etc/fstab
       mount -a 自动挂载

       可执行文件:xxx.sh
       标准的格式:第一行   #!/bin/bash
       执行文件一般操作步奏:
       vi hello.sh  
       chmod 755 hello.sh 改权限才能执行
       ./hello.sh

       挂载命令格式:
       mount -o remount,noexec /home/ 重新挂载并且不能执行
       
       **挂载光盘:(步奏)
       1>虚拟机双击右下方的光盘,把对应的iso文件导入,相当于插入光盘。设备状态 --> 已连接
       2>建立挂载点:(任何空目录都可以做挂载点)
         mkdir /mnt/cdrom
       3>挂载
         mount /dev/sr0 /mnt/cdrom/  
         /dev/sr0为系统固定的光盘挂载的设备文件名
         挂载时,默认的权限是读写,但是光盘压缩以后只能读
       4>linux中用完光盘,需要卸载(注意要在要卸载的挂载目录外)
          umount 设备文件或者挂载点

       **挂载U盘:
       挂载硬盘相当于在系统设置除系统硬盘(sda1,sda2,sda3...)外的另外一块硬盘(sdb1,sdc1...)

       1>查看U盘设备文件名
       如果插入U盘之后,fdisk -l 就会显示对应硬盘,是sdb1还是sdc1
 
       2>挂载
       mount -t vfat /dev/sdb1 /mnt/usb/
       vfat:表示fat32文件系统,只能支持小于4G      
       

七、查看系统登录信息,系统用户信息

       w,who,last,lastlog
       last查看有无用户入侵

八、shell基本操作

    用户的命令为ASCII通过shell转换为机器可识别的二进制值,交给内核处理.(相当于windows中的图形化界面,方便用户与系统内核交流)

    Shell两种:Bourne Shell 和 C Shell,因为C Shell语法与C语言的语法很相似.
        
    echo -e "hell \n o"  加-e识别转义字符,调整输出格式 颜色输出

    **脚本编写:(一系列的命令)

      #!/bin/bash
      #The First program  #号表示注释
      echo -e "\e[1;34m 哈哈哈 \e[0m"

    **脚本运行:

      1>chmod 755 hello.sh
        ./hello.sh
      2>bash hello.sh

    **别名与快捷键

      alias ls='ls --color=never' 设置别名

      将别名写入下面文件就会用久生效:
      vi /root/.bashrc  配置用户执行环境变量(每个用户都有对应的.bashrc文件)
      source .bashrc

      unalias 删除别名
  
    **历史命令(不建议清理)
      history  查看历史命令
      history -w 更新历史命令到相关文件
      history -c 删除历史命令

      vi /etc/profile
      HISTSIZE=10000 修改历史命令保存的条数

      history 
      !n 执行历史命令中的第n条命令
      !! 执行上一条命令

    **输出重定向(命令输出到文件中)
      linux一切皆文件
      键盘对应的文件 /dev/stdin    0   标准输入
      显示器对应文件 /dev/stdout   1   标准输出
                                  /dev/stderr   2   标准错误输出

      ifconfig > test.log 命令执行结果以覆盖的方式写入文件
      这条命令方便于系统每天定时把日志写入文件中

      ls >> test.log 命令执行结果追加到文件后面

      cat okkj 2>>test.log 将命令执行的错误信息追加到文件
      注意:大于号两侧不能有空格

      命令 &>> 文件 
      这条命令是无论命令执行真确与否都写入对应文件
      ifconfig &>> test2.log 
      ifconfig uuuu &>> test2.log 
      
      ls &>/dev/null
      /dev/null为垃圾站,将命令执行的结果直接删除,有些不关心       执行过程的命令可以直接这样.

      cat xdy >> success.log 2>>error.log
      将命令执行的正确信息写入到success.log
      错误信息写入error.log

    **输入重定向:

      wc < error.log 统计文件的字符数,行数,等

    **管道符

      date ; ls ; pwd
      ; :连接多个命令,多命令顺序执行
      date ; ls ; date
      这样可以查看ls这条命令的执行时长
      
      但是使用;号,无论命令执行正确与否,都会执行下一条命令

      ljhdn && echo i
      && :顺序执行命令,只有正确执行命令才能往下执行

      jhdihhd || echo i
      || :命令一执行正确命令二不执行,命令一执行错误命令二执            行

      ifjhudh && echo y || echo n
      判断命令是否正确执行,正确:y,错误:n

      命令1 | 命令2
      命令1的执行结果作为命令2的操作对象
      ls -l /etc | more
      
      netstat -an 查看本机的网络连接
      LISTEN  等待连接
      ESTABLISH  正在使用
      netstat -an | grep ESTABLISHED
      这句表示查询正在连接的用户
      netstat -an | grep ESTABLISHED | wc -l
      统计正在连接的用户数

    **通配符

      ls hell*
      ls j?
      ls h[0-9][0-9]
      ls hello.s[^0-9] 列出s后面没有包含0到9的文件
      ls hello.s[^0-9]*

      [root@localhost ~]# a=123    变量赋值
      [root@localhost ~]# echo $a  
      123
      [root@localhost ~]# echo '$a'  单引号输出
      $a
      [root@localhost ~]# echo "$a"  双引号输出
      123

      [root@localhost ~]# aa=$(ls)  
      $()代表赋值的是系统命令
      [root@localhost ~]# echo "$aa" 
      先执行命令再把结果赋值给a
      anaconda-ks.cfg
      Desktop
      Documents
      Downloads
      error.log
      hello.sh
      install.log
      install.log.syslog

      echo \$a  \转义符

九、VI编辑器(类似于widows中的记事本)

      VI --> VIM(VI的升级版)
      VI 按u撤销上一步的操作
      
      设置 alias vi='vim'

      过程:vi abc(创建文件) --> 进入命令模式
           --> 输入i --> 进入输入模式 -->
           内容写入文件 --> Esc --> 进入命令模式--> :wq(保存退出)

      vi + abc 进入文件后光标定位到最后一行
      vi +3 abc 进入文件后光标定位到第三行
      vi +/zy abc 进入文件后光标定位到zy第一次出现的那一行,并且按n可以在出现zy的这几行中来回切换
      vi aa bb cc 创建多个文件 
      :n编辑下一个文件
      :N编辑上一个文件

    **常用指令
      :wq 保存退出
      :q! 强制退出(忽略之前的修改)
      :ls 列出当前编辑器中所有文件
      :15 光标快速定位到第15行
      /xxx 从光标所在位置向后搜索xxx
      ?xxx 光标位置向前搜索
      
      命令模式常用指令
      ctrl + f/b/d/u 翻页
      dd 删除光标所在行
      yy 复制光标所在行
      p 在光标所在行的下一行黏贴
      P 在光标所在行的上一行黏贴
      ... 

十、磁盘管理

      df -h查看磁盘空间使用的大致状况
      df -T查看磁盘的类型
      df -lhT多个指令一起用
      df -lhT -t ext4查看磁盘类型为ext4的使用情况

      du -h统计磁盘上的文件大小
      du -s .gconf/统计出.gconf文件的总大小
      du -h *.zip统计zip文件的大小
      
      磁盘分区和格式化:
      1、主分区和扩展分区总数不能超过4个
      2、扩展分区最多只能有一个
      3、扩展分区不能直接存取数据(逻辑分区)

    **当磁盘空间消耗殆尽,需要在保留原硬盘的基础上给服务器添加新的硬盘(通过命令行的模式)

    **虚拟机中添加硬盘:


      过程:关闭虚拟机 --> 编辑虚拟机设置 --> 添加 --> 硬盘 --> 创建一个新的虚拟磁盘 -->SCSI --> 设置大小 --> 启动虚拟机 

      linux中硬件都是以文件的形式存储于跟目录的dev目录下,硬件设备都是linux系统自动识别的,但是并不能立即使用,必须对硬盘进行分区、挂载后才能使用(分区挂载到指              定的挂载点上,才能存储数据)
      
         **1>MBR分区模式(主分区少于4个,单个分区容量少于2TB)
             
            fdisk 查看磁盘分区信息
            -->fdisk -l
            -->新增的磁盘dev/sdb已被识别,但还没有可用的分区
            fdisk + 设备路径,对设备进行分区
            -->fdisk /dev/sdb
            输入m查看命令帮助
            -->输入n创建新的分区 
            主分区/扩展分区 p/e
            -->p
            指定分区的编号1-4
            -->1
            指定扇区的起始位置(给出了范围)
            -->回车(默认从给定的最小值开始)
            指定扇区的终止位置
            -->+3000M(总共大小3000M)
            硬盘主分区添加成功
            -->p(查看添加的硬盘的信息)
            继续添加分区
            -->n
            添加扩展分区
            -->e
            指定分区的编号1-4
            -->2
            指定扇区的起始位置(给出了范围)
            -->回车(默认从给定的最小值开始)
            指定扇区的终止位置
            -->回车(把剩余的都分给此分区)
            硬盘扩展分区添加成功
            扩展分区不能直接使用,要添加逻辑分区
            -->n
            系统中的扩展分区只能有一个,所以此刻出现              此扩展分区的逻辑分区
            -->l(创建逻辑分区)
            指定扇区的起始位置(给出了范围)
            -->回车(默认从给定的最小值开始)
            指定扇区的终止位置
            -->+2000M(总共大小2000M)
            磁盘逻辑分区添加成功
            继续添加逻辑分区,并把剩余的空间都给这个              逻辑分区
            -->n
            -->l
            -->回车
            -->回车
            磁盘逻辑分区添加成功

            -->p(查看分区后的分区情况)

            但是此时,并未把分区方式写入磁盘,感觉需要两个主分区才合理(删除分区,重新配置)

            -->d(删除分区)
            -->2(输入需要删除的分区编号,2为刚刚设置的扩展分区)
            因为逻辑分区是在扩展分区内部的,所以删除了扩展分区,逻辑分区也被删除了
            -->p(此时查看到的只有一个主分区了)
            创建一个3G的主分区(同上)
            -->n
            -->p
            -->2
            -->回车
            -->+3G
            其余的空间分给扩展分区
            -->n
            -->e
            -->3
            -->回车
            -->回车
            最后在扩展分区中添加两个逻辑分区
            -->n
            -->l
            -->回车
            -->+1G
            -->n
            -->l
            -->回车
            -->回车
            最后磁盘分区方案妥当,将方案写入磁盘
            -->w(分区方案写入)
            查看分区状况
            -->fdisk -l

         **2>GPT分区模式(主分区个数不限制,单个分区容量不限制,不存在主分区、扩展分区,都是一样的概念)

             上述MBR模式分区,由于容量的限制,导致一些大型的服务器存储需求不足(主分区个数、单个分区容量的限制),因此学习GPT模式

             为了演示,在虚拟机中添加第三块硬盘

             -->parted(启动GPT分区工具)
             -->help帮助信息              
             默认的分区硬盘是系统的第一块硬盘(这里需要切换至我们需要进行分区的硬盘)
             -->select /dev/sdc 
             给目标硬盘添加分区表的类型,之后才能添加分区
             msdos为使用mbr分区表,gpt为gpt分区表
             -->mklabel msdos/gpt 
             -->print all 查看当前硬盘的分区详情
             使用parted有两种模式,交互模式/命令模式
             交互模式:系统提示要操作的选项,选择y/n进行
             命令模式:指令后面跟参数,不需要y/n询问,直接一步到位
             -->mkpart 开始分区,这里首先使用交互模式  
             (parted) mkpart

             Partition name?  []? zy    这里指定分区的名字             File system type?  [ext2]?  这里指定格式                                                Start? 0     这里指定哪里开始                                                           End? 2000        哪里结束                                                               Warning: The resulting partition is not properly aligned for  best performance.  提示数据块不对齐不能达到最佳的性能             Ignore/Cancel? cancel  这里为了数据块对齐,取消重新分区

             -->mkpart

             Partition name?  []? zy                                                                 File system type?  [ext2]?                                                              Start? 1  预留1mb给数据块进行对齐                                                       End? 2000
             现在就不会出现性能的提示了
             接下来使用命令模式进行分区的创建
             -->mkpart test 2000 3000 分区名加分区起始结束位置
             -->mkpart abc 2500 3500 当与已分的区域有重合
        Warning: You requested a partition from 2500MB to 3500MB.The closest location we can manage is 3000MB to 3500MB.             Is this still acceptable to you?             Yes/No? yes  

             询问是否愿意分到从3000到3500,因为2500到3000已经分到上个分区
             -->rm 3 删除分区,这里rm 跟上分区的序号
             继续进行分区的添加,看gpt模式分区是否可以超过5个的限制
             -->mkpart abc 3000 4000
             -->mkpart aa 4000 5000
             -->mkpart bb 5000 6000

             -->print


             Number  Start   End     Size    File system  Name  Flags             1      1049kB  2000MB  1999MB               zy             2      2000MB  3000MB  1000MB               test             3      3000MB  4000MB  1000MB               abc             4      4000MB  5000MB  999MB                aa             5      5000MB  6000MB  1000MB               bb

             轻松超过5个的限制,并且gpt模式中没有主分区和扩展分区的概念,都             是分区。
             分区的起始和结束的单位是MB
             -->unit GB 这条命令修改设置分区起始和结束的单位
             -->quit 退出parted,自动对分区进行保存

         **分区的格式化

             -->mkfs.ext3 /dev/sdb2  或者 mkfs -t ext3 /dev/sdb2
             mkfs为makefilesystem的简写,指定文件格式和格式对象即可  

         **挂载分区

             对分区进行格式化之后要'挂载'才能存储数据
             理论上说可以把分区挂载到系统的任意位置,默认的位置是/mnt

             --> mkdir /mnt/zy 创建挂载点
             --> mount -t ext3 /dev/sdb1 /mnt/zy 挂载(设置文件系统类型)  
             --> umount /mnt/zy 卸载挂载分区
             mount命令进行挂载的分区不具有永久性,系统重启就失效
             -->vim + /etc/fstab
             添加这行,系统就会启动时自动进行挂载
             /dev/sdb1       /mnt/zy    ext3    defaults        0 0

          **swap分区

             Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自 一些很长时间没有什么操作的              程序,这些被释放的空间被临时保存Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

             如何为硬盘添加swap交换分区:
             建立一个普通的linux分区 --> 修改分区类型的16进制编码 --> 格式化交换分区 --> 启用交换分区

十一、用户和用户组

          用户:使用操作系统的人
          用户组:具有相同系统权限的一组用户

          /etc/group 中存储当前系统所有用户组信息
          Group :      x     :  123   : abc,def,xyz
          组名   组密码占位符  组编号    组中用户名列表

          /etc/gshadow存储当前系统中用户组的密码信息
          Group :      *     :        : abc,def,xyz
          组名       组密码   组管理者   组中用户名列表  

          /etc/passwd存储当前系统中所有用户的信息
          user : x : 123  : 456 : xxxxxxxx : /home/user : /bin/bash
          用户名:密码占位符:用户编号:用户组编号:用户注释信息:用户主目录:shell类型

          /etc/shadow存储当前系统中所有用户的密码信息    

          **用户和用户组的基本命令

          groupadd sexy  添加一个组
          groupmod -n market sexy  修改组名称
          groupmod -g 668 market  修改组编号
          groupdel market 删除用户组(必须先删除组内用户)
         
          useradd -g sexy sdf 组内添加用户sdf
          useradd -d /home/xxx zy 指定创建用户zy的家目录
          usermod -l cls sdf 将用户名sdf改名为cls
          userdel cls 删除用户            
          userdel -r cls 删除用户,并且删除用户所属文件

          touch /etc/nologin 创建这个空文件就可以使普通用户不能登录系统,只有root可以登录

          passwd -l cls 锁定用户cls
          passwd -u cls 解锁用户cls
           
          passwd -d cls 清除用户密码,用户可以无密码登录

          **主要组和附属组
 
          gpasswd -a cls boss 将用户cls添加到附属组boss中,这样cls就属于两个组
          这里用户cls属于两个组,但是当这个用户创建文件时,默认是属于主要组的,如果要以附属组的角色创建文件,就要切换(这里需要组密码)
         
          修改用户组的组密码
          gpasswd boss

          gpasswd -d cls boss 删除用户cls的附属组boss

          创建用户的时候进行主要组和附属组的设置
          useradd -g group1 -G group2... sdf
          -g 设置主要组  -G 设置附属组


      
       
       
      
      


      
    
0 0
原创粉丝点击