# 2.1 回车和换行有什么区别?
回车\r
本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR
,即Carriage Return
(回车,carriage有“马车”的意思)。
换行\n
本义是光标往下一行(不一定到下一行行首,不同操作系统中有差异),n
的英文newline
,控制字符可以写成LF
,即Line Feed
(换行)。
# 2.2 空洞文件是什么?有什么用?
“在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被设为 0。” --摘自“百度百科”
从上面的描述可以将空洞文件的特点表述为:offset
> 实际文件大小。
空洞文件特点就是offset大于实际大小,也就是说一个文件的两头有数据而中间为空,以\0
填充。
空洞文件作用很大,例如迅雷下载文件,在未下载完成时就已经占据了全部文件大小的空间,这时候就是空洞文件。下载时如果没有空洞文件,多线程下载时文件就都只能从一个地方写入,这就不是多线程了。如果有了空洞文件,可以从不同的地址写入,就完成了多线程的优势任务。
# 2.3 路由器和网关的区别
网关是一个概念,路由器是一个产品。
路由器是一个网关,但网关不一定是路由器,网关的作用就是帮助两个不能直接互通的网络,进行数据转发的。
路由器可以做网关,把家庭局域网和互联网相连。
默认网关事实上不是一个产品而是一个网络层的概念,PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。这个网关可以在路由器上,可以在三层交换机上,可以在防火墙上,可以在服务器上,所以和物理的设备无关。
# 2.4 为什么 ip 地址通常以 192.168 开头?
家庭网络由于网络规模比较小,通常使用了192.168开头的私网地址,光猫拨号获取了一个公网地址(或者运营商私网地址),通过NAT方式的映射到这个公网地址的不同端口,访问互联网。
# 2.5 gcc 怎么指定链接的库?
链接指定的库:
-l:libxxx.a
或 -l:libxxx.so.xxx
# 2.7 The following packages have been kept back
如果对已安装的某个软件包的依赖关系发生了更改,因此必须安装新的软件包才能执行升级,则该软件包将列为“保留”。
运行命令 apt-get install <list of packages kept back>
即可。
# 2.8 ubuntu server 开机停顿两分钟
会出现提醒:A start job is running for wait for Network to be configured
。
然后2分钟超时才能继续启动。
比较简单的方法是减少超时时间:
vim /etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service
然后在 [service] 后添加一行 TimeoutStartSec=2sec
[Service]
Type=oneshot
ExecStart=/lib/systemd/systemd-networkd-wait-online
RemainAfterExit=yes
TimeoutStartSec=2sec # 增加这一行
2
3
4
5
这样超时就只会卡住两秒钟而不是两分钟了。
参考:
# 2.9 我更换 shell 为 zsh ,shell 脚本开头的 #! /bin/sh 需要更改为 #! /bin/zsh 吗?
是的,如果你将默认的shell更改为zsh,并且你希望使用zsh来解释执行你的shell脚本,那么你需要将脚本文件的开头的shebang(也称为"hashbang")从#!/bin/sh更改为#!/bin/zsh。
Shebang是一个特殊的注释,它告诉系统应该使用哪个解释器来执行脚本。在默认情况下,#!/bin/sh告诉系统使用/bin/sh解释器来执行脚本。当你将默认shell更改为zsh后,如果你想要使用zsh来解释执行脚本,那么你需要相应地更新shebang为#!/bin/zsh。
这样做确保了当你运行脚本时,系统将使用正确的解释器来执行它。否则,如果shebang与实际使用的shell不匹配,可能会导致脚本无法正常执行。
# 2.10 ucLinux 和 linux 的区别?
一、名字含义:
在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思, 所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领域而设计的Linux系统"。
二、ucLinux与linux区别?
- 没有虚存管理
- 不能运行时增加进程栈
- 不支持分页
- 可执行程序不是elf, 而是flat
- 不能用fork, 而是用vfork
- RAMDISK
- uClinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。适合不具备内存管理单元(MMU)的微处理器/微控制器。没有MMU支持是 uClinux与主流Linux的基本差异。
对uCLinux 来说,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术。uCLinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页。 在加载应用程序时程序分页加载。但是由于没有MMU管理,所以实际上uCLinux采用实存储器管理策略。uCLinux系统对于内存的访问是直接的,所 有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续 地址空间,然后全部载入主存储器的连续空间中。
# 2.11 profile 文件作用是什么?
etc目录下的profile文件是每一个用户登录时,操作系统首先执行的文件,然后再将控制权交给用户主目录下的.profile文件。
- 每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。
- 在profile文件添加或修改的内容需要重新登陆才能生效。
- env 命令显示所有环境变量。
- set 命令显示本地自定义的 shell 变量。
- 常见环境变量:
- PATH
- HOME
- LOGNAME
- PS1,基本提示符,对于root用户是#,对于普通用户是$。
- 使用修改.bashrc文件(在用户的家目录下)进行环境变量的编辑,只对当前用户有用。`使用修改 /etc/profile 文件进行环境变量的编辑,是对所有用户有用。大家一定要注意区别。
/etc/profile,/etc/bashrc 是系统全局环境变量设定;
~/.profile,~/.bashrc用户家目录下的私有环境变量设定。
当登入系统时候获得一个 shell 进程时,其读取环境设定档如下:
- 首先读入全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如/etc/profile.d和/etc/inputrc;
- 根据不同使用者帐号,于其家目录内读取~/.bash_profile;
- 读取失败则会读取~/.bash_login;
- 再次失败则读取~/.profile(这三个文档设定基本上无差别,仅读取上有优先关系);
- 最后,根据用户帐号读取~/.bashrc。
至于~/.profile与~/.bashrc都具有个性化定制功能,但~/.profile可以设定本用户专有的路径、环境变量等,它只能登入的时候执行一次。
~/.bashrc也是某用户专有设定文档,可以设定路径、命令别名,每次 shell script 的执行都会使用它一次。
# 2.12 source、sh、bash 和 ./、. 有什么区别?
# 1 source
# 在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限"
# source命令可以简写为"."
source a.sh
. a.sh
# 2 sh/bash
# 都是打开一个subshell去读取、执行a.sh,而a.sh不需要有"执行权限"
# 通常在subshell里运行的脚本里设置变量,不会影响到父shell的。
sh a.sh
bash a.sh
# 3 ./
# 打开一个subshell去读取、执行a.sh,但a.sh需要有"执行权限"
# 可以用chmod +x添加执行权限
# 另外,使用./来执行的文件里有alias语句的话,shell并不会把alias别名扩展成对应的命令,
# 要解决的话,得使用shopt命令来开启alias扩展选项
./a.sh
#bash: ./a.sh: 权限不够
chmod +x a.sh
./a.sh
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
← 1 Linux 笔记 01 文件 I/O →