首页 > 代码库 > Linux入门(四)

Linux入门(四)

目录:

一、根文件系统层级标准FHS
二、bash的基础特性(一)
    1.命令历史
    2.命令行补全
    3.路径补全
    4.命令行展开
    5.命令执行的状态结果
    6.引用
    7.快捷键
三、目录管理相关命令mkdir、rmdir、tree
四、引用命令的执行结果
五、文件查看类命令
六、文件管理和变量命令:cp、mv、rm
七、浮点数据如何存储

一、根文件系统FHS:

1.帮助信息获取:

help,--helpl,man,info

自带文档(README,CHANGELOG)官方文档,

google

发行版的文档:

Linux Kernel:Documentation

whatis COMMAND

man 章节号码 COMMAND

1.用户命令

2.系统调用

3.库调用

4.设备文件及特殊文件 

5.文件格式,配置文件格式等

7.杂项

8.管理工具及守护进程

1,5用户最直接接触,4最特殊,8守护

man 内容:

NAME :功能说明

SYNOPSIS:语法格式 //英语摘要,大纲

OPTIONS:选项

man语法格式

【】可省略

《》必须提供的

|多选一

{} 分组

... 同类的内容可以出现多次

man后的操作:

j,k 行

ctrl+d/u 半瓶

空格/b  一个屏幕

q 退出

G 定行

/keyword 关键字

?keyword 向上

基础命令:

pwd,cd,ls,echo,date,clock,cal,hwclock,cat,tac,file,tty

halt,poweroff,shutdown,reboot

2.Linux的组成部分

|——————————---|

|应用        |

|-----|-------| |

|shell|库函数 | | //有的程序可以直接调用system call

|—————---|———---|

|系统调用 | //内核把不同的硬件规格封装,然后对外提供系统调用

|---------------————|

|内核 |

|---------------————|

|硬件 | //只有内核才能够驱动硬件

|---------------————|

//应用只有通过系统调用,和内核交互

静态编译:库直接在程序中,程序运行的时候,不再调用系统的库

动态编译:程序运行的时候,需要调用系统的库

区别:在编译的时候,是否将对应的库,复制编译到该程序中

Linux:glibc库

静态:移植方便,但是体积大

动态:需要移动响应的库文件,体积小

假如多个程序运行,都需要动态链接一个库,只需要在内存中放一份即可

3.终端:

硬件设备,关联的一个用户接口

进程的类型:

与终端相关:通过终端启动

与终端无关:不是通过终端启动,操作引导启动过程当中

OS:就是内核文件+各种程序文件 //shell也可以认为是一种应用程序

静态:kernel,application

应用程序的文件:二进制文件,库文件,配置文件,帮助文件

文件系统:

层级结构

分区:就是把一个大空间,分割成多个小空间

4.FHS

OS开机刚启动的时候,目录树是没有被激活的

开机后先加载;BIOS中的一段程序,然后加载内核文件//但是内核文件是放在目录树中的

FHS:filesystem hierarchy standard文件系统层级结构标准

/bin:所有用户管理使用的基本命令程序文件

     /sbin:供系统管理使用的工具程序

/boot:引导加载器必须用到的各种静态文件:kernel,initramfs(initrd),grub等

/dev:存储特殊文件或设备文件

设备有两种类型:字符设备{线性设备}有时序的 //发送abc,一个挨着一个发,键盘块设备{随机设备}

                                                                    //发送abc,打包成一个进行发送,硬盘

//硬盘上事划分大小相等的块block,例如16个,4096个,

//这样访问速度快

//可以任意,访问随机位置

/etc:系统程序的配置文件,只能为静态

/etc下也有层级目录,有的是必须的。包含着各种

/etc/X11 X-window目录所在地

/home :普通的家目录的集中位置;一般每个普通用户的家目录

/root:管理员的家目录,建议使用普通用户登录,su到root

/lib:库文件和内核模块所在地

libc.so.*  动态链接C库

