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个字段组成,字段间使用冒号分隔。下面是各字段的含义。

  1. 登录名
  2. 口令占位符
  3. 用户ID号(UID)
  4. 默认组ID号(GID)
  5. 用户的私人信息:包括全名,办公室,工作电话,家庭电话等
  6. 用户主目录
  7. 登陆shell

/etc/shadow:文件用于保存用户的口令,当然是使用加密后的形式。shadow文件仅对root用户可读,这是为了保证用户口令的安全性。

以下是各个字段的含义。

  1. 登录名
  2. 加密后的口令
  3. 上次修改口令的日期
  4. 两次修改口令之间的天数(最少)
  5. 两次修改口令之间的天数(最多)
  6. 提前多少天提醒用户修改口令
  7. 在口令过期多少天后禁用该账号
  8. 账号过期的日期
  9. 保留,目前为空

用户的相关操作

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节点。

在删除符号链接文件时与硬链接文件有区别。

原文地址:https://www.cnblogs.com/kexinxin/p/10012005.html