Linux 下使用 sudo 命令,可以让普通用户也能执行一些或者全部的 root 命令。本文就对我们常用到 sudo 操作情景进行简单分析,通过一些例子来了解 sudo 命令相关的技巧。...来源:hazir 链接:www.cnblogs.com/hazir/p/sudo_command.html 情景一:用户无权限执行 root 命令 普通用户登录 shell 之后,如果自身没有权限访问某个文件或执行某个命令时...情景二:vim 编辑后发现忘记使用 sudo 我们经常会遇到这样的一个囧境:使用 vim 对某个文件进行编辑,编辑完之后,按 ESC 之后回到普通模式,再按 :wq 准备保存退出时,发现没有权限对该文件进行修改...情景三:执行 root 命令忘记加 sudo 我们还会遇到这样稍微好一点的情形:输入一个长长的命令,按 Enter 之后出现无权限操作,因为我们忘记加 sudo 了。...情景五:sudo 操作记录日志 作为一个 Linux 系统的管理员,不仅可以让指定的用户或用户组作为root用户或其它用户来运行某些命令,还能将指定的用户所输入的命令和参数作详细的记录。
在Linux内核源代码情景分析-从路径名到目标节点,一文中path_walk代码中,err = permission(inode, MAY_EXEC)当前进程是否可以访问这个节点,代码如下: int...inode) && (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) return -EROFS; //如果要求的写文件,并且是只读系统,而且是常规文件,目录...int prepare_binprm(struct linux_binprm *bprm) { int mode; struct inode * inode = bprm->file->f_dentry
内存由大量内存单元组成,内存单元大小为1个字节(1字节包含8个二进制位), 每个内存单元都有一个编号,更专业的说法是每一个内存单元都有一个地址,我们在编写汇编代...
情景一 我们使用fastboot的第一个有效命令(不算 fastboot -h)通常是fastboot devices,我们来跟踪一下: if (argc > 0 && !...usb_open(list_devices_callback); } usb_open,不同操作系统有不同的实现,为了方便理解,我们分析Linux版本的实现(system/core/fastboot/usb_linux.c...} closedir(devdir); } closedir(busdir); return usb; } 循环读取/dev/bus/usb目录下及子目录中的信息...情景三 有时候我们只刷单个的img,使用的命令是fastboot flash xxx xxx.img,也来看看吧: else if(!...感觉完整的整个过程,需要再分析一下设备上的usb驱动接收到数据后的处理过程。但暂时没有相关的代码可以分析,先到此为止。
另外,用户代码调用操作系统API也不是根据函数名直接调用,而是需要根据操作系统为每个API提供的一个整型编号来调用,AMD64 Linux平台约定在进行系统调用时使用rax寄存器存放系统调用编号,同时约定使用...mov 0x8(%rsp),%rax #系统调用编号 rax = 267,表示调用openat系统调用 syscall #系统调用指令,进入Linux
不过,虽然这里的介绍做了精简,但读者大可放心,熟练运用这些知识就足以应付本书将要分析的goroutine调度器中的汇编代码了。...汇编指令格式 因为不同的CPU所支持的机器指令不一样,所以其汇编指令也不同,即使是相同的CPU,不同的汇编工具和平台所使用的汇编指令格式也有些差别,由于本书主要专注于AMD64 Linux平台下的go
另外,AMD64 Linux平台下,栈是从高地址向低地址方向生长的,为什么栈会采用这种看起来比较反常的生长方向呢,具体原因无从考究,不过根据前面那张进程的内存布局图可以猜测,当初这么设计的计算机科学家是希望尽量利用内存地址空间...从上面的分析我们可以看出,寄存器rbp和rsp始终指向正在执行的函数的栈帧。
本文是《go调度器源代码情景分析》系列 第一章 预备知识的第十小节,也是预备知识的最后一小节。...下面用例子来说明一下多线程共享全局变量以及线程私有全局变量之间的差异,并对gcc的线程本地存储做一个简单的分析。...下面我们就来分析一下gcc到底使用了什么黑魔法实现了这个特性。对于像这种由编译器实现的特性,我们怎么开始研究呢?最快最直接的方法就是使用调试工具来调试程序的运行,这里我们使用gdb来调试。.../thread 首先在源代码的第20行(对应到源代码中的 g = 100)处下一个断点,然后运行程序,程序停在了断点处,反汇编一下main函数: (gdb) b thread.c:20 Breakpoint...这里我们简要的分析了AMD64 Linux平台下gcc对线程本地存储的实现,后面的章节我们还会看到go的runtime是如何利用线程本地存储来把正在运行的goroutine和工作线程关联在一起的。
1.libevent源代码获取 最新代码直接从libevent的github即可,链接如下: https://github.com/libevent/libevent 编译方法在该github介绍页说的很详细了...2.libevent源代码的目录结构 我们下载下来源代码以后,看到有很多文件,很多目录,往往不知道从何入手,我一开始也是这样,后来我花时间把每个目录和一些主要的文件内容弄明白后,阅读源代码和学习才顺手一点...目录结构内容如下: 目录名称 目录内容 .deps 里面存放的plo后缀文件,没搞懂是什么,可能是编译生成的一些文件 .libs 存放编译生成的.o文件和so文件 autom4te.cache 也是编译或者安装需要的一些文件...只有queue.h 定义了很多宏定义,主要用于singly-linked list,list,simple queue,tail queue,circle queue等结构体 inlcude 里面当前目录头文件都是之前老版本文件...另外libevent的实现文件.c文件都在下载下来的源代码的一级目录下面,与上面说的目录是在同一级的 好了,今天就先介绍到这里,后续会对libevent的实现方式,使用方法等进行详细的介绍。
go语言runtime(包括调度器)源代码中有部分代码是用汇编语言编写的,不过这些汇编代码并非针对特定体系结构的汇编代码,而是go语言引入的一种伪汇编,它同样也需要经过汇编器转换成机器指令才能被CPU执行...first_arg+0(FP) 来引用调用者传递进来的第一个参数,用second_arg+8(FP)来引用第二个参数 ,以此类推,这里的first_arg和second_arg仅仅是一个帮助我们阅读源代码的符号...go汇编还有一些用法比较特别的地方,现在不讨论,等我们分析源代码遇到它们时再结合上下文做详细说明。
相对于go来说,C语言更接近于硬件,编译后的汇编代码也更加简单直观,更容易让我们掌握函数调用的基本原理,所以我们首先来看C语言的函数调用在汇编指令层面是如何实现的,然后在此基础上分析go语言的函数调用过程...C语言函数调用过程 我们用一个简单的例子程序来开始分析。...到此main函数就只剩下retq指令了,前面分析sum函数时已经详细分析过它了,这条指令执行完成后就会完全返回到调用main函数的函数中去继续执行。...还是用一个简单的例子来分析。...gcc编译的c/c++代码一般通过寄存器传递参数,在AMD64 Linux 平台,gcc约定函数调用时前面6个参数分别通过rdi, rsi, rdx, r10, r8及r9传递;而go语言函数调用时参数是通过栈传递给被调用函数的
假设有如下go语言编写的一行代码: c = a + b 在AMD64 Linux平台下,使用go编译器编译它可得到如下AT&T格式的汇编代码(如果对汇编代码不熟悉的话可以直接看每一条指令后面的注释,不影响我们理解...一般用它来实现线程本地存储(TLS),比如AMD64 linux平台下go语言和pthread都使用fs寄存器来实现系统线程的TLS,在本章线程本地存储一节和第二章详细分析goroutine调度器的时候我们可以分别看到...Linux平台下Pthread线程库和go是如何使用fs寄存器的。
同时,公开的核心源码也吸引着无数的电脑爱好者和程序员;他们把解读和分析Linux的核心源码作为自己的 最大兴趣,把修改Linux源码和改造Linux系统作为自己对计算机技术追求的最大目标。 ...而且你还能从对内核源码的分析中,体会到它在解决某个具体细节问题时,方法的巧妙:如后面将分析到了的Linux通过Botoom_half机制来加 快系统对中断的处理。 ...由于本人所进行的分析都是基于2.2.5版本的内核;所以,如果没有特别说明,以下分析都是基于i386单处理器的2.2.5版本的Linux内核。...所有源文件均是相对于目录/usr/src/linux的。 要分析Linux内核源码,首先必须找到各个模块的位置,也即要弄懂源码的文件组织形式。...对具有GPL版权的源代码改动而形成的程序,或使用GPL工具产生的程序,具有使用GPL发表的义务,如公开源代码。 ◆ CREDITS: 光荣榜。
本文是《go调度器源代码情景分析》系列 第一章 预备知识的第九小节。...之所以使用C语言,是因为C语言中我们一般使用pthread线程库,而使用该线程库创建的用户态线程其实就是Linux操作系统内核所支持的线程,它与go语言中的工作线程是一样的,这些线程都由Linux内核负责管理和调度
1.Android源代码的目录中包含了Android系统所有的源代码,从底层驱动到上层应用,Android系统对所有文件都进行了详细管理; 2.而在手机中,Android系统的目录与源代码的目录并不是一一对应的...,而是源代码编译之后,与打包生成的Image文件的结构相同; 3.了解这些目录的结构,对于认识整个Android系统有很好的帮助。...---- 1.Android系统源代码目录 想要看完整个Android的源代码,需要懂C、懂脚本、懂Java、软硬兼通。...其界如下: 每个目录都具有不同的功能和目的,整个结构关系图如下所示: 2.Android系统目录 在Android手机里,系统的目录结构与源代码目录结构还是有所不同的,...我们通过ADB连接上手机,通过Linux的ls命令查看Android系统的根目录。
我回复说: 数据分析报告可以有千千万万个不同的模板,但是你要知道哪一个模板最适合当时的情景,这是非常困难的一件事。 即使收集到了世界上所有数据分析报告的模板,也不代表就有能力写好数据分析报告。...为了缩小选择的范围,我们可以把数据分析报告按情景进行划分,大致分成下面 4 种情景,即:首次分析报告、常规分析报告、问题分析报告、总结分析报告。为了便于理解,分别类比为看病体检时的情景。...情景 1:首次分析报告 当面临一个全新的业务,第一次做数据分析报告的时候,可以尽量详细一些,把分析的背景、过程、方法、结论、建议等信息都写清楚,因为读者目前对业务的情况了解还比较少,需要关注方方面面的信息...情景 3:问题分析报告 当业务出现问题的时候,数据分析报告需要尽量抓住问题的本质,在提示风险的同时,有必要补充一些相关的细节,重点是要让读者明白,想要解决这个问题,应该采取哪些行动?...以上 4 种情景,无论是哪一种,都要先熟悉业务的背景和分析的目标,搞清楚沟通的对象,对数据有基本的判断,对问题有深入的理解,这样写出来的数据分析报告,才更有吸引力,看数据分析报告的人,才更有收获,而写数据分析报告的人
文章目录 一、arch 目录 二、block 目录 三、certs 目录 四、crypto 目录 五、Documentation 目录 在上一篇博客 【Linux 内核】Linux 内核源码结构 ( 下载...Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 ) 中 , 使用了 Visual Studio Code 查看 Linux 内核源码 , 本篇博客开始分析 Linux 内核源码结构...; 一、arch 目录 ---- arch 目录是 针对 不同 CPU 体系架构平台 的代码 , 将 与 平台 相关的代码 放在该目录中 , 如某些代码只针对 x86 架构的平台 , 那么放在 arch.../x86 目录下 ; 每种体系结构 , 都有 相应的子目录 , 如 arm , arm64 分别是 arm 32 位和 64 位平台 ; 二、block 目录 ---- block 目录 , 是子系统目录..., 其中存储了 块设备驱动 相关代码 ; 三、certs 目录 ---- certs 目录中存储了 认证 和 签名 相关代码 ; 四、crypto 目录 ---- crypto 目录中存储了 内核中常用的
文章目录 一、drivers 目录 二、fs 目录 三、include 目录 四、init 目录 五、ipc 目录 六、kernel 目录 一、drivers 目录 ---- drivers 目录中存储了...驱动程序 相关代码 , 如 USB 总线驱动程序 , PCI 总线驱动程序 , 显卡驱动程序 , 网卡驱动程序 等 ; 二、fs 目录 ---- fs 目录中存储了 虚拟文件系统 ( Virtual...目录 ---- include 目录中存储了 内核源码 依赖 的 大部分头文件 代码 ; include 目录中存储了 虚拟文件系统 ( Virtual File System ) 相关代码 ; 四、...init 目录 ---- init 目录中存储了 Linux 内核的初始化 相关代码 ; 该 初始化代码 关联到了 内存的各个组件 的入口 ; 五、ipc 目录 ---- ipc 目录中存储了 进程间通信...相关代码 ; 如 : 信号量 , 共享内存 等 ; 六、kernel 目录 ---- kernel 目录中存储了 内核核心代码 ; 其中包含了 进程管理 , IRQ 中断 等模块 ;
文章目录 一、lib 目录 二、LICENSES 目录 三、mm 目录 四、net 目录 五、samples 目录 六、scripts 目录 一、lib 目录 ---- lib 目录中存储了 C 语言标准库的子集...相关代码 ; 二、LICENSES 目录 ---- LICENSES 目录中存储了 开源许可协议 相关协议文本 ; 该目录拿下都是文本文件 ; 三、mm 目录 ---- mm 目录中存储了 内存管理...( Memory Management ) 相关代码 ; 四、net 目录 ---- net 目录中存储了 网络协议 相关代码 ; 如 : TCP , WIFI , IPV4 , IPV6 等 ;...五、samples 目录 ---- samples 目录中存储了 Linux 内核参考示例代码 ; 六、scripts 目录 ---- scripts 目录中存储了 内核 编译 配置 相关脚本 ;
文章目录 一、security 目录 二、sound 目录 三、tools 目录 四、usr 目录 五、virt 目录 一、security 目录 ---- security 目录中存储了 Linux...内核 安全模型 相关代码 ; 二、sound 目录 ---- sound 目录中存储了 声卡驱动 相关代码 ; 三、tools 目录 ---- tools 目录中存储了 与 Linux 内核交互 相关代码...; 四、usr 目录 ---- usr 目录中存储了 用户打包 和 内核压缩 相关代码 ; 五、virt 目录 ---- virt 目录中存储了 kvm 虚拟化目录相关实现 相关代码 ;
领取专属 10元无门槛券
手把手带您无忧上云