ld* 执行时 链接器/加载器

modules 可装载的内核模块

/lib64 :64bit系统特有的存放在64位共享库的路径;

但是modules目录在centos中,依然放在 /lib下

/mdeia :常见便携设备挂在点:floppy,cdrom,cd

/mnt :其它文件系统的临时挂载点

/opt :第三方的软件安装位置

/src:当前主机为服务提供的数据

/tmp:临时文件,几乎所有的程序,都会产生临时文件,可供所有用户写入,有特殊权限

/usr:全局,共享,只读数据路径,是一个层级目录

bin,sbin,lib,lib64,...

include:C程序头文件

share:命令手册页和自带文档架构特有的文件的存放位置

local:另一个层级目录,安装本地应用

X11R6:X-window程序的安装位置

src:程序源码文件的存储位置

//安装两个版本的软件时候,一个可以安装在usr上{一个层级目录},另一个安装在/usr/local{另一个层级目录}

//也通常用于安装第三方程序

/var 层级目录,存储常发生变化的数据的目录

cache:应用缓存数据

lib:变量状态信息

local:/usr/local提供变化的数据

lock:锁文件

log:日志文件

opt:变化的数据for /opt

run:运行进程相关的数据

spool:应用程序的spool数据

tmp:系统重启之后,依然需要保留的临时数据

cache Application cache data

lib Variable state information

local Variable data for /usr/local

lock Lock files

log Log files and directories

opt Variable data for /opt

run Data relevant to running processes

spool Application spool data

tmp Temporary files preserved between system reboots

/proc:内核和进程信息的虚拟文件系统,他们多为内核参数,运行时间

例如net.ipv4.ip_forward,虚拟为net/ipv4/ip_forward,存储于/proc/sys,因此其完整路径为/proc/sys/net/ipv4/ip_forward

//虚拟文件系统:基于内存的,重启丢失

/sys:sysfs虚拟文件系统,提供了一种比proc更为理想的访问内核数据的途径

sys比/proc/sys更为新颖和方便,站在前任的肩膀上的

主要用来管理linux设备提供统一模型的接口

    https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/

5.Linux系统上的文件类型:

-:常规文件,即

d:directory,目录文件

b:block device块设备,映射块设备,支持以“block”为单位进行随机访问

c:character device:字符设备,支持以“character”为单位进行线性访问

主设备号,次设备号 //一个设备对应一个主设备号

8位二进制:0-255

l:symbolic link 符号链接文件,类似于windows的快捷方式

p:pipe 管道符,命名管道

s:socket,套接字文件:

6.基本命令://

shell内建命令 //但是shell自身是外部命令

bash:bash命令自带很多命令//type,alias就是自建命令

外部命令

ifconfig

注意:命令可以有别名,别名可以与原名相同,此时原名被隐藏

例如

type ls //是ls --color的缩写

\ls //此时就不会执行 --color,调用原命令

命令别名:

alias //查看所有的别名记录

alias NAME=‘COMMAND‘ //只对当前shell有效

unalias cls //取消别名记录 //只对当前shell进程有效

限制:时间限制:重启无效,位置限制:只对当前shell有效

自动有效:/root/.bashrc

/etc/aliases 是伪每个账号取别名,例如常见的email

which 显示命令的完整路径

which --skip-alias ls

whatis 查看帮助文档

whereis

-b 二进制程序文件路径

-m 手册文件

-s 源码文件

w:增强版本的who,谁登陆了,都在做什么

who 查看登录的用户

-b 系统上一次启动时间

-r 当前的运行级别

-l 登录进程

-u 登录的用户

type 是否为内建的命令



二、bash的基础特性(一)

1.命令历史
2.命令行补全
3.路径补全
4.命令行展开
5.命令执行的状态结果 
6.引用 
7.快捷键

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

1.命令历史

    每一个用户使用的命令历史是不同的

命令保存在 /root/.bash_history 文件中

定制history的功能,可通过环境变量实现

