`

ma系列之-1-机器目录 系统结构

 
阅读更多

 


内核功能:
 进程管理
 内存管理
 文件系统
 网络功能
 硬件驱动
 安全机制

======================

 

Linux的基本原则:
1、由目的单一的小程序组成;组合小程序完成复杂任务;
2、一切皆文件;
3、尽量避免捕获用户接口;
4、配置文件保存为纯文本格式;

===============================

 

登陆机制:
login:
 用户名:用户ID
 
认证机制:Authentication,鉴别某个人就是这个人的过程
授权:Authorization 某人具有某些功能
审计:Audition (日志) 审计一般都是通过日志方式实现


prompt,命令提示符: 正常登陆后显示的内容
命令:
magic number: 魔数,某个程序是可执行的,那么这个程序开头位置的独特标示就是魔数,eg  #!/bin/bash
shebang


当在命令提示符下,输入命令并回车时,执行程序就会由bash shell提交给内核,内核会找执行程序的魔数,如果是当前内容可以理解的格式,
以及在有外围权限判断后
如果是则执行,否则,拒绝执行。

 

==============================================

 

命令类型:
 内置命令(shell内置),内部,内建
 外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件


type: 显示指定属于哪种类型
[root@hadoop4 ~]# type cd
cd is a shell builtin
[root@hadoop4 ~]# type date    外部命令,都有一个对应的外部可执行文件
date is /bin/date
=====================================

 

命令缓存:
环境变量:命名的内存空间
 变量赋值
 NAME=Jerry
 
 PATH: 使用冒号分隔的路径
 衡量程序执行速度的标准: 从列表中查询数据的速度随着列表长度变化而发生变化的比例/函数趋势
 O(1): 无论队列多长,我查询数据的速度(时间)都是没有区别的。
使用的命令都会被缓存起来。在执行命令时,直接去缓存中找对应命令所在的物理地址,提高速度,缓存为王的概念。因为缓存是放在hash键值对中,那么查询命令的速度是O(1)
[root@hadoop4 ~]# hash
hits    command
   2    /bin/ls

 

 

 

0 linux文件系统目录简介:

文件系统:
rootfs: 根文件系统

FHS:Linux

/boot: 系统启动相关的文件,如内核、initrd(内核访问文件系统的驱动),以及grub(bootloader)
/dev: 设备文件
	设备文件:
		块设备:随机访问(磁盘 硬盘, 随机访问,比如文件A,B,C访问时直接访问B,而不需要经过顺序A),数据块
		字符设备:线性访问(有次序的 eg:键盘),按字符为单位,一个字符一个字符来读取
		设备号:主设备号(major)和次设备号(minor)
/etc:配置文件
/home:普通用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/root:管理员的家目录,在将来操作中,千万不要拿root用户登录,此时的任何一个操作都可能是致命的,因为root用户拥有所有权限。
/lib:库文件
	静态库,  linux下是.a 结尾 , 直接链接到程序地址空间中,并作为程序一部分运行。
	动态库, window下叫.dll, linux下是.so (shared object),动态库是加载到内存中供程序共享使用的工具集
	/lib/modules:内核模块文件
/media:挂载点目录,常用于挂载移动设备, 挂载含义: 某个设备想要被linux识别,必须放在linux文件系统某个节点下(linux下所有东西都是文件/节点)
/mnt:挂载点目录,常用于挂载额外的临时文件系统 eg:第二块硬盘
/opt:可选目录,第三方程序的安装目录
/proc:伪文件系统,里面放着内核映射文件,在系统启动后里面才有内容
/sys:伪文件系统,跟硬件设备相关的属性映射文件
/tmp:临时文件, /var/tmp
/var:可变化的文件
/bin: 可执行文件, 用户命令
/sbin:管理命令

/usr:unify shared, read-only
	/usr/bin
	/usr/sbin
	/usr/lib

/bin, /sbin是跟系统启动相关的
/usr/bin, /usr/sbin 系统本身正常提供功能相关的
	
/usr/local:   第三方软件外围需要的,非必须,非关键性, eg: 将hadoop安装在 /usr/local目录下
	/usr/local/bin
	/usr/local/sbin
	/usr/local/lib

 

 

 

1 ls:

ls
	-l:长格式
		drwxr-xr-x 2 root root  4096 Jul 16 20:40 Desktop
		文件类型:
			-:普通文件 (f)
			d: 目录文件
			b: 块设备文件 (block)
			c: 字符设备文件 (character)
			l: 符号链接文件(symbolic link file)
			p: 命令管道文件(pipe)
			s: 套接字文件(socket)
		文件权限:9位,每3位一组,每一组:rwx(读,写,执行), r--
		文件硬链接的次数
		文件的属主(owner)
		文件的属组(group)
		文件大小(size),单位是字节
		时间戳(timestamp):最近一次被修改的时间
			访问:access
			修改:modify,文件内容发生了改变
			改变:change,metadata,元数据
	-h:做单位转换(human readable)  eg: # ls -l -h 或者 # ls -lh  结果: drwxr-xr-x 2 root root 4.0K Jul 16 20:40 Desktop 即显示文件大小时以kb为单位显示 让人看得懂
	-a: 显示以.开头的隐藏文件 (a 表示 all,显示所有文件,包括隐藏文件,隐藏文件的前缀是.)
		. 表示当前目录
		.. 表示父目录
	-A: (显示所有文件 但是不包括.和..)
	-d: 显示目录自身属性  eg: # ls -ld /root   则仅显示root的属性,而非显示root文件夹下所有文件属性
	-i: 每个文件都对应一个index node 简写为inode, 展示文件索引节点号: # ls -i /root 展示文件夹root下所有文件的文件节点号  结果为: 490570 anaconda-ks.cfg  ....
	-r: 逆序显示(默认按照文件名升序排序展示)  eg: # ls -r /root  结果: test1.sh  install.log.syslog  install.log  Desktop  anaconda-ks.cfg
	-R: 递归(recursive)显示  

 

 

2 cd:

 

change directory
	家目录,主目录, home directory
	cd ~USERNAME: 进入指定用户的家目录
	cd -:在当前目录和前一次所在的目录之间来回切换

 

 

 

3 type:

显示指定属于哪种类型  eg: # type ls   结果: ls is aliased to `ls --color=tty'

 

 

 

