简单学Linux
Linux简介:我们广义上常说的Linux其实是内核,而并不是一个操作系统,操作系统的组成需要内核和外围的应用程序,比如:Redhat,Debian等Linux发行商。这些发行商拿到Linux内核,在根据自己对Linux的理解加入一些外围的应用程序最后打包封装成一个可引导安装的镜像文件。
Linux的基本原则:
- 由单一的小程序组成,组合小程序完成复杂任务
- 尽量避免捕获用户接口
- 一切皆文件
- 程序的配置文件保存为纯文本格式
一个操作系统,底层是硬件,内核通过把底层硬件抽象为系统调用提供给上层应用程序,但是因为系统调用太过复杂,就有程序员把这些复杂的系统调用封装成库提供给上层应用程序,库(libary)无法单独执行,只能通过程序调用。在上层提供一个用户交互接口也就是shell,让我们用户能够操作应用程序。
- Linux文件及目录管理
Linux文件系统(ELF)说明:
1,Linux目录是一个倒置树状的目录结构,节点为目录,叶子节点为文件!
2,FHS:文件系统层级标准
/boot:系统启动相关的文件,如:内核文件vmlinux、initrd,以及grub(BootLoader)
/dev:设备文件,cdrom为光驱设备可以挂载
重点:特殊文件是没有大小的,设备文件中的2个数字是设备号,作为访问入口存在
设备号:主设备号,次设备号
b:块设备,随机访问,如:硬盘
c:字符设备,线性访问,按字符为单位,如:键盘、显示器是在显存中按位读取的
/etc:配置文件
/home:用户的家目录,每一个用户的家目录通常默认为/home,当然也可以通过命令创建用户时手动指定家目录的位置。
/root:管理员的家目录
/lib:库文件及(/lib/modules)内核模块文件
静态库:以.a结尾
动态库:在Windows上表现为.dll,在Linux上为.so
/media,/mnt:挂载目录
/opt:可选目录
/proc:伪文件系统,显示文件为内核映射的文件
/sys:跟硬件设备相关的属性映射文件
/tmp:临时文件目录
/var:可变化的文件
/bin:二进制可执行文件,用户命令
/sbin:管理员可执行命令
/usr:只读文件
3,文件命名规则:
1,长度不能超过255字符
2,可以使用字母、数字和下划线等作为目录和文件名,不能使用/
文件例如:
#ls -l /etc/passwd
-rw-r--r--. 1 root root 895 Mar 18 21:36 /etc/passwd
从做往右依次为:
文件类型:
-:普通文件
d:目录文件
b:块设备文件
c:字符设备文件
l:链接文件,符号链接,软链接文件
p:管道文件
s:套接字文件
文件权限:9位,每3位一组,rwx(读,写,执行),(属主,属组,其他)
文件被硬链接的次数
文件的属主
文件的属组
文件大小(size),默认单位是字节
文件的修改时间:最近一次被修改的时间
时间戳:
atime:文件的访问时间,例如:cat文件
mtime:文件的修改时间,修改了文件的内容
ctime:文件的改变时间,改变了文件的属性或者元数据。例如:权限,文件名
文件名
命令:ls
解释:列出指定目录下的文件
-l:长选项,显示文件的详细信息
-h:以用户容易识别的方式显示大小
-a:显示以.开头的文件(隐藏文件)
-m:用逗号“,”分隔显示文件和目录
--full-time:列出完整的日期与时间
-d:显示目录自身属性
-1:单行输出显示
-i:显示文件或目录的inode号码
-r:逆序显示文件
-t:按时间逆序显示
-R:递归显示文件和目录
例如:
<root@aironm /etc>
#ls -l --full-time /etc/passwd
-rw-r--r--. 1 root root 895 2018-03-18 21:36:37.213991268 +0800 /etc/passwd
命令:cd
解释:切换目录
~ USERNAME:切换到指定用户的家目录
-:切换到上一次的目录
例如:
<root@aironm ~/test1>
#cd /etc/
命令:type
解释:显示命令是内部命令还是外部命令
内置命令:内置在kernal
外部命令:在文件系统的某个路径下存在一个与命令相应的可执行文件
例如:
<root@aironm ~/test1>
#type cd
cd is a shell builtin
命令:pwd
解释:显示当前目录的路径
例如:
<root@aironm /etc/sysconfig/network-scripts>
#pwd
/etc/sysconfig/network-scripts
命令:su
解释:切换用户
su -:表示切换到管理员用户的家目录
命令:help
解释:查看内部命令的使用帮助
外部命令使用:--help或者-h来获取命令帮助
命令:man
解释:查看命令使用手册
命令:whatis
解释:查看命令出现在man的哪些章节
命令:file
解释:显示文件类型
命令:mkdir
解释:创建目录
-p:递归创建目录
-v:显示命令执行过程的详细信息
例如:
<root@aironm ~>
#mkdir -pv test1/test2/test3
mkdir: created directory `test1/test2'
mkdir: created directory `test1/test2/test3'
命令:rmdir
解释:删除空目录,不空的目录不能递归删除
-p:递归删除
命令:touch
解释:主要用来修改时间戳;也可以创建一个空文件
-c:不创建任何文件
-m:修改mtime,同时ctime也改变,因为文件的时间戳也是元数据
-a:修改atime,同时ctime也改变,因为文件的时间戳也是元数据
atime:文件的访问时间
mtime:文件内容的修改时间
ctime:文件的元数据改变时间
命令:tree
解释:显示目录树
命令:rm
解释:删除命令
-i:交互式,会询问用户是否删除
-f:强制删除
-r:递归删除
命令:cp
解释:复制文件,对于cp命令通常来说,只有一个目标,其他都是源
重点:复制一个文件到一个文件,多个文件到一个目录!
1,复制目录到其他目录
1,如果目标是文件,则不可复制
2,如果目标指定目录,则修改为指定目录名
3,如果目标不存在,则直接覆盖
-r:递归复制,用于复制目录
-p:保留源文件的属性
-a:归档复制,常用于备份
命令:stat
解释:查看文件元数据,时间戳
命令:cat
解释:查看文本文件内容
-A:显示文本文件所有
-n:显示行号,包含空白行
-E:显示文本文件行结束符号
-b:显示行号,不包含空白行
-s:当出现2个以上连续的空白行,只显示一行空白行
例如:
<root@aironm ~>
#cat -n /etc/issue
1 CentOS release 6.9 (Final)
2 Kernel \r on an \m
3
命令:tac
解释:倒序显示文本文件内容
命令:more
解释:查看文本文件
命令:less
解释:查看文本文件
命令:head
解释:查看文本文件从前往后
-n:查看前n行
命令:tail
解释:查看文本,从后往前
-n:查看后n行
-f:持续监听文件输出
命令:cut
解释:切割文件
-d:指定字段分隔符,默认TAB
-f:指定要显示的字段
-f 1,7:指定显示第1字段和第7字段
-f 1-3:指定显示第1字段到第3字段
例如(取passwd前3行并以冒号分隔取第一个字段):
<root@aironm ~>
#cut -d: -f1 /etc/passwd | head -n 3
root
bin
daemon
命令:sort
解释:排序命令,默认根据ASCII表升序排列(根据每一行的第一个字符依次排序)
-n:按照数值的大小排序
-r:逆序显示
-nr:按照数值大小的逆序显示,最大的数值在第一行然后依次往后一直到最小的数值!
-t:指定字段分隔符号
-k:以分隔的哪个字段进行排序
-u:重复的行只进行一次显示(必须是相邻完全重复的行,不相邻并不会去重)
-f:排序时不区分大小写
例如(以冒号分隔,以第三行排序并按照正常数值大小排序):
<root@aironm ~>
#sort -t: -k3 -n /etc/passwd
命令:uniq
解释:用于报告或忽略文件中的重复行
-d:只显示重复的行
-c:显示重复的行,并显示重复几次
-u:仅显示出一次的行
例如(查看文件中出现次数最多的数值):
<root@aironm ~/test1>
#uniq -c file1 | sort -nr | head -n 1
3 11
命令:wc
解释:计算文件的字符、行数、单词数
-l:只显示行数
-w:只显示单词数
-m:显示字符数
命令:tr
解释:可以对来自标准输入的字符进行替换、压缩和删除
例如:
#tr '[a-z]' '[A-Z]' < passwd
#tr -d 'a-zA-Z' < passwd
#tr -s ' ' '%' < passwd;压缩空格字符并替换为%号
-s:把连续重复的字符以单独一个字符表示,压缩字符
-d:删除出现在字符集中的所有字符,逐个字符处理,而不是单词处理
- Linux用户组管理及权限说明
用户:一个能有多大权限访问多少计算机资源
进程:进程是用户发起的,进程也是有属主的,进程是谁发起的,就以它的属主区访问文件!
安全上下文:
文件和目录定义了三种访问类型:
属主;属组;其他
文件和目录定义了三种访问权限:
r(可读);w(可写);x(可执行):可以在shell中由shell提供给内核,发起一个进程到内存中运行
对目录解释:
r(可列出):可以使用ls列出目录中的文件和目录
w(可删除、创建、修改文件名):可以在目录中创建和删除文件和目录
x(可进入):可以使用cd切换到该目录下;目录至少要有x权限,否则不能进入到该目录
对文件解释:
r(可读):可以使用cat查看命令显示文件内容
w(可写):可以修改文件内容
x(可执行):当文件内有可执行程序,该文件有x权限时,可以执行该文件
对权限用数字描述:
r:4
w:2
x:1
用户:
用户类别:
管理员:root,管理员用户的ID为0
普通用户:普通用户为1-65535
普通用户分为系统用户1-499和一般用户500之后
用户:UID;/etc/passwd,密码保存位置:/etc/shadow
组:GID;/etc/group
用户组:
管理员组:
普通组:
系统组:
一般组:
重点:每个用户都有自己默认的组叫基本组,拥有其他的组叫附加组,在创建用户时,没有指定用户的基本组,系统会为用户创建一个私有组,私有组同用户名一样,但GID可能不一样。
- BASH特性
BASH特性:
光标跳转:
Ctrl+a:跳转到行首
Ctrl+e:跳转到行尾
Ctrl+u:从当前位置删除到行首
Ctrl+k:从当前位置删除到行尾
Ctrl+左右方向键:单词跳转
命令补 全:
根据PATH环境变量搜索,按TAB补全。
命令替换:
$()或``:可以把命令执行结果输出,例如:#echo "This time is $(date +%F-%T)"
单引号,双引号,反引号:
单引号:强引用,不支持变量替换,例如:#echo 'name is $name'
双引号:弱引号,支持变量替换,例如:#echo "name is $name"
反引号:支持命令替换,例如:#echo "This time is $(date +%F-%T)"
文件名通配,用于文件目录匹配:
*:匹配任意长度任意字符(可以是0个字符)
?:匹配任意单个字符,只匹配一个字符
[]:匹配指定范围内的任意单个字符,例如:[123]
[-]:匹配指定范围内的任意单个字符,例如:[a-z]
[^]:匹配指定范围外的任意单个字符,例如:[^a-z],除了a到z之外的其他字符
[:space:]:表示空白字符
[:lower:]:表示小写字母
[:upper:]:表示大写字母
[:alpha:]:表示大小写字母
[:digit:]:表示数字
[:alnum:]:表示数字和大小写字母
命令:bash
解释:可以打开一个子shell
重点:每个进程只知道内核和自己,并不知道其他进程,shell也一样
命令:history
echo $HISTSIZE:显示命令历史数量大小
解释:显示执行过的命令历史
重点:history命令是在缓存中,当当前登录用户登出时,就会把缓存中的命令写入到家目录下.bash_history文件中!
-c:清空命令历史
!#:#为命令编号
-w:手动执行把缓存中的命令保存到历史文件中
命令:pstree
解释:显示进程树
-p:显示进程ID
命令:alias
解释:命令别名
重点:如果想要永久有效,可以写入.bashrc,/etc/bashrc
命令:unalias
解释:删除命令别名
命令:export
解释:设置变量为全局变量
命名管道学习:
标准输入和输出
1,程序是由:指令和数据组成
2,打开的文件都有一个fd:file descriptor(文件描述符)
3,Linux给程序提供三种I/O设备
标准输入(STDON)-0默认接受来自键盘的输入
标准输出(STDOUT)-1默认输出到终端窗口
标准错误输出(STDERR)-2默认输出到终端窗口
4,把输出和错误重新定向到文件
>:把STDOUT重定向到文件
2>:把STDERR重定向到文件
&>:把所有输出重定向到文件
>:重定向文件会被覆盖
set -C:禁止将内容覆盖已有文件,但可追加
>| file:强制覆盖:cat /etc/passwd >| ./1.txt
set +C:允许覆盖
>>:追加重定向,在原有基础上追加新内容
合并标准输出和错误输出为同一个数据流进行重定向:
&>:覆盖重定向
&>>:追加重定向
5,管道
管道使用“|”表示,用来连接命令;
命令1|命令2|命令3|。。。
1,将命令1的标准输出发送给命令2的STDIN,命令2的标准输出发送给命令3作为标准输入
2,STDERR默认不能通过管道转发,可利用2>&1或|&实现
3,最后一个命令会在当前shell进程的子shell进程中执行用来
4,组合多种工具的功能
6,将数据重定向到文件,另外还可以提供一份重定向数据的副本作为后续命令的标准输入,简单讲就是把数据重定向到文件和屏幕上。
重点:存在缓存机制每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。
ls -l | tee file.txt | less
|
file.txt
-a:向文件中重定向时使用追加模式;
-i:忽略终端信号;
使用:
1,保存不同阶段的输出
2,复杂管道的故障排除
3,同时查看和记录输出
- grep及egrep、sed和awk说明
grep和正则表达式
正则表达式:
1,基本正则表达式:BRE
2,扩展正则表达式:ERE
grep命令支持基本正则表达式,egrep支持扩展的正则表达式,并且可以使用grep -E来指定使用扩展的正则表达式。
grep语法:
--color:高亮显示匹配到的字符串
-v:反转查找
-i:忽略大小写
-o:只输出文件中匹配到的部分
-q:静默模式,不输出任何信息
-A#:除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-B#:显示改行之前的内容
-C#:匹配改行之前和之后的#行
-E:使用egrep
基本正则表达式元字符
字符匹配
.:匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
以上[]当中的范围有以下几种方法:
[:alnum:]:表示所有数字和字母
[:aplha:]:表示所有字母
[:digit:]:表示所有数字
[:lower:]:表示所有小写字母
[:upper:]:表示所有大写字母
[:space:]:表示所有的空白字符
[:punct:]:表示所有的标点符号
次数匹配:
*:匹配前面的字符任意次
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,最多n次
\{0,n\}:匹配前面的字符最多n次
\{m,\}:匹配前面的字符至少m次
位置锚定:
^:行首匹配
$:行尾匹配
^$:匹配空行,不包含空格的行
^[[:space:]]*$:空行,包含空格
\<:词首锚定
\>:词尾锚定
\<PATTERN\>:匹配整个单词
- Redhat包安装RPM及YUM管理
Red Hat的系统上Yum使用:
1,列出已安装包
<root@aironm ~/test1>
#yum list installed
2,查找特定文件属于哪个软件包
<root@aironm ~/test1>
#yum provides file_name
3,使用yum安装软件
<root@aironm ~/test1>
#yum install package_name
4,使用yum更新软件
列出所有已安装包的可用更新
<root@aironm ~/test1>
#yum list updates
单独更新某个包
<root@aironm ~/test1>
#yum update package_name
更新所有包
<root@aironm ~/test1>
#yum update
5,使用yum卸载软件
只删除软件包而保留文件和数据文件
<root@aironm ~/test1>
#yum remove package_name
删除软件和它所有的文件
<root@aironm ~/test1>
#yum erase package_name
6,处理损坏的包依赖关系
清除yum仓库缓存
<root@aironm ~/test1>
#yum clean all
显示所有包的库依赖关系以及什么软件可以提供这些库依赖关系。
<root@aironm ~/test1>
#yum deplist package_name
7,配置yum软件仓库
查看现在正从哪些仓库中获取软件:
<root@aironm ~/test1>
#yum repolist
yum仓库定义配置文件(必须以.repo结尾):/etc/yum.repos.d/
定义yum仓库文件:
1,http://
2,https://
3,ftp://
4,file://
[base]
name=base
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=0
详解源码编译: