[关闭]
@mrz1 2018-01-01T14:11:47.000000Z 字数 5260 阅读 696

linux-基础问题

笔记


主要内容

  • 基础问题

linux哲学思想

  1. 一切都是文件(包括硬件)
  2. 小型,单一用途的程序
  3. 链接程序,共同完成复杂的任务
  4. 避免令人困惑的用户界面

文件名规则?

文件名最长255个字节
包括路径在内文件名称最长4095个字节
蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
$ cat /etc/DIR_COLORS 定义文件的颜色
除了斜杠和NUL,所有字符都有效.但使用特殊字符的目录名和文件不推荐使用,有些字需要用引号来引用它们。
标准Linux文件系统(如ext4),文件名称大小写敏感。例如: MAIL, Mail, mail, mAiL

Linux中内部命令与外部命令的区别?

内部命令在系统启动时就调入内存,由shell自带的,而且通过某命令形式提供,是常驻内存的,所以执行效率高。
外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。

内部命令用户输入时系统调用的速率快,不是内置命令,系统将会读取环境变量文件.bash_profile、/etc/profile去找PATH路径。
然后在提一下命令的调用,有些历史命令使用过后,会存在在hash表中,当你再次输入该命令它的调用会是这样一个过程。
hash——>内置命令——>PATH 命令的调用其实应该是这样一个过程。

enable既可以查看内部命令,同时也可以判断是否为内部命令
$ type pwd 查看是否为内部命令
pwd is a shell builtin

Linux中的命令执行过程?

用户是通过shell与系统交互的; 1.bash内置查找 2.hash查找 3.path环境变量目录找。
例:ls命令的执行过程,下面进行简单分析:
1. shell不断询问是否有键盘输入,用户以enter结束键盘输入后,shell程序以空格为分隔符,得到"ls","-l",".c",三个字符串。
2. shell发现第三个字符串包含"
"通配符,就会在当前路径(或指定路径)下搜索满足这个通配符的文件。有bar.c和foo.c两个文件,然后展开成{"ls","-l","bar.c","foo.c"}四个字符串,并保存在argv这个二维字符数组中,并赋值argc为4。
3. shell然后搜索PATH这个全局变量保存的路径,寻找一个叫"ls"的命令。如果存在,则fork()一个子进程,调用exec()加载运行ls命令。ls的main(int argc, string ** argv)函数的参数就是从shell那里得来的。若不存在就会提示用户"command not found"。
4. ls程序执行后,会分析argc和argv,"-l"表示这是一个选项开关,表明用户想得到文件的详细信息,并把这个开关量保存,以便最后输出的时候选择信息的格式。
5. ls执行完既定的步骤后,退出并返回退出码,若成功则返回0,否则根据错误的不同返回不同的非零数字。
6. shell在得到成功退出码后,继续等待用户输入。

startx与init 5区别?

startx是单纯的以执行命令者的身份启动X图形界面。任意用户可以执行。
init 5 则是启动 runlevel 5所对应的服务,并运行图形登录管理器,由用户选择以何种身份登录。只有root有权执行。

什么是shell?

shell是linux系统的用户界面,提供了用户与内核进行交互操作的一种接口,它能接收用户输入的命令并把它送入内核去执行
也被称为linux命令解释器
是一种高级程序设计语言

GiB 与GB

Gibibyte(giga binary byte的缩写)是信息或计算机硬盘存储的一个单位,简称GiB。”GiB”的二进制单位,专用来标示”1024进位”的数据大小
GB(gigabyte)是十进制的容量单位
一个160GB的硬盘其实只有149.0116119 GiB,厂商并没有欺骗顾客,更由于无法精确控制盘面的容量,大多数时候都会提供多余的空间以确保品质。

块设备与字符文件?

二进制

1=2^0=1
10=2^1=2
100=2^2=4
1000=2^3=8
10000=2^3=16
100000=2^5=32
1000000=2^6=64
10000000=2^7=128

分区

MBR GPT(全部是主分区)
主分区: 引导系统,一个硬盘最多4个,可以直接存放数据
扩展分区:最多一个,可没有,不能直接存放数据,划分更小分区
逻辑分区:
1-4主或扩展分区
5......逻辑分区

用户空间、内核空间、硬件

用户空间:普通软件
内核空间:操作系统
用户空间与内核空间切换叫上下文切换
硬件:内存、cpu、存储等

双引号、单引号、反引号区别?

双引号:最傻,都是字符串
单引号:只能识别一部分
反引号:命令和变量都能识别 和$()一样

ABI与API

abi:与操作系统打交道,跑在系统之上,软件与操作系统接口叫ABI
api:开发接口

CentOS7网络配置文件

  1. [root@centos7 ~]#cat /etc/sysconfig/network-scripts/ifcfg-ens33
  2. TYPE=Ethernet
  3. PROXY_METHOD=none
  4. BROWSER_ONLY=no
  5. BOOTPROTO=dhcp
  6. DEFROUTE=yes
  7. IPV4_FAILURE_FATAL=no
  8. IPV6INIT=yes
  9. IPV6_AUTOCONF=yes
  10. IPV6_DEFROUTE=yes
  11. IPV6_FAILURE_FATAL=no
  12. IPV6_ADDR_GEN_MODE=stable-privacy
  13. NAME=ens33
  14. UUID=28346009-5195-4840-863c-2e92eeecaa58
  15. DEVICE=ens33
  16. ONBOOT=yes