echo $HISTSIZE //改变命令历史的条数

每一个用户登录的时候,是加载本地的history文件到内存中的,

系统关机或用户退出的时候,会把内存中的数据写入到硬盘中去

echo $HISTFILESIZE

history文件大小1000 //保留1000条命令

history [-c] [-d偏移量] [n]

-c 清空命令历史,清空的事内存中的记录

-r 读取已经保存的文件

-d 指定删除某条记录

history -d 676 5 //从第几条,向后删除几条

history -anrw [文件名]

-a 同步:当前命令的历史,追加到历史文件中,//把内存中的命令历史,追加到文件中

-n 从历史文件中,毒素所有未被读取的行

-r 读取历史文件并将内容追加到历史列表中

-w 常用:写入到历史文件中

history -ps 参数 [参数..]

history 10 //显示最近10条

history > a //追加到该文件中

history 《 b //还原该文件

!1024

!STRING   执行命令历史列表中最近一次以开头STRING开头的命令

!!  再一次执行上一条命令,上下键功能一样

ESC .  按住esc然后松开,句号,调用上一个命令的参数

!$  也会调用最后一个值

注意:命令的重复执行,有时候需要依赖于幂等性

控制命令记录的方式

HISTCONTROL 取值有三个

ignoredeups :忽略重复的命令

ignorespace :忽略以空白字符开头的命令

ignoreboth :以上两者同时生效

2.命令行补全

        shell程序在接受到用户执行命令的请求,分析完成之后,最左侧的字符串会被当做命令

命令处理机制:

查找内部命令:

根据PATH环境变量中设定的目录,自左向右逐个搜索目录下的文件名

修改PATH,建议修改.bashrc文件

export  PATH=“$PATH:/usr/bin"

给定的大头字符串如果能唯一标识某命令程序文件,则直接补全

不能唯一标识某命令,再击tab键一次,会给出列表

shell内建--->$PATH(自左向右)

3.路径补全

    在给定的起始路径下,以对应路径下的打头子串来逐一匹配起始路径下的每一个文件;

tab:

    如果能唯一标识,则直接补全

    否则,再一次tab,给出列表

4.命令行展开

    ~:自动展开为用户的家目录,或指定的用户的家目录

    {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径。

5.命令执行的状态结果 

    bash通过状态返回值来输出此结果

成功:0

失败:1-255

    echo $?

6.引用 

    强引用:‘’

    若引用:“”

    命令引用:· · 反引号

    命令引用:建议使用$(COMMAND)

$(COMMAND)

或者‘COMMAND‘

mkdir $(date +%H-%M-%S).dir


7.快捷键

    ctrl + a //跳转到命令行首部

    ctrl + e //跳转到行尾

    ctrl + u //删除光标位置到行首

    ctrl + k //删除光标所在处,到行尾的所有字符

    ctrl + l :清屏,相当于clear

三、目录管理相关命令mkdir、rmdir、tree

文件类型:-,d,c,b,l,p,s

目录:

mkdir [OPTIION] ... DIRECTORY

-p:自动创建父目录

-v:显示创建过程

-m:直接设定其权限

mkdir -p x/y/{A,c,b}

rmdir 删除空目录

-p 删除某目录,如果其父目录为空,则一并删除之

tree 显示目录树

-L 显示的层级,深度,默认显示所有层级

-d 只显示目录

-f 显示全路径


四、引用命令的执行结果

    $(COMMAND)

    或者‘COMMAND‘

    mkdir $(date +%H-%M-%S).dir    


五、文件查看类命令

    cat,tac,head,tail,more,less,stat,touch

    分屏查看命令:more ,less

        more /etc/rc.d/init.d/functions 查看内容

    特点:翻屏至文件尾部后自动退出

less /etc/rc.d/init.d/functions

    head 前几行,默认前10行

-n 10

-10 

    tail 尾几行

        -n 10

-10 

        -f //查看文件尾部内容结束后不退出,跟随显示新增的行

    stat 显示文件的状态

        文件:两类数据

    元数据:metadata

    数据:data

时间戳:

    access time最近访问:最近查看,cat命令获取,

    文件系统优化了以后,最近几s内的频繁访问,时间戳是不会改变的

        modify time最近更改:修改,新增加,减少

change time最近改变{改动}:元数据改变

    touch 修改文件的时间戳 //摸一下,就可以改变时间戳

        touch bb //bb存在,就会修改为当前的时间戳,没有就会创建该文件

//bb存在,bb的内容是不会改变的

-c file存在,就修改时间戳,否则不进行任何操作

-a|-m|-c //改变时间是不能手动指定的

-t STAMP

[CC|YY]MMDDhhmm[.ss] //年月日时分.秒

    

六、文件管理类命令及变量cp、mv、rm

文件管理命令:copy

1.cp命令:复制文件

源文件:目标文件

        1)单源复制:cp [OPTION]... [-T] SOURCE DEST