4 命令类型

	内置命令(shell内置),内部,内建
	外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件  eg: # which ls  结果:  /bin/ls  这个ls就是一个在文件系统中/bin/目录下的命令 就是一个外置命令

 

 

 

5 环境变量

变量赋值 使用# printenv 查看,部分查询结果如下:
TERM=vt100
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.1.156 61052 22
SSH_TTY=/dev/pts/2
USER=root

常用到的外部命令都放在 PATH=内,中间用:隔开。PATH=n:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
, 以ls命令为例,当最开始使用,会去path中找路径并执行路径下的命令,当执行完后,此命令被缓存起来,可以使用命令]# hash来查看
eg: 记录命令执行次数和命名名称
# hash
hits    command
   1    /usr/bin/printenv
  14    /bin/ls
这种缓存起来,是通过hash方式缓存,(键--->值,去缓存中查询的速度是O(1)--->衡量程序执行速度的标准,o(1)表示无论多长,都是瞬间找到)

 

 

6 date

时间管理
window: rtc real time clock 硬件时钟--->依靠晶体振荡器(需要电来支持,台式机主板的纽扣电池),每次操作系统开机时都是从硬件时钟当中读取的当前时间,然后设置当前系统时间。
Linux:  开机时,会通过rtc来得到硬件时钟,然后内核自身会通过软件方式模拟振荡器,并在系统内部维持一个时钟(系统时钟),我们通过date命令看到的这个时间就是系统时钟,这个时钟肯定
是没有硬件时钟精准。
硬件时钟linux下使用: # clock 来获取

# date --help

Usage: date [OPTION]... [+FORMAT]


FORMAT controls the output.

 %%   a literal %
  
%a   locale's abbreviated weekday name (e.g., Sun)
  
%A   locale's full weekday name (e.g., Sunday)
  
%b   locale's abbreviated month name (e.g., Jan)
  
%B   locale's full month name (e.g., January)
  
%c   locale's date and time (e.g., Thu Mar  3 23:05:25 2005)
  
%C   century; like %Y, except omit last two digits (e.g., 21)
  
%d   day of month (e.g, 01)

......


[root@sliver114 ~]# date +%Y

2014



[root@sliver114 ~]# date +"this year is %Y"

this year is 2014

[root@sliver114 ~]# date +%d
25

[root@sliver114 ~]# date +"this year is %Y, %ntoday is %d"

this year is 2014, 
today is 25

[root@sliver114 ~]# date +%T

00:47:05

[root@sliver114 ~]# date +%Y-%m-%d

2014-08-25



修改时间  date [MMDDhhmm[[CC]YY][.ss]]

 

 软硬件时钟:

 

hwclock  如果记不住,可以 hwclock --help来查看具体操作的含义
 -w: 以软件时钟为准,同步到硬件时间中
 -s: 以硬件时钟为准,同步到系统时间中

 

 

7 linux中符号的含义

