linux底层开发常用的命令(持续更新)

目录

1.read

2.make

3.sgdisk

4.dd

5.mkimage

6.cat

7.objcopy 

8.ld

9.objdump

10.size

11.nm

12.readelf

13.trip

14.addr2line

15.find

16.grep

17.cp 

18.ln


1.read

命令的功能是用于读取单行数据内容,一般是从标准输入中读取数值,用于给变量赋值。

语法格式:read [参数]

常用参数:

-a    定义一个数组,以空格为间隔符进行赋值
-d    定义一个结束标志
-p    设置提示信息
-e    在输入的时候可以使用命令补全功能
-n    定义输入文本的长度
-r    禁用转义符(\)
-s    输入字符不在屏幕显示
-t    限定最长等待时间
-u    从文件描述符中读入信息


2.make

命令 – 编译内核或源码文件

make命令的功能是用于编译内核或源码文件。make是GNU工程化编译工具,用于编译众多相互关联的源代码文件,也可以编译内核或模块功能,以工程化的工作方式,提高开发效率。

初次运行make命令时,它会通过扫描Makefile文件找到目标及其依赖关系,并在建立依赖关系后依次编译所对应的源码程序。

语法格式:  make [参数] 文件

常用参数:

-r    禁用内置的隐含规则
-B    始终无条件make所有目标
-b    忽略兼容性
-C<目录>    更改为指定目录
-L    在符号链接和目标之间使用最后的修改时间
-n    实际上不运行任何命令,只显示出来
-o<文件>    不编译指定的文件
-e    环境变量覆盖makefile
-d    显示打印调试信息
-i    从命中忽略错误
-w    显示当前目录
-t    创建目标,而不是改造它们
-p    显示make的内部数据库
-q    安静模式
-R    禁用内置变量设置
-s    不回显命令
-I<目录>    搜索指定目录中包含的makefile
-f<文件>    读取指定文件作为makefile文件
-k    当有些目标不能make下去时,继续执行
-j<作业编号>    指定工作编号的作业一次完成(多线程编译)

make V=0    不显示编译过程,默认的
make V=1 或者 make VERBOSE=1 显示编译过程


3.sgdisk

命令 – Linux和Unix的命令行GPT操纵器

sgdisk是Linux下操作GPT分区的工具, sgdisk程序使用完全基于命令行的用户界面,使其适用于脚本或想要对磁盘进行一次或两次快速更改的专家。

语法格式:sgdisk [参数] [设备]

常用参数:

-p    打印分区表
-d x    删除分区
-n x:y:z    创建一个编号 x 的新分区,从 y扇区 开始,到 z扇区 结束
-c x:y    更改分区 x 的名称为 y
-t x:y    -t x:y 将分区 x 的类型更改为 y
–list-types    列出分区类型代码

参考实例

打印分区表:
[root@linuxcool ~]#  sgdisk -p /dev/sda 

删除sda的第一个分区:
[root@linuxcool ~]# sgdisk -d 1 /dev/sda 

创建一个编号 1 的新分区,从 1MiB 开始,到 2MiB 结束:
[root@linuxcool ~]# sgdisk -n 1:1MiB:2MiB /dev/sda

把编号为 1 的分区名称改为 grub:
[root@linuxcool ~]#  sgdisk -c 1:grub /dev/sda 

将编号为 1 的分区,类型更改为 ef02:
[root@linuxcool ~]# sgdisk -t 1:ef02 /dev/sda 

列出分区类型代码:
[root@linuxcool ~]# sgdisk --list-types


4.dd

拷贝及转换文件

dd命令来自于英文词组“disk dump”的缩写,其功能是用于拷贝及转换文件。
使用dd命令可以按照指定大小的数据块来拷贝文件,并在拷贝的过程中对内容进行转换。

语法格式:dd 参数 对象

常用参数:

-v    显示版本信息
-h    显示帮助信息
参考实例

    # dd : 拷贝的命令
    # if : 输入的文件
    # of : 输出的文件
    # conv=fdatasync : 将输入的文件所有内容的读到缓冲区中,然后一次性的写入到输出文件中
    
    sudo dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync

生成一个指定大小(500M)的新文件:
[root@linuxcool ~]# dd if=/dev/zero of=bigfile count=1 bs=500M
1+0 records in
1+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 1.13337 s, 463 MB/s

拷贝指定文件的前50个字节:
[root@linuxcool ~]# dd if=anaconda-ks.cfg of=ana.cfg count=1 bs=50
1+0 records in
1+0 records out
50 bytes copied, 0.000441764 s, 113 kB/s

