Linux
文章平均质量分 71
本人自己整理的Linux基础知识,望共同学习,共同进步!
耀个丸子~
这个作者很懒,什么都没留下…
展开
-
【Linux】文件权限--嘎嘎全!!!
第一位是文件类型,接下来的字符,三个为一组(读、写、执行) ●rwx:权限分配中,rwx是固定顺序不会改变,没有对应权限就要–代替 ●-:表示没有对应权限,例如:第三组中w权限位置为-,表示其他人没有写权限 ●第一组:文件拥有者的权限 ●第二组:在文件所属用户组的用户的权限 ●第三组:非本人,且不在文件所属用户组的其他账号权限a.txt权限说明? ●普通文件类型 ●拥有者:可读写。原创 2024-05-15 17:14:25 · 565 阅读 · 0 评论 -
【Linux】make
变量名称=值列表Makefile 中的变量的使用其实非常的简单,因为它并没有像其它语言那样定义变量的时候需要使用数据类型。变量的名称可以由大小写字母、阿拉伯数字和下划线构成。等号左右的空白符没有明确的要求,因为在执行make的时候多余的空白符会被自动的删除。至于值列表,既可以是零项,又可以是一项或者是多项。调用变量的时候可以用"$(OBJ)"(常用)或者是"${OBJ)”来替换,这就是变量的引用。obj = add.o sub.o main.o #所有的依赖条件。原创 2024-05-16 12:24:48 · 710 阅读 · 0 评论 -
【Linux】用户与用户组
每个用户都有用户ID (User ID,UID)和群组ID(Group lD,GID),每个用户在创建时都有一个用户主组(默认和用户同名,只能有一个),用户创建后可以添加任意个附加组。GID是用户主组的ID。 账号名称:密码:密码更新日期:密码不可被更改的天数:密码需要被更改的天数:密码需要更改期限前的警告天数:密码失效日:账号失效日期:保留字段。 ●gid:表示指定用户的用户主组,选项的值可以是用户组id,也可以是组名(默认创建同名的用户组)原创 2024-05-15 17:05:48 · 525 阅读 · 0 评论 -
【Linux】GCC
GCC编译器是Linux系统下最常用的C/C++编译器,大部分Linux发行版中都会默认安装。GCC编译器通常以gcc指令的形式在终端中使用。原创 2024-05-15 17:40:12 · 386 阅读 · 0 评论 -
【Linux系统编程】 open和close函数
需要说明的是,当一个进程终止时,内核对该进程所有尚未关闭的文件描述符调用close关闭,所以即使用户程序不调用close,在终止时内核也会自动关闭它打开的所有文件。但是对于一个长年累月运行的程序(比如网络服务器),打开的文件描述符一定要记得关闭,否则随着打开的文件越来越多,会占用大量文件描述符和系统资源。普通文件默认是非阻塞的,内核缓冲区保证了普通文件IO不会阻塞,打开普通文件一般会忽略该参数。:追加,如果文件已有内容,这次打开文件所写的数据附加到文件的末尾而不覆盖原来的内容。●失败:返回-1,并设置。原创 2024-05-18 00:46:24 · 385 阅读 · 0 评论 -
【Linux】基本操作指令--看这一篇就够了!!!
显示日期●用法1: #date CST: China Standard Time时区,中国标准时间●用法2: #date +指定格式 常用格式:●用法3: date -d "-1 day"获取之前或者之后的某个时间(备份)符号的可选值:+(之后)或者-(之前)单位的可选值: year、month、day、hour、minute、second2.cal指令calendar,显示日历●用法1: #cal 含义:显示当前月份的日历。等价于#cal -1●用法2: #cal -3。原创 2024-05-14 20:48:16 · 178 阅读 · 0 评论 -
【Linux】vim的配置---最全!!!看这一篇就够了!
很多软件默认使用vi作为他们编辑的接口。 ●可视化操作(view) : v(可视模式).V(可视行)、ctrl +v(可视块),然后按下方向键来选中需要操作的区块按下y复制或按下d删除。 ●文件没有修改时直接退出,在文件修改的情况下保存并退出(不要使用×,X是文件进行加密): x。x:文件没有修改时直接退出,在文件修改的情况下保存并退出(不要使用×,×是文件进行加密)●命令模式:打开文件之后默认进入该模式,可以输入快捷键进行一些操作:删除、复制、粘贴、移动光标等。原创 2024-05-14 21:01:03 · 561 阅读 · 0 评论 -
【Linux系统编程】文件IO
操作系统为每个进程维护一个文件描述符表,新打开文件返回文件描述符表中未使用的最小文件描述符,调用open 函数可以打开或创建一个文件,得到一个文件描述符。一个进程启动之后,默认打开三个文件描述符 :0标准输入,1标准输出,2标准错误。新打开的文件永远都是3,跟是哪个文件没关系。文件描述符由进程维护,新打开的都是独立的。是打开的文件,由进程维护。文件描述符指代打开的文件。原创 2024-05-18 00:46:02 · 123 阅读 · 0 评论 -
【Linux】静态库和动态库
库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库"文件;在链接步骤中,链接器将从库文件取得所需的代码,复制到生成的可执行文件中。Linux中常见的库文件有两种,一种.a为后缀,为静态库,另一种以.so为后缀,为动态库。原创 2024-05-16 11:56:57 · 593 阅读 · 0 评论 -
【Linux系统编程】基本概念
●系统调用:内核的入口,用户程序只在用户态下运行,如果需要进入内核空间,就需要通过系统调用,当应用程序使用系统调用时,会产生一个中断,CPU中断当前执行的用户程序,跳转到中断处理程序,也就是开始执行内核程序。例如,当一个程序在读取磁盘文件,硬盘的读写速度是很慢的,如果CPU一直等到硬盘返回数据,CPU的利用率就会很低。所以,当进程从硬盘读取数据时,CPU不需要阻塞等待数据的返回,而去执行其他进程。内核,操作系统的核心,作为应用程序连接硬件设备的桥梁,应用程序只关心与内核交互,不用关心硬件的细节。原创 2024-05-17 20:52:30 · 819 阅读 · 0 评论 -
【Linux】系统相关指令
disk free,显示文件系统磁盘使用情况统计●用法:#df -h含义:以高可读性的形式显示磁盘使用情况统计d是磁盘。proc是进程,进程不在磁盘里,为什么显示呢,因为在linux下一切皆文件,文件在磁盘里。proc是虚拟文件系统。原创 2024-05-15 17:31:19 · 686 阅读 · 0 评论 -
【Linux】解压缩--三种方法!!看这一篇就足够用了。
打包和解压缩,Linux中打包文件一般是以.tar结尾的,压缩的文件一般是以.gz (.bz2)结尾的。通常打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般为.tar.gz。●常用选项:●z:使用gzip进行解压缩●j:使用bzip2进行解压缩●c: create,创建文件●x: extract,解压●v: verbose,显示运行过程●f: file,指定文件名●C:指定解压位置●t: list,查看打包文件中的文件名。原创 2024-05-14 20:42:13 · 169 阅读 · 0 评论 -
【Linux】硬链接与软连接
起别名的时候会用。原创 2024-05-14 20:34:08 · 816 阅读 · 0 评论 -
【Linux】GDB
所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也就是说,通过调试程序,我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低效的代码。可使被调试程序在指定代码处暂停运行,并查看当前程序的运行状态(例如当前变量的值,函数的执行结果等),即支持断点调试;程序执行过程中,可以改变某个变量的值,还可以改变代码的执行顺序,从而尝试修改程序中出现的逻辑错误。原创 2024-05-16 20:49:41 · 356 阅读 · 0 评论 -
【Linux系统编程】进程
进程是正在执行程序的实例,是操作系统进行资源分配和调度的基本单位。在内核看来,进程是一个个实体,内核需要在它们之间共享各种计算机资源。即使只有一个CPU也支持并发。例如,当一个程序在读取磁盘文件,硬盘的读写速度是很慢的,如果CPU一直等到硬盘返回数据,CPU的利用率就会很低。所以,当进程从硬盘读取数据时,CPU不需要阻塞等待数据的返回,而去执行其他进程。当硬盘数据返回时,给CPU发送中断,CPU就可以回来继续执行了。CPU会在进程间快速切换,使每个程序运行几十或者几百毫秒。原创 2024-05-18 11:06:30 · 658 阅读 · 0 评论 -
【Linux系统编程】条件变量
如直接使用互斥量,除了生产者、消费者之间要竞争互斥量以外,消费者之间也需要竞争互斥量,但如果汇聚(链表)中没有数据,消费者之间竞争互斥量是无意义的。可以使用条件变量解决:线程1不满足运行条件时,先休眠等待,其他线程运行到满足线程1的运行条件时,通知并唤醒线程⒉继续执行。条件变量,通知状态的改变。 定义一个变量a,线程1当a为0时对a+1,线程2当a为1时对a-1,循环10次,a的结果应该是0和1交替。5.注意这里,如果线程3抢到了锁,wait结束,线程继续执行,+1,number变成2。原创 2024-05-20 14:07:26 · 791 阅读 · 0 评论 -
【Linux系统编程】exec函数族
fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec 函数以执行另一个程序。当进程调用一种 exec函数时,通过该调用,进程能以全新程序来替换当前运行的程序。将当前进程的代码段和数据段替换为所要加载的程序的代码段和数据段,然后让进程从新的代码段第一条指令开始执行,但进程ID不变,换核不换壳。我们主要介绍其中的两个,他们的功能都一样,只是使用方式略有不同。在程序中调用另一个程序。原创 2024-05-19 13:28:01 · 251 阅读 · 0 评论 -
【Linux系统编程】 read和write函数
因为它们转化成二进制都是只有一位有1,就可以用按位或来变成两位有1。函数描述: 从打开的设备或文件中读取数据。文件偏移量:刚打开的文件默认的文件偏移量为0。相同的a读写是追加,不同的ab读写是覆盖。函数描述: 向打开的设备或文件中写数据。:缓冲区,要写入文件或设备的数据。缓冲区存放的最大字节数(容量):读取的数据保存在缓冲区。●成功:返回写入的字节数。●错误:返回-1并设置。中数据的长度(容量)原创 2024-05-18 00:46:32 · 134 阅读 · 0 评论 -
【Linux系统编程】stat / lstat / fstat函数
st_mode为16位整数,低12位代表文件权限,只需要了解低9位。高4位代表文件类型,如下列出用以检查权限和文件类型的宏。获取文件状态、文件属性的函数。l:软连接 lstat():查看软连接本身的信息。和stat的区别在于如果文件是符合链接,返回的文件属性是符号链接本身。:掩码,过滤st_mode 权限部分,保留文件类型部分)stat结构体的指针,用于存储获取到的文件信息。则是指定文件描述符获取文件信息。:要获取属性的文件描述符。●检查文件类型的宏: (:要获取属性的文件路径。用-il也都能打出来。原创 2024-05-18 10:46:42 · 163 阅读 · 0 评论 -
【Linux系统编程】 dup和dup2函数
到目前为止,文件描述符和打开的文件之间似乎呈现出一一对应的关系。然而,实际并非如此。多个文件描述符可以指向同一打开文件。●newfd:复制后的新的文件描述符,如果newfd已经指向了一个文件,先关闭原来打开的文件,再将newfd指向oldfd 指向的文件。●成功:将oldfd复制给newfd,两个文件描述符指向同一个文件。复制文件描述符,返回复制后的文件描述符。●成功:返回最小且没被占用的文件描述符。复制文件描述符,指定复制后的文件描述符。oldfd:要复制的文件描述符。●oldfd:原来的文件描述符。原创 2024-05-18 00:47:27 · 181 阅读 · 0 评论 -
【Linux系统编程】读写锁
读写锁,由读锁和写锁两部分组成,读取资源时用读锁,修改资源时用写锁。其特性为:写独占,读共享(读优先锁)。读写锁适合读多写少的场景。读写锁的工作原理: ●没有线程持有写锁时,所有线程都可以一起持有读锁 ●有线程持有写锁时,所有的读锁和写锁都会阻塞读优先锁:有线程持有锁,这时有一个读线程和一个写线程想要获取锁,读线程会优先获取锁就是读优先锁,反过来就是写优先锁。原创 2024-05-20 14:00:37 · 266 阅读 · 0 评论 -
【Linux系统编程】死锁现象
当多个线程中为了保护多个共享资源而使用了多个互斥锁,如果多个互斥锁使用不当,就可能造成,多个线程一直等待对方的锁释放,这就是死锁现象。 ●持有并等待条件:线程1已经持有资源A,可以申请持有资源B,如果资源B已经被线程2持有,这时线程1持有资源并等待资源B。 ●锁的粒度控制:破坏请求与保持条件,尽可能减少持有锁的时间,降低发生死锁的可能性。 ●资源有序分配:破坏环路等待条件,规定线程使用资源的顺序,按规定顺序给资源加锁。 ●互斥条件:资源只能同时被一个线程占用。原创 2024-05-20 13:55:52 · 243 阅读 · 0 评论 -
【Linux系统编程】孤儿、僵尸进程
因为kill命令只是用来终止进程的,而僵尸进程已经终止。可以杀死它的父进程,让init进程变成它的父进程,init进程可以回收它。 孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,变成孤儿进程后会有一个专门用于回收的 init进程成为它的父进程,称init进程领养孤儿进程。 僵尸进程:进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵(Zombie)进程。直接用kill去杀死僵尸进程是不管用的,可以去杀死他的父进程,这样僵尸进程就没了。原创 2024-05-19 12:52:56 · 271 阅读 · 0 评论 -
【Linux系统编程】阻塞和非阻塞
普通文件默认是非阻塞的,内核缓冲区保证了普通文件IO不会发生阻塞事件,所以普通文件不需要考虑是否阻塞。●阻塞:调用函数的结果返回前,当前进程(线程)会被挂起,直到得到结果才会继续运行。●非阻塞:调用函数后会直接返回结果,不会等待结果。设备、管道和套接字默认是阻塞的,以。open()打开文件时可以通过参数。阻塞和非阻塞描述的是线程的状态。同步异步描述的是编程的方式。方式打开可以做非阻塞IO。对应的报错信息给打出来。原创 2024-05-18 10:08:08 · 99 阅读 · 0 评论 -
【Linux系统编程】线程
与进程类似,线程(thread)是允许程序并发执行多任务的一种机制。一个进程可以包含多个线程,每个线程会独立执行相同的程序代码,且共享同一份全局内存区域。同一进程中的多个线程可以并发执行。在多处理器环境下,多个线程可以同时并行。如果一个线程因等待I/O操作而遭阻塞,那么其他线程依然可以继续运行。线程相对进程的优势:●进程间的信息难以共享,需要进程间通信。线程间能方便、快速的共享信息,不过要避免多个线程同时修改同一数据的情况。●调用fork()创建进程的代价较高,需要复制父进程的内容。原创 2024-05-20 13:31:30 · 858 阅读 · 0 评论 -
【Linux系统编程】perror和strerror函数
大多数系统调用和库函数都会返回表示是否调用成功的状态值。要了解调用是否成功,必须坚持对状态值进行检查。若调用失败,那么必须采取相应行动。至少程序应该显示错误消息,警示有意想不到的事件发生。许多系统调用和库函数在失败时设置外部变量errno来指明失败原因。许多不同函数库都把这个变量用做报告错误的标准方法。注意:程序必须在函数报告出错之后立刻检查errno变量,因为它可能马上就被下一个函数调用所覆盖,即使下一个函数没有出错,也可能会覆盖这个变量。原创 2024-05-18 10:39:31 · 257 阅读 · 0 评论 -
【Linux系统编程】lseek函数
lseek。原创 2024-05-18 00:46:52 · 339 阅读 · 0 评论 -
【Linux系统编程】互斥量(互斥锁)
如果互斥量已经被其他线程占用,那么该线程将被阻塞,直到互斥量的锁被释放。某一时刻,全局变量a的值为5,线程A和线程B中都要执行a++,如果线程A在执行a+1赋值给a之前,这时线程B执行了a++,线程B取到a的值仍是5,这时,线程A和B赋给a的值都是6。值为5的变量a经过两次a++结果却是6,显然出现了错误。一旦线程锁定互斥量,随即成为该互斥量的所有者,只有所有者才能给互斥量解锁。 给互斥量加锁和解锁,解锁的函数在解锁的同时唤醒阻塞在该互斥量上的线程,默认先阻塞的先唤醒。原创 2024-05-20 13:41:46 · 883 阅读 · 0 评论 -
【Linux系统编程】信号量
参数mode和value:参数oflag有O_CREAT时,需要传这两个参数,mode代表权限,value代表信号量的初始值。场景2:定义一个变量a,线程1当a为0时对a+1,线程2当a为1时对a-1,循环10次,a的结果应该是О和1交替。POSIX提供两种信号量,命名信号量和无名信号量,命名信号量一般是用在进程间同步,无名信号量一般用在线程间同步。 如果没有可用资源(sem=0),进程或线程阻塞,直到有资源. Р操作,信号量大于零将信号量减一。原创 2024-05-20 14:11:17 · 611 阅读 · 0 评论 -
【Linux系统编程】进程回收
一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid获取这些信息,然后彻底清除掉这个进程。我们知道一个进程的退出状态可以在Shell 中用特殊变量$?查看,因为Shell是它的父进程,当它终止时Shell调用wait或waitpid得到它的退出状态同时彻底清除掉这个进程。原创 2024-05-19 13:03:03 · 612 阅读 · 0 评论 -
【Linux系统编程】进程间通信
进程间通信简称IPC (Inter process communication),进程间通信就是在不同进程之间传播或交换信息。 由于各个运行进程之间具有独立性,这个独立性主要体现在数据层面,而代码逻辑层面可以私有也可以公有(例如父子进程),因此各个进程之间要实现通信是非常困难的。 各个进程之间若想实现通信,一定要借助第三方资源,这些进程就可以通过向这个第三方资源写入或是读取数据,进而实现进程之间的通信,这个第三方资源实际上就是操作系统提供的一段内存区域。原创 2024-05-19 14:16:21 · 850 阅读 · 0 评论 -
【Linux系统编程】线程同步
线程同步是指多线程通过特定的设置(如互斥量,条件变量等)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系,如果没有同步,那线程之间是各自运行各自的!当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。子线程没有独立的地址空间,大部分数据都是共享的,如果同时访问数据,就会造成混乱,所以要进行控制,线程之间要协调好先后执行的顺序。这样程序不能结束,还是会打出hello,因为这是结束线程的。原创 2024-05-20 13:33:24 · 93 阅读 · 0 评论 -
【Linux系统编程】fcntl函数
fcntl函数fcntl。原创 2024-05-18 00:47:18 · 164 阅读 · 0 评论 -
【Linux】文件与目录
开头是硬连接。原创 2024-05-12 21:07:56 · 504 阅读 · 0 评论 -
【Linux】文件内容的查阅与统计
concatenate,连接文件并打印到标准输出设备上(查看文件)●用法1: #cat 文件的路径 常用选项:-n列出行号●用法2: #tac 含义:倒序显示(应用:查看日志)原创 2024-05-12 21:25:25 · 784 阅读 · 0 评论 -
【Linux】终端与指令
一系列输入输出设备的总称●终端的打开方式: ·鼠标右键-打开终端 ·在当前终端窗口再打开一个终端: CTRL+SHIFT+T ·切换终端:ALT+数字●终端的放大与缩小: ·放大:CTRL+SHIFT+ '+' ·缩小:CTRL+ '-'原创 2024-05-12 20:36:13 · 216 阅读 · 0 评论