zoukankan      html  css  js  c++  java
  • Linux教程

    Linux简介

    Linux 是一种自由和开放源码的类 UNIX 操作系统。
    Linux 英文解释为 Linux is not Unix。
    Linux 是在 1991 由林纳斯·托瓦兹在赫尔辛基大学上学时创立的,主要受到 Minix 和 Unix 思想的启发。
    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
    Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
    RUNOOB 图标

    Linux vs Windows

    | 比较 | Windows |Linux|
    | ---- | ---- |
    | 界面 | 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 | 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致 |
    | 驱动程序 | 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 |由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。|
    | 使用 | 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利。|-图形界面使用简单,容易入门。文字界面,需要学习才能掌握。 |
    | 学习 | 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 | 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。 |
    | 软件 | 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 | 大部分软件都可以自由获取,同样功能的软件选择较少。 |

    Linux 系统启动过程

    linux启动时我们会看到许多启动信息。
    Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:

    • 内核的引导。
    • 运行 init。
    • 系统初始化。
    • 建立终端 。
    • 用户登录系统。

    init程序的类型:

    • SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
    • Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
    • Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。

    内核引导

    当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
    操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
    RUNOOB 图标

    运行init

    init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
    init 程序首先是需要读取配置文件 /etc/inittab。
    RUNOOB 图标

    运行级别

    许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
    init进程的一大任务,就是去运行这些开机启动的程序。
    但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
    Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
    RUNOOB 图标

    Linux系统有7个运行级别(runlevel):

    • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
    • 运行级别2:多用户状态(没有NFS)
    • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    • 运行级别4:系统未使用,保留
    • 运行级别5:X11控制台,登陆后进入图形GUI模式
    • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

    系统初始化

    在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。

    它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

    l5:5:wait:/etc/rc.d/rc 5
    

    ​ 这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。
    而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
    /etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数 来运行。
    而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。
    这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。
    至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。

    RUNOOB 图标

    建立终端

    rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

    init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:

    1:2345:respawn:/sbin/mingetty tty1
    2:2345:respawn:/sbin/mingetty tty2
    3:2345:respawn:/sbin/mingetty tty3
    4:2345:respawn:/sbin/mingetty tty4
    5:2345:respawn:/sbin/mingetty tty5
    6:2345:respawn:/sbin/mingetty tty6
    

    从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。

    同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。

    用户登录系统

    一般来说,用户的登录方式有三种:

    • (1)命令行登录
    • (2)ssh登录
    • (3)图形界面登录
      RUNOOB 图标

    对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。

    而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。

    Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。

    然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。

    这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。

    /etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

    图形模式与文字模式的切换方式

    Linux预设提供了六个命令窗口终端机让我们来登录。
    默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
    如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
    当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
    如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。
    RUNOOB 图标

    Linux 关机

    在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

    正确的关机流程为:sync > shutdown > reboot > halt

    Linux 系统目录结构

    RUNOOB 图标

    以下是对这些目录的解释:

    • /bin:
      bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

    • /boot:
      这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

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

    • /etc:
      etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

    • /home:
      用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

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

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

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

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

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

    • /proc:
      proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
      这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
    • /root:
      该目录为系统管理员,也称作超级权限者的用户主目录。
    • /sbin:
      s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
    • /selinux:
      这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
    • /srv:
      该目录存放一些服务启动之后需要提取的数据。
    • /sys:
      这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
      sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
      该文件系统是内核设备树的一个直观反映。
      当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
    • /tmp:
      tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。
    • /usr:
      usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
      /usr/bin:
      系统用户使用的应用程序。
      /usr/sbin:
      超级用户使用的比较高级的管理程序和系统守护程序。
      /usr/src:
      内核源代码默认的放置目录。
    • /var:
      var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
    • /run:
      是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

    在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
    /etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
    /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
    值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
    /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

    Linux 文件基本属性

    Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
    为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
    在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:

    • chown (change owner) : 修改所属用户与组。
    • chmod (change mode) : 修改用户的权限。
      RUNOOB 图标
      每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
      RUNOOB 图标
      从左至右用 0-9 这些数字来表示。
      第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
      第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
      其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;
      第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。

    Linux 文件与目录管理

    • 绝对路径:
      路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。

    • 相对路径:
      路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd ../man 这就是相对路径的写法。

    处理目录的常用命令

    接下来我们就来看几个常见的处理目录的命令吧:

    • ls(英文全拼:list files): 列出目录及文件名
    • cd(英文全拼:change directory):切换目录
    • pwd(英文全拼:print work directory):显示目前的目录
    • mkdir(英文全拼:make directory):创建一个新的目录
    • rmdir(英文全拼:remove directory):删除一个空的目录
    • cp(英文全拼:copy file): 复制文件或目录
    • rm(英文全拼:remove): 删除文件或目录
    • mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称

    ls (列出目录)

    选项与参数:

    • -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
    • -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
    • -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
      将家目录下的所有文件列出来(含属性与隐藏档) : ls -al

    pwd (显示目前所在的目录)

    • -P :显示出确实的路径,而非使用连结 (link) 路径。
      例如:ls -ld /var/mail

    mkdir (创建新目录)

    mkdir [-mp] 目录名称
    选项与参数:

    • -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
      例如:mkdir -m 711 test2
    • -p :帮助你直接将所需要的目录(包含上一级目录)递归创建起来!
      例如:mkdir -p test1/test2/test3/test4

    rmdir (删除空的目录)

    • rmdir [-p] 目录名称

    cp (复制文件或目录)

    [root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
    [root@www ~]# cp [options] source1 source2 source3 .... directory

    选项与参数:

    • -a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
    • -d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
    • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
    • -i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
    • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
    • -p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
    • -r:递归持续复制,用於目录的复制行为;(常用)
    • -s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
    • -u:若 destination 比 source 旧才升级 destination !

    用 root 身份,将 root 目录下的 .bashrc 复制到 /tmp 下,并命名为 bashrc

    [root@www ~]# cp ~/.bashrc /tmp/bashrc
    [root@www ~]# cp -i ~/.bashrc /tmp/bashrc
    cp: overwrite `/tmp/bashrc'? n <==n不覆盖,y为覆盖

    rm (移除文件或目录)

    rm [-fir] 文件或目录
    选项与参数:

    • -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
    • -i :互动模式,在删除前会询问使用者是否动作
    • -r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!

    mv (移动文件与目录,或修改名称)

    语法:

    [root@www ~]# mv [-fiu] source destination
    [root@www ~]# mv [options] source1 source2 source3 .... directory
    选项与参数:

    • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
    • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
    • -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
      复制一文件,创建一目录,将文件移动到目录中

    [root@www ~]# cd /tmp
    [root@www tmp]# cp ~/.bashrc bashrc
    [root@www tmp]# mkdir mvtest
    [root@www tmp]# mv bashrc mvtest
    将某个文件移动到某个目录去,就是这样做!
    将刚刚的目录名称更名为 mvtest2
    [root@www tmp]# mv mvtest mvtest2

    Linux 文件内容查看

    Linux系统中使用以下命令来查看文件的内容:

    • cat 由第一行开始显示文件内容
    • tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
    • nl 显示的时候,顺道输出行号!
    • more 一页一页的显示文件内容
    • less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
    • head 只看头几行
    • tail 只看尾巴几行
      你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。

    cat:
    选项与参数:
    -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
    -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
    -E :将结尾的断行字节 $ 显示出来;
    -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
    -T :将 [tab] 按键以 ^I 显示出来;
    -v :列出一些看不出来的特殊字符
    检看 /etc/issue 这个文件的内容:
    [root@www ~]# cat /etc/issue
    CentOS release 6.4 (Final)
    Kernel \r on an \m

    tac:
    tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:
    [root@www ~]# tac /etc/issue
    Kernel \r on an \m
    CentOS release 6.4 (Final)

    nl:
    显示行号
    语法:
    nl [-bnw] 文件
    选项与参数:
    -b :指定行号指定的方式,主要有两种:
    -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
    -b t :如果有空行,空的那一行不要列出行号(默认值);
    -n :列出行号表示的方法,主要有三种:
    -n ln :行号在荧幕的最左方显示;
    -n rn :行号在自己栏位的最右方显示,且不加 0 ;
    -n rz :行号在自己栏位的最右方显示,且加 0 ;
    -w :行号栏位的占用的位数。

    more:
    一页一页翻动
    [root@www ~]# more /etc/man_db.config
    ....(中间省略)....
    --More--(28%) <== 重点在这一行喔!你的光标也会在这里等待你的命令
    在 more 这个程序的运行过程中,你有几个按键可以按的:
    空白键 (space):代表向下翻一页;
    Enter :代表向下翻『一行』;
    /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
    :f :立刻显示出档名以及目前显示的行数;
    q :代表立刻离开 more ,不再显示该文件内容。
    b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。

    less:
    一页一页翻动,以下实例输出/etc/man.config文件的内容:
    [root@www ~]# less /etc/man.config

    ....(中间省略)....
    <== 这里可以等待你输入命令!
    less运行时可以输入的命令有:
    空白键 :向下翻动一页;
    [pagedown]:向下翻动一页;
    [pageup] :向上翻动一页;
    /字串 :向下搜寻『字串』的功能;
    ?字串 :向上搜寻『字串』的功能;
    n :重复前一个搜寻 (与 / 或 ? 有关!)
    N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
    q :离开 less 这个程序;

    head:
    取出文件前面几行
    语法:
    head [-n number] 文件
    选项与参数:
    -n :后面接数字,代表显示几行的意思
    [root@www ~]# head /etc/man.config
    默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
    [root@www ~]# head -n 20 /etc/man.config

    tail:
    取出文件后面几行
    语法:
    tail [-n number] 文件
    选项与参数:
    -n :后面接数字,代表显示几行的意思
    -f :表示持续侦测后面所接的档名,要等到按下[ctrl]-c才会结束tail的侦测
    [root@www ~]# tail /etc/man.config
    [root@www ~]# tail -n 20 /etc/man.config

    Linux 磁盘管理

    • df(英文全称:disk full):列出文件系统的整体磁盘使用量
    • du(英文全称:disk used):检查磁盘空间使用量
    • fdisk:用于磁盘分区

    df

    命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
    语法:

    df [-ahikHTm] [目录或文件名]

    选项与参数:

    • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
    • -k :以 KBytes 的容量显示各文件系统;
    • -m :以 MBytes 的容量显示各文件系统;
    • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
    • -H :以 M=1000K 取代 M=1024K 的进位方式;
    • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
    • -i :不用硬盘容量,而以 inode 的数量来显示

    du

    Linux du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的,这里介绍 Linux du 命令。
    语法:

    du [-ahskm] 文件或目录名称

    选项与参数:

    • -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
    • -h :以人们较易读的容量格式 (G/M) 显示;
    • -s :列出总量而已,而不列出每个各别的目录占用容量;
    • -S :不包括子目录下的总计,与 -s 有点差别。
    • -k :以 KBytes 列出容量显示;
    • -m :以 MBytes 列出容量显示;
      与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据。

    fdisk

    fdisk 是 Linux 的磁盘分区表操作工具。
    语法:

    fdisk [-l] 装置名称

    选项与参数:

    • -l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

    磁盘格式化

    磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 mkfs(make filesystem) 命令。
    语法:

    mkfs [-t 文件系统格式] 装置文件名

    选项与参数:

    • -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

    磁盘检验

    fsck(file system check)用来检查和维护不一致的文件系统。
    若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。
    语法:

    fsck [-t 文件系统] [-ACay] 装置名称

    选项与参数:

    • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
    • -s : 依序一个一个地执行 fsck 的指令来检查
    • -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
    • -C : 显示完整的检查进度
    • -d : 打印出 e2fsck 的 debug 结果
    • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
    • -R : 同时有 -A 条件时,省略 / 不检查
    • -V : 详细显示模式
    • -a : 如果检查有错则自动修复
    • -r : 如果检查有错则由使用者回答是否修复
    • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

    磁盘挂载与卸除

    Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令。
    磁盘挂载语法:

    mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点

    Linux 远程登录

    Linux 系统中是通过 ssh 服务实现的远程登录功能,默认 ssh 服务端口号为 22。
    使用密钥认证机制远程登录linux
    首先使用工具 PUTTYGEN.EXE 生成密钥对。该工具可以生成三种格式的key :SSH-1(RSA) SSH-2(RSA) SSH-2(DSA) ,我们采用默认的格式即 SSH-2(RSA)。Number of bits in a generated key 这个是指生成的key的大小,这个数值越大,生成的key就越复杂,安全性就越高。这里我们写 2048。然后单击Generate 开始生成密钥对:注意的是,在这个过程中鼠标要来回的动,否则这个进度条是不会动的。
    到这里,密钥对已经生成了。你可以给你的密钥输入一个密码,(在Key Passphrase那里)也可以留空。然后点 Save public key 保存公钥,点 Save private Key 保存私钥。笔者建议你放到一个比较安全的地方,一来防止别人偷窥,二来防止误删除。接下来就该到远程 linux 主机上设置了。
    1)创建目录 /root/.ssh 并设置权限
    [root@localhost ~]# mkdir /root/.ssh mkdir 命令用来创建目录,以后会详细介绍,暂时只了解即可。
    [root@localhost ~]# chmod 700 /root/.ssh chmod 命令是用来修改文件属性权限的,以后会详细介绍。
    2)创建文件 / root/.ssh/authorized_keys
    [root@localhost ~]# vim /root/.ssh/authorized_keys vim 命令是编辑一个文本文件的命令,同样在后续章节详细介绍。
    3)打开刚才生成的public key 文件,建议使用写字板打开,这样看着舒服一些,复制从AAAA开头至 "---- END SSH2 PUBLIC KEY ----" 该行上的所有内容,粘贴到/root/.ssh/authorized_keys 文件中,要保证所有字符在一行。(可以先把复制的内容拷贝至记事本,然后编辑成一行载粘贴到该文件中)。
    在这里要简单介绍一下,如何粘贴,用vim打开那个文件后,该文件不存在,所以vim会自动创建。按一下字母"i"然后同时按shift + Insert 进行粘贴(或者单击鼠标右键即可),前提是已经复制到剪切板中了。粘贴好后,然后把光标移动到该行最前面输入 ssh-rsa ,然后按空格。再按ESC,然后输入冒号wq 即 :wq 就保存了。
    4)再设置putty选项,点窗口左侧的SSh –> Auth ,单击窗口右侧的Browse… 选择刚刚生成的私钥, 再点Open ,此时输入root,就不用输入密码就能登录了。如果在前面你设置了Key Passphrase ,那么此时就会提示你输入密码的。为了更加安全建议大家要设置一个Key Passphrase。

    Linux vi/vim

    所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。
    但是目前我们使用比较多的是 vim 编辑器。
    vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
    什么是 vim?
    Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
    简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。
    连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。
    vim 键盘图:
    RUNOOB 图标

    vi/vim 的使用

    基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:

    命令模式:

    用户刚刚启动 vi/vim,便进入了命令模式。
    此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
    以下是常用的几个命令:

    • i 切换到输入模式,以输入字符。
    • x 删除当前光标所在处的字符。
    • : 切换到底线命令模式,以在最底一行输入命令。
      若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
      命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

    输入模式

    在命令模式下按下i就进入了输入模式。
    在输入模式中,可以使用以下按键:

    • 字符按键以及Shift组合,输入字符
    • ENTER,回车键,换行
    • BACK SPACE,退格键,删除光标前一个字符
    • DEL,删除键,删除光标后一个字符
    • 方向键,在文本中移动光标
    • HOME/END,移动光标到行首/行尾
    • Page Up/Page Down,上/下翻页
    • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
    • ESC,退出输入模式,切换到命令模式

    底线命令模式

    在命令模式下按下:(英文冒号)就进入了底线命令模式。
    底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
    在底线命令模式中,基本的命令有(已经省略了冒号):

    • q 退出程序
    • w 保存文件
      RUNOOB 图标

    vi/vim 按键说明

    第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等

    移动光标的方法
    H 光标移动到这个屏幕的最上方那一行的第一个字符
    M 光标移动到这个屏幕的中央那一行的第一个字符
    L 光标移动到这个屏幕的最下方那一行的第一个字符
    G 移动到这个档案的最后一行(常用)
    nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
    gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
    n n 为数字。光标向下移动 n 行(常用)
    搜索替换
    /word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
    ?word 向光标之上寻找一个字符串名称为 word 的字符串。
    n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
    N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
    使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
    :n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:
    『:100,200s/vbird/VBIRD/g』。(常用)
    :1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
    :1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
    删除、复制与贴上
    x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
    nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
    dd 删除游标所在的那一整行(常用)
    ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
    d1G 删除光标所在到第一行的所有数据
    dG 删除光标所在到最后一行的所有数据
    d$ 删除游标所在处,到该行的最后一个字符
    d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
    yy 复制游标所在的那一行(常用)
    nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
    y1G 复制游标所在行到第一行的所有数据
    yG 复制游标所在行到最后一行的所有数据
    y0 复制光标所在的那个字符到该行行首的所有数据
    y$ 复制光标所在的那个字符到该行行尾的所有数据
    p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
    J 将光标所在行与下一行的数据结合成同一行
    c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
    u 复原前一个动作。(常用)
    [Ctrl]+r 重做上一个动作。(常用)
    这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
    . 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

    第二部分:一般模式切换到编辑模式的可用的按钮说明

    进入输入或取代的编辑模式
    i, I 进入输入模式(Insert mode):
    i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
    a, A 进入输入模式(Insert mode):
    a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
    o, O 进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用)
    r, R 进入取代模式(Replace mode):
    r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
    上面这些按键中,在 vi 画面的左下角处会出现『--INSERT--』或『--REPLACE--』的字样。 由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入喔!
    [Esc] 退出编辑模式,回到一般模式中(常用)

    第三部分:一般模式切换到指令行模式的可用的按钮说明

    指令行的储存、离开等指令
    w 将编辑的数据写入硬盘档案中(常用)
    :w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
    :q 离开 vi (常用)
    :q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
    注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
    :wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
    ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)
    ZQ 不保存,强制退出。效果等同于 :q!。
    :w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
    :r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
    :n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
    :! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
    vim 环境的变更
    :set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
    :set nonu 与 set nu 相反,为取消行号!

    特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。
    举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。

    vim 中批量添加注释

    方法一 :块选择模式
    批量注释:
    Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。
    取消注释:
    Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出。

    方法二: 替换命令
    批量注释。
    使用下面命令在指定的行首添加注释。
    使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。
    取消注释:
    使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)。

    vim常用命令汇总

    一、一般模式:删除、复制与粘贴类命令
    x,X                          x为向后删除一个字符,X为先前删除一个字符
    nx(n代表数字)                 向后删除n个字符
    dd                           删除当前行
    D                            删除当前行所有字符,试成为空行
    ndd(n代表数字)                删除光标所在行的向下n列
    d1G                          删除光标所在行到第一行的所有数据
    dG                           删除光标所在行到最后一行的所有数据
    yy                           复制光标所在行
    y1G                          复制光标所在行到第一行的所有数据
    yG                           复制光标所在行到最后一行的所有数据
    ynj(n代表数字)                复制光标所在行向下n+1行
    dnj(n代表数字)                删除光标所在行向下n+1行
    p,P                          p为复制的数据粘贴在光标的下一行,P为复制的数据粘贴在光标的上一行
    J                            将光标所在行与下一行的数据结合成一行
    u                            恢复前一个动作(undo)
    二、编辑模式命令
    i,I                          i为在当前光标所在处插入输入的文字,I为在光标所在行第一个非空字符插入输入的文字
    a,A                          a为在当前光标所在处下一个字符插入输入的文字,A为在光标所在行最后一个字符的下一个字符处插入输入的文字
    o,O                          o为在光标所在行的下一行行首开始插入字符,O为在光标所在行的上一行行首开始插入字符
    r,R                          r为替换光标所在那一个字符,R为一直替换光标所指的文字,直到退出
    Esc                          退出,回到一般模式
    三、命令模式
    h                            光标向左移一个字符
    j                            光标向下移一个字符
    k                            光标向上移一个字符
    l                            光标向右移一个字符
    Ctrl+f                       屏幕向下翻一页
    Ctrl+b                       屏幕向上翻一页
    Ctrl+d                       屏幕向下翻半页
    Ctrl+u                       屏幕向上翻半页
    +                            光标移动到下一行的第一个非空字符
    -                            光标移动到当前行的第一个非空字符
    n空格(n代表数字)               光标向当前行向右移动n个字符
    0(数字0)                      光标移动到当前行的第一个字符(可以为空字符,注意与-区分)
    $                            光标移动到当前行的最后一个字符(可以为空字符,注意与-区分)
    H                            光标移动到当前屏幕最上方的那一行的第一个非空字符
    M                            光标移动到当前屏幕最中间那一行的第一个非空字符
    L                            光标移动到当前屏幕最下方的那一行的第一个非空字符
    G                            光标移动到该文章最后一行的第一个非空字符
    nG(n代表数字)                 光标移动到该文章第n行的第一个非空字符
    n                            光标从当前行向下移动n行的第一个非空字符
    /word                        在光标之后查找word字符串
    ?word                        在光标之前查找word字符串
    :s/word1/word2/g             在光标当前行查找word1,并替换成word2
    :n1,n2s/word1/word2/g      在第n1行与第n2行之间查找word1,并替换成word2
    :%s/word1/word2/g           整个文章查找word1,并替换成word2
    :w                           将编辑的数据保存到硬盘文件中
    :w [filename]                将编辑后的数据保存到硬盘的另一个文件中
    :r [filename]                在编辑数据时,读入另一个文件中的数据,即将filename文件中的内容加到光标所在行下一行
    :wq或:x                      保存并退出
    :q                           退出,适用于未修改的文件
    :q!                          强制退出,适用于修改文件后不保存退出
    :set nu                      显示行号
    :set nonu                    取消行号
    :n1,n2 w [filename]          将n1到n2行的内容保存到名为filename的文件中
    

    Linux yum 命令

    yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。
    基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
    yum 提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

    yum 语法

    yum [options] [command] [package ...]

    • options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 "yes"),-q(不显示安装的过程)等等。
    • command:要进行的操作。
    • package:安装的包名。

    yum常用命令

      1. 列出所有可更新的软件清单命令:yum check-update
      1. 更新所有软件命令:yum update
      1. 仅安装指定的软件命令:yum install <package_name>
      1. 仅更新指定的软件命令:yum update <package_name>
      1. 列出所有可安裝的软件清单命令:yum list
      1. 删除软件包命令:yum remove <package_name>
      1. 查找软件包命令:yum search
      1. 清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包

    • yum clean headers: 清除缓存目录下的 headers

    • yum clean oldheaders: 清除缓存目录下旧的 headers

    • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers

    国内 yum 源

    网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的不错。
    将yum源设置为163 yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。

    安装步骤

    首先备份/etc/yum.repos.d/CentOS-Base.repo

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

    下载对应版本 repo 文件, 放入 /etc/yum.repos.d/ (操作前请做好相应备份)

    wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
    mv CentOS6-Base-163.repo CentOS-Base.repo
    运行以下命令生成缓存
    yum clean all
    yum makecache

    除了网易之外,国内还有其他不错的 yum 源,比如中科大和搜狐。
    中科大的 yum 源,安装方法查看:https://lug.ustc.edu.cn/wiki/mirrors/help/centos
    sohu 的 yum 源安装方法查看: http://mirrors.sohu.com/help/centos.html

    Linux apt 命令

    apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
    apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
    apt 命令执行需要超级管理员权限(root)。

    apt 语法

    apt [options] [command] [package ...]

    • options:可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
    • command:要进行的操作。
    • package:安装的包名。

    apt 常用命令

    • 列出所有可更新的软件清单命令:sudo apt update
    • 升级软件包:sudo apt upgrade
    • 列出可更新的软件包及版本信息:apt list --upgradeable
    • 升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade
    • 安装指定的软件命令:sudo apt install <package_name>
    • 安装多个软件包:sudo apt install <package_1> <package_2> <package_3>
    • 更新指定的软件命令:sudo apt update <package_name>
    • 显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>
    • 删除软件包命令:sudo apt remove <package_name>
    • 清理不再使用的依赖和库文件: sudo apt autoremove
    • 移除软件包及配置文件: sudo apt purge <package_name>
    • 查找软件包命令: sudo apt search
    • 列出所有已安装的包:apt list --installed
    • 列出所有已安装的包的版本信息:apt list --all-versions
  • 相关阅读:
    学习WindowsPhone 2013/12/22
    spring-aop学习
    easymock+junit+spring学习·
    javaWeb实现文件上传与下载 (转)
    Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能
    jsp自定义标签
    listener监听器
    移植一个项目到本地的问题
    struts1拦截器
    eclipse开发 javafx(转)
  • 原文地址:https://www.cnblogs.com/zhoushihui/p/15750302.html
Copyright © 2011-2022 走看看