拷贝指定文件的内容,并将所有字符转换成大写后输出到新文件中:
[root@linuxcool ~]# dd if=anaconda-ks.cfg of=ana.cfg conv=ucase
2+1 records in
2+1 records out
1388 bytes (1.4 kB, 1.4 KiB) copied, 0.000234248 s, 5.9 MB/s

5.mkimage

mkimage工具是u-boot用来制作镜像文件的工具,其源代码在u-boot源码的tools目录下:mkimage.c。
我们使用bootm命令加载的内核和根文件系统,都要用这个工具加上个头。

语法格式:mkimage [参数]

常用参数:

-A : 设置架构
-T : 设定类型
-C : 压缩类型 none : 没有压缩
-O :设置操作系统
-a : 加载地址
-e : 入口指针
-n : 镜像的名字
-d : 镜像的数据文件

-A
CPU 架构,可选的值有:
“alpha”,”arm”,”x86″,”ia64″,”m6k8″,”microblaze”,”mips”,”mips64″,”nios”,”nios2″,”ppc”,”s390″,”sh”,”sparc”,”sparc64″,
“blackfin”,”avr32″

-O    操作系统。可选的值有:
“4_4bsd”,”artos”,”esix”,”freebsd”,”irix”,”linux”,”lynxos”,”ncr”,”netbsd”,”openbsd”,”psos”,”qnx”,”rtems”,”sco”,”sloaris”,
“u-boot”,vxworks”

-T    镜像类型。可选的值有:
“filesystem”,”firmware”,”firmware”,”kernel”,”multi”,”ramdisk”,”script”,”standalone”,”flat_dt”

-C    镜像压缩类型。可选的值有:
“none”,”bzip2″,”gzip” none为没有压缩

mkimage:工具, 给u-boot.bin文件添加64字节的文件头得到u-boot.img镜像文件

6.cat


    使用cat命令完成两个文件的合并或者拼接
    

  #将两个文件拼接起来重定向到u-boot-dtb.bin中    

cat u-boot-nodtb.bin dts/dt.dtb > u-boot-dtb.bin  


7.objcopy 


    将u-boot的elf文件转换为.bin文件    

    linux@ubuntu:arm-linux-gnueabihf-objcopy  -O binary   u-boot u-boot-nodtb.bin


8.ld


    将目标文件(.o文件)链接生成一个.elf的可执行文件文件

 linux@ubuntu:arm-linux-gnueabihf-ld -Ttext=0xc0008000 asm-led.o -o asm-led.elf

9.objdump


    将.elf文件反汇编生成.dis的反汇编文件

 linux@ubuntu:arm-linux-gnueabihf-objdump -D asm-led.elf > asm-led.dis

10.size


    查看elf文件的各个段的大小
    

    linux@ubuntu:1-asm-led$ arm-linux-gnueabihf-size asm-led.elf 
    
       text       data        bss        dec        hex    filename
        172          0          0        172         ac    asm-led.elf

11.nm


    查看elf文件的符号表的信息(函数名和函数的入口地址信息)

    linux@ubuntu:01-asm-led$ arm-linux-gnueabihf-nm asm-led.elf 
    
    c00180ac T __bss_end__
    c00180ac T _bss_end__
    c00180ac T __bss_start
    c00180ac T __bss_start__
    c0008080 t delay_1s
    c00180ac T _edata
    c00180ac T __end__
    c00180ac T _end
    c0008054 t loop
    c0008084 t mm
    c0008000 T _start

12.readelf


    readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。
    这里的elf-file(s)就表示那些被检查的文件。
    可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。

      -a --all               显示全部信息 等同于 -h -l -S -s -r -d -V -A -I
      -h --file-header       显示elf文件开始的文件头信息
      -l --program-headers   显示elf文件程序头信息
      -S --section-headers   显示节头信息
      -g --section-groups    显示节组信息
      -t --section-details   显示部分详细信息
      -e --headers           等价于 -h -l -S
      -s --syms              显示符号表
      -d --dynamic           显示elf程序依赖的动态库
      -V --version-info      显示版本段的信息

  linux@ubuntu:01-asm-led$ arm-linux-gnueabihf-readelf -h asm-led.elf 
    ELF Header:
      Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
      Class:                             ELF32
      Data:                              2's complement, little endian
      Version:                           1 (current)
      OS/ABI:                            UNIX - System V
      ABI Version:                       0
      Type:                              EXEC (Executable file)
      Machine:                           ARM
      Version:                           0x1
      Entry point address:               0xc0008000
      Start of program headers:          52 (bytes into file)
      Start of section headers:          33748 (bytes into file)
      Flags:                             0x5000200, Version5 EABI, soft-float ABI
      Size of this header:               52 (bytes)
      Size of program headers:           32 (bytes)
      Number of program headers:         1
      Size of section headers:           40 (bytes)
      Number of section headers:         10
      Section header string table index: 9


