Linux基础

一、基础

  • Linux 磁盘分区文件名:SATA硬盘为/dev/sd(a-p),虚拟磁盘为/dev/vd(a-p)
  • 磁盘分区方式:MBR和GPT,MBR只使用64B来管理磁盘,所以最多只能划分4个主分区或者延伸分区,延伸分区最多只有一个,可以通过延伸分区划分其他的逻辑分区。
  • MBR的磁盘挂载之后如果分区,则具体的分区为/dev/sda1往后延伸,如果是延伸出来的虚拟分区则从sda5开始往后,因为1-4为主分区保留
  • 开启引导程序:BIOS和UEFI
  • stdin: 代码0,使用 < 或者 <<
  • stdout:代码为1,使用> 或者 >>,使用 >> 时,若目标文件不存在,则创建,若存在,则追加,使用> 的话则会覆盖
  • stderr:代码2,使用2> 或则 2>>
  • defunct表示僵尸进程
  • 进程终止的方式:1、调用exit系统调用,请求退出。2、其他线程发出信号,将进程杀死。无论何种方式退出,进程都会生成一个非负的小整数,表示当前的状态,供父进程调用wait系统调用检测。
  • 信号从产生直至送达进程期间,一直处于挂起状态。通常,系统会在接收进程下次获得调度时,将处于挂起状态的信号同时送达。如果接收进程正在运行,则会立即将信号送达。然而,程序可以将信号纳入所谓“信号屏蔽”以求阻塞该信号。如果产生的信号处于“信号屏蔽”之列,那么此信号将一直保持挂起状态,直至解除对该信号的阻塞。
  • 每个进程持有一份环境列表,以KV形式存储,子进程继承父进程的,可以通过exec系统调用替换当前运行的程序时,当前进程可以选择使用老环境或者在exec的参数中指定新环境。(大多数shell可以使用export命令来创建环境变量)
  • 会话指一组进程组,会话中的所有进程都具有相同的会话标识符,会话首进程是指创建会话的进程,其进程ID为会话ID。通常会话会与某个控制终端相关,由交互式Shell创建的会话,便是用户的登录终端。会话总有一个前台进程组(接收输入、输出),同时可以拥有任意个后台进程组。

二、基本命令

  • date:显示当前日期
  • cal:显示日历
  • bc:打开计算器
  • shutdown:关机
  • chmod:更改文件权限,R为4,W为2,X为1,7表示拥有RWX权限、6表示拥有RW权限,chmod 777 表示文件所有者、群组、其他人都拥有RWX权限
  • touch:创建文件
  • less、more、cat、tac:查看文件
  • mkdir、rmdir:创建目录、目录具有X权限才能cd进入
  • file:查看文件类型
  • whereis、locate、find:查找文件、find不常用,效率很低
  • df:列出文件系统的整体磁盘使用量
  • du:评估文件系统的磁盘使用量
  • ln:创建文件链接,不加参数为硬连接,加参数-s表示软链接
  • lsblk:列出系统上的所有磁盘列表
  • blkid:列出系统的所有磁盘设备名字以及其UUID和type
  • parted:列出某个设备的详细分区信息
  • fdisk:以MBR分区表来对磁盘进行分区
  • gdisk:以DPT分区表来对磁盘进行分区
  • mkfs:对磁盘进行格式化,例如mkfs.xfs以xfs格式化某个磁盘
  • xfs-repair、fsck.ext4:对文件系统进行修复
  • gzip\zcat:使用gzip对文件进行压缩
  • bzip2、bzcat:使用bzip2进行压缩
  • xz、zcat:使用xz进行压缩
  • env:查询当前的环境变量
  • set:查询环境变量和自定义变量
  • export:自定义变量转环境变量
  • declare:将环境变量转自定义变量
  • read:读取键盘输入
  • ulimit:针对用户进行资源限制,例如内存占用量、cpu使用时间等
  • alias、unalias:给命令起别名,取消给命令起的别名, alias不加参数为展示当前所有起了别名的命令
  • history:查看历史命令,如果同一个用户开启了多个bash,则只有最后一个bash执行的命令会被记录,前面的bash的历史命令会被覆盖
  • cut:截取信息
  • grep:分析一行数据,提取出我们想要的
  • tee:双向重导向
  • awk:文件处理
  • bg:将一个stop的后台任务,从stop状态变为running
  • fg:将一个stop的后台任务提取到前台来执行 (可以使用ctrl + z 将任务暂停)
  • nohup:ctrl + z 暂停的任务只是和终端机(tty,terminal的一种)绑定,这样我们关掉terminal后,该任务就会被终端,nohup则是让任务可以在关闭tty的时候不会终端,继续运行
  • ps:查看进程某个时间点的数据,可以加参数 a 排除所有与terminal有关的process,加参数u过滤与有效使用者无关的process,加参数x列出较详细的信息,即ps aux 可以查看系统所有运行的进程,ps -l查看与自己bash进程相关的进程信息
  • top:动态观察进程的变化
  • pstree:查看进程树
  • kill -signal pid:向进程发送信号,默认为15,signal后加1,为SIGHUP启动一个被终止的进程,2为SIGINT,中断进程,9为SIGKILL,强制关闭一个进程,15为SIGTERM,正常关闭一个进程,19为SIGSTOP,暂停一个进程
  • free:观察内存使用情况
  • uname:查阅系统与核心相关信息
  • uptime:系统启动时间与工作负载
  • netstat:网络信息
  • dmesg:抓取内核所产生的日志信息
  • vmstat:观察系统资源的变化
  • fuser:通过文件名找到正在使用该文件的进程
  • lsof:列出被进程所开启的文件名
  • pidof:得到某个进程的pid
  • systemctl:管理服务(即后台程序),格式 systemctl [command] [服务名]
  • lsmod:查看系统当前加载的模块

