Linux学习笔记(1)

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目录下的文件。

运行init:

init进程是系统所有进程的起点,没有这个进程,系统中任何进程都不会启动。

init程序首先是需要读取配置文件/etc/inittab

运行级别:

许多程序需要开机启动,在windows叫服务,在linux叫做守护进程(deamon)。init进程的一大任务就是去运行这些开机启动的程序。Linux允许为不同的场合,分配不同的开机启动程序,叫做运行级别(runlevel)。也就是说,启动时根据运行级别,确定要运行哪些程序。

Linux系统有7个运行级别:

  • 运行级别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.syinit是每一个运行级别都要首先运行的重要脚本。

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

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

上面这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个shell脚本,接受5作为参数,去执行/etc/rc.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来自行设定。

建立终端

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程序来验证用户的身份。

用户登录系统

用户登录的方式有三种:

  • 命令行登录
  • ssh登录
  • 图形界面登录

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

Linux的账号验证程序是login,login会接受mingetty传来的用户名作为用户名参数。然后login会对用户名进行分析:如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。

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

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

Linux预设提供了六个命令窗口终端机让用户登录,默认登录是第一个窗口,也就是tty1,这六个窗口分别为tty1,tty2,tty3,...,tty6。可以切换。如果安装了图形界面,默认情况下是进入图形界面的。

Linux关机

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

关机指令为shutdown

sync 将数据由内存同步到硬盘中。

shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:

shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。

Shutdown –h now 立马关机

Shutdown –h 20:25 系统会在今天20:25关机

Shutdown –h +10 十分钟后关机

Shutdown –r now 系统立马重启

Shutdown –r +10 系统十分钟后重启

reboot 就是重启,等同于 shutdown –r now

halt 关闭系统,等同于shutdown –h now 和 poweroff

不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中。

关机的命令有:shutdown –h now halt poweroff 和 init 0

重启的命令有:shutdown –r now reboot init 6

Linux系统目录结构

  • /bin:bin是Binary的缩写,这个目录存放着最经常使用的命令
  • /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /dev:dev是Devices(设备)的缩写,该目录下存放的是Linux的外部设备,在linux中访问设备的方式和访问文件的方式是相同的。
  • /etc:这个目录用来存放所有的系统管理所需要的配置文件和子目录
  • /home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib:这个目录存放着系统最基本的胴体连接共享库,其作用类似于Windows里的dll文件,几乎所有的应用程序都需要用到这些共享库
  • /lost+found:这个目录一般是空的,当系统非法关机后,这里就存放了一些文件
  • /media:linux系统会自动识别一些设备,例如U盘,光驱等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了
  • /opt:这是给主机额外安装软件所拜访的目录。默认是空的
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里边的文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录
  • /sbin:s是Super User的意思,这里存放的是系统管理员使用的系统管理程序
  • /selinux:这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
  • /srv:该目录存放一些服务启动之后需要提取的数据
  • /sys:这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。 sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。 该文件系统是内核设备树的一个直观反映。 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  • /tmp:用来存放一些临时文件
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录
  • /usr/bin:系统用户使用的应用程序。
  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序
  • usr/src:内核源代码默认的防止目录
  • /var:这个目录下存放着不断扩充的东西,习惯将那些经常被修改的目录放在这个目录下,包括各种日志文件

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中第一个字符代表这个文件时目录、文件或链接文件等:

  • 当为[d]则是目录
  • 当为[-]则是文件
  • 若是[I]则表示为链接文档(link file)
  • 若是[b]则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
  • 若是[c]则表示为装置文件里面的串行端口设备,如键盘、鼠标(一次性读取装置)

接下来的字符中,以三个为一组,且均为[rwx]三个参数,分别代表可读read、可写write、可执行execute。需要注意的是,这三个权限的位置不会改变,如果没有权限就会出现减号-。

属主指该文件的拥有者

属组表示所有者的同组用户。

可以使用数字来代表各个权限:

r:4

w:2

x:1

每种身份(owner/group/ohers)各自的三个权限分数是需要累加的。

Linux文件与目录管理

Linux的目录结构为树状结构,最顶级的目录为根目录/。

其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。

几个常见的处理目录的命令:

  • ls:列出目录
  • cd:切换目录
  • pwd:显示目前的目录
  • mkdir:创建一个新的目录
  • rmdir:删除一个空的目录
  • cp:复制文件或目录
  • rm:移除文件或目录

ls(列出目录):

ls选项与参数:

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

cd(切换目录)

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

mkdir(创建新目录)

mkdir [-mp] 目录名称

选项与参数:

  • -m:配置文件的权限,直接配置
  • -p:帮助直接将所需要的目录(包含上一级目录)递归创建起来

rmdir(删除空的目录)

rmdir [-p] 目录名称

-p:连同上一级空的目录一起删掉

cp(复制文件或目录)