13.trip

    作用:嵌入式设备的资源有限,比如flash空间的大小有限,编译生成的各种可执行文件尽可能的小,并且压缩之后不影响程序的允许。
    strip命令在进行压缩时,将elf文件中无用的符号信息删除,不影响程序的允许。
    切记不可以对中间文件执行压缩的命令,比如.o文件

    linux@ubuntu:02-led-c$ ls -l interface.elf
    -rwxrwxr-x  1 linux linux  52340 Aug 24 01:34 interface.elf

    linux@ubuntu:02-led-c$ arm-linux-gnueabihf-strip interface.elf

    linux@ubuntu:02-led-c$ ls -l interface.elf
    -rwxrwxr-x  1 linux linux  42660 Aug 31 20:39 interface.elf

14.addr2line


    
    其功能是将函数地址解析成文件名或行号的工具。给出一个可执行文件中的地址或一个可重定位对象中的偏移部分的地址,使用调试信息来找出与之相关的文件名和行号。
    在linux驱动的开发中,如果出现段错误,会导致内核的崩溃,
    此时内核回报一个错误信息,同时显示错误信息出现的地址的信息,此时就可以使用addr2line命令定位此地址信息对应的文件名,函数名及行号。

         -e :指定elf文件
         -f : 回显函数名及行号
 

 linux@ubuntu:02-led-c$ arm-linux-gnueabihf-nm interface.elf 
    c0009948 T hal_led_init

    linux@ubuntu:02-led-c$ arm-linux-gnueabihf-addr2line 0xc0009948 -e interface.elf -f
    
    hal_led_init
    /home/linux/DC22051/arm/02-led-c/src/led.c:45


15.find


    根据给定的路径和条件查找相关文件或目录    

    find [路径] [参数]
    -name    匹配名称
    -perm    匹配权限(mode为完全匹配,-mode为包含即可)
    -user    匹配所有者
    -group    匹配所有组
    -mtime -n +n    匹配修改内容的时间(-n指n天以内,+n指n天以前)
    -atime -n +n    匹配访问文件的时间(-n指n天以内,+n指n天以前)
    -ctime -n +n    匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
    -nouser    匹配无所有者的文件
    -nogroup    匹配无所有组的文件
    -newer f1 !f2    匹配比文件f1新但比f2旧的文件
    -type b/d/c/p/l/f    匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
    -size    匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)


16.grep


    grep [参数] 文件
    文件内容搜索命令,搜索文件中的字符串 
    
    -n : 显示行号
    -R : 递归搜索 
    -i : 忽略大小写  
    -w: 按照单词精确查找 
    -c    只输出匹配行的数量
    -l    只列出符合匹配的文件名,不列出具体的匹配行
    -n    列出所有的匹配行,显示行号
    


17.cp 


    用于将一个或多个文件或目录复制到指定位置,常用于文件的备份工作
    
    cp [参数] 源文件 目标文件
    -r 递归复制文件和目录,复制目录时若忘记加则会直接报错
    -f 若目标文件已存在,则会直接覆盖原文件
    -p 保留源文件或目录的所有属性
    -v    详细显示cp命令执行的操作过程
    -d    当复制符号链接(软链接)时,把目标文件或目录也建立为符号链接
        并指向与源文件或目录连接的原始文件或目录
        
    -l    对源文件建立硬链接,而非复制文件
    -s    对源文件建立符号链接,而非复制文件
    -a    等价于“pdr”选项


18.ln

    软链接  
    类似于windows 当中的快捷方式. 可以通过链接文件,找到原来所在的文件.  
    ln -s    路径/被链接文件      路径/生成的链接文件 (不加路径默认在当前路径下执行)
    
    

demo:
    ln -s  link.c  link1.c  // 给 link.c 创建一个软连接  link1.c 


    注意:
    删除生成的链接文件,被链接文件没有任何变化, 内容也不会被删除 
    删除被链接文件, 链接会断开,生成链接文件还是存在的 (不过内容为  空) 
    软链接可以链接目录 
    被软链接 连接的目录或者文件,链接数不会增加 
    被链接文件与链接文件的inode不同
    
    硬链接
    类似于给文件起一个别名.类似于复制 
    ln  路径/被链接文件      路径/生成的链接文件 .(不加路径默认在当前路径下执行)
    demo :
    ln  link.c  link1.c  // 给 link.c 创建一个硬链接  link1.c 
    
    注意: 
    硬链接只能链接文件, 不能链接目录 
    创建硬链接的时候,链接数是会增加的(被链接文件与生成的链接文件 链接数相同)
    硬链接与被链接文件的inode号是相同的.  
    删除一个源文件(被链接文件)或者链接文件 对其他不产生影响.

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值