![](https://img-blog.csdnimg.cn/20190828165035171.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux学习
文章平均质量分 88
smilejiasmile
这个作者很懒,什么都没留下…
展开
-
linux 创建一个垃圾篓防误删及其误删文件恢复
一、创建一个垃圾篓给你的linux创建一个垃圾篓/回收站,防误删创建一个垃圾回收站,保存被删除距今3天的文件,过期则被删除1. 在你的主目录下,创建文件夹 .trashcd ~mkdir .trash2. 在你的常用脚本目录下创建这俩脚本#!/bin/bashTRASH_DIR="/home/lixy/.trash"for i in $*; do STAMP=`date +%s` fileName=`basename $i` if [[ -d转载 2021-11-05 14:46:29 · 600 阅读 · 0 评论 -
Linux 文件系统之 inode 概述
inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础。我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念,从而大大简化用户接口。下面就是我的inode学习笔记,尽量保持简单。理解inode作者:阮一峰一、inode是什么?理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取转载 2021-11-05 14:41:38 · 2124 阅读 · 0 评论 -
(二) GNU/GCC 编译器及其编译流程概述
GNU/GCC编译过程可以被细分为四个阶段:◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking)Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件 进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。和其它常用的编译器一样,GCC也提供了灵活而强大的代码 优化功能,利用它可以生成执行效率更高的代码。g...原创 2021-10-14 18:03:59 · 2648 阅读 · 0 评论 -
(Outlook) 详解三大编译器:gcc、llvm 和 clang
编译器一般构成传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。GCCGCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器,因为它原本只能.原创 2021-10-14 17:34:16 · 2752 阅读 · 0 评论 -
C/C++ 中嵌入汇编总结
GCC汇编语法梗概AT&T 与 Intel 汇编区别Linux GCC(GNU, C Compiler)使用AT&T汇编语法。下面列一下AT&T 和Intel汇编语法中的不同:源-目的 顺序AT&T中源和目的操作数的顺序相反。Intel语法中第一个操作数是目的,第二个是源。而AT&T语法中,第一个是源第二个操作数是目的。“Op-code src, dst” —— AT&T 语法“Op-code dst, src” —— Intel语法寄转载 2021-08-02 10:00:26 · 1086 阅读 · 0 评论 -
认真分析mmap:是什么 为什么 怎么用
阅读目录mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函数 mmap使用细节mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段.转载 2021-07-31 11:59:50 · 245 阅读 · 0 评论 -
shell脚本如何优雅的打印帮助信息
一个好的帮助信息对于快速、高效的使用shell脚本是非常有好处的。我们一般通过echo来逐行打印帮助信息,这种方式一个明显的缺点就是需要手动去进行排版,而排版的过程有时十分的繁琐。有没有想过,如果可以像写一般的注释一样来完成帮助信息的编写,那该多好啊!本文通过sed这个工具来实现,像写注释一样写shell的帮助信息。shell中一般#开头的行为注释信息,所以利用这个特性,我们可以把帮助信息设计成如下的样式:#!/usr/bin/env bash ###### my-script — does转载 2021-07-06 11:54:19 · 765 阅读 · 0 评论 -
autotools 自动编译系列简介
autotools安装1.介绍Linux环境下,我们编译程序啥的都是一般用的GCC&&GDB等等工具,直接使用GCC命令进行编译操作。这种方式一般是适用于程序文件比较少,组织结构比较简单的情况。但是,当我们程序文件比较的多的时候,或者是程序文件组织结构比较的复杂(例如在程序文件夹中存在文件夹多层嵌套以及复杂引用等),此时我们如果是直接使用GCC一点一点的编译工作量会非常的大,而且万一程序修改了,还要重新的再工作一遍。为此,我们有了make工具,依靠Makefile辅助文件,我.转载 2021-04-04 00:11:19 · 933 阅读 · 1 评论 -
CMake 常用命令和变量
前言前面的文章介绍了一个最简单的CMake工程,这篇文章将介绍一个稍微复杂一些的CMake工程,结合这个工程总结一下在组织一个C/C++工程时最为常用的一些CMake命令和变量。对于涉及到的命令和变量,介绍的原则是点到即止,先仅需掌握基本用法即可,让工程跑起来。上一篇文章中那个最简单的CMake Hello World工程,在其CMake脚本文件CMakeLists.txt中,仅有一句话:add_executable(hello hello.cpp)这里面的add_executable就是转载 2021-03-30 15:41:48 · 267 阅读 · 0 评论 -
无锁(Lock-Free)编程简介及漫谈
一、引言现代计算机,即使很小的智能机亦或者平板电脑,都是一个多核(多CPU)处理设备,如何充分利用多核CPU资源,以达到单机性能的极大化成为我们码农进行软件开发的痛点和难点。在多核服务器中,采用多进程或多线程来并行处理任务,俨然成为了大家性能调优的标准解决方案。多进程(多线程)的并行编程方式,必然要面对共享数据的访问问题,如何并发、高效、安全地访问共享数据资源,成为并行编程的一个重点和难点。传统的共享数据访问方式是采用同步原语(临界区、锁、条件变量等)来达到共享数据的安全访问,然而,同步恰恰和并行原创 2021-02-27 21:28:45 · 4473 阅读 · 1 评论 -
线程并发编程之线程锁
实现并发的方式有多种,其中有进程、线程、基于异步事件机制的编程等等。而针对多线程编程应为同一进程下的多个线程之间是共享进程的用户地址空间和 pc 等资源。所以会存在着数据竞争的情况,故而就会涉及到线程同步机制(锁机制)或者依靠 cpu 提供的指令集原子原语实现的无锁编程。而本节主要讲述 Linux 系统间的锁机制。1 互斥锁在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。互斥锁的使用过程中,主要有pthread_mutex_init、pthread_...转载 2021-02-27 19:33:14 · 340 阅读 · 0 评论 -
从 linux内核来看进程与线程的异同
在《linux内核设计与实现》中第三章讲解了进程管理,在关于进程和线程的概念之间的区别还是由点模糊。书中说道: 进程就是处于执行期的程序。但进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,持利器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程,当然还包括用来存放全局变量的数据段等。 然而每一个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。下面一句话:内核调度的对象是线程,而不是进程。其实这句话的前提是一个...原创 2020-10-30 17:25:47 · 563 阅读 · 0 评论 -
linux下git的使用
git的使用1、初始化一个Git仓库,使用git init命令。添加文件到Git仓库,分两步: - 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件; - 第二步,使用命令git commit,完成。要随时掌握工作区的状态,使用git status命令。如果git status告诉你有文件被修改过,用git diff可以查看修改内容。HEAD指向的版本就是当前版本,原创 2017-08-19 19:00:17 · 2485 阅读 · 0 评论 -
Shell 的简单常用语法
逻辑比较符号-eq //等于-ne //不等于-gt //大于 (greater )-lt //小于 (less)-ge //大于等于-le //小于等于命令的逻辑关系:- 在linux 中 命令执行状态:0 为真,其他为假逻辑与: &a...原创 2019-11-12 13:34:38 · 246 阅读 · 0 评论 -
Linux系统挂起进程的几种方法
Linux系统挂起进程的几种方法法一 nohup run.sh & --> 输入 exit 推出,会自动 将 输出 写到 当前目录下的 nohup.txt里法二使用 tmux 的方法tmux 使用命令:Mac: yum install tmux -yUbuntu: sudo apt-get install tmux命名会话tmux new -s sess...原创 2019-05-16 17:08:39 · 12696 阅读 · 1 评论 -
bash shell 命令行选项的用法
一、简介1、命令行参数向shell脚本传递数据的最基本方式是使用命令行参数。(1) 读取参数读取输入的参数的变量为位置参数,位置参数通过标准数字表示,其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。shell脚本自动将命令行参数赋值给各个位置变量。同时输入多个参数(可以是数值也可以是字符串)时,必须使用空 格分隔(要想在......转载 2018-10-30 10:35:20 · 2765 阅读 · 0 评论 -
Ubuntu 完全卸载 Apache2
1. 删除apache代码:$ sudo apt-get --purge remove apache-common$ sudo apt-get --purge remove apache2.找到没有删除掉的配置文件,一并删除代码:$ sudo find /etc -name "*apache*" |xargs rm -rf$ sudo rm转载 2017-11-28 15:33:50 · 9318 阅读 · 1 评论 -
centos 7 通过yum安装dnf 包管理器
FirstFrom long story众所周知,dnf包管理方式是Fedora18及其以后代替,yum包管理方式的替代品,并且在性能上,得到了很大的优化,此外,Fedora 的自我生态系统 --- Fedora中文社区软件源([中文社区软件源](https://repo.fdzh.org/))上面提供了很多国人喜爱的dnf一键安装的rmp软件包,小生,认为对我具有很深的吸引力。(注:小生用的是c原创 2017-11-04 20:33:17 · 18803 阅读 · 2 评论 -
修改 gcc 和 g++ 的默认版本
转载自: http://www.cnblogs.com/in4ight/p/6626708.html由于gcc在5.x版本修改了ABI,导致新版本gcc编译的二进制文件放在老的环境下会报错,所以需要安装gcc4.8.5。4.8.5这个版本支持c++11。首先尝试下载gcc-4.8.5的源码编译安装,结果make时报错“libstdc++.so.6:转载 2017-10-16 13:25:02 · 4174 阅读 · 0 评论 -
gcc编译以及Makefile与GDB调试
一:编译选项: gcc常用编译的选项:-c 表示编译源文件-o 表示输出目标文件-g 表示在目标文件中产生调试信息, 用于 gdb 调试-D<宏定义> 编译时将宏定义传入进去-Wall 打开所有类型的警告。1、gcc 编译过程: 预编译--编译--汇编--链接 ...原创 2017-07-11 13:22:10 · 5254 阅读 · 0 评论 -
简洁版即时聊天---I/O多路复用使用
一、基于select接口+有名管道的I/O 多路复用 1、注意提示点: 1、基于客户端以及服务器两端的使用 2 、对于有名管道,须注意有名管道的链接顺序,否则,可能发生死锁,或链接不成功。 3、学会sel原创 2017-07-13 09:02:23 · 336 阅读 · 0 评论 -
基于套接字SOCKET的及时聊天
一、基于select的I/O多路复用以及tcp和udp的即时聊天1、基于tcp协议头文件:#include #include #include #include #include #include #include #include #include服务器端:#include"func.h"//传递两个参数,一个IP地址,一个端口号int原创 2017-07-17 00:18:57 · 465 阅读 · 0 评论 -
简 易 版 的 进 程 池 模 型 学 习
简 易 版 的 进 程 池 模 型 学 习1、进程池流程父进程流程第一步:make_child 初始化子进程循环创建子进程,并初始化父进程的子进程管理结构体数组 child, 通过 socket_pair 将 socket描述符一端放入数组子进程流程recv_fd 等待父进程发送任务send_file 发送原创 2017-07-17 10:20:14 · 347 阅读 · 0 评论 -
简 易 版 线 程 池 模 型 学 习
简 易 版 线 程 池 模 型 学 习1、简易版线程池流程1.初始化线程池1、初始化队列, 队列头, 队列尾初始化, 队列能力初始化( 队列长度),队列锁初始化线程池条件变量,给子线程赋入口函数,为线程池的子线程的线程 ID 申请空间,线程池是否启动标志初始化为 02.启动线程池循环启动子线程, 设置线程池启动标志设置为 13.主线程启动 listen, 接收客户端请求加锁,原创 2017-07-17 13:17:47 · 305 阅读 · 1 评论 -
LINUX 进 程 控 制
LINUX 进 程 控 制1、进程简述进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建、调度和消亡的过程,是Linux 的基本调度单位。通过进程控制块( PCB)来描述的。进程控制块包含了进程的描述信息、控制信息以及资源信息,它是进程的一个静态描述。进程标识OS 会为每个进程分配一个唯一的整型 ID, 做为进程的标原创 2017-07-17 23:08:08 · 240 阅读 · 0 评论 -
linux的文件 I/O操作
Linux下的文件类型简述1、文件分类1、linux 中对目录和设备的操作都是文件操作, 文件分为普通文件, 目录文件, 链接文件和设备文件。 2、普通文件: 也称磁盘文件, 并且能够进行随机的数据存储(能够自由 seek 定位到某一个位置); 3、管道: 是一个从一端发送数据, 另一端接收数据的数据通道; 4、目录: 也称为目录文件, 它包含了保存在目录中文件列表的简单文件。 5、设备:原创 2017-07-17 18:19:12 · 666 阅读 · 0 评论 -
Linux基础笔记1
1、Linux 下有两种用户: 超级用户( root)、 普通用户。超级用户命令提示符是“ #”, 普通用户是“ $”2、命令: su [用户名] eg: su chen sudo是权限提升3、 添加用户 useradd 用户名 eg: useradd -m chen -s /bin/bash,其中,-m 是在“/home”下建立chen目录、-s /bin/bash ...原创 2017-07-09 16:23:47 · 324 阅读 · 0 评论 -
新手入门之VIM 编辑小技巧
一:命令状态下, 有如下一些常用命令:新增: a 光标后面添加文本 A 光标所在行末尾添加文本插入: i 光标前面插入文本 I 从光标所在行的开始处插入文本删除与修改: x 删除光标处的字符 dd 删除光标所在的整行 3dd 删除光...原创 2017-07-09 17:16:24 · 423 阅读 · 3 评论 -
进程间的通信之1-----管道
进程间的通信之1-----管道1、标准流管道像文件操作有标准 io 流一样, 管道也支持文件流模式。 用来创建连接到另一进程的管道, 是通过函数 popen 和 pclose。函数原型:#include FILE* popen(const char* command, const char* open_mode);int pclose原创 2017-07-19 00:06:36 · 373 阅读 · 0 评论 -
进程间通信之2----共享内存
进程间通信之2----共享内存1、System V 共享内存机制: shmget shmat shmdt shmctl共享内存本质是一段特殊的内存区域,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去,不同的进程可以通过对内存简单的读写,发生信息交换,从容实现通信。而这块虚拟内存的页面被每个共享进程的页表条目所引用, 同时并不需要在所有原创 2017-08-19 17:55:18 · 250 阅读 · 0 评论 -
进程间通信之3----信号量
进程间通信之3----信号量1、信号量信号量分为以下三种。1、System V 信号量,在内核中维护,可用于进程或线程间的同步,常 用于进程的同步。2、Posix 有名信号量, 可用于进程或线程间的同步, 常用于线程。3、Posix 基于内存的信号量,存放在共享内存区中,可用于进程或线程间的同步。为了获得共享资源进程需要执行下原创 2017-08-19 17:57:17 · 331 阅读 · 0 评论 -
LINUX 信号处理
LINUX 信号处理1、信号的基本概念 信号是进程在运行过程中, 由自身产生或由进程外部发过来的消息(事件)。信号是硬件中断的软件模拟(软中断)。每个信号用一个整型常量宏表示, 以 SIG 开头, 比如 SIGCHLD、 SIGINT 等,它们在系统头文件中定义,也可以通过在 shell 下键入kill –l 查看信号列表,或者键入 man 7 signal原创 2017-08-19 18:11:15 · 430 阅读 · 0 评论 -
LINUX 多线程
一. Linux 多线程概述1、概述 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段、代码段和堆栈段。故当在进行上下文切换时,开销较大,于是出现了线程。线程通常叫做轻量级进程,线程是是进程的基本调度单元,每个进程至少都有一个 main 线程。它与同进程中的其他线程共享进程空间{堆 代码 数据 文件描述符 信号等},只拥有自己的栈空间,大大减少原创 2017-08-19 18:14:31 · 279 阅读 · 0 评论 -
LINUX之网络编程j简述
一、TCP、IP概述1、tcp/ip 模型 4 层应用层{ http 超文本传输协议 ftp 文件传输协议 telnet 远程登录 ssh 安全外壳协议 stmp 简单邮件发送、pop3 收邮件} 传输层{ tcp 传输控制协议, udp 用户数据包协议} 网络层{ip 网际互联协议 icmp 网络控制消息协议 igmp 网络组管理协议} 网络接口层{arp 地址转换...原创 2017-08-19 18:18:28 · 539 阅读 · 2 评论 -
centos7 关闭防火墙和selinux
转载自: http://www.jianshu.com/p/d6414b5295b8CentOS 7.0 关闭防火墙CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下1、直接关闭防火墙systemctl stop firewalld.service #停止firewallsystemctl disable firewall转载 2017-11-07 09:35:46 · 376 阅读 · 0 评论 -
小白上手Mysql数据库指南~~
数 据 库 原 理 及 简 单 操 作一、数据库定义语言(DDL)及简单操作1、登录数据库 mysql -u root -p 然后键入密码2、数据库定义语言常用关键字 create 创建表 alter 修改表中对应的列 drop 删除表TRUNCATE 删...原创 2017-07-12 23:02:18 · 839 阅读 · 1 评论