linux命令
-
adduser 新增一个用户后 发现命令失效 ll ls tab 甚至BackSpace按键都不认识了
因为添加用户时默认使用/bin/sh 需要切换为/bin/bash :切换为root 用户,vim /etc/passwd 编辑就OK了
1.查看当前使用的是什么shell,linux命令:echo $SHELL
2.查看当前可以使用的所有shell,linux命令:cat /etc/shells -
sudo : super user do
-
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器
-
lsb_release -a (Linux standard base)查看linux发行版本信息
-
uname -a (unix name) 查看系统信息
-
ln 软硬链接 ln file1 file2 (默认硬链接) ln -s file1 file3 (软连接)
cnblogs.com/itech/archive/2009/04/10/1433052.html -
查找文件内容中是否包含关键字: cat fileName.txt | grep keyWord
or : grep keyWord fileName.txt -
统计文件内容中的单次个数:wc fileName.txt -w
-
查看路径内文件个数:ls | wc -w
-
> 覆盖写入 >>追加写入
方法1: echo content >> outfile 方法2:cat >> outfile -
| 管道命令,将上一命令的输出作为下一命令的输入
-
PIPESTATUS 各步通道命令执行结果
linux 相关知识
- glibc和libc
都是linux下的C函数库 libc是Linux下的ANSI C函数库, glibc是Linux下的GNU C函数库
提供系统调用和基本的C库,比如open,malloc,printf等。glibc相较libc实现的功能更丰富。
-
glib
https://docs.gtk.org/glib/
glib提供了多种高级的数据结构,如内存块、双向和单向链表、哈希表、动态字符串以及字符串工具(例如词法分析器,字符串切分等)、动态数组,平衡二叉树、n-叉树、键值存储、关系和元组,还有带有缓存的内存管理。Glib还实现了线程相关的函数、多线程编程以及相关的工具,例如原始变量访问,互斥锁,异步队列,安全内存池,消息传递和日志,钩子函数和计时器,同时消息传递还包含了字节序转换和IO channel。
包含5个底层库:GObject、Glib、GModule、GThread、GIO -
pkg-config
freedesktop.org/wiki/Software/pkg-config/
pkg-config是用于编译程序或链接库时的工具,便于在命令行中添加指定的编译选项如:
#> gcc -o test test.cpkg-config --libs --cflags glib-2.0
不用硬编码来寻找链接库,是代码不感知的。 -
BusyBox
linux.cn/article-13840-1.html
是一个GPL项目,集成了常用shell命令(可定制、已裁剪)的可执行文件。因为很小,常用于嵌入式等对存储要求高的场景。 -
Linux内核镜像格式
vmlinux:内核编译出来的原始内核文件,未压缩。elf格式,包含2进制信息 和 符号表等信息
Image:vmlinx排除符号表、重定位信息后,剩下的二进制数据
zImage:ARM Linux常用压缩镜像,vmlinux + 解压代码 经gzip压缩而成
bzImage:vmlinux + 解压代码(压缩率更高) 经gzip压缩而成
uImage:uboot专用镜像。zImage + 0x40长度的头信息。多用在NAND Flash
xipImage:多用在NorFlash -
POSIX 可移植操作系统接口
POSIX是一种标准,通过指定统一的操作系统对外接口,保证应用程序的可移植性。
这种标准屏蔽了各种操作系统的实现细节。 -
MBR master boot record 主引导记录/主引导扇区
含义1:特指计算机开机后读取硬盘的首个扇区
含义2:读取的首个扇区包括(446 Byte的MBR + 64Byte分区表 + 2Byte标志位)
作用:计算机BIOS启动后,扫描各种启动设备,当某一启动设备的MBR校验通过后,会加载MBR存储的程序(作用为加载启动设备中的引导程序:如GRUB)。之后 引导程序会加载内核。 -
linux 文件系统
cnblogs.com/linguoguo/p/15807293.html -
Linux 分组、权限
Linux的文件/路径 归属分为 持有者、归属群组 和 other
Linux的文件/路径属性分为 可读r 可写w 可执行x
路径的可读属性说明可以查询该路径下的文件/路径的名称
路径的可执行属性说明可进入该目录 (就算该路径下有无操作权限的文件,因为对该路径有可执行权限,也可以直接将该文件删除) -
/usr 路径不是用户的含义 而是类似windows 『C:\Windows\ + C:\Program files\』这两个目录的综合体
usr是Unix Software Resource的缩写, 也就是『Unix操作系统软件资源』所放置的目录,软件安装者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下 -
/usr/local/
系统管理员在本机安装下载的软件(非distribution默认提供者),建议安装到此目录, 会便于管理。举例,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有区分。 -
/var
程序运行过程中,放置各类临时文件 -
初始虚拟磁盘 包括initrd(ram disk) initramfs
http://c.biancheng.net/view/1016.html
在内存上虚拟出来的文件系统。
产生背景:
Linux 会把不重要的功能编译成内核模块,在需要时再调用,保证内核不会过大。这些模块保存在 /lib/modules 目录中。常见的 USB、SATA 和 SCSI 等硬盘设备的驱动,还有一些特殊的文件系统(如 LVM、RAID 等)的驱动,都是以模块的方式来保存的。如果 Linux 安装在 IDE 硬盘之上,并且采用 ext3/4 文件系统,那么内核启动后加载根分区和模块后,系统会顺利启动。但如果 Linux 使用 SCSI 硬盘,采用的是 LVM 文件系统,那么内核(内核载入内存是启动引导程序 GRUB 调用的,并不存在硬盘驱动不识别的问题)在加载根目录之前是需要加载 SCSI 硬盘或 LVM 文件系统的驱动的。两者的驱动都放在硬盘的 /lib/modules 目录中,既然内核没有办法识别 SCSI 硬盘或 LVM 文件系统,那怎么可能读取 /lib/modules 目录中的驱动呢?Linux 给出的解决办法是使用 initramfs 这个虚拟文件系统。
工作方式:
initramfs通过启动引导程序加载到内存中,然后会解压缩并在内存中仿真成一个根目录,并且这个仿真的文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需的内核模块,比如 USB、SATA. SCSI 硬盘的驱动和 LVM、RAID 文件系统的驱动。通过 initramfs 虚拟文件系统在内存中模拟出一个根目录,然后在这个模拟根目录中加载 SCSI 等硬件的驱动,就可以加载真正的根目录了,之后才能调用 Linux 的第一个进程 /sbin/init。
总结:initramfs 是为了在内核中建立一个模拟根目录,这个模拟根目录是为了可以调用 USB、SATA、SCSI、LVM、RAID 等硬盘接口或文件系统的驱动模块,加载了驱动模块后才可以加载真正的系统根目录。