在日常开发中一些看似司空见惯的问题上,我觉得可能大多数人其实并没有真正理解,或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码:
先讲一个作者大约5-6年前我在某当时很火的一个应用分发创业公司的面试小插曲,该公司安排了一个刚工作1年多的一个同学来面我,聊到我们项目中的配置文件里写的一个开关,这位同学就跳出来说,你这个读文件啦,每个用户请求来了还得多一次的磁盘IO,性能肯定差。借由这个故事其实我发现了一个问题,虽然我们中的大部分人都是计算机科班出身,代码也写的很遛。但是在一些看似司空见惯的问题上,我们中的绝大多数人并没有真正理解,或者理解的不够透彻。
目前,计算机市场提供了大量以数字形式存储信息的机会,现有的存储设备包括内部和外部硬盘驱动器、照片/摄像机的存储卡、USB 闪存驱动器、RAID 集以及其他复杂存储。数据片段以文件的形式保存在它们上,如文档、图片、数据库、电子邮件等,这些数据必须在磁盘上有效地组织并在需要时轻松检索。
一、前言 小编在最近的测试过程中遇到了一个需要构造Android手机存储空间不足的场景,并且还需要覆盖验证各种机型,而单个拷贝大文件到测试机器又太繁琐,小编查阅资料发现Linux下的dd命令可以协助小编完成此项任务,正好借此机会给大家分享一下dd命令在Android shell下的一些用法: 二、dd命令介绍 dd是Linux下一个非常有用的命令,该命令用于读取、转换并输出数据; dd命令在Android shell下也支持使用哦! Android shell中可支持的常用命令参数如下: 1.
windows和Linux系统格式 在分区后,磁盘需要格式化 Windows中,有NTFS、fat格式,其中fat格式基本已经不用(过时) Linux中,centos7支持xfs、ext4、ext3、ext2、nodev proc、nodev devpts、iso9660、vfat、hfs、hfsplus [root@localhost ~]# cat /etc/filesystems //查看centos7所支持的系统格式 xfs //系统默认的支持的格式 ext4 ext3 ex
注意:inode号是磁盘格式化的时候就自动按一定的比例4k:1分配好了,当创建一个文件是就会拿一个inode给这个文件使用。inode里面存的是文件的相关属性比如大小,权限,属组和存在磁盘的位置,如果创建文件提示空间不够,但是df查看磁盘空间的时候,发现还有空间,但是就是创建不了,这个时候就应该是inode被占满了,可以通过删除文件来回收inode
在 Linux 中,最直观、最可见的部分就是 文件系统(file system)。下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于 MULTICS,现在已经被 Windows 等其他操作系统使用。Linux 的设计理念就是 小的就是好的(Small is Beautiful) 。虽然 Linux 只是使用了最简单的机制和少量的系统调用,但是 Linux 却提供了强大而优雅的文件系统。
学到linux上的软连接和硬链接,不得不了解inode,要想知道inode,不得不了解一些文件系统,至少是Linux文件系统
背景:今天被人问到一个10G的超大CSV如何最快速度读取,并插入到数据库中。一般读取文件都是单线程一直往下读,但是如果文件特别大的情况下就会很慢。如何快速读取?脑海里面"多线程"一下子就浮出水面了,想要快速读取文件,肯定得多线程一起读取。那问题来了,一个文件怎么样进行多线程读取,首先得知道每个线程要负责读取的位置,才可以多线程完整的读取一行的数据。
不同版本的操作系统的 buffer_head 代表的大小可能不一样,但是都是内存和硬盘交换数据的基本单元。
在linux下,一个目录下放了很多文件,还有其他的子目录,但是目录的大小却总是只有4096字节。这是怎么回事呢?来听听北理工林思佳同学的分享。
一、Squashfs文件系统简介 squashfs是以linux 内核源码补丁的形式发布,附带mksquashfs工具,用于创建squash文件系统。squashfs可以将整个文件系统或者某个单一的目录压缩在一起, 存放在某个设备, 某个分区或者普通的文件中. 如果你将其压缩到一个设备中, 那么你可以将其直接mount起来使用; 而如果它仅仅是个文件,你可以将其当为一个loopback 设备使用. squashfs文件系统的设计令人欣喜. For archiving purposes, 它可以让你更加灵
4.1 df命令 df命令介绍 df命令,汇报文件系统磁盘的使用情况 [root@localhost ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda3 18658304 1179512 17478792 7% / devtmpfs 494376 0 494376 0% /dev tmpfs 504196 0 504196 0% /dev/shm t
3。1 module编程 module可以说是 Linux 的一大革新。有了 module 之后,写 device driver 不再是一项恶梦,修改 kernel 也不再是一件痛苦的事了。因为你不需要每次要测试 driver 就重新 compile kernel 一次。那简直是会累死人。Module 可以允许我们动态的改变 kernel,加载 device driver,而且它也能缩短我们driver development 的时间。在这篇文章里,我将要跟各位介绍一下 module 的原理,以及如何写一个 module。
在本教程中,我们将参考Linux dd命令的一个实际示例,系统管理员可以使用该命令将以MBR或GPT布局样式分区的较大HDD的Windows操作系统或Linux操作系统迁移到较小的SSD。 在本节摘录中,我们将使用安装在具有多个分区的硬盘上的Windows系统作为示例。 在HDD以MBR方案分区并且包含具有多个逻辑分区的扩展分区或分区无序的情况下,该方法可能变得相当复杂。 如果是这样,我建议你不要使用这种方法。 在这种情况下,使用ddrescure更安全,它可以克隆整个磁盘布局(分区表和每个分区内的已使用块),而不会实际传输空的空间。 可以通过从Ubuntu主存储库安装gddrescue包获得DDrescure。
任何一个用过或学过C的人对malloc都不会陌生。大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉。但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统所提供的系统调用或C的关键字。实际上,malloc只是C的标准库中提供的一个普通函数,而且实现malloc的基本思想并不复杂,任何一个对C和操作系统有些许了解的程序员都可以很容易理解。
早期硬盘每个扇区以512字节为标准。新一代硬盘扇区容量为4096个字节,也就是所说的4k扇区。 硬盘标准更新,但操作系统一直使用的是512字节扇区的标准,所以硬盘厂商为了保证兼容性,把4k扇区模拟成512字节扇区。 通常文件系统的块(簇)是512字节的倍数,新的系统基本上都设成了4k的倍数。比如Linux的簇一般也是4k。 簇到扇区的映射关系变成了 簇(4k)->512B扇区->4k扇区,这就可能造成簇到扇区映射错位。
stat命令用于显示文件或文件系统的详细信息。在显示文件信息时,比ls命令更加详细。
linux基本命令 预习内容 1.磁盘管理命令 df 1.1 查看磁盘使用情况 df -h 1.2 查看swap使用情况 1.3 查看磁盘inode使用情况 df -i 1.4 磁盘使用情况用M显示 df -m 2.查看目录文件大小 du -sh 3.磁盘分区、格式化、挂载 3.1 虚拟机添加一块10g的磁盘,添加完成重启虚拟机 3.2 磁盘划分分区 fdisk 3.3 磁盘格式化 3.3.1 mke2fs -t ext4 -b 2048 /dev/sdb1 3.3.2 mkfs.ext4 /dev
在Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。Linux系统中常见的硬件设备的文件名称如下图:
很多学过C的人对malloc都不是很了解,知道使用malloc要加头文件,知道malloc是分配一块连续的内存,知道和free函数是一起用的。但是但是:
现代的应用程序都运行在一个内存空间里,在 32 位系统中,这个内存空间拥有 4GB (2 的 32 次方)的寻址能力。
首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢? 设备驱动程序在内核中的角色:他们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。(说白了,驱动程序除了对外提供特定的接口外,任何实现细节对应用程序都是不可见的。)用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。驱动程序的任务是把这些标准化调用映射到实际硬件的设备特有操作上。 在编写驱动程序时,程序员应该特别注意下面这个概念:编写访问硬件的内核代码时,不要给
熟悉STL的同学始终都绕不过的一个地方,尤其是面试时也会被问及容器的知识点:vector。
进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所支持的命令,如下图所示:
案例需求: 添加一块硬盘,需要将其分区,最终需要使用2G空间。 案例思路 增加一块硬盘 使用fdisk命令进行分区 格式化指定分区 创建一个空的目录作为挂载点 挂载使用 创建新的挂载点 挂载使用 步骤: 1. 增加硬盘 增加完硬盘记得重启系统 # lsblk 查看硬盘是否添加成功 ... sdb 8:16 0 20G 0 disk [root@zutuanxue ~]# fdisk -l /dev/sdb Disk /dev/sdb:20 GiB,21474836480 字节
linux的硬盘有挂载和未挂载两种(类似windows上的硬盘分区(C、D、E盘))
常见的硬盘如上图所示,每个盘片分多个磁道,每个磁道分多个扇区,每个扇区512字节,是硬盘的最小存储单元,但是在操作系统层面会将多个扇区组成块(block),是操作系统存储数据的最小单元,通常是8个扇区组成4K字节的块。 对于Linux文件系统,需要考虑以下几点:
https://www.cnblogs.com/huxiao-tee/p/4657851.html
如果文件大于指定的大小,则会丢失额外的数据。如果较短,它将被扩展,扩展的稀疏部分(空洞)读取时为零字节。
1.Linux dd 命令用于读取、转换并输出数据。 2.dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 3.dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
课堂上芒果给大家介绍过Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道。 1、关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果:
s=硬件接口类型(sata/scsi),d=disk(硬盘),a=第1块硬盘(b,第二块),2=第几个分区 /dev/hd h=IDE硬盘 /dev/hdd3 /dev/vd v=虚拟硬盘 /dev/vdf7
在之前的这四篇文章中,笔者详细的为大家介绍了 slab 内存池的整体架构演化过程,随后基于这个演化过程,介绍了整个 slab alloactor 体系的创建,内存分配,内存释放以及销毁等相关复杂流程在内核中的实现。
使用fdisk工具分区(当硬盘小于等于2T时,用fdisk,大于2T时,用parted) 键入:fdisk /dev/vdb出现欢迎信息 然后键入n新建分区
内存管理是Linux系统重要的组成部分。为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。
附录:dd指令详解 dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 1.if=文件名:输入文件名,缺省为标准输入。即指定源文件。<if=inputfile> 3.ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。 obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。 bs=bytes:同时设置读入/输出的块大小为bytes个字节。 4.cbs=bytes:一次转换bytes个字
atbus是我按之前的思路写得服务器消息通信中间件,目标是简化服务器通信的流程,能够自动选择最优路线,自动的断线重连和通信通道维护。能够跨平台并且高效。
作为过来人,我发现很多程序猿新手,在编写代码的时候,特别喜欢定义很多独立的全局变量,而不是把这些变量封装到一个结构体中,主要原因是图方便,但是要知道,这其实是一个不好的习惯,而且会降低整体代码的性能。
简介 Windows下的堆主要有两种,进程的默认堆和自己创建的私有堆。在程序启动时,系统在刚刚创建的进程虚拟地址空间中创建一个进程的默认堆,而且程序也可以通过 HeapCreate 函数来调用 ntdll 中的RtlCreateHeap 来创建自己的私有堆,所以一个进程中可以存在多个堆。 虽说这两种堆名称不同,但是其本质是相同的,区别的只是返回的句柄不同,私有堆虽然名字是私有,但并不是只能在创建它的线程中使用,如果得到它的句柄,在其他线程中也可使用。 堆的信息 堆的相关信息可以在/PEB(进程环境块)中看到
注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概
UNIX 是一个交互式系统,用于同时处理多进程和多用户同时在线。为什么要说 UNIX,那是因为 Linux 是由 UNIX 发展而来的,UNIX 是由程序员设计,它的主要服务对象也是程序员。Linux 继承了 UNIX 的设计目标。从智能手机到汽车,超级计算机和家用电器,从家用台式机到企业服务器,Linux 操作系统无处不在。
http://blog.csdn.net/jnu_simba/article/details/11759809
Linux 的节点 inode inode是存储文件元信息的区域,中文译名为“索引节点”。所谓元信息,即文件的创建者、创建日期、文件的大小等等。每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。 可以通过stat命令查看某个文件的inode信息。 通过上面的操作,我们可以知道inode包含文件的元信息有以下内容: 文件名以及文件的大小(字节数),链接数,Uid 文件拥有者的ID,Gid 文件所属组的ID 文件的权限,包括读写执行权限(rwx) inode文件数据块的位置、数据块数、I
4.5/4.6 磁盘格式化 windows和Linux系统格式 在分区后,磁盘需要格式化 Windows中,有NTFS、fat格式,其中fat格式基本已经不用(过时) Linux中,centos7支持xfs、ext4、ext3、ext2、nodev proc、nodev devpts、iso9660、vfat、hfs、hfsplus [root@localhost ~]# cat /etc/filesystems //查看centos7所支持的系统格式 xfs //系统默认的支持的格
领取专属 10元无门槛券
手把手带您无忧上云