程序执行时,读取指令是指计算机自动从存储器中取出一条指令。
存储器由大量可以存储二进制数据的存储单元组成。
数据总线
从存储器中获取数据的过程应该为“读操作
”。
su(switch user)命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码;
su
)su
和su -
是有区别的,su -
会切换环境变量,su
只是切换用户/proc/interrupts
显示使用的中断
/proc/ioports
当前使用的I/O端口
/proc/kcore
系统物理内存映像。与物理内存大小完全一样,但不实际占用这么多的内存。
/proc/kmsg
内核输出的消息,也被送到syslog
/proc/meminfo
:查看物理内存的大小
在 Linux 系统中,用来存放系统所需要的配置文件和子目录是(/etc
)
/etc,etc 是 Etcetera(等等)的缩写,这个目录用来存放所有的
系统管理
所需要的配置文件
和子目录
;主机特定的系统配置。
你通过编辑/etc/group
文件来改变了sales group的GID,所有的组员都能成功的进行的转换,除了Jack,他甚至都无法登陆,其原因是什么?在/etc/passwd里指明了Jack的GID
一,jack在某个组里 。我们可以认为Jack用户建立了一个到组资源的连接(类似于软连接),
二,现在组的GID改变了,相当于地址变了。
三,而jack用户若想继续访问组的资源,他的GID也要随之改变。否则就会找不到地址了。
四,本题中Jack的GID是固定的
/etc/profile
:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行,并从 /etc/profile.d 目录的配置文件中搜集shell的设置。/etc/bashrc
:为每一个 运行bash shell 的用户执行此文件。当bash shell被打开时,该文件被读取。~/.bash_profile
:每个用户都可使用该文件输入专用于自己使用的shell信息, 当用户登录时,该文件仅仅执行一次 !默认情况下~/.bashrc
:是在bash环境时.bash_profile的替补。该文件包含专用于个人的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。/etc/bash.bashrc
或者 /etc/.bashrc
是全局配置文件。~/.bash_logout
:当每次退出系统(退出bash shell)时,要执行该文件(命令)。/etc/hosts
:主机名到 IP 地址的映射关系的文件;/etc/resolv.conf
:DNS 服务的配置文件,设置DNS;/etc/gateways
:建立动态路由需要用到的文件 ;/etc/services
:定义了网络服务的端口;/etc/inittab
:init启动进程需要读取()配置文件/etc/skel
:存储用于创建用户目录的系统用户默认文件【skel是skeleton的缩写,意为骨骼、框架】假如你需要找出/etc/my.conf文件属于哪个包(package),你可以执行:(rpm -qf /etc/my.conf
)
不同Linux发行版用的是不同软件包系统,分为Debian的.deb技术(Debian,Ubuntu)和Red Hat的.rpm技术(Fedora,CentOS,redHat).
其中rpm是低级的RedHat软件包管理工具:
-i
package_name 安装软件包
-U
packagefile 更新软件包
-qa
列出已安装的软件包列表
-q
package-name 判断软件包是否安装
-qf
file_name 判断某个特定文件是由哪个软件包负责安装的
系统当前已经加载的所有文件系统在____/etc/mtab
_____文件中得到反映。
文件fstab包含了你的电脑上的存储设备及其文件系统的信息。它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件。
/etc/fstab
是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改。/etc/fstab
文件中指定的文件系统加载参数中, 以下哪儿个参数一般用于CD-ROM等移动设备:
用户登录系统时,bash首先执行/etc/profile配置文件和/etc/profile.d/目录下的配置文件,这些配置文件对所有用户都有效
。
若要使得用户登录验证,需要修改/etc/shadow
脚本。
/etc/hosts
:包含了主机名到IP地址的映射关系的文件。
/etc/resolv.conf
文件功能:DNS客户机配置文件,设置DNS服务器的IP地址及DNS域名
/etc/host.conf
指定主机名查找方法,通常指先查找文件/etc/hosts,找不到时再向DNS服务器请求。
/etc/networks
配置网络的
/var,var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下,包括各种日志文件;
/var/log/messages
/var/log/lastlog
日志记录了所有用户最后登录的记录,可以用lastlog
命令查看/var/run/utmp
日志记录了正在登录本系统中的用户信息,可以用last -f
命令查看last
指令时,它会读取位于/var/log/wtmp
的文件,并把该给文件的内容记录的登录系统的用户名单全部显示出来。【linux系统中的/var/log/last日志可以用last命令查看❌】wtmp
是二进制文件,他们不能被诸如tail命令剪贴或合并,需要使用who、w、users、last和ac
来使用这两个文件包含的信息。/root,该目录为系统管理员,也称作超级权限者的用户主目录;
/home,用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
linux系统中,以下哪个文件会记录用户操作的历史记录?(/home/.bash_history
)
/bin,bin 是 Binaries(二进制文件)的缩写,这个目录存放着最经常使用的命令,可以被直接。
/dev
,dev 是 Device(设备)的缩写,该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的;
/dev/zero
:是一个输入设备,可以用它来初始化文件。
/dev
)umount /dev/hdc
挂载设备使用mount,卸载设备使用umount,有三种方式,通过设备名,挂载点或者设备名和挂载点
如题目所示:
umount /dev/hdc
umount /mnt/cdrom
umount /mnt/cdrom /dev/hdc
/lib,lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
/sbin,s 就是 Super User 的意思,是 Superuser Binaries(超级用户的二进制文件)的缩写,这里存放的是系统管理员使用的系统管理程序。
系统工具
)。如果存在文本文件 /tmp/testfile,并且文件行数小于等于 10 行,则输出文件前 3 行,下列脚本正确的是(
wc -l /tmp/testfileif [[ -f '/tmp/testfile' ]] && [[
-le 10 ]];then head -3 /tmp/testfile fi
)
采用多路 I/O 复用监听 3 个套接字的数据时,如果套接字描述符分别是:5,17,19,则下面 select 代码中的 maxfd 应取为(20
)
select(int maxfd,struct fd_set* rdset,NULL,NULL)
maxfd 是指定要监视的文件描述符的范围,一般取监视的描述符数的最大值 + 1。
sort demo.txt|uniq
)uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
sort 命令用于将文本文件内容加以排序。
uniq 只能处理相邻的重复行,所以需要先排序才能去重。
大写的PWD代表环境变量。查看PWD环境变量:echo $PWD
小写的pwd是shell命令输出当前工作目录,查看系统中所有环境变量可以使用env,可以看到PWD的值会随着工作目录变化而变化
PATH 是 Linux 中一个极为重要的环境变量,它用于帮助 Shell 找到用户输入的命令。用户所输入的每个命令实际上是一个源代码文件,计算机执行这个文件里的代码以实现这个命令的功能,这些源代码文件称为可执行文件。可执行文件存在于各种各样的目录下, PATH 就记录了一系列的目录列表, Shell 为每个输入命令搜索 PATH 中的目录列表。
HOME 记录当前用户的目录,由 /etc/passwd 的倒数第 2 个域决定, HOME 目录用于保存用户自己的文件。
w命令用于显示目前登入系统的用户信息。
df(disk free) 命令: 用于显示文件系统的磁盘使用情况,查看硬盘
被占用了多少空间和剩余多少空间
在命令行查看一台linux机器的CPU:cat /proc/cpuinfo
在命令行查看一台linux机器的SWAP分区信息:cat /proc/swaps
在命令行查看一台linux机器的硬盘信息:df -lh
du(disk usage,磁盘使用)命令可以在不添加参数的情况下查看某个文件的大小
,统计目录(或文件)所占磁盘空间的大小,查看该目录占用文件系统数据块的情况 。
du 命令只计算被文件占用的空间。不计算文件系统metadata 占用的空间,如inodes, inode maps, 或者disk maps。
虚拟内存
是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存,使得每个进程看到的内存空间一致
。虚拟内存的大小不受物理内存大小的限制
。不连续分配内存
技术中的一种。其最大特点在于他按照用户观点,即按程序段、数据段等有明确逻辑含义的“段”,分配内存空间。克服了页式的、硬性的、非逻辑划分给保护和共享与支态伸缩带来的不自然性。】不属于
分段管理的突出的优点有::用户可以使用覆盖技术jobs
)文件
可使用下列哪个工具将.o文件打包成静态库文件(.a)?ar
ar命令可以用来创建、修改库,也可以从库中提出单个模块。
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)
httpd.conf
。在linux中,httpd.conf :网络服务器软件的配置文件,对WWW服务器进行访问、控制存取和运行等控制 。lilo.conf :由引导管理程序 lilo 读取的文件 inetd.conf :保存了系统提供internet服务的数据库并对其进行控制,如打开/关闭某项服务。 resolv.conf:域名解析器使用的配置文件
.
httpd.conf :网络服务器软件的配置文件,对WWW服务器进行访问、控制存取和运行等控制
lilo.conf :由引导管理程序 lilo 读取的文件
inetd.conf :保存了系统提供internet服务的数据库并对其进行控制,如打开/关闭某项服务。
resolv.conf:域名解析器使用的配置文件
git merge
命令、使用git pull
命令、使用git cherry-pick
命令都可以合并。git blame
命令时,会逐行显示文件,并在每一行的行首显示commit号,提交者,最早的提交日期等。启动交换文件的指令是(swapon
)
mkswap:设置交换分区
不是Linux系统进程类型的是就绪进程
。【就绪指状态】
Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。
为了便于管理进程
,一般来说,按进程在执行过程中的不同情况至少要定义三种不同的进程状态
:
(1)运行态(running)
:进程占有处理器正在运行。
(2)就绪态(ready)
:进程具备运行条件,等待系统分配处理器以便运行。
(3)等待态(wait)
:又称为阻塞态(blocked)或睡眠态(sleep),指进程不具备运行条件,正在等待某个事件的完成。
进程状态的转换图如下:
会浪费资源
。孤儿进程
:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程
将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。【孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上 ,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init进程就会代表党和***出面处理它的一切善后工作。 因此孤儿进程并不会有什么危害。】
僵尸进程
:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。【如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。】
有时会刻意使进程成为孤儿。比如 守护进程daemon,nohup命令。
负载指的是处于正在运行或者不可中断状态的进程的平均值,这两种状态都在使用CPU。而就绪状态,还没有用到CPU,和负载无关。
两个进程中分别产生生成两个独立的fd
两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性
进程可以通过系统调用对文件加锁,从而实现对文件内容的保护
两个进程可以分别读取文件的不同部分而不会相互影响
Linux2.6 中,默认情况下一个进程最多能打开多少文件?1024
cmd1 && cmd2
:如果cmd1成功则执行cmd2
cmd1||cmd2
:如果cmd1不成功则执行cmd2
cmd1|cmd2
:这个是管道, 把cmd1的输出作为cmd2的输入
cmd1;cmd2
:连续执行两条命令,先cmd1,然后cmd2
在退出unix系统账户之后还需要继续运行某个进程,那么可用(nohup
)
环境变量
、当前工作目录
共享内存
、信号掩码
、已打开的文件描述符
。进程地址空间
。(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。
- 系统管道
- 无名管道
- 命名管道(named pipe)
:命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。
-
(2)文件锁
(3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。
(4)消息(Message)队列
:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺
(5)共享内存
:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
(6)内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。
(7)信号量(semaphore)
:主要作为进程间以及同一进程不同线程之间的同步手段。
【POSIX信号量函数的名字都以( sem_
)开头。【信号量(Semaphore)】】
(8)套接口(Socket)
:更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
在linux中,线程同步的方式包括:互斥锁(或称互斥量Mutex)
,读写锁(rdlock)
,条件变量(cond)
,信号量(Semophore)
。
临界区
)临界区只是用来对共享资源的保护,临界区在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么有线程进入后,其他线程试图访问时将被挂起,直到进入临界区的线程离开,临界区并不能保证线程的执行顺序,先到先得。
中方C1,C2两位选手
和日方J1,J2两位选手
对阵。首轮由中方发球,直至接球失误后由队方换发球。试用PV操作原语分析这一过程,以下合理的说法是( 应设置至少4个信号量,分别代表4类消息的传递。4个信号量的初始值只有一个为1,其余均设置为0。
)发现乒乓球是一个互斥量,所以初值为1,C1,C2,J1,J2发球为4个状态,所以除了一个互斥量为1外,其余各部分初值为0。
首先分析互斥还是同步(有相互联系的,即你发生我才发生),发现乒乓球是一个互斥量,所以初值为1,然后发现当中方或者日方有任意一方接球失误后,都换为对方发球,属于同步关系,其中有三个量,中方失误,日方失误,轮换发球(即同步关系)由于刚开始失误次数肯定都是0,又因为轮换发球属于同步关系初值为0,所以除了一个互斥量为1外,其余各部分初值为0
sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。sed命令用于行的新增/删除, 行的替换/显示, 搜寻并替换, 直接修改文件。
sed命令行格式为:sed [-nefri] ‘command’ 输入文本
常用选项:
-n
∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
a
:新增
, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p
:打印,将某个选择的数据印出来。通常 p 会与参数 sed -n 一起用。
s:取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g!
g 是行内进行全局替换
可以打印文件(demo.log)中包含ERP的行到标准输出的命令:sed -n '/ERP/p' demo.log
。
tar(tape archive )
命令用于备份文件,是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件;
tar zcvf /home/wang.tar.gz /home/stud1/wang
backup.tar.gz
的压缩包文件,那么解压的命令应该是什么?backup.tar.gz
命令即可。history 4
。【history没有-n选项】在Linux系统,关于硬链接的描述正确的是(不可以跨文件系统
、链接文件的i节点与被链接文件的i节点相同
)
硬链接就是让链接文件的i节点号指向被链接文件的i节点
只有符号链接
才产生新的inode节点
链接分为硬链接和符号链接
硬连接不能链接目录文件
Redhat9 所支持的安装方式有(从本地硬盘驱动器进行安装
、通过NFS进行网络安装
、通过HTTP进行网络安装
)
下面哪些命令可以查看file1文件的第300-500行的内容?
可以
使用include关键字把别的Makefile包含进来统计日志中有多少个不同的ip登陆,下面可以正确统计的为:
ln命令:为某一个文件在另外一个位置建立
一个同步的(符号)链接
。
建立硬链接(默认):ln 源文件 目标文件
建立软连接:ln -s 源文件 目标文件
。【参数 -s 表示创建的是软链接】。
连接文件
(l
rwxr–r-- 1 hel users 2024 Sep 12 08:12 cheng- peng.yan1)文件类型
和权限由开头的 10 个字符表示,第一位表示文件的类型,有如下几种:
建立硬链接 file2,并指向 file1
)。useradd
命令用于建立/增加用户帐号;
useradd -u 0 -o admin
)
-u 用户号 指定用户的用户号;因为系统用户的用户号为0,故指定用户号为0 如果同时有-o选项,则可以重复使用其他用户的标识号;因为系统本身存在用户号为0的系统用户,故应该使用该参数。
useradd -M
)usermod
命令用于修改用户帐号;groupadd
命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中;userdel
命令用于删除用户帐号。MIN HOUR DAY MONTH DAYOFWEEK COMMAND
* * * * * /usr/local/run.sh
这句话5个*号分别代表什么?分钟[1-59] 小时[0-23] 日[1-31] 月[1-12] 星期[0-6]
【第6列为要运行的命令 】*/5 * * * * exam
:每5分钟运行一次crond任务exam01 07 * * 5 /usr/bash /usr/local/run.sh
的执行时间是(每周五 07:01 分
)每个月
的第一天
早上4点钟执行一个维护工作:00 4 1 1-12 * /maintenance.pl
*/30 * 3 * *
,表示什么意思(每月3号当天,每30分钟执行命令
)。broadcast
)常见
广播: rap 地址解析,rip路由距离向量算法
组播:ospf路由链路状态算法
ARP 地址解析协议,工作位于物理层上一层的数据链路层,用于将 IP 地址和物理地址MAC进行映射,
数据链路层上传输的数据单元是帧,ARP 协议用来将每次发送帧中的目标 IP 地址转换为物理 MAC 地址。
更加详细的工作流程则是:
每当主机发送一个数据包的时候,该数据包传递到数据链路层便会被封装成一个帧,
帧中的目标IP 地址会根据 ‘转换表’ 中记录的 对来进行转换,
如果目标IP 地址在’转换表’(缓存)中有映射的 MAC 地址(命中),
那么便将该帧发送给由该MAC 地址标识的主机
如果目标IP 地址在转换表中找不到映射的 MAC 地址(没命中),
那么便发送ARP 广播报文,
该广播报文中包含目标IP 地址,对于位于相同网段中的其他主机,.
在接收到该ARP 广播报文之后,从中抽取该 ARP 报文携带的 IP 地址,
并将该IP 地址和自己的 IP 地址进行对比,
如果不同,置之不理即可
如果和自己的IP 地址相同,那么,便将自己的 MAC 地址封装成数据包,回复给发送 ARP 广播的主机,
而发送 ARP 广播的主机 在接收到携带 MAC 地址的回复报文之后,将其存放到 ‘转换表’ 中,
然后,继续发送因为不知道MAC 地址而中断发送的报文。
如果是做题的话,可以这样记:
常说的广播风暴是由ARP 协议引发,所以 ARP 协议使用的是广播
.
在Linux中查看ARP缓存记录的命令是(“arp –a”
)?“arp –a”:all
“arp –d”:delete
“arp -L”:不知道,找不到这个参数
“arp –D”:Device
局域网内有一主机ip为192.168.1.2,请找到他的mac地址
先使用ping 192.168.1.2,然后使用arp -a
找对应mac地址
关闭文件的目的之一是释放内存中的文件对象
关闭文件的目的之一是保证将输出的数据写入硬盘文件
文件读写过程中,程序不是
直接与磁盘文件进行数据交换【文件读写过程中,要通过缓冲区buffer,程序不可能直接和硬盘文件交换数据的,不然要内存和缓存干嘛呢是吧。】
打开文件的目的是使文件对象与磁盘文件建立联系
假设Apache产生的日志文件名为access_log,在apache正在运行时,执行命令mv access_log access_log.bak,执行完后,请问新的apache的日志会打印到哪里,请选择下列描述正确的是?虽然此时文件被改名,但是由于服务正在运行,因为它的inode节点的位置没有变,程序打开的fd仍然会指向原来那个inode,不会因为文件名的改变而改变。apache会继续向已改名的文件中追加日志。
mv对inode的影响:
前提:使用mv命令搬移的文件目的地跟原文件在同一文件系统内
- 系统会新建一个目录项,将新档案名称对应到inode number (注意,inode number并没有变,只是对应了新的名字)
- 删除旧档案
(搬移档案的行为对inode table没有任何影响,也不会将档案搬移到其他的block)
由此可见,在我们看来access_log 和 access_log.bak 是两个不同的文件,其实他们是同一个文件,只是换了名字而已。
由于程序打开的fd指向原来的iNode,而MV操作并不会改变这个inode,因此对正在运行的程序不会产生影响。
所需访问虚拟内存未被装载
影响一个应用程序性能的因素有很多,这次说说page fault。
- 为什么会存在page fault问题?
计算机的物理内存(看看你的内存条)有限,但应用程序的需求是无限的,操作系统为了解决这个矛盾,使用了虚拟内存
的设计。简单的描述就是,给应用程序一个与物理内存无关的虚拟地址空间
,并提供一套映射机制,将虚拟地址映射到物理内存。当然应用程序是不知道
有这个映射机制存在的,它唯一需要做的就是尽情的使用自己的虚拟地址空间。操作系统提供的映射机制是运行时动态进行虚拟地址和物理地址之间的映射的,当一个虚拟地址没有对应的物理内存时候,映射机制就分配物理内存,构建映射表,满足应用程序的需求,这个过程就叫page fault。
与直接访问物理内存不同,page fault过程大部分是由软件完成的,消耗时间比较久,所以是影响性能的一个关键指标。
Linux把page fault又进一步分为minor page fault
和major page fault
。前面提到的分配物理内存,构建映射表过程可以看做是minor page fault。major page fault是由swap机制引入的,对于swap情况,地址映射好了后,还需要从外部存储读取数据,这个过程涉及到IO操作,耗时更久。- 如何查看应用程序的page fault指标呢?
1) 可以使用time命令:
比如我想看看svm-train的情况(模型训练很耗资源)\time svm-train age_train_equal.txt(前面的斜杠表示不使用shell的内嵌time命令)
输出是:7.68user 0.02system 0:07.71elapsed 99%CPU (0avgtext+0avgdata 42768maxresident)k
0inputs+6696outputs (0major+15445minor)pagefaults 0swaps
可以看到只有minor page fault,没有major。
time命令的实现是用到了Linux提供的rusage机制。Linux的wait API可以返回一个应用程序的运行过程的资源消耗情况。
如果你想在自己的代码中获取资源利用情况,可以使用libc的getrusage函数,这个函数也是内核的API。
2) proc文件系统
Linux系统下的/proc/PID/stat文件,也提供了相关统计数据。
一般情况下,串行程序并行化设计需要将工作进行拆分,使得分布在每个进程中的工作量大致相仿,并行让它们之间的通信量最少。以下串行程序并行化设计步骤正确的是: 1、将串行程序中需要要执行的指令和数据按照计算部分拆分成多个小任务 2、将上一步聚合好的任务分配到进程/线程中。这一步还主要注意的是,要使得通信量最小化,让各个进程/线程所得到的工作量大致均衡 3、确定第一步识别出来的任务之间需要执行何种通信 4、将第一步确定的任务与通信结合成更大的任务1->3->4->2
以下函数中,和其他函数不属于一类的是__fseek
__。【fseek
是函数,read
、pread
、write
、pwrite
、lseek
都是系统调用】
int pthread_mutex_create(pthread_mutex_t* mutex)
int pthread_mutex_destroy(pthread_mutex_t* mutex)
、int pthread_mutex_lock(pthread_mutex_t* mutex)
int pthread_mutex_trylock(pthread_mutex_t* mutex)
国际pthread_mutex_destroy(pthread_mutex_t *互斥); //销毁互斥锁
int pthread_mutex_lock(pthread_mutex_t *互斥);以原子操作方式给互斥锁加锁
int pthread_mutex_trylock(pthread_mutex_t *mutex);非阻塞版本
int pthread_mutex_unlock(pthread_mutex_t *mutex);以原子操作方式给互斥锁解锁
POSIX互斥锁相关函数有以下:
pthread_mutex_init 初始化一个互斥量
pthread_mutex_lock 给一个互斥量加锁
pthread_mutex_trylock 加锁,如果失败不阻塞
pthread_mutex_unlock 解锁
pthread_mutex_destroy 销毁互斥锁
linux中的锁主要有以下几类。
spin_lock(自旋锁):是Linux内核中最基础的锁机制。自旋锁不会引起调用者休眠,如果自旋锁已经呗其他的执行单元持有,调用者就会一直循环等在该自旋锁的持有者是否已经释放了锁。自旋锁适用于锁的持有者保持锁的时间比较段的情形。
读写自旋锁(__RW_LOCK_UNLOCKED):也就是没有读,没有写的请求时,读者可以获得读写锁。在读写锁没有写者的时候,读者获得器自旋锁。
seq_lock(顺序锁):是对读写锁的优化。也就是写锁不被读锁所阻塞。写者写的同时,读者可以读。
semaphore(信号量):信号量和自旋锁的区别时信号量会引起调用者的休眠。
RCU(读-拷贝):在访问RCU保护的资源时,读者不需要任何等待,而写者访问它时首先得拷贝一个副本,然后对父辈修改,最后在没有任何对读者操作gai’zi’yuan把指向原来的数据的指针指向新的数据。
Semaphore、Spinlock、seqlock
man 5 passwd
:显示passwd文件的结构″ab″
rb表示读二进制文件,尾部追加数据,为‘rb+’
A.″ab″ :对一个二进制文件可读可写,写数据会追加到文件末尾
B.″rb+″ :读写打开一个二进制文件,只允许读写数据 ,之前的数据会清除
C.″wb″:只写打开或新建一个二进制文件,只允许写数据,之前的数据会清除
D.″wb+″:读写打开或建立一个二进制文件,允许读和写,之前的数据会清除
命令
subnet 166.173.197.131 netmask 255.255.255.192{
range 166.173.197.128 166.173.197.191;
default-lease-time 600;
max-lease-time 7200;
}
表示:一个两小时的最大租用时间
、指定了一个十分钟的缺省租用时间
subnet 设置一个子网 166.177.131/24
range 可分配的IP地址范围上 166.177.10 ~ 166.17***7.107
default-lease-time 默认租约时间
max-lease-time 最大租约时间
Linux的非root用户,在自己的目录中,不可以删除非空目录dirs的方法是:mv dirs /dev/null
、destroy dirs
linux中没有destroy命令。
有命令:awk'BEGIN { Arr[2,79]=78 __________ }'
为了让执行的结果是78,应该填()语句
- print Arr[“2\03479”]
- print Arr[2,79]
- idx=2 SUBSEP 79;print Arr[idx]
- print Arr[ 2, 79]
adb logcat –v time
、adb logcat -c
logcat -v time 打印log的同时打印系统时间
logcat -c 清除已有log
文件系统的文件数据读写性能与文件大小以及读写数据块的大小有关;
文件的属性在创建时可以不指定,由系统通过umask的值得出,且以后可以修改
;
文件系统中可以创建的单个文件的大小与磁盘分区上剩余空间的大小有关,还与分区簇
有关,比如 FAT16 允许创建的最大单文件为 2GB,剩余空间大小大于 2GB 也没用。
tar
是操作.tar
的命令
gzip
是压缩.gz
压缩包的命令
compress
:压缩.Z
文件
uncompress
:解压缩.Z
文件
一个文件名字为rr.Z
,可以用来解压缩的命令是?uncompress
Linux系统中某个可执行文件属于root并且有setid,当一个普通用户 mike运行这个程序时,产生的进程的有效用户和实际用户分别是?root mike
setuid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。
因此当程序设置了setid权限位时,普通用户会临时变成root权限,但实际用户任然是原来的mike。
.
调用setid使进程成长为一个会话组长,setid调用成功后,进程成为新的会话组长和进程组长,并与原来的登陆会话和进程组脱离,由于会话过程对控制终端的独占性,进程同时与控制终端脱离。
这也是在创建daemon程序时,经常用到的一个步骤。
cut命令可以从文本文件的每一行中或者命令的的输出中截取指定内容的数据:cut –cchars file
在前台继续运行
作业号为2的进程: fg 2
。exec 使用vfork函数时,通常需要exec配合使用
fg(Foreground) 将(被中断的)进程搬到前台运行的命令
bg(Background) 将(被中断的)进程搬到后台运行的命令
使用fork或vfork创建子进程后,子进程通常会调用exec函数来执行另外一个程序。系统调用exec用于执行一个可执行程序以代替当前进程的执行映像。exec调用没有生成新进程。一个进程一旦调用exec函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段和堆栈段,唯一保留的就是进程ID。也就是说,对系统而言,还是同一个进程,不过执行的已经是另外一个程序了。
在web站点的日志属性中修改日志翻转属性
:%s/Linux/RHEL5
):s/old/new
将当前行中查找到的第一个字符 “old” 串替换为 “new”:s/old/new/g
将当前行中查找到的所有字符串 “old” 替换为 “new”:#,#s/old/new/g
在行号 “#,#” 范围内替换所有的字符串 “old” 为 “new”:%s/old/new/g
在整个文件范围内替换所有的字符串“old”为“new”:s/old/new/c
在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认600
)CentOS
国内非常火的红帽系服务器系统、Ubuntu
很流行的桌面Linux版本、Redhat
红帽Linux系统ext
文件系统,ext2
文件系统ext3
文件系统,ext4
文件系统,Reiser
文件系统,JFS
文件系统,XFS
文件系统、ntfs
文件系统ZFS
文件系统,Btrf
文件系统fmt 命令用于编排文本文件,fmt 指令会从指定的文件里读取内容,将其依照指定格式重新编排后,输出到标准输出设备。若指定的文件名为 “-”,则 fmt 指令会从标准输入设备读取数据;
$#
是传给脚本的参数个数$0
是脚本本身的名字$1
是传递给该shell脚本的第一个参数
file1
)$2
是传递给该shell脚本的第二个参数
$@
是传给脚本的所有参数的列表
$*
是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$
是脚本运行的当前进程ID号
$?
是显示最后命令的退出状态,0表示没有错误,其他表示有错误
bash demo.sh &>demo.log
、bash demo.sh >& demo.log
、bash demo.sh >demo.log 2>&1
)exit
)&
)^
表示开头,$
表示结尾。bash
)
Bourne Again shell(bash)
Bourne shell(sh)
Korn shell(ksh)
C shell(csh)
大多数的 Linux(Red Hat、Slackware、Caldera)都以 bash 作为缺省的shell,并且运行 sh 时,其实调用的是 bash。
以下函数中,和其他函数不属于一类的是__snprintf
__。
属于一类的是:strcpy、strncpy、strcat、strtok、strncat【都是用于两个字符串之间进行比较、拷贝、拼接等操作的】
Linux系统大致启动流程是(uEFI-> MBR -> grub -> initrd
)
30
i=0 时,主进程和其创建的子进程分别打印 ‘-’, 打印 2 个
i=1 时,之前两个进程打印 ‘-’, 每个进程又创建新的子进程, 共打印 4 个 ‘-’
i=2 时,之前的四个进程分别打印 ‘-’, 并创建新的子进程, 故共打印 8 个 ‘-’
i=3 时,之前的 8 个进程分别打印 ‘-’, 并创建新的子进程,故共打印 16 个 ‘-’
综上所述, 共打印 2+4+8+16=30 个
哪些命令和工具对 firmware 分析有帮助?binwalk
、file
、firmware-mod-kit
。
Samba 服务器的配置文件是smb.conf
。
有两台游戏服务器运行于linux 2.6.x内核上,需要同步用户访问日志,你会用下列哪些方法同步日志(开放题:假设权限和条件均可满足)?rsync
某公司网络中心升级web服务器的物理内存,相应的要提高linux服务器交换空间,以下可以扩展交换空间的操作是( dd if=/dev/zero of=/mnt/sw1;swapon /mnt/sw1
)
在xdm的配置目录中,哪个文件用来设置在用户通过xdm登录后自动起动的应用程序?The Xsetup_0 file
。
在 Linux 系统中搭建 DHCP 服务器时,若需要给客户机指定默认网关地址为 192.168.1.1,可以在 dhcpd.conf 配置文件中进行(option routers 192.168.1.1;
)设置
option routers 192.168.0.1; 配置默认网关
option subnet-mask 255.255.255.0; 配置子网掩码
option domain-name-servers 192.168.1.1; 指定DNS服务器
option domain-name-servers; 配置多个DNS服务器
邮件服务器为每个用户限制磁盘存储空间上限,执行checkquota -cug /var/mail指令后, 在/var/mail目录自动创建的配置文件是( aquota.user
、aquota.group
)
aquota.group与aqouta.user分别是组以及用户磁盘配额需要的配置文件。
如果没有这两个文件,则磁盘配额是不会生效的。
quota(选项)(参数)
选项有:
-g:列出群组的磁盘空间限制;
-q:简明列表,只列出超过限制的部分;
-u:列出用户的磁盘空间限制;
-v:显示该用户或群组,在所有挂入系统的存储设备的空间限制;
-V:显示版本信息。
参数有:
用户或者工作组:指定要显示的用户或者工作组。
公司网络中心linux服务器需要升级OA系统,为了防止客户登录影响系统升级,网络管理员可以执行的操作有touch /etc/nolgoin
、init 1
、iptable -S INPUT -t tcp -s !127.0.0.1 -j DROP
ps命令用来列出系统中当前运行的那些进程。
nginx进程数设置为CPU总核心数最佳
设置工作模式与连接数上限时,应考虑单个进程最大连接数(最大连接数=连接数*进程数)
使用什么命令把打印任务放到打印队列中去打印:lpr。
“string”的长度为零
则为真
“string”的长度为非零
则为真
[ -z "" ]&&echo 0 ||echo 1
的输出是什么:0
1&&0 || 0 = 0
echo执行成功的返回码是0
哪个变量用来指定一个远程X应用程序将输出放到哪个X server上:DISPLAY
内核不包括的子系统是硬件管理系统
。
内核包括四个子系统:进程管理系统
、内存管理系统
、I/O管理系统
、文件管理系统
。
不需要编译或加载内核的情况是 :将网卡激活
需要编译或加载内核的情况是 :删除系统不用的设备驱动程序时
、升级内核时
、添加新硬件时
。【只要代码或配置有改动,都要重新编译的】
UNIX系统由内核、shell、文件系统和应用程序等4部分组成。
UNIX系统代码段和数据段分开的目的:可共享正文、可共享数据、可重入、可保护代码为只读、更好支持内存回收策略。【不包括:方便编程】
1)防止程序指令被修改,设置代码段权限为只读,设置数据段权限为可读写
2)代码段和数据段分开有利于提高程序的局部性,现代CPU缓存一般设计为数据缓存和指令缓存分离,指令和数据分开存放可以提高CPU缓存命中率。
3)共享指令,当系统运行多个程序的副本时,它们指令时一样的,因此内存只需保存一份程序的指令代码。每个副本进程的数据区是进程私有,可以节省内存。
I/O设备
____缺页中断
,这种频率非常高的页面置换现象
称为抖动。在请求分页存储管理中,可能出现这种情况,即对刚被替换出去的页,立即又要被访问。需要将它调入,因无空闲内存又要替换另一页,而后者又是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重导致系统瘫痪,这种现象称为抖动现象
。磁盘空闲空间的管理
)位向量(bit vector)是位图(bit map),在磁盘空闲空间的管理中,以一位的1和0代表对应的磁盘块是否空闲,位图是非常省空间的数据结构,1MB的空间可以映射8✖️1024✖️1024个磁盘块
arm-linux-gcc -g -o test test.c
DOS是磁盘操作系统
Netware
Windows 2000 Server
Linux
属于DDOS攻击方式的有:
- SYN Flood
【SYN Flood是一种常见的DOS(denial of service拒绝服务)和Ddos(distributed denial of serivce 分布式拒绝服务)攻击方式。这是一种使用TCP协议缺陷,发送大量的伪造的TCP连接请求,使得被攻击方cpu或内存资源耗尽,最终导致被攻击方无法提供正常的服务。】
- NTP 放大攻击
【NTP 放大攻击是 DDoS 的一种。通过 NTP 服务器,可以把很小的请求变成很大的响应,这些响应可以直接指向到受害者的电脑。】
- CC 攻击
)【攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫CC。CC主要是用来攻击页面的。模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。】
- 不属于DDOS攻击方式的有:水坑攻击【攻击者首先通过猜测(或观察)确定这组目标经常访问的网站,然后入侵其中一个或多个网站,植入恶意软件。在目标访问该网站时,会被重定向到恶意网址或触发恶意软件执行,导致该组目标中部分成员甚至全部成员被感染。按照这个思路,水坑攻击其实也可以算是鱼叉式钓鱼的一种延伸。】
6. - 串行通信的频带利用率比并行通信的高
- 串行通信可通过通信缓冲区来进行数据流速匹配
- 串行通信的传输速度比并行通信的慢