Linux基础知识
Linux
Linux的概述
作为概念来说,Linux是什么东西,这个系统是怎么来的。发展的历程。
Linux是一个免费的类Unix操作系统,最初由Linus Torvalds和来自世界各地的开发者共同协助完成的。在GNU的公共开发许可证中开发的,源码对于任何一个人来说都是免费的。
1973年Unix 1984 Minix 1991 Linux 0.02
有哪些发行的版本,哪些最经典的,比方说centOS,Ubantu,红帽子,这些的特点,为什么要装centOS而不装ubantu,优缺点
centOS:RHEL的社区克隆版本,它去除了红帽子所有的商业版的东西。稳定性非常好,适合于服务器使用。
Ubantu:是一个以桌面应用为主的Linux操作系统。Ubuntu基于Debian发行版和GNOME桌面环境。
红帽子:带有商业软件,提供技术支持。
debian:debian适合于服务器的操作系统,它比ubuntu要稳定很多。
为什么选择centOS而不是Ubuntu
我们学习的命令,而不是图形化的操作,所有不需要用比较好的用户图形界面。而cenOS经过非常严格的测试。具备极高的稳定性与可靠性,免费下载及使用
用户界面:命令行,可视化界面(KDE,GNOE)。centOS用的是什么,GNOE还是KDE
命令的结构(有些命令有别名 比如 ls –l -l是别名 –other的别名)是先写选项再写参数还是
centOS既可以装GNOME桌面也可以装KDE桌面
GNOME和KDE的区别:
KDE:KDE包含大量的应用软件,项目规模庞大
GNOME:项目专注于桌面环境本身,由于软件较少,运行速度快,稳定性出色
基本的命令。Linux的文件系统和WIndows文件系统的区别。有哪些文件夹,有哪些常用的文件。安装一个软件,这个软件应该放在什么地方
Linux上是以挂节点的模式来构架文件系统,挂接点可能是根目录,也可能是子目录。文件或目录存放于最近的挂接点之下,如两个文件系统,/usr和/usr/local,那么/usr/local/bin就会存在/usr/local下,而非/usr。而Windos是以固定分区的模式,并以C、D盘的方式呈现。
bin:可执行二进制文件(命令)
boot:引导目录,引导所需要的文件
dev:硬件设备
etc:配置文件
home:家目录,每个普通用户在home下都有一个和用户名相同的文件夹,root用户除外
lib:Linux运行的库文件
lost+found:文件系统文件
media和mnt:挂载设备目录
opt:一般用于安装用户的大型软件
proc:系统的实时信息,保存内存中的信息
sbin:可执行二进制文件,sbin中只有super用户才能运行的命令
sys:系统底层信息
tmp:临时目录,内容自动清空
usr:用户安装的应用软件
var:用于保存经常变化的信息
安装的软件默认的安装位置为/usr/local
(重点)用户的基本概念,用户是由用户ID来决定的。修改用户的名字,用户的密码结合文件。哪些文件是保存用户的信息,代表什么意思,每一行代表什么
Linux中的文件,进程都是和用户绑定在一起的
用户的身份决定了能使用和操作的资源(文件,进程)
每个用户都有一个对应的uid
每个用户都隶属于一个或多个组
用户分为三种类型:超级管理员root用户(uid为0),系统用户(uid为1-499),普通用户(uid为500或以上)
/etc/passwd:保存用户信息
在早期的Linux中,/etc/passwd是管理用户的唯一场所,包括用户口令在内的所有信息都记录在这个文件中。出于安全性考虑,现在用户口令已经转而保存在/etc/shadow
每一行由7个字段组成,字段间使用冒号分隔。下面是各字段的含义。
-
登录名
-
口令占位符
-
用户ID号(UID)
-
默认组ID号(GID)
-
用户的私人信息:包括全名,办公室,工作电话,家庭电话等
-
用户主目录
-
登陆shell
/etc/shadow:文件用于保存用户的口令,当然是使用加密后的形式。shadow文件仅对root用户可读,这是为了保证用户口令的安全性。
以下是各个字段的含义。
-
登录名
-
加密后的口令
-
上次修改口令的日期
-
两次修改口令之间的天数(最少)
-
两次修改口令之间的天数(最多)
-
提前多少天提醒用户修改口令
-
在口令过期多少天后禁用该账号
-
账号过期的日期
-
保留,目前为空
用户的相关操作
useradd 用户命名
常用参数
-d:指定家目录 -s:指定登陆后的shell -u:指定uid -g:指定组
usermod 参数 用户名
-l:修改用户名 –u:修改uid -d:修改家目录 -g:修改所属组 -L:锁定该用户 -U:解锁用户
修改用户名示范: usermod -l 修改后的用户名 修改前的用户名
修改密码示范:echo "密码" | passwd --stdin 用户名
(重点)权限 把某个文件设成什么权限
权限是操作系统用来限制用户,组,进程对操作系统资源(文件,设备等)的访问的机制
权限分为:读,写,执行,Linux中表示为r,w,x
Linux中每个文件或目录都拥有一个所属用户和所属组,并且设置对应权限
每个进程在运行的时候均以一个用户的身份运行,同时继承该用户的权限
Linux使用UGO模型来进行权限管理
U代表用户,G代表组,O代表其他用户和组
权限 |
文件 |
目录 |
r |
可读取文件内容 |
可以列出目录的内容 |
w |
可修改文件的内容 |
可创建,删除目录中的文件 |
x |
可以作为命令执行 |
可访问目录内容 |
第一个代表这个文件的类型
d |
代表目录 |
- |
代表文件 |
l |
表示为链接文件 link file |
b |
表示为设备文件中可供存储的接口设备 |
c |
表示为设备文件中的串行端口设备,例如键盘、鼠标 |
修改权限的指令:
chmod 755 文件名
umask的使用:
新建文件的默认权限=666 rw_rw_rw_
新建目录的默认权限=777 rwxrwxrwx
umask的值 033 ____wx_wx
新建文件和新建目录在umask中响应的位中移走响应的值即可。
新建文件的权限为 rw_r__r__
新建目录的权限为 rwxr__r__
RPM YUM 不会仔细考
RPM(RedHat Package Manager):将源码基于特定平台/内核编译成可执行文件,同时将软件依赖关系也写进软件包配置文件,然后将其一起归档压缩成.rpm包发布,达到简化Linux平台下安装软件的目的
YUM:前端软件包管理器
查看硬件相关的信息(分为两种 分为usb 和非usb )
lspci:查看PCI设备
-v查看详细信息
lsusb:查看USB设备
-v:查看详细信息
lsmod:查看加载的模块
给你一块磁盘,如何挂载,fdisk,等命令
对新建的磁盘进行分区及格式化:
分区
fdisk /dev/sdb
格式化成ext3
mkfs –t ext3 sdb1
挂载
mount /dev/sdb1 /mnt
就可以访问了
MBR和GPT两种方式(分别对象bios和UEFI)
目前主流的分区技术有:MBR和GPT
MBR:Master Boot Record
GPT: GUID Partition Table
MBR是一种建立在BIOS技术基础上的传统分区机制
其主要特点为:
支持32位和64位系统
支持分区数量有限(最多4个主分区)
寻址空间为32位,最大支持大小为2TB的硬盘
主分区
MBR最多支持4个主分区
扩展分区
扩展分区可以建立多个逻辑分区,但一个扩展分区占用一个主分区的位置
逻辑分区
Linux系统最多支持63个IDE和15个SCSI逻辑分区
GPT
GPT是一种建立在UEFI技术基础上的新分区机制,其主要目的是解决MBR机制的缺陷
主要特点:
支持超过2TB大小的硬盘
必须使用64位系统
向后兼容MBR
目前类Unix系统都支持GPT技术,Windows系统从Windows7之后支持
文件格式(ext3,ext4,ntf,fat的特点)
ext3 |
相对于ext2,增加了日志功能。支持最大16TB文件系统和2TB文件 |
ext4 |
与ext3兼容,支持1EB的文件系统,16TB的文件 |
ext2 |
文件系统支持最大16TB文件系统和2TB文件 |
ntf |
最大分区2TB。支持元数据,使用高级数据结构,提供访问列表,文件系统日志 |
fat |
fat32最大的支持2TB的容量,不支持4GB以上的文件 |
init进程初始化有哪些状态
init:第一个进程
调用/etc/rc.d/rc.sysinit文件对系统进行初始化
挂载文件系统
根据运行级别启动相关服务和程序
Linux的运行级别
0:关机
1:单用户模式
2:不带网络模式的多用户
3:普通多用户模式
4:未使用
5:图形化界面
6:重新启动
引导系统的文件 fstab
Linux系统通过读取/etc目录下的fstab文件来决定哪些分区或设备需要自动挂载
fstab文件中的每一行就代表一个自动挂载的配置,格式如下表所示
需要挂载的设备 |
挂载点 |
文件系统 |
挂载选项 |
其他选项 |
/dev/sda2 |
/mnt |
ext2 |
defaults |
fsck等 |
网络命令 设置IP地址,设置路由
ping: ping发送ECHO_REQUEST包到你指定的地址。这样可以很方便确认你的电脑和Internet或是一个指定的IP地址是不是通的。使用-c开关,可以指定发送ECHO_REQUEST包的个数。
host: host命令用来做DNS查询。如果命令参数是域名,命令会输出关联的IP;如果命令参数是IP,命令则输出关联的域名。
dig命令:Dig是一个在类Unix命令模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具。
ip route:路由的相关设置
这个项目当然就是路由的观察和设置了。
ip route show 最简单的功能就是显示出目前的路由信息
增加路由 ip route add 192.168.5.0/24 dev eth0
traceroute:可以追踪两部主机之间通过的各个节点node通讯状况的好坏。
进程基本的概念,进程和程序线程的区别 操作进程的相关命令(会有编程题)ps,kill,bg,fg等
Linux进程可以处于多种状态中的一种
进程可以从一种状态变为另一种状态,直到执行结束(正常或者非正常终止)并退出系统。
当进程完成它的工作并正常退出系统,进程就是正常终止
当进程是因为在异常(错误)条件下退出系统或者在其拥有者或特权用户的干涉下退出系统,它便是非正常终止。
TASK_RUNING:进程在运行(是系统的当前进程)或者准备运行(等待被安排到系统的一个CPU上)。进程控制块有一个run_list成员,所有处于TASK_RUNNING状态的进程都通过该成员链在一起,称之为可运行队列
TASK_INTERRUPTIBLE:进程处于某个等待队列中,它能被信号(signal)或中断唤醒。等待资源的请求满足时,也被唤醒。
TASK_UNINTERRUPTIBLE:进程处于某个等待队列中,不能被信号或中断唤醒,只有等待的资源被满足时才能被唤醒。列入当进程打开一个设备文件时,使用TASK_UNINTERRUPTIBLE
TASK_ZOMBIE:进程已经停止,但还没有释放集成控制块
TASK_STOPPED:可能被特定的信号终止,也可能是受其他进程的跟踪调用而暂时将CPU交给跟踪它的进程。
线程的概念:在一个程序中的多个执行路线就叫做线程,线程是一个进程内部的一个控制序列。
线程和进程的区别
进程拥有自己的变量空间和PID,时间调度也是独立的,执行过程也几乎是独立于父进程的
线程拥有自己的栈(即局部变量),但与其创建者共享全局变量、文件描述符,信号处理函数等数据。
超级管理员: ACL概念以及用命令操作它。 配额的概念,命令
ACL:主要的目的是在提供传统的owener,group,others的read,write,execute权限之外的细部权限设定。简单地说,就是只按u, g, o分太粗。如user1和user2分别属于group1和group2; user1想允许user2有读文件abc的权利,但不许group2中其他用户有此权利,那么只按u, g, o就无法做到,这就ACL
如果你的文件系统不支持ACL的话,你也许需要重新mount你的file system
mount -o remount, acl [mount point]
使用ACL
getfacl命令用法
Quota配额:在Linux系统的多用户多任务的环境下,给给个用户分配和限制所使用的磁盘容量大小。
Quota的两种实现方式
限制inode用量:限制使用者可以建立的文件数量
限制block用量:限制使用者的磁盘容量大小
Quota方式
硬配额:不允许超过的配额限制
软配额:允许超过,但超过后且到达硬配额限制前,会提示警告
配额宽限时间:超过软配额后,给予清理磁盘空间大小的期限。
计划任务:Linux计划任务是指通过设定工作流,让系统在计划的时间节点完成某项任务,可以分为两种类型:
例行计划任务:每隔一定的周期进行的任务,Linux中通过crontab命令来设定,周期可为分钟,小时,周,月或年等。crontab除了可以使用指令执行外,还可以通过编辑/etc/crontab来完成
第一列:分钟
第二列:小时
第三列:日
第四列:月
第五列:星期
第六列:要运行的命令
突发性任务:只做一次的计划任务,Linux中通过at命令来设定
使用at来设定计划要先确保atd服务启动
(重点)管道命令 cut grep 等
选取命令cut,grep
cut命令的主要用途是将同一行的数据进行分解,其基本语法为:
cut命令是从一行中取出部分信息,而grep命令则是按条件取出某行,其基本语法为:
(重点)Makefile会考的
makefile文件由一组依赖关系和规则构成
有4个目标
PPT上7个经典的案例
"Hello" 定义变量 循环 函数 获取值 调试(不考)
文件 硬链接,软链接(符号链接)概念区别。目前有一个需求,应该给文件创建一个硬链接还是软连接为什么(优缺点)。
硬链接:是一个指向文件索引节点(inode)的指针。ln并不会影响文件的内容,它只是建立另一个文件名称而已。该类文件在用ls命令长列表显示时为-
符号链接:系统为共享的用户创建一个link类型的新文件,将这新文件登记在该用户共享目录项中,这个link型文件包含连接文件的路径名。该类文件在用ls命令长列表显示时,文件类型为l
硬链接的特点:
不可跨越文件系统
只有超级用户才可以建立目录硬链接
不占用空间(极少)
符号链接的特点
可跨越文件系统,甚至跨越网络(NFS)
如果链接指向的文件从一个目录移动到另一个目录,就无法通过符号链接访问它
占用少量空间,存inode的信息
vi或vim有三种模式 插入模式,命令模式,最后一行模式
Vi有三种基本的工作模式:指令行模式、文本输入模式、末行模式。他们的相互关系如所示。
指令模式(Command Mode) 下输入 a、i、o进入文本输入模式(Input Mode)
文本输入模式(Input Mode) 下按ESC进入指令模式(Command Mode)
指令模式(Command Mode)下输入:进入末行模式(Last line Mode)
末行模式(Last line Mode)下指令错误则返回指令模式(Command Mode)
Linux为什么安全
Linux使用的人数少
开源,有漏洞可以及时的补上
权限管理严格
Linux的程序安装基本上都是通过软件管理程序完成的。
Linux不会考得太难,编程背景会告诉你(比如控制进程的题目,system函数是干什么用的,excute函数干什么用的,fork函数是干什么用的)更多是考概念。
用一个脚本写成程序来读写文件,用一个Linux写程序来读写文件,哪一个更快,为什么。如何提高改进。
cp ( fread [1024] ) >read[1024]>fgetc>read [1]
read block[1024] 每次读取1024个字节
fgetc 和 read block[1] 每次都是读取1个字节
但是fgetc是缓冲文件系统:在内存开辟一个"缓冲区",为程序中的每一个文件使用,当执行读文件操作时,从磁盘文件将数据先读入内存"缓冲区",装满后再从内存"缓冲区"依次读入接收的变量。执行写文件操作时,先将数据写入内存"缓冲区",待缓冲区装满后再写入文件。
read是非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统的输入输出
cp采用缓存的,每次读取多个字节所以相对其他的较快
基于命令行的用户界面,基于Curses库的图形化界面,基于DBM数据库,基于MySQL数据库不会考编程,知道概念就可以了。
Linux-c(重点)进程和线程,进程创建线程的方式三种(),同步的方式:信号和管道
进程创建的三种方式 system fork execute
system函数:创建一个新进程,即在一个程序的内部启动另一个程序,Linux中通过函数system完成
system函数的优缺点
使用system启动的进程是阻塞式的—父进程必须等待子进程完成后才能继续
如果采用&使子进程后端运行的话,则又不会有好的用户体验
且system函数是通过shell来启动进程,所以依赖于系统的shell程序及路径。
exec系列函数:exec系列函数由一组相关的函数组成,用于把当前进程替换为新进程,新进程由path或file参数来指定。
fork函数:fork函数也可以启动一个新进程,其方法是复制当前进程。
fork函数在进程表中创建一个新的表现,新表现的许多属性与当前进程是相同的,执行的代码也完全相同;但新进程有自己的数据空间、环境和文件描述符。
fork函数使用进阶:当fork启动一个子进程,子进程就有了其自身的生命周期并将独立运行。如果想知道子进程何时运行结束,可以通过wait函数,让父进程等待子进程结束后再结束。
进程同步与通信有两种方式(信号和管道)
信号是由某些错误条件而生成的,如内存冲突,浮点处理器错误或非法指令等;接收到该信号的进程会相应的采取一些行动。
用术语生成表示一个信号的产生,使用术语捕获表示接收到一个信号。
一个进程在接收到信号后,默认情况是立即终止进程。
信号可以被产生,捕获,响应或忽略。
信号可以由shell或终端生成,来引起中断;它们还可以作为进程间传递信息和修改行为的一种方式(明确的由一个进程发送给另一个进程)
发送信号:进程可以通过调用kill函数向包括它本身在内的其他进程发送一个信号,该函数和同名的shell命令功能一样
使用alarm函数会使编程变得简单
管道:进程管道就是指将数据从一个进程传输给另外一个进程
实现进程管道最简单的方法是popen和pclose函数
选择题考命令
简答题考概念(以前 Linux为什么安全,硬链接和软链接有什么区别等)
程序阅读/填空
一段脚本输出
填空:程序是为了完成什么信息,有一个两个空着让你写
例题:
netstat是放在那个目录下面,netstat是放在sbin中的。netstat是查看系统的网络状况
必须放在一个硬盘上面,这些是基本的配置文件,如果这些配置文件放在其他的分区里面,文件格式不同就无法读取了。
删除的话要有上一个文件夹的权限
掩码的作用会考的
fdisk,mkdisk进行挂载
shell(重点)输出某个文件夹下面的前50个文件,把前50个文件的首字母排序
#!/bin/bash
read -p "input the filePath:" path
array=$(ls $path | sort)
read -p "please input the count:" count
i=0
for name in $array
do
# echo $name
if [ "$i" -lt $count ]; then
echo $name
fi
i=$(($i+1))
done
获得系统时间,修改系统时间的脚本
获得当前系统时间如果分钟是偶数,则改为前一天的时间 date—减一天
#!/bin/bash
mini=$(date +%M)
flag=$(($mini%2))
if [ "$flag" == "0" ]; then
date=$(date --date='1 days ago' +%Y%m%d)
second=$(date +%s)
second=$(($second%60))
time=$(date --date='1 days ago' +%H:%M:$second)
date -s "$date $time"
fi
内存管理
Linux是类Unix的操作,同样实现了X/Open规范,具备以下特点:
以简洁,高效的方式管理内存
不允许程序直接访问物理内存(一些特殊的嵌入式程序除外)
良好的内存保护机制
支持虚拟内存
malloc:Linux中使用标准C语言函数库中的malloc调用来分配内存
free:释放内存通过free函数来实现
另外两个和动态内存管理相关的函数为calloc和realloc
其中calloc函数主要用于给结构数组进行内存空间的分配,且使用calloc函数分配的内存空间会初始化为0
realloc函数用于重新分配内存空间
文件锁定
不同程序之间经常需要共享数据,在操作系统层面是通过文件来实现的,因此文件锁定是多用户,多任务操作系统中一个重要的组成部分。
Linux系统中提供了多种特性来实现文件锁定,主要有下面两种:
锁文件:利用原子操作创建锁文件
区域锁定
dbm数据库
dbm数据库的版本分为dbm,ndbm和gdbm三种
dbm是一个基于索引的数据库
curses是一个用于文本界面的函数库,由于是外部的函数库,所以使用前需要下载,编译过程中需要链接
curses的基本原理是:有两个数据结构stdscr和curscr,其中前者对应实际的物理屏幕,后者是与之相关的逻辑屏幕;程序中数据的输入和输出直接更新curscr,curses函数库负责比较两者的差别,将屏幕改变的部分刷新(通过refresh函数),从而达到提高效率的木爹
简述解决忘记root密码的办法。
还有一种方法是用启动装载器来进入单用户模式:
(1) grub
进入启动画面之后,敲入"e",把光标移动到kernel ...那一行,再敲入"e",在kernel 一行的最后加上空格single,回车
敲入"b",启动系统,即进入单用户模式,
这个时候就可以用passwd命令改密码了。
2.什么是链接?符号链接与硬链接的区别是什么?
链接是指用一个i节点对应多个文件名。硬链接是把文件的i节点号指向该i节点,
且链接计数器值加1。删除链接文件时计数器值减1,当其值为0时,i节点被释放。
符号链接是只有文件名的一个链接文件,并不指向一个真正的i节点。
在删除符号链接文件时与硬链接文件有区别。