Linux 基础知识1
Linux基础知识 (1)
1. Linux Daemon 守护进程/精灵进程
Linux Daemon是运行在后台的一种特殊进程,它独立于控制终端,周期性的执行某些特殊的任务或者等待处理某些发生的事件;不需要用户输入就能运行且可以提供特定的服务,Linux系统上的大多数服务器就是通过守护进程实现;Linux下常见的守护进程有:
- 日志进程 syslogd
- web服务器进程 httpd
- 邮件服务器sendmail
- 数据库服务器mysqld
守护进程的进程名通常以d结尾;
守护进程的特点:
- 生存周期长,操作系统启动的时候启动,操作系统关闭的时候关闭
- 守护进程和控制终端无关联,控制终端退出时不影响其运行
- 在后台运行,不占用终端,可以在终端运行其他命令
- 一个守护进程的父进程是init进程,因为守护进程的父进程在fork出守护进程后,就先于守护进程退出了,所以Daemon是一个由init进程继承的孤儿进程
2. Linux 性能观察工具
2.1 System Libraries 系统库
2.1.1 ltrace命令
ltrace命令用来跟踪进程对系统库文件的调用情况,属于Linux内核内建命令
常用参数:
- -f 跟踪当前程序或者进程的子进程(当前进程fork或者clone出来的)
- -T 输出每个调用过程的时间开销
2.1.2 ptrace命令
2.2 系统库调用接口
2.2.1 strace命令
2.3 VFS 虚拟文件系统
2.3.1 lsof命令
2.3.2 fatrace命令
2.3.3 filelife命令
2.3.4 pcstat命令
3. Linux系统语言设置
3.1 locale命令
locale命令用于在Linux上设置和查看程序运行的语言环境;locale会根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境。
local命令输出:
locale命令可查看当前系统上程序运行的语言环境;
LANG的优先级是最低的,它是所有LC_*变量的默认值;如果LC_*变量没有设置值,则其将LANG变量的值作为默认值;
LC_*各个变量的含义如下:
- LC_CTYPE:用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等,非常重要的一个变量。
- LC_NUMERIC:用于格式化非货币的数字显示
- LC_TIME:用于格式化时间和日期
- LC_COLLATE:用于比较和排序
- LC_MONETARY:用于格式化货币单位
- LC_MESSAGES:用于控制程序输出时所使用的语言,主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等
- LC_PAPER:默认纸张尺寸大小
- LC_NAME:姓名书写方式
- LC_ADDRESS:地址书写方式
- LC_TELEPHONE:电话号码书写方式
- LC_MEASUREMENT:度量衡表达方式
- LC_IDENTIFICATION:locale对自身包含信息的概述
LC_ALL:它不是环境变量,它是一个宏,可通过该变量的设置覆盖所有LC_*变量,这个变量设置之后,可以废除LC_*的设置值,使得这些变量的设置值与LC_ALL的值一致,注意LANG变量不受影响。
优先级:LC_ALL > LC_* > LANG
3.2 locale -a命令
locale -a命令用于查看当前系统中可用的locale
locale -a | grep "zh_CN.*"
local -a -v命令能够列出更加详细的信息
4 Linux .bashrc 和 .profile文件的区别
在Linux系统中,.bashrc和.profile是两个重要的配置文件,可以用于定义用户的环境变量,别名,和自定义命令等。
主要区别:
.bashrc是Bash Shell的配置文件,位于用户的主目录下;.bashrc在每次交互式会话时都会执行一次。通常用于定义个性化的命令别名,环境变量,以及用户自定义函数,.bashrc主要影响交互式的bash会话,例如终端窗口。.profile是一个更为通用的配置文件,会被各种shell使用,该文件也位于用户的主目录下。.profile只在用户登录时执行一次,被用来设置用户的全局环境变量和启动脚本,以及一些常见的环境变量配置。.profile文件适用于所有shell,因此更为通用。/etc/profile是针对系统全局的环境配置,在这个文件中添加的设置会对系统中所有的用户生效。- 可使用source命令使修改的文件生效
5 Linux下的特殊文件
-
/dev/null黑洞文件:特殊的设备文件,被称为设备文件,是因为它提供了对设备的访问,但是实际上不对任何物理设备进行读写操作。黑洞文件会将所有写入它的数据丢弃,因此将数据写入黑洞文件,就相当于永久删除数据。从黑洞文件中中读取数据时,她会立即返回一下文件结束符。 -
/dev/zero空白文件:特殊的设备文件,被称为设备文件,是因为它提供了对设备的访问,但是实际上不对任何物理设备进行读写操作。空白文件会不断的产生空字节(0),因此从中读取数据会得到无限的空字节流,不会遇到文件结束符。通常用于初始化和清零操作。 -
/dev/urandom随机文件:特殊的设备文件,是Linux系统中提供的随机伪设备。这两个文件用于提供永不为空的随机字节数据流。很多的加密解密软件都会用到此文件。主要的差异:/dev/random的random pool需要依赖于系统中断,因此在系统的中断数不足的情况下,/dev/random设备会一直处于封锁状态,尝试读取随机数据的进程就会处于等待状态,直到系统的中断数充分够用,/dev/random设备的优点是可以确保数据的随机性。/dev/urandom设备不依赖于random pool,不会造成读取进程等待,但是其随机性也不高。
# 读取100个字节并以十六进制的形式进行显示
cat /dev/urandom | head -c 100 | od -x
例如,需要创建一个指定大小的文件,可通过dd命令配合空白文件实现:
dd if=/dev/zero of=new_file.bin bs=100M count=1
通过上述命令,创建了一个大小为100M的文件。
dd命令可实现从输入文件,读取特定字节的数据,写入新文件。if可指定输入文件,of可指定输出文件,bs表示要读取的数据块的大小,count表示数据块的数量。此外,还可以通过conv命令来将读取出来的数据,进行特定的转换,再写入输出文件。
# 转换为大写conv=ucase
dd if=/dev/zero of=new_file.bin bs=100M count=1 conv=ucase
/dev/shm共享内存:在/dev目录下可以看到,/dev/shm是一个目录,这是Linux系统利用内存虚拟出来的一个文件系统,这个目录中的文件都是保存在内存中,因此存取效率很高。但是这个目录中的数据,不会持久化到磁盘,系统重启以后,数据会丢失。它的默认大小是内存的一半,被她占用的内存,不会被操作系统回收利用。
6 Linux和Windows下的文本文件
在windows下新建的文本文件,在使用file命令进行查看的时候,会提示with CRLF line terminator的提示信息;
CRLF指的是文件使用回车(CR, Cariage Return)+换行(LF, Line Feed)作为行的终止符。
在计算机系统中,行终止符用于标记文件一行文本的结束,不同操作系统下的行终止符有所不同。
-
Windows: 使用
CRLF(\r\n)作为行终止符。这源于早期打字机的工作原理,“回车” 将打印头移动到一行的开头,“换行” 将纸张向上移动一行。 -
Unix和类Unix系统:通常只使用
LF(\n)作为行终止符 。
当看到 “with CRLF line terminator” 的描述时,意味着对应的文本文件遵循 Windows 系统的行终止符规范,每行文本的结尾是 \r\n 组合。这种差异在跨平台文件传输和处理时可能会导致问题,例如在 Unix 系统上用文本编辑器打开以 CRLF 为行终止符的文件,可能每行末尾会出现多余的字符或显示异常。
转换方法:
1. tr命令
tr命令用于转换或者删除文件中的字符,可以使用tr命令将文件中的CR字符删除,从而将行终止符从CRLF转换为LF。(tr只能从标准输入来读取文件数据)
tr -d '\r' < data.txt > data_new.txt
2. dos2unix命令
dos2unix 工具专门用于将 DOS/Windows 格式的文本文件(以 CRLF 为行终止符)转换为 Unix 格式(以 LF 为行终止符)。
dos2unix data.txt
3. 使用vim编辑器 (推荐)
- 使用vim打开文件
- 在命令模式下输入
set ff=unix,或者:set fileformat=unix,这会将文件格式设置为 Unix 格式,即把行终止符转换为LF - 输入 :wq 保存并退出 vim,此时文件的行终止符已转换为 Unix 风格
vim查看文件的fileformat值:
:set fileformat?
可能的值有:
fileformat=unix
fileformat=dos
fileformat=mac
7. Base64编码
Base64是一种将二进制数据转换为ASCII字符的编码方式,核心的目的是为了让原本无法直接传输,存储的二进制数据,能在支持支文本的场景中正常传递
1. 编码原理:
- 如一张图片,一段视频,在计算机中存储的形式是二进制流
- Base64把每三个字节(24位)拆成4个6位的组,每个6位的组对应的是一个0~63的十进制数,再映射到固定的ASCII字符表(A-Z,a-z,0-9,+,/)共计64个字符,这也是Base64的由来。
- 如果数据长度不是3字节的整倍数,会采用
=补位,因此Base64编码后的文本末尾可能会有1到2个=
2. 特点
- 可编码,可解码,不属于加密
- 数据体积会变大,大概为原数据的1.33倍(3字节变4字节)
- 纯文本格式,不会出现特殊二进制
3. 应用
- 网络传输图片,音频等,可采用Base64编码,再以字符串形式传输

浙公网安备 33010602011771号