常在 help --commond 或者 man commond中看到如下符号,
eg:  #man date
SYNOPSIS
       
date [OPTION]... [+FORMAT]
       
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

代表含义如下

<>:必选
[]:可选
...:可以出现多次
|:多选一
{}:分组

 

8 linux中命令简介(man)
获得命令的使用帮助:
内部命令:
	help COMMAND
外部命令:
	COMMAND --help
	
命令手册:manual
应用范围: 内外部命令都能使用
man COMMAND: 打开某个命令的帮助手册(eg: XX电器说明书),这个手册一般都是个文档
内部命令很少使用man来查看 使用help更为方便


man命令知识前奏: 
man command分章节,分为8个章节如下:
1:用户命令 User Commands (用户命令路径在/bin, /usr/bin, /usr/local/bin) 
2:系统调用  Linux Programmer  eg: # man 2 read 表示查看第二章节下的read用户手册
3:库用户
4:特殊文件(设备文件)
5:文件格式(解释某个配置文件的语法)  eg: # man 5 passwd
6:游戏
7:杂项(Miscellaneous)
8: 管理命令(管理命令路径在/sbin, /usr/sbin, /usr/local/sbin)

显示命令摘要信息并显示在哪个章节中:   使用命令 whatis command  eg:
# whatis ls   表示在第一章节有ls
ls                   (1)  - list directory contents
ls                   (1p)  - list directory contents

man命令详解:

MAN:
	NAME:命令名称及功能简要说明
	SYNOPSIS:用法说明,包括可用的选项
	DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
	OPTIONS:说明每一个选项的意义
	FILES:此命令相关的配置文件
	BUGS:
	EXAMPLES:使用示例
	SEE ALSO:另外参照

翻屏:
	向后翻一屏:SPACE
	向前翻一屏:b
	向后翻一行:ENTER
	向前翻一行:k

查找:   eg:  #man date下 输入/time 然后输入字母n 会将查到的time关键字一个个的向下翻
/KEYWORD: 自前向后
?KEYWORD: 自后向前
如果搜到多个同样关键词下:
n: 下一个
N:前一个 


q: 退出
 
 
 9 cal:
cal: calendar

# cal --help
cal: invalid option -- -
usage: cal [-13smjyV] [[month] year]


格式如上
# cal 12 2013

  December 2013    
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
 
 10 linux 命名规则
命名规则:
1、长度不能超过255个字符;
2、不能使用/当文件名
3、严格区分大小写
3、直接记住永远用英文就可以,并且永不会犯错误
 
 11 命令历史
命令历史:
查看命令历史:history (这些命令历史都在命令缓冲区中,当用户退出时,这些命令被报错到家目录下的.bash_history)
	-c:清空命令历史
	-d OFFSET [n]: 删除指定位置的命令
	-w:保存命令历史至历史文件中
用户操作的命令历史
HISTSIZE: 命令历史缓冲区大小,默认1000个
[root@sliver114 ~]# echo $HISTSIZE
1000

命令历史的使用技巧:
!n:执行命令历史中的第n条命令;
!-n:执行命令历史中的倒数第n条命令; 
!!: 执行上一条命令;
!string:执行命令历史中最近一个以指定字符串开头的命令
!$:引用前一个命令的最后一个参数; 


eg: 
[root@sliver114 ~]# history  找到需要的命令所在行,然后执行
[root@sliver114 ~]# !566   将566行的命令展示一遍,然后执行
echo $HISTSIZE
1000
 
 
12 命令补全 路径补全:
命令补全: 敲击一下tab会自动补全命令,如果输入字母太少,敲击两次tab 得到类似的所有命令
eg:
[root@sliver114 ~]# cl
cleanlinks  clear       clock       clockdiff   
同样方式适用于 路径补全, eg:
[root@sliver114 ~]# cd /etc/sys
sysconfig/   sysctl.conf  syslog.conf  
 
13 bash的特点和一些快捷键:
bash支持: 
1、命令历史、命令补全
2、管道、重定向
3、命令别名
4、命令行编辑
5、命令行展开
6、文件名通配
7、变量
8、编程

bash在命令行编辑时的一些快捷键:
光标跳转:
	Ctrl+a:跳到命令行首
	Ctrl+e:跳到命令行尾
	Ctrl+u: 删除光标至命令行首的内容
	Ctrl+k: 删除光标至命令行尾的内容
	Ctrl+l: 清屏
	
 
linux中配置文件注释的解释:
# no default banner path
#Banner none

# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server

如上所示
#后面有空格的,那么表示是注释
#后面紧跟着的,表示可以打开注释后生效的配置项
 
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics