欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

后端开发面试题汇总(十二)Linux篇

程序员文章站 2022-03-04 23:00:40
...

文章目录

一、Linux 概述

1.1 什么是Linux

  Linux是一套免费使用和*传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统

1.2 Unix和Linux有什么区别?

  • 1、开源性
      Linux是一款开源操作系统,不需要付费,即可使用;Unix是一款对源码实行知识产权保护的传统商业软件,使用需要付费授权使用。
  • 2、跨平台性
      Linux操作系统具有良好的跨平台性能,可运行在多种硬件平台上;Unix操作系统跨平台性能较弱,大多需与硬件配套使用。
  • 3、可视化界面
      Linux除了进行命令行操作,还有窗体管理系统;Unix只是命令行下的系统。
  • 4、硬件环境
      Linux操作系统对硬件的要求较低,安装方法更易掌握;Unix对硬件要求比较苛刻,安装难度较大。
      UNIX 系统大多是与硬件配套的,也就是说,大多数 UNIX 系统如 AIX、HP-UX 等是无法安装在 x86 服务器和个人计算机上的,而 Linux 则可以运行在多种硬件平台上;
  • 5、用户群体
      相比于Unix操作系统,Linux操作系统更受广大计算机爱好者的喜爱,主要原因是Linux操作系统具有Unix操作系统的全部功能,并且能够在普通PC计算机上实现全部的Unix特性,开源免费的特性,更容易普及使用!

1.3 什么是 Linux 内核?

  Linux内核本身并不是操作系统,它是一个完整操作系统的组成部分。Linux发行商都采用Linux内核,然后加入更多的工具、库和应用程序来构建一个完整的操作系统。
  Linux内的常见功能:

  • 1、进程管理
      内核负责创建和销毁进程,并处理它们与外部世界的联系(输入和输出)。不同进程间通讯(通过信号,管道,或者进程间通讯原语)对整个系统功能来说是基本的,也由内核处理。另外,调度器,控制进程如何共享CPU,是进程管理的一部分。更通常地,内核的进程管理活动实现了多个进程在一个单个或者几个CPU 之上的抽象。
  • 2、内存管理
      计算机的内存是主要的资源,处理它所用的策略对系统性能是至关重要的。内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间。内核的不同部分与内存管理子系统通过一套函数调用交互,从简单的malloc/free对到更多更复杂的功能。
  • 3、文件系统
      Unix 在很大程度上基于文件系统的概念;几乎Unix中的任何东西都可看作一个文件。内核在非结构化的硬件之上建立了一个结构化的文件系统,结果是文件的抽象非常多地在整个系统中应用。另外,Linux 支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准Linux的ext3文件系统,普遍使用的FAT 文件系统,或者其他几个文件系统。
  • 4、设备控制
      几乎每个系统操作终都映射到一个物理设备上。除了处理器,内存和非常少的别的实体之外,全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行,这些代码称为设备驱动.。内核中必须嵌入系统中出现的每个外设的驱动,,从硬盘驱动到键盘和磁带驱动器。内核功能的这个方面是本书中的我们主要感兴趣的地方。
  • 5、网络
      网络必须由操作系统来管理,因为大部分网络操作不是特定于某一个进程:进入系统的报文是异步事件。报文在某一个进程接手之前必须被收集,识别,分发。系统负责在程序和网络接口之间递送数据报文,它必须根据程序的网络活动来控制程序的执行。另外,所有的路由和地址解析问题都在内核中实现。

1.4 Linux的基本组件是什么?

  Linux系统一般有4个主要部分: 内核 Shell 文件系统 应用程序:
后端开发面试题汇总(十二)Linux篇

  • 1、内核
      内核是操作系统的核心,具有很多最基本的功能,如虚拟内存、多任务、共享库、需求加载、可执行程序和TCP/IP网络功能。 Linux内核的主要模块分为存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信、系统的初始化和系统调用等几个部分。
  • 2、Shell
      Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 Shell是一个命令解释器,它解释由用户输入的命令并且将它们送到内核。 Shell也可作为编程语言,具有普通编程语言的很多特点,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
  • 3、文件系统
      文件系统是文件存放在磁盘等存储设备上的组织方法。 Linux系统能支持多种目前流行的文件系统,如ext3、ext4、XFS、FAT、VFAT、NTFS和ISO9660等。
  • 4、应用程序
      标准的Linux系统都有一套称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公软件和Internet工具等。

1.5 Linux 的体系结构

  Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
后端开发面试题汇总(十二)Linux篇

  • 1、Linux内核
      内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
      Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图:
    后端开发面试题汇总(十二)Linux篇
  • 2、Linux Shell
      shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
  • 3、Linux 文件系统
      文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。
  • 4、Linux 应用
      标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等。

1.6 BASH和DOS之间的基本区别是什么?

  BASH和DOS控制台之间的主要区别在于3个方面:
   1、BASH命令区分大小写,而DOS命令则不区分。
   2、在BASH下,/ 是目录分隔符,\ 作为转义字符;在DOS下,/用作命令参数分隔符,\是目录分隔符。
   3、DOS遵循命名文件中的约定,即8个字符的文件名后跟一个点,扩展名为3个字符。BASH没有遵循这样的惯例。

