Linux入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux入门相关的知识,希望对你有一定的参考价值。
目录:
一、根文件系统层级标准FHS 二、bash的基础特性(一) 1.命令历史 2.命令行补全 3.路径补全 4.命令行展开 5.命令执行的状态结果 6.引用 7.快捷键 三、目录管理相关命令mkdir、rmdir、tree 四、引用命令的执行结果 五、文件查看类命令 六、文件管理和变量命令:cp、mv、rm 七、浮点数据如何存储
一、根文件系统FHS:
1.帮助信息获取:
help,--helpl,man,info
自带文档(README,CHANGELOG)官方文档,
发行版的文档:
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入门的主要内容,如果未能解决你的问题,请参考以下文章
Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)