三、快捷键

  • ctrl + d:键盘输入结束
  • ctrl + c:终止目前的命令
  • ctrl + m:enter
  • ctrl + s:暂停屏幕的输出
  • ctrl + q:恢复屏幕输出
  • ctrl + u:在提示字符下,将整列命令删除
  • ctrl + z:暂停目前的命令
  • shift + page up / page down:翻页

四、API

4.1 文件I/O

  • open: fd = open(pathname,flags,mode),flags为标志位,可以设置为只读、只写、读写、文件不存在创建等,mode指定文件的访问权限。如果调用open成功,则保证其返回值为进程未使用文件描述符中数值最小者
  • read:readNum = read(fd,buffer,count)从fd所表示的文件中读取最多count个字节的数据到buffer
  • write:writeNum = write(fd,buffer,count)从buffer中读取count个字节的数据写入fd所表示的文件中
  • pread:多增加第四个参数表示偏移量,基于给定的offset进行读取操作,而非当前的文件偏移量,多线程情况下共享文件偏移量,使用此调用不会对其他线程造成影响
  • pwrite:同read
  • close: status = close(fd),关闭文件释放相应的资源
  • fcntl:int fcntl(int fd,int cmd, …):cmd有多种,对应不同的操作,…对应操作的参数
    • F_GETFL:获取文件的访问模式及状态标志,即open的flags参数,此操作不需要参数
    • F_SETFL: 修改文件的访问模式及状态标志
    • F_UPFD: 复制文件fd,功能类似于dup系统调用
    • 当一个文件不是由调用程序通过open打开时,flags可以通过fcntl来进行修改
  • dup:int dup(int oldfd),复制一个打开的文件描述符,并返回一个新的,两者指向同一个打开的文件
  • readv:分散输入,从文件描述符fd所指代的文件中读取一片连续的字节,然后将其散置(“分散放置”)于iov指定的缓冲区中。
  • writev: 集中输出,将iov所指定的所有缓冲区中的数据拼接(“集中”)起来,然后以连续的字节序列写入文件描述符fd指代的文件中。
  • truncate、ftruncate:将文件大小设置为length参数指定的值
  • mkstemp:创建一个临时文件,拥有唯一的文件名,并返回一个fd
  • tmpfile:创建一个名称唯一的临时文件,并以读写方式将其打开。tmpfile()函数执行成功,将返回一个文件流供stdio库函数使用。文件流关闭后将自动删除临时文件。为达到这一目的,tmpfile()函数会在打开文件后,从内部立即调用unlink()来删除该文件名

Bash

  • 为变量添加内容:eg: PATH=${PATH}:内容

  • 变量的值为命令执行的结果: eg:version=$(uname -r)

  • 变量要删除内容可以使用 # 关键字,eg:echo ${PATH#/*bin/bash},从左开始删除可以匹配 /*bin/bash的最短字符串,如果将#改为##,则删除最长的

  • 将#改为%,则从后向前删除

  • 将#改为/,则是进行替换,此时参数为两个,即 $ {变量名/就字符串/新字符串}、${变量名//就字符串//新字符串}

  • shell分为login shell和 non-login shell,login shell进入后一般会读取/etc/profile文件和~/.bash_profile或者 ~/.bash_login或者 ~/.profile(三者只读其一)

  • /etc/profile主要设置的变量有:PATH、MAIL、USER、HOSTNAME、HISTSIZE、umask

Gcc

  • fPIC:gcc -fPIC xxx.c,该参数用于编译阶段,告知编译器产生与位置无关的代码,使得产生的.o文件中全部为相对地址,不包含绝对地址(共享库一般要求可以被加载到任意地方),如果不加该参数,产生的动态库每次加载都需要重新定位,因此会产生重定位后的代码拷贝,失去共享一份代码的作用。

参考

Gate20与保护模式
fPIC的注意事项

  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值