1.7 Linux 开机启动过程?

  • 1、 BIOS加电自检
      加电自检,检测硬件设备。然后按照cmos上面的顺序来搜索处在活动状态下的可以引导的设备。可以是光驱、软盘、USB等。
  • 2、 加载主引导加载程序(MBR)
      主引导程序是一个512字节的映像。包含一点机器码还有一个小的分区。
      主引导程序的任务就是查找并且加载处在硬盘分区上的次引导程序。通过分区表查找活动分区,并将处在活动分区的次引导加载程序读取到内存里面运行。
  • 3、 加载次引导记载程序(GRUB)
      引导加载程序只要就是加载linux内核。
      上一阶段结束之后次引导加载程序就会在内存里面跑起来。就会出现GRUB图形界面,让用户选择加载什么样的内核。
  • 4、 linux内核映像
      用户选择要加载的内核之后,次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。
      linux内核获得控制权之后开始干自己的事
       1) 检测硬件
       2) 解压缩自己并安装必要驱动
       3) 初始化与文件系统相关的虚拟设备,LVM或RAID
       4) 装载根文件系统,挂在根目录下面
       5) 完成之后,linux在进程空间里面加载init程序,下面轮到init干活* 5 、 init进程
      init是所有进程的发起者和控制者,所有的进程都由此衍生。
      init进程获得控制权之后,它会执行/etc/rc.d/rc.sysinit脚本,根据里面的代码设置环境变量、网络、启动swap、检查并挂载文件系统、执行其他初始化工作。

  至此,linux启动完成。

1.8 Linux系统缺省的运行级别?

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

1.9 Linux 使用的进程间通信方式?

  Linux下进程通信的八种方法:

  • 1、管道(pipe)
      管道允许一个进程和另一个与它有共同祖先的进程之间进行通信;
  • 2、命名管道(FIFO)
      类似于管道,但是它可以用于任何两个进程之间的通信,命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建;
  • 3、信号(signal)
      信号是比较复杂的通信方式,用于通知接收进程有某种事情发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持UNIX早期信号语义函数signal外,还支持语义符合POSIX.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD即能实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数的功能);
  • 4、内存映射(mapped memory)
      内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它;
  • 5、消息队列(message queue)
      消息队列是消息的连接表,包括POSIX消息对和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能成该无格式字节流以及缓冲区大小受限等缺点;
  • 6、信号量(semaphore)
      信号量主要作为进程间以及同进程不同线程之间的同步手段;
  • 7、共享内存 (shared memory)
      它使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。这是针对其他通信机制运行效率较低而设计的。它往往与其他通信机制,如信号量结合使用,以达到进程间的同步及互斥;
  • 8、套接字(Socket)
      它是更为通用的进程间通信机制,可用于不同机器之间的进程间通信。起初是由UNIX系统的BSD分支开发出来的,但现在一般可以移植到其他类UNIX系统上:Linux和System V的变种都支持套接字。