//如果DEST不存在,则事先创建此文件,并复制源文件的数据流至DEST中

//如果DEST存在:

且为非目录文件:覆盖文件DEST的数据流

为目录:现在DEST目录下创建一个与源文件同名的文件,并复制其数据流

        2)多源复制:cp [OPTION]... SOURCE... DIRECTORY

如果DEST不存在,则必须为目录

如果DEST存在,

且为文件:错误

且为目录文件:分别复制每一个文件到目标目录中,并保持原名

3)cp [OPTION]... -t DIRECTORY SOURCE...

alias cp=“cp -i"

-i 交互interactive,覆盖之前,提醒用户确认

-f 强制覆盖目标文件

-r,-R recursive递归复制目录

在linux中目录及文件,在同一目录中,不能文件和目录同名

-d 复制链接文件本身,而不是源文件//假如符号链接使用的事相对路径的话,可能会失效

--preserve{ALTER_LIST} 保留属性,

默认:

mode,权限

ownership,属主

timestamp,时间戳

其他:

context,安全上下文

links,符号链接,复制符号链接本身

xattr,扩展属性

all,相当于-a,复制所有属性

-a archive,用于实现归档,所有权限内容

cp 直接复制的是,源文件,假如目标文件是符号链接的话

2.mv

mv [OPTION]...  [-T] SOURCE DEST //一对一

mv [OPTION]...  SOURCE ... DIRECTORY //多个源一个t

mv [OPTION]...  -t DIRECTORY SOURCE... //多个源一个t

mv a b //重命名a为b,可以为目录

-i 交互式

-f force

3.rm //linux删除后,找回来是特别困难的

-r,-R ,recursive//递归删除,包括目录

-i interactive交互式询问

-f force强制

危险操作:rm -rf /*

注意:所有不用的文件,建议不要直接删除,而是移动至某个专用目录;{模拟回收站}


变量:

命名的内存空间,

因为考虑到变量占用内存大小

变量具有类型的概念:整形,浮点型,字符型,布尔型,日期时间型

基本的类型:字符和数值

变量类型:

字符型

数值型:

精确数值型

近似数值型

变量类型确定后:存储格式、数据范围、参与运算

存储数值:用二进制

存储字符:ASCII码 //0-127个

字符集:用0和1对应了,和字符的关系

变量的赋值操作:

name=tom

把变量占用的内存空间,替换为tom


七、浮点数如何存储

    十进制的3.5,也就是二进制的11.1,移位后就是1.11×2的1次方。

    所以符号位为0,阶码为(1+127)10 = (128)10 = 1000 0000b,尾数为110 0000 0000 0000 0000 0000。

    所以全部连在一起就是 0100 0000 0110 0000 0000 0000 0000 0000,

3整数部分:3 = 11

0.5小数部分:0.5=1 乘2取余法

3.5=11.1b=1.11*2^1

11.1b=111*(2^-1)=35*(10^-1)

Linux入门(四)