[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
[root@www ~]# cp [options] source1 source2 source3 .... directory
  • -a:相当于-pdr的意思
  • -d:若来源档为连结档的属性(link file)
  • -f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次
  • -i:若目标档(destination)已经存在,在覆盖时会先询问动作的进行
  • -l:进行硬式连结(hard link)的连结档创建,而非复制文件本身
  • -p:连同文件的属性一起复制过去,而非使用默认属性属性(备份常用)
  • -r:递归持续复制,用于目录的复制行为
  • -s:复制成为符号连结档(symbolic link),即【捷径】文件
  • -u:若destination比source旧才升级destination

rm(移除文件或者目录)

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

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

Linux文件内容查看

常用命令:

  • cat:从第一行开始显示文件内容
  • tac:从最后一行开始显示
  • nl:显示的时候输出行号
  • more:一页一页的显示文件内容
  • less与more类似,但是更好的是可以往前翻页
  • head:只看头几行
  • tail:只看尾巴几行

Linux磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题

Linux磁盘管理常用三个命令为df、du和fdisk:

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间的使用量
  • fdisk:用于磁盘分区

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

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

选项与参数:

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

du命令也是查看使用空间的,但是与df命令不同的是linux du命令是对文件和目录磁盘使用的空间的查看,还是df命令有一些区别的。

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

选项与参数:

  • -a:列出所有文件与目录容量,因为默认仅统计目录底下的文件量而已
  • -h:以人民较易读的容量格式(G/M)显示
  • -s:列出总量而已,而不列出每个个别的目录占用量
  • -S:不包括子目录下的总计,与-s有点差别
  • -k:以KBytes列出容量显示
  • -m:以MBytes列出容量显示

fdisk是Linux的磁盘分区表操作工具

fdisk [-l] 装置名称

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

磁盘格式化:磁盘分割完毕后自然是文件系统的格式化,格式化的命令如下:

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

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

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

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

选项与参数:

  • -t:给定档案系统的形式,若在/etc/fstab中已有定义或kernel本身已支援的则不需加上词参数
  • -s:义序一个一个执行fsck的指令来检查
  • -A:对/etc/fstab中所有列出来的分区做检查
  • -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]  装置文件名  挂载点

磁盘卸载命令umount语法:

umount [-fn] 装置文件名或挂载点

选项与参数:

  • -f:强制卸除!可以用在类似网络文件系统NFS无法读取到的情况下
  • -n:不升级/etc/mtab 的情况下卸除

vi/vim

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

命令模式:

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

  • i 切换到输入模式,以输入字符
  • x删除当前光标所在处的字符
  • :切换到底线命令模式,以在最底一行输入命令

命令行模式只有一些最基本的命令,因此仍要依靠命令模式输入更多的命令

输入模式:

在输入模式中,可以使用以下按键:

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

底线命令模式:

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多,基本的命令有:

  • q 退出程序
  • w 保存文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白课代表

我就是要在Win10中运行Win7!!!

很多时候我们使用的软件很“矫情”,有的只支持Windows10,有的对Windows7兼容性最好,尤其是课代表这种喜欢折腾,经常和各种软件打交道的人来说,只有一...

18920
来自专栏北京马哥教育

Linux 线程浅析

关于linux线程 在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实...

56670
来自专栏静晴轩

详解 Cookie 纪要

从事 Web 开发已有近17个月;在学以致用的工作学习里,对于不怎么使用的部分,多少有些雾里探花的窘迫感~差不多是了解一二,然而又非真切的明晰;这就使得再用的时...

35690
来自专栏武军超python专栏

2018年8月1日学习linux中的vi编辑器和多python环境的管理软件Anaconda,miniconda的使用

********************** 今天遇到的新单词: fail  n/v失败 file  n文件 extract v提取 verify...

26920
来自专栏北京马哥教育

Python 官方推荐的一款打包工具

原文链接:https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipen...

37750
来自专栏java思维导图

架构师详解:Nginx 架构

原文链接:https://my.oschina.net/u/3770281/blog/1802493

16020
来自专栏Sorrower的专栏

内核必须懂(二): 文件系统初探

12250
来自专栏Netkiller

一次切割日志引发的血案

一次切割日志引发的血案 很多应用程序会产生日志,有些程序已经实现了日志切割,一般是每天一个文件。但有时这个切割并不能满足我们的需求,例如我们需要颗粒度更细的切割...

37290
来自专栏软件测试经验与教训

看图说话:文件包含(File Inclusion)漏洞示例

作为测试人员,我们常常听到“安全测试”这个词,但鲜有人真正做过安全测试。从我们的职责“保障质量”角度来说,说是一种“失职”也不为过。那么安全测试是什么,究竟怎么...

24210
来自专栏IT派

Python 官方推荐的一款打包工具

在thoughtbot,我们用Ruby和Rails工作,但通常我们总是尝试使用最合适的语言或者框架来解决问题。我最近一直在探索机器学习技术,所以Python使用...

12640

扫码关注云+社区

领取腾讯云代金券