1.10 Linux 有哪些系统日志文件?

  常见的几个:

  • /var/log/cron
      这个文件记录了系统例行性工作调度的相关信息,如你的crontab调度有没有实际被进行?进行过程中有没有发生错误?/etc/crontab是否编写正确?在这个日志文件内都可以查询。
  • /var/log/dmesg
      该文件记录系统在开机时内核检测过程中所产生的各项信息。由于centos默认将开机时内核的硬件检测过程取消显示,因此额外将数据记录在此文件中。
  • /var/log/lastlog
      该文件记录了系统上所有帐号最近一次登入系统时的相关信息。lastlog命令就是利用这个文件所记录的信息来显示结果。
  • /var/log/maillog或/var/log/mail/*
      该文件或目录记录邮件的来往信息,其实主要记录SMTP和POP3(IMAP)协议提供者所产生的信息。
  • /var/log/messages
      该文件几乎记录了系统发生的所有错误信息(或者是重要的信息),所以这个文件相当重要;如果系统发生莫名的错误时,这个文件是必查的日志文件之一。

1.11 什么是交换空间?

  swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。

1.12 什么是root帐户

  root存在于UNIX系统(如AIX、BSD等)和类UNIX系统(如Debian、Redhat、Ubuntu等版本的Linux系统以及Android系统)中,超级用户一般命名为root,相当于Windows系统中的system用户。
  root是系统中唯一的超级用户,具有系统中所有的权限,如启动或停止一个进程,删除或增加用户,增加或者禁用硬件等等。
  root用户是系统中唯一的超级管理员,它具有等同于操作系统的权限。一些需要root权限的应用,譬如广告阻挡,是需要root权限的。可问题在于root比windows的系统管理员的能力更大,足以把整个系统的大部分文件删掉,导致系统完全毁坏,不能再次使用。所以,用root进行不当的操作是相当危险的,轻微的可以死机,严重的甚至不能开机。所以,在Unix、Linux及Android中,除非确实需要,一般情况下都不推荐使用root。最好单独建立一个普通的用户,作为日常之用。

1.13 什么是LILO?

  LILO是Linux的引导加载程序。它主要用于将Linux操作系统加载到主内存中,以便它可以开始运行。

1.14 什么是BASH?

  先说shell,shell是用户和Linux(或者更准确的说,是用户和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集
  Bourne Again shell (bash), 正如它的名字所暗示的,是 Bourne shell 的扩展。bash 与 Bourne shell 完全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell 里的优点。bash 有很灵活和强大的编程接口,同时又有很友好的用户界面。
  BASH是Bourne Again SHell的缩写。它由Steve Bourne编写,作为原始Bourne Shell(由/ bin / sh表示)的替代品。它结合了原始版本的Bourne Shell的所有功能,以及其他功能,使其更容易使用。从那以后,它已被改编为运行Linux的大多数系统的默认shell。

1.15 什么是CLI?

  命令行界面(command-line interface,CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。
  通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。

1.16 什么是GUI?

  图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
  图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。

1.17 开源的优势是什么?

  开源允许你将软件(包括源代码)免费分发给任何感兴趣的人。然后,人们可以添加功能,甚至可以调试和更正源代码中的错误。它们甚至可以让它运行得更好,然后再次*地重新分配这些增强的源代码。这最终使社区中的每个人受益。

二、磁盘、目录、文件

2.1 简单 Linux 文件系统?

  在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件
  也就是说在 Linux 系统中有一个重要的概念:一切都是文件。其实这是 Unix 哲学的一个体现,而 Linux 是重写 Unix 而来,所以这个概念也就传承了下来。在 Unix 系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。
  Linux 支持 5 种文件类型,如下图所示:
后端开发面试题汇总(十二)Linux篇

2.2 Linux 的目录结构是怎样的?

  Linux 文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录:
后端开发面试题汇总(十二)Linux篇

  • /bin: 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里;
  • /etc: 存放系统管理和配置文件;
  • /home: 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;
  • /usr : 用于存放系统应用程序;
  • /opt: 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;
  • /proc: 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;
  • /root: 超级用户(系统管理员)的主目录(特权阶级o);
  • /sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;
  • /dev: 用于存放设备文件;
  • /mnt: 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;
  • /boot: 存放用于系统引导时使用的各种文件;
  • /lib : 存放着和系统运行相关的库文件 ;
  • /tmp: 用于存放各种临时文件,是公用的临时文件存储点;
  • /var: 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;
  • /lost+found: 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。

2.3 什么是 inode?

  文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
  操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
  文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"
  每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

2.4 什么是硬链接和软链接?

  建立软链接和硬链接的语法:
   1)软链接:ln -s 源文件 目标文件
   2)硬链接:ln 源文件 目标文件

  总的来说:软链接可以理解成快捷方式。它和windows下的快捷方式的作用是一样的;硬链接等于cp -p 加 同步更新
  软链接文件的大小和创建时间和源文件不同。软链接文件只是维持了从软链接到源文件的指向关系。
  硬链接文件和源文件的大小和创建时间一样。硬链接文件的内容和源文件的内容一模一样,相当于copy了一份。

2.5 RAID 是什么?

  Raid全称(Redundant Array of inexpensive Disks廉价磁盘冗余阵列),而在我们的现实生活之中我们会发现磁盘并不廉价,所以我们现在也称之为独立磁盘冗余阵列。简单的理解就是将多块硬盘做一个组合来进行使用。
  Raid的定义:多个独立的物理硬盘按照不同的方式组合起来形成一块虚拟磁盘。实际生活中我们看到的是两块及两块以上的一个聚合。一般在工作环境中一个磁盘阵列的连接也是至少有两根线的,这样可以实现多路径,提高传输速率。
  磁盘阵列的样式有三种,一是外接式磁盘阵列柜、二是内接式磁盘阵列卡、三是利用软件来进行仿真。

三、Shell

3.1 Shell 脚本是什么?

  一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。
  shell是操作系统的最外层,shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序。简单来说:shell就是一个用户跟操作系统之间交互的命令解释器

3.2 什么是默认登录 Shell ?

  在 Linux 操作系统,"/bin/bash" 是默认登录 Shell,是在创建用户时分配的。
  使用 chsh 命令可以改变默认的 Shell 。示例如下所示:

## chsh <用户名> -s <新shell>
## chsh ThinkWon -s /bin/sh

3.3 在 Shell 脚本中,如何写入注释?

  注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以 # 开头。例子如下:

#!/bin/bash
## This is a command
echo “I am logged in as $USER”

3.4 可以在 Shell 脚本中使用哪些类型的变量?

  • 1、系统定义变量
      系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过 set 命令查看。
  • 2、用户定义变量
      用户变量由系统用户来生成和定义,变量的值可以通过命令 “echo $<变量名>” 查看。

3.5 Shell 脚本中 if 语法如何嵌套?

  示例1:

  if [ condition ]
  then 
        if [ condition ]
        then 
            commands1
        else
            commands2
         fi    
   fi

  示例1:

if [ condition ]
then 
    if [ condition ]
    then 
         commands1
    else    
         commands2
    fi
else
    commands3
fi

3.6 在 Shell 脚本中如何比较两个数字?

  在 if-then 中使用测试命令( -gt 等)来比较两个数字。例如:

#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi

3.7 Shell 脚本中 case 语句的语法?

  示例:

case 变量 in 
值1 )
    执行动作1
    ;;2 )
    执行动作2
    ;;3 )
    执行动作3
    ;;
....
* )
    如果变量的值都不是以上的值,则执行此程序
    ;;
esac

3.8 Shell 脚本中 for 循环语法?

  示例:

for 变量 in 循环列表
do
命令1
命令2.
最后命令
done

  更详细的语法可以参考这篇文章:
  Shell中for循环的几个常用写法

3.9 Shell 脚本中 while 循环语法?

  如同 for 循环,while 循环只要条件成立就重复它的命令块。示例:

while [ 条件 ]
do
命令…
done

  do-while 语句的基本格式示例:

do
{
命令
} while (条件)

3.10 在 Shell 脚本如何定义函数呢?

  函数定义示例:

# func_name 函数名  
function func_name(){
	#函数体内容
}
或
# func_name 函数名
func_name(){
#函数体内容
}

  函数调用示例:

func_name parm 

  函数体中,可以通过$1 $2 …$9接受函数调用中的变量;函数可以通过return 返回函数执行的结果。

3.11 [编程]判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下?

#!/bin/bash
read -p "Input file name: " FILENAME
if [ -c "$FILENAME" ];then
  cp $FILENAME /dev
fi

3.12 [编程]添加一个新组为 class1 ,然后添加属于这个组的 30 个用户,用户名的形式为 stdxx ,其中 xx 从 01 到 30 ?

#!/bin/bash
groupadd class1
for((i=1;i<31;i++))
do
        if [ $i -le 10 ];then
                useradd -g class1 std0$i
        else
                useradd -g class1 std$i
        fi
done

3.13 [编程]实现自动删除 50 个账号的功能,账号名为stud1 至 stud50 ?

#!/bin/bash
for((i=1;i<51;i++))
do
                userdel -r stud$i
done

四、实战

4.1 如何选择 Linux 操作系统版本?

  一般来讲,桌面用户首选 Ubuntu ;服务器首选 RHEL 或 CentOS ,两者中首选 CentOS 。
  根据具体要求:
   1)安全性要求较高,则选择 Debian 或者 FreeBSD 。
   2)需要使用数据库高级服务和电子邮件网络应用的用户可以选择 SUSE 。
   3)想要新技术新功能可以选择 Feddora ,Feddora 是 RHEL 和 CentOS 的一个测试版和预发布版本。
   4)【重点】根据现有状况,绝大多数互联网公司选择 CentOS 。现在比较常用的是 6 系列,现在市场占有大概一半左右。另外的原因是 CentOS 更侧重服务器领域,并且无版权约束。

4.2 如何规划一台 Linux 主机,步骤是怎样?

  1、确定机器是做什么用的,比如是做 WEB 、DB、还是游戏服务器。不同的用途,机器的配置会有所不同。
  2、确定好之后,就要定系统需要怎么安装,默认安装哪些系统、分区怎么做。
  3、需要优化系统的哪些参数,需要创建哪些用户等等的。

4.3 请问当用户反馈网站访问慢,你会如何处理?

4.3.1 有哪些方面的因素会导致网站网站访问慢?

  • 1、服务器出口带宽不够用
      本身服务器购买的出口带宽比较小。一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。
      跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。
  • 2、服务器负载过大,导致响应不过来
      分析系统负载,使用 w 命令或者 uptime 命令查看系统负载。如果负载很高,则使用 top 命令查看 CPU ,MEM 等占用情况,要么是 CPU 繁忙,要么是内存不够。
      如果这二者都正常,再去使用 sar 命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。
  • 3、数据库瓶颈
      如果慢查询比较多。那么就要开发人员或 DBA 协助进行 SQL 语句的优化。
      如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等。然后,也可以搭建 MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。
  • 4、网站开发代码没有优化好
      例如 SQL 语句没有优化,导致数据库读写相当耗时。

4.3.2 针对网站访问慢,怎么去排查?

  • 1、首先要确定是用户端还是服务端的问题。当接到用户反馈访问慢,那边自己立即访问网站看看,如果自己这边访问快,基本断定是用户端问题,就需要耐心跟客户解释,协助客户解决问题。
      不要上来就看服务端的问题。一定要从源头开始,逐步逐步往下。
  • 2、如果访问也慢,那么可以利用浏览器的调试功能,看看加载那一项数据消耗时间过多,是图片加载慢,还是某些数据加载慢。
  • 3、针对服务器负载情况。查看服务器硬件(网络、CPU、内存)的消耗情况。如果是购买的云主机,比如阿里云,可以登录阿里云平台提供各方面的监控,比如 CPU、内存、带宽的使用情况。
  • 4、如果发现硬件资源消耗都不高,那么就需要通过查日志,比如看看 MySQL慢查询的日志,看看是不是某条 SQL 语句查询慢,导致网站访问慢。

4.3.3 怎么去解决?

  • 1、如果是出口带宽问题,那么久申请加大出口带宽
  • 2、如果慢查询比较多,那么就要开发人员或 DBA 协助进行 SQL 语句的优化
  • 3、如果数据库响应慢,考虑可以加一个数据库缓存,如 Redis 等等。然后也可以搭建MySQL 主从,一台 MySQL 服务器负责写,其他几台从数据库负责读。
  • 4、申请购买 CDN 服务,加载用户的访问。
  • 5、如果访问还比较慢,那就需要从整体架构上进行优化。做到专角色专用,多台服务器提供同一个服务。

4.4 Linux 性能调优都有哪几种方法?

  • 1、Disabling daemons (关闭 daemons)
      有些运行在服务器中的daemons (后台服务),并不是完全必要的。关闭这些daemons可释放更多的内存、减少启动时间并减少CPU处理的进程数。减少daemons数量的同时也增强了服务器的安全性。缺省情况下,多数服务器都可以安全地停掉几个daemons。
  • 2、Shutting down the GUI (关闭 GUI)
      只要有可能,就不要在Linux server上启动GUI图形,通常在Linux server上,没有必要启动GUI。所有的管理任务均可在命令行方式下完成、或者通过重定向X和Web浏览器界面。需要的时候启动GUI,用完马上关闭GUI。
  • 3、Changing kernel parameters (改变内核参数)
      内核参数可以改变,在命令行下执行sysctl 命令。
  • 4、Tuning the processor subsystem (处理器子系统调优)
      处理器对于应用和数据库服务器来讲是最重要的硬件子系统之一。然而在这些系统中,CPU经常是性能的瓶颈。
      在 配有Xeon处理器的高端服务器中,你可以启用或者关闭Hyper-Threading(超线程功能)。Hyper-Threading在操作系统里将一 颗处理器虚拟化为两颗使用。
  • 5、Tuning the memory subsystem (内存子系统调优)
      内存子系统的调优不是很容易,需要不停地监测来保证内存的改变不会对服务器的其他子系统造成负面影响。如果要改变虚拟内存参数(在/proc/sys/vm),建议每次只改变一个参数然后监测效果。
  • 6、Tuning the file system (文件系统子系统调优)
      总体而言,所有数据都要从磁盘获取并都要保存到磁盘。磁盘访问速度通常以毫秒来计算,比其它组件要慢上千倍(如内存、PCI操作是以纳秒或者微秒来计算的)。Linux文件系统定义了数据存储和访问的方式。
      Linux 可用的文件系统有多种,它们的性能和可扩展性各不相同。除了保存和管理磁盘数据,文件系统还负责保证数据的完整性。新版的Linux缺省安装已经包括日志 文件系统(journaling file systems),日志文件系统可防止系统崩溃时导致的数据不一致问题。对文件系统元数据(metadata)的更改都被保存在一份单独的日志里,当发生 系统崩溃时可以根据日志正确地恢复数据。除此之外,日志使系统重新启动时不必进行文件系统的检查,从而缩短了恢复时间。

五、文件管理命令

5.1 cat命令

  cat 命令用于连接文件并打印到标准输出设备上。
  cat 主要有三大功能:
   1)一次显示整个文件:

cat filename

   2)从键盘创建一个文件:

cat > filename

    创建文件名后,再输入文件内容,Ctrl + C结束文件内容输入
   3)将几个文件合并为一个文件:

cat file1 file2 > file

  包含行号功能的cat用法示例:
   4)把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里

cat -n log2012.log log2013.log

   5)把 log2012.log 和 log2013.log 的文件内容加上行号(不加空白行空白行)之后将内容附加到 log.log 里

cat -b log2012.log log2013.log log.log

5.2 chmod 命令

  Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以控制文件如何被他人所调用。
  用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
  每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。
  常用参数:

-c 当发生改变时,报告处理信息
-R 处理指定目录以及其子目录下所有文件

  权限范围:

u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组

  权限代号:

r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限

  使用示例:
   1)增加文件 t.log 所有用户可执行权限:

chmod a+x t.log
#其实和下面的语句一个意思:
chmod 755 t.log

   2)给 file 的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

chmod 751 t.log -c

   3)将 test 目录及其子目录所有文件添加可读权限

chmod u+r,g+r,o+r -R text/ -c

5.3 chown 命令

  chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID;组可以是组名或者组 ID;文件是以空格分开的要改变权限的文件列表,支持通配符。

-c 显示更改的部分的信息
-R 处理指定目录及子目录

  使用示例:
   1)改变拥有者和群组 并显示改变信息

chown -c mail:mail log2012.log

   2)改变文件群组

chown -c :mail t.log

   3)改变文件夹及子文件目录属主及属组为 mail

chown -cR mail: test/

5.4 cp 命令

  将源文件复制至目标文件,或将多个源文件复制至目标目录。

-i 提示
-r 复制目录及目录内所有项目
-a 复制的文件与原文件时间一样

  使用示例:
   1)复制 a.txt 到 test 目录下,保持原文件时间,如果原文件存在提示是否覆盖

cp -ai a.txt test

   2)为 a.txt 建议一个链接(快捷方式)

cp -s a.txt link_a.txt

5.5 find 命令

  用于在文件树中查找文件,并作出相应的处理,格式:

find pathname -options [-print -exec -ok ...]

  命令参数:

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

  命令选项:

-name 按照文件名查找文件
-perm 按文件权限查找文件
-user 按文件属主查找文件
-group  按照文件所属的组来查找文件。
-type  查找某一类型的文件,诸如:
   b - 块设备文件
   d - 目录
   c - 字符设备文件
   l - 符号链接文件
   p - 管道文件
   f - 普通文件

  示例:
   1)查找 48 小时内修改过的文件

find -atime -2

   2)在当前目录查找 以 .log 结尾的文件。( . 代表当前目录)

find ./ -name '*.log'

   3)查找 /opt 目录下 权限为 777 的文件

find /opt -perm 777

   4)查找大于 1K 的文件

find -size +1000c

5.6 head 命令

  head 用来显示档案的开头至标准输出中,默认 head 命令打印其相应文件的开头 10 行。
  常用参数:

-n<行数> 显示的行数(行数为复数表示从最后向前数)

  示例:
   1)显示 1.log 文件中前 20 行

head 1.log -n 20

   2)显示 1.log 文件前 20 字节

head -c 20 log2014.log

   3)显示 t.log最后 10 行

head -n -10 t.log

5.7 less 命令

  less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
  常用命令参数:

-i  忽略搜索时的大小写
-N  显示每行的行号
-o  <文件名> 将less 输出的内容在指定文件中保存起来
-s  显示连续空行为一行
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 /? 有关)
N:反向重复前一个搜索(与 /? 有关)
-x <数字> 将“tab”键显示为规定的数字空格
b  向后翻一页
d  向后翻半页
h  显示帮助界面
Q  退出less 命令
u  向前滚动半页
y  向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]:   向上翻动一页

   1)ps 查看进程信息并通过 less 分页显示

ps -aux | less -N

   2)查看多个文件

less 1.log 2.log

  可以使用 n 查看下一个,使用 p 查看前一个。

5.8 ln 命令

  功能是为文件在另外一个位置建立一个同步的链接,当在不同目录需要该问题时,就不需要为每一个目录创建同样的文件,通过 ln 创建的链接(link)减少磁盘占用量。
  链接分类:软件链接及硬链接。
  软链接:

  1. 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  2. 软链接可以 跨文件系统 ,硬链接不可以
  3. 软链接可以对一个不存在的文件名进行链接
  4. 软链接可以对目录进行链接

  硬链接:

  1. 硬链接,以文件副本的形式存在。但不占用实际空间。
  2. 不允许给目录创建硬链接
  3. 硬链接只有在同一个文件系统中才能创建

  需要注意:
   第一:ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
   第二:ln的链接又分软链接和硬链接两种,软链接就是ln –s 源文件 目标文件,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接 ln 源文件 目标文件,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
   第三:ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
  常用参数:

-b 删除,覆盖以前建立的链接
-s 软链接(符号链接)
-v 显示详细处理过程

  示例:
   1)给文件创建软链接,并显示操作信息

ln -sv source.log link.log

   2)给文件创建硬链接,并显示操作信息

ln -v source.log link1.log

   3)给目录创建软链接

ln -sv /opt/soft/test/test3 /opt/soft/test/test5

5.9 locate 命令

  locate 通过搜寻系统内建文档数据库达到快速找到档案,数据库由 updatedb 程序来更新,updatedb 是由 cron daemon 周期性调用的。默认情况下 locate 命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是 locate 所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb 每天会跑一次,可以由修改 crontab 来更新设定值 (etc/crontab)。
  locate 与 find 命令相似,可以使用如 *、? 等进行正则匹配查找
  常用参数:

-l num(要显示的行数)
-f   将特定的档案系统排除在外,如将proc排除在外
-r   使用正则运算式做为寻找条件

  示例:
   1)查找和 pwd 相关的所有文件(文件名中包含 pwd)

locate pwd

   2)搜索 etc 目录下所有以 sh 开头的文件

locate /etc/sh

   3)查找 /var 目录下,以 reason 结尾的文件

locate -r '^/var.*reason$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)

5.10 more命令

  功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。
  命令参数:

+n      从笫 n 行开始显示
-n       定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示 
-c       从顶部清屏,然后显示
-d       提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l        忽略Ctrl+l(换页)字符
-p       通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s       把连续的多个空行显示为一行
-u       把文件内容中的下画线去掉

  常用操作命令:

Enter    向下 n 行,需要定义。默认为 1 行
Ctrl+F   向下滚动一屏
空格键  向下滚动一屏
Ctrl+B  返回上一屏
=       输出当前行的行号
:f     输出文件名和当前行的行号
V      调用vi编辑器
!命令   调用Shell,并执行命令
q       退出more

  示例:
   1)显示文件中从第3行起的内容

more +3 text.txt

   2)在所列出文件目录详细信息,借助管道使每次显示 5 行

ls -l | more -5

  按空格显示下 5 行。

5.11 mv 命令

  移动文件或修改文件名,根据第二参数类型(如目录,则移动文件;如为文件则重命令该文件)。
  当第二个参数为目录时,第一个参数可以是多个以空格分隔的文件或目录,然后移动第一个参数指定的多个文件到第二个参数指定的目录中。
  示例:
   1)将文件 test.log 重命名为 test1.txt

mv test.log test1.txt

   2)将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中

mv llog1.txt log2.txt log3.txt /test3

   3)将文件 file1 改名为 file2,如果 file2 已经存在,则询问是否覆盖

mv -i log1.txt log2.txt

   4) 移动当前文件夹下的所有文件到上一级目录

mv * ../

5.12 rm 命令

  删除一个目录中的一个或多个文件或目录,如果没有使用 -r 选项,则 rm 不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

rm [选项] 文件…

  示例:
   1)删除任何 .log 文件,删除前逐一询问确认:

rm -i *.log

   2)删除 test 子目录及子目录中所有档案删除,并且不用一一确认:

rm -rf test

   3)删除以 -f 开头的文件

rm -- -f*

5.13 touch 命令

  Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
  ls -l 可以显示档案的时间记录。
  语法:

touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
  • a 改变档案的读取时间记录。
  • m 改变档案的修改时间记录。
  • c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
  • f 不使用,是为了与其他 unix 系统的相容性而保留。
  • r 使用参考档的时间记录,与 --file 的效果一样。
  • d 设定时间与日期,可以使用各种不同的格式。
  • t 设定档案的时间记录,格式与 date 指令相同。
  • –no-create 不会建立新档案。
  • –help 列出指令格式。
  • –version 列出版本讯息。

  示例:
   1)使用指令"touch"修改文件"testfile"的时间属性为当前系统时间,输入如下命令:

touch testfile                #修改文件的时间属性 

   2)使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file",输入如下命令:

touch file            #创建一个名为“file”的新的空白文件 

5.14 vim 命令

  Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

  1. 打开文件并跳到第 10 行:vim +10 filename.txt 。
  2. 打开文件跳到第一个匹配的行:vim +/search-term filename.txt 。
  3. 以只读模式打开文件:vim -R /etc/passwd 。

  基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。
后端开发面试题汇总(十二)Linux篇

5.15 whereis 命令

  whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。
  常用参数:

-b   定位可执行文件。
-m   定位帮助文件。
-s   定位源代码文件。
-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。

  示例:
   1)查找 locate 程序相关文件

whereis locate

   2)查找 locate 的源码文件

whereis -s locate

   3)查找 lcoate 的帮助文件

whereis -m locate

5.16 which 命令

  在 linux 要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:

which     查看可执行文件的位置。
whereis 查看文件的位置。
locate  配合数据库查看文件位置。
find        实际搜寻硬盘查询文件名称。

  which 是在 PATH 就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
  常用参数:

-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

  示例:
   1)查看 ls 命令是否存在,执行哪个

which ls

   2)查看 which

which which

   3)查看 cd

which cd(显示不存在,因为 cd 是内建命令,而 which 查找显示是 PATH 中的命令)

   4)查看当前 PATH 配置

echo $PATH

六、文档编辑命令

6.1 grep 命令

  强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。
  grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
  命令格式:

grep [option] pattern file|dir

  常用参数:

-A n --after-context显示匹配字符后n行
-B n --before-context显示匹配字符前n行
-C n --context 显示匹配字符前后n行
-c --count 计算符合样式的列数
-i 忽略大小写
-l 只列出文件内容符合指定的样式的文件名称
-f 从文件中读取关键词
-n 显示匹配内容的所在文件中行数
-R 递归查找文件夹

  grep 的规则表达式:

^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。 
$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。 
.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。  
*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*   #一起用代表任意字符。  
[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 
[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。  
\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。   
\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 
x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。  
x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。  
\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。  
\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。  
\b    #单词锁定符,如: '\bgrep\b'只匹配grep。

  示例:
   1)查找指定进程

ps -ef | grep svn

   2)查找指定进程个数

ps -ef | grep svn -c

   3)从文件中读取关键词

cat test1.txt | grep -f key.log

   4)从文件夹中递归查找以grep开头的行,并只列出文件

grep -lR '^grep' /tmp

   5)查找非x开关的行内容

grep '^[^x]' test.txt

   6)显示包含 ed 或者 at 字符的内容行

grep -E 'ed|at' test.txt

6.2 wc 命令

  wc(word count)功能为统计指定的文件中字节数、字数、行数,并将统计结果输出。
  命令格式:

wc [option] file..

  命令参数:

-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计词数,一个字被定义为由空白、跳格或换行字符分隔的字符串

  示例:
   1) 查找文件的 行数 单词数 字节数 文件名

wc text.txt

  结果:

7     8     70     test.txt

   2)统计输出结果的行数

cat test.txt | wc -l

七、磁盘管理命令

7.1 cd 命令

  cd(changeDirectory) 命令语法:

cd [目录名]

  实例:
   1) 进入根目录

cd /

   2) 进入 “home” 目录

cd ~

   3) 进入上一次工作路径

cd -

   4) 把上个命令的参数作为cd参数使用。

cd !$

7.2 df 命令

  显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间等信息,如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB 为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示:

-a 全部文件系统列表
-h 以方便阅读的方式显示信息
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地磁盘
-T 列出文件系统类型

  示例:
   1)显示磁盘使用情况

df -l

   2)以易读方式列出所有文件系统及其类型

df -haT

7.3 du 命令

  du 命令也是查看使用空间的,但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看:
  命令格式:

du [选项] [文件]

  常用参数:

-a 显示目录中所有文件大小
-k 以KB为单位显示文件大小
-m 以MB为单位显示文件大小
-g 以GB为单位显示文件大小
-h 以易读方式显示文件大小
-s 仅显示总计
-c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和

  示例:
   1)以易读方式显示文件夹内及子文件夹大小

du -h scf/

   2)以易读方式显示文件夹内所有文件大小

du -ah scf/

   3)显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和

du -hc test/ scf/

   4)输出当前目录下各个子目录所使用的空间

du -hc --max-depth=1 scf/

7.4 ls命令

  就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)、查看目录信息等等。
  常用参数:

ls -a 列出目录所有文件,包含以.开始的隐藏文件
ls -A 列出除...的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来

  示例:
   1)按易读方式按时间反序排序,并显示文件详细信息

ls -lhrt

   2)按大小反序显示文件详细信息

ls -lrS

   3) 列出当前目录中所有以"t"开头的目录的详细内容

ls -l t*

   4)列出文件绝对路径(不包含隐藏文件)

ls | sed "s:^:`pwd`/:"

   5)列出文件绝对路径(包含隐藏文件)

find $pwd -maxdepth 1 | xargs ls -ld

7.5 mkdir 命令

  mkdir 命令用于创建文件夹。
  可用选项:

-m: 对新建目录设置存取权限,也可以用 chmod 命令设置;
-p: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不在的目录,即一次可以建立多个目录。

  实例:
   1)当前工作目录下创建名为 t的文件夹

mkdir t

   2)在 tmp 目录下创建路径为 test/t1/t 的目录,若不存在,则创建

mkdir -p /tmp/test/t1/t

7.6 pwd 命令

  pwd 命令用于查看当前工作目录路径。
  实例:
   1)查看当前路径

pwd

   2)查看软链接的实际路径

pwd -P

7.7 rmdir 命令

  从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对其父目录的写权限。
  注意:不能删除非空目录。
   1)当 parent 子目录被删除后使它也成为空目录的话,则顺便一并删除:

rmdir -p parent/child/child11

八、网络通讯命令

8.1 ifconfig 命令

  ifconfig 用于查看和配置 Linux 系统的网络接口。
  查看所有网络接口及其状态:ifconfig -a 。
  使用 up 和 down 命令启动或停止某个接口:ifconfig eth0 up 和 ifconfig eth0 down 。

8.2 iptables 命令

  iptables ,是一个配置 Linux 内核防火墙的命令行工具。功能非常强大,对于我们开发来说,主要掌握如何开放端口即可。例如:
  把来源 IP 为 192.168.1.101 访问本机 80 端口的包直接拒绝:iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT 。
  开启 80 端口,因为web对外都是这个端口

iptables -A INPUT -p tcp --dport 80 -j ACCEP

  另外,要注意使用 iptables save 命令,进行保存。否则,服务器重启后,配置的规则将丢失。

8.3 netstat 命令

  Linux netstat命令用于显示网络状态。
  利用netstat指令可让你得知整个Linux系统的网络情况。
  语法

netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]

  参数说明:

-a或–all 显示所有连线中的Socket。
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
-c或–continuous 持续列出网络状态。
-C或–cache 显示路由器配置的快取信息。
-e或–extend 显示网络其他相关信息。
-F或–fib 显示FIB。
-g或–groups 显示多重广播功能群组组员名单。
-h或–help 在线帮助。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的Socket。
-M或–masquerade 显示伪装的网络连线。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o或–timers 显示计时器。
-p或–programs 显示正在使用Socket的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistice 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
-V或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定"-A unix"参数相同。
–ip或–inet 此参数的效果和指定"-A inet"参数相同。

  实例
   1)如何查看系统都开启了哪些端口?

[root@centos6 ~ 13:20 #55]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1035/sshd
tcp        0      0 :::22                       :::*                        LISTEN      1035/sshd
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               931/dhclient
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     6825   1/init              @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     8429   1003/dbus-daemon    /var/run/dbus/system_bus_socket

   2)如何查看网络连接状况?

[root@centos6 ~ 13:22 #58]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN
tcp        0      0 192.168.147.130:22          192.168.147.1:23893         ESTABLISHED
tcp        0      0 :::22                       :::*                        LISTEN
udp        0      0 0.0.0.0:68                  0.0.0.0:*

   3)如何统计系统当前进程连接数?

netstat -an | grep ESTABLISHED | wc -l 

  输出结果 177 。一共有 177 连接数。

   4)ping 命令
  Linux ping命令用于检测主机。
  执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
  指定接收包的次数

ping -c 2 www.baidu.com

   5)telnet 命令
  Linux telnet命令用于远端登入。
  执行telnet指令开启终端机阶段作业,并登入远端主机。
  语法

telnet [-8acdEfFKLrx][-b<主机别名>][-e<脱离字符>][-k<域名>][-l<用户名称>][-n<记录文件>][-S<服务类型>][-X<认证形态>][主机名称或IP地址<通信端口>]

  参数说明:

-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b<主机别名> 使用别名指定远端主机名称。
-c 不读取用户专属目录里的.telnetrc文件。
-d 启动排错模式。
-e<脱离字符> 设置脱离字符。
-E 滤除脱离字符。
-f 此参数的效果和指定"-F"参数相同。
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K 不自动登入远端主机。
-l<用户名称> 指定要登入远端主机的用户名称。
-L 允许输出8位字符资料。
-n<记录文件> 指定文件记录相关信息。
-r 使用类似rlogin指令的用户界面。
-S<服务类型> 设置telnet连线所需的IP TOS信息。
-x 假设主机有支持数据加密的功能,就使用它。
-X<认证形态> 关闭指定的认证形态。

  示例:登录远程主机

# 登录IP为 192.168.0.5 的远程主机
telnet 192.168.0.5 

九、系统管理命令

9.1 date 命令

  显示或设定系统的日期与时间。
  命令参数:

-d<字符串>  显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s<字符串>  根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u  显示GMT。
%H 小时(00-23)
%I 小时(00-12)
%M 分钟(00-59来表示)
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)
%a 星期的缩写。
%A 星期的完整名称。
%d 日期(01-31来表示)%D 日期(含年月日)%m 月份(01-12来表示)%y 年份(00-99来表示)%Y 年份(以四位数来表示)

  实例:
   1)显示下一天

date +%Y%m%d --date="+1 day"  //显示下一天的日期

   2) -d参数使用

date -d "nov 22"  今年的 1122 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)

9.2 free 命令

  显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。
  命令参数:

-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s<间隔秒数> 持续显示内存
-t 显示内存使用总合

  实例:
   1)显示内存使用情况

free
free -k
free -m

   2) 以总和的形式显示内存的使用信息

free -t

   3)周期性查询内存使用情况

free -s 10

9.3 kill 命令

  发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用"-KILL" 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。
  常用参数:

-l  信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a  当处理当前进程时,不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s  指定发送信号
-u  指定用户

  实例:先使用ps查找进程pro1,然后用kill杀掉

kill -9 $(ps -ef | grep pro1)

9.4 ps 命令

  ps(process status),用来查看当前运行的进程状态,一次性查看,如果需要动态连续结果使用 top
  linux上进程有5种状态:

运行(正在运行或在运行队列中等待)
中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

  ps 工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

  命令参数:

 -A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程

   1)显示当前所有进程环境变量及进程间关系

ps -ef

   2)显示当前所有进程

ps -A

   3) 与grep联用查找某进程

ps -aux | grep apache

   4)找出与 cron 与 syslog 这两个服务有关的 PID 号码

ps aux | grep '(cron|syslog)'

9.5 rpm 命令

  Linux rpm 命令用于管理套件。
  rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。

# 查看系统自带jdk
rpm -qa | grep jdk
# 删除系统自带jdk
rpm -e --nodeps 查看jdk显示的数据
# 安装jdk
rpm -ivh jdk-7u80-linux-x64.rpm

9.6 top 命令

  显示当前系统正在执行的进程的相关信息,包括进程 ID、内存占用率、CPU 占用率等
  常用参数:

-c 显示完整的进程命令
-s 保密模式
-p <进程号> 指定进程显示
-n <次数>循环显示次数

9.7 yum 命令

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

1.列出所有可更新的软件清单命令:yum check-update
2.更新所有软件命令:yum update
3.仅安装指定的软件命令:yum install <package_name>
4.仅更新指定的软件命令:yum update <package_name>
5.列出所有可安裝的软件清单命令:yum list
6.删除软件包命令:yum remove <package_name>
7.查找软件包 命令:yum search
8.清除缓存命令:
	yum clean packages: 清除缓存目录下的软件包
	yum clean headers: 清除缓存目录下的 headers
	yum clean oldheaders: 清除缓存目录下旧的 headers
	yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

  实例:安装 pam-devel

[root@www ~]# yum install pam-devel

十、备份压缩命令

10.1 bzip2 命令

  创建 *.bz2 压缩文件:bzip2 test.txt 。
  解压 *.bz2 文件:bzip2 -d test.txt.bz2 。

10.2 gzip 命令

  创建一个 *.gz 的压缩文件:gzip test.txt 。
  解压 *.gz 文件:gzip -d test.txt.gz 。
  显示压缩的比率:gzip -l *.gz 。

10.3 tar 命令

  用来压缩和解压文件。tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成。
  弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件
  常用参数:

-c 建立新的压缩文件
-f 指定压缩文件
-r 添加文件到已经压缩文件包中
-u 添加改了和现有的文件到压缩包中
-x 从压缩包中抽取文件
-t 显示压缩文件中的内容
-z 支持gzip压缩
-j 支持bzip2压缩
-Z 支持compress解压文件
-v 显示操作过程

  有关 gzip 及 bzip2 压缩:

gzip 实例:压缩 gzip fileName .tar.gz 和.tgz  解压:gunzip filename.gz 或 gzip -d filename.gz
          对应:tar zcvf filename.tar.gz     tar zxvf filename.tar.gz

bz2实例:压缩 bzip2 -z filename .tar.bz2 解压:bunzip filename.bz2或bzip -d filename.bz2
       对应:tar jcvf filename.tar.gz         解压:tar jxvf filename.tar.bz2

  实例:
   1)将文件全部打包成 tar 包

tar -cvf log.tar 1.log,2.log 或tar -cvf log.*

   2)将 /etc 下的所有文件及目录打包到指定目录,并使用 gz 压缩

tar -zcvf /tmp/etc.tar.gz /etc

   3)查看刚打包的文件内容(一定加z,因为是使用 gzip 压缩的)

tar -ztvf /tmp/etc.tar.gz

   4)要压缩打包 /home, /etc ,但不要 /home/dmtsai

tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

10.4 unzip 命令

  解压 *.zip 文件:unzip test.zip 。
  查看 *.zip 文件的内容:unzip -l jasper.zip 。