DAS、NAS和SAN特点和区别是什么?加上iSCIS?

DAS即直接连接存储(Direct Attached Storage)
NAS即网络接入存储(Network Attached Storage)
SAN即存储区域网络(Storage Area Network)





三种模式中,DAS模式最简单,就是直接把存储设备连接到服务,而这种模式最大的问题是:每个应用服务器都要有独立的存储设备,这样增加了数据处理的复杂度,随着服务器的增加,网络系统效率也急剧下降。为了解决上述问题,提出了NAS和SAN两种模式。
NAS:通过TCP/IP协议访问数据,采用业界标准文件共享协议,如果NFS、HTTP、CIFS实现共享。
SAN:通过专用光纤交换机访问数据,采用SCSI、FC-AL接口。NAS和SAN最本质的区别就是文件管理系统在哪里。如图1所示,SAN结构中,文件管理系统(FS)分别在每一个应用服务器上面,而NAS则是每个应用服务器通过网络共享协议,使用同一个文件管理系统。即NAS和SAN存储系统的区别就是NAS有自已的文件管理系统。

三个时间戳问题?

  1. [root@centos7 app]#stat null.txt
  2. File: null.txt
  3. Size: 0 Blocks: 0 IO Block: 4096 regular empty file
  4. Device: 803h/2051d Inode: 68 Links: 1
  5. Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
  6. Context: unconfined_u:object_r:etc_runtime_t:s0
  7. Access: 2017-11-18 18:53:45.879430282 +0800 //访问时间:最后一次访问文件或目录的时间atime(access time)
  8. Modify: 2017-11-18 15:59:37.567615244 +0800 //修改时间:最后一次修改文件或目录的时间mtime(modify time)
  9. Change: 2017-11-18 18:53:45.879430282 +0800 //改变时间:最近更改文件的时间,包括文件名、大小、内容、权限、属主、属组等。ctime(change time)
  10. Birth: -
  11. ls -lc 获取文件最后一次状态的改变时间
  12. ls -l 获取文件最后一次内容修改的时间
  13. ls -lu 获取文件最后一次访问的时间
  14. stat 查看三个时间
  15. touch:创建文件,修改时间戳
  16. -a 修改文件atime,ctime
  17. -m 修改文件mtime,ctime
  18. -t 指定时间YYMMDDHHMM.SS 修改atime,mtime
  19. -c 修改文件atime,mtime,ctime 文件不存在时不创建
  20. 查看文件可以更改文件的atime(访问时间)
  21. 更改文件的内容会同时更新文件的mtimectime(修改和改变)
  22. 更改文件的名称,大小,权限等只会更新文件的ctime(改变时间)

硬链接与软链接

下面用一个实例来说明硬链接和软链接。

  1. 现在目录下有两个文件,一个名为AAA,一个名为BBB
  2. 引用
  3. [root@centos7 app]#ls -il
  4. total 0
  5. 67 -rw-r--r--. 1 root root 8 Nov 18 19:41 AAA
  6. 68 -rw-r--r--. 1 root root 0 Nov 18 19:41 BBB
  7. 首先先做一个AAA的硬链接。
  8. 引用
  9. [root@centos7 app]#ln AAA AAAhard
  10. [root@centos7 app]#ls -il
  11. 67 -rw-r--r--. 2 root root 8 Nov 18 19:41 AAA
  12. 67 -rw-r--r--. 2 root root 8 Nov 18 19:41 AAAhard
  13. 68 -rw-r--r--. 1 root root 0 Nov 18 19:41 BBB

这里我们注意在创建链接前,AAA显示的链接数目为1,创建链接后
1. AAA和AAAhard的链接数目都变为2。
2. AAA和AAAhard的inode号是一样的,都是67。
3. AAA和AAAhard显示的文件大小也是一样,都是8B。
可见进行了ln命令的操作结果:AAA和AAAhard是同一个文件的两个名字, 它们具有同样的索引节点号和文件属性,建立文件AAA的硬链接,就是为 AAA的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm AAA,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:
1. 不允许给目录创建硬链接。
2. 不可以在不同文件系统的文件间建立链接。因为 inode 是这个文件在当前分区中的索引值,是相对于这个分区的,当然不能跨越文件系统了。

接着我们做一个指向BBB的软链接,软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。

  1. 引用
  2. [root@centos7 app]#ln -s BBB BBBsoft
  3. [root@centos7 app]#ls -il
  4. 67 -rw-r--r--. 2 root root 8 Nov 18 19:44 AAA
  5. 67 -rw-r--r--. 2 root root 8 Nov 18 19:44 AAAhard
  6. 68 -rw-r--r--. 1 root root 0 Nov 18 19:41 BBB
  7. 69 lrwxrwxrwx. 1 root root 3 Nov 18 19:46 BBBsoft -> BBB

从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。

区别:
1. 硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2. 在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3. 链接数目是不一样的,软链接的链接数目不会增加;
4. 文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B。因为BBB共有3个字符
5. 软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

当然软链接也有硬链接没有的缺点:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注