• 嵌入式基础准备 | Linux命令(包括 文件、目录和压缩、系统操作、vi、vim、ctags、cscope)


    1、使用 ctrl+alt+t 打开命令行
    2、按tab键补全文件名
    3、ctrl+c 停止正在进行的过程
    4、向上键向下键翻历史的命令(只有在当前用户才有效,比如切换根用户之后就无了)
    5、根用户创建的文件 其他用户只有查看内容的权限,不能修改
    6、具体命令:Linux vi/vim 使用

    1、文件、目录和压缩

    1.1 目录操作

    $ ls         //查看里面有什么东西(浏览目录内容)  默认开始进入主目录
    $ tree      // 查看当前目录(直接出树状结构)(安装命令(软件) sudo apt-get install tree,sudo表示要用根用户(当前普通用户))
    $ tree -L 2  //查看当前的前两层目录树
    $ tree /home //查看home目录下的子目录树 
    $ cd /    //切换到系统根目录(/)   cd (change directory)
    $ cd ~       //切换到当前用户目录
    $ pwd        //查看当前路径
    $ cd ..    //切换到上一层目录(两个点 )
    $ mkdir  hello  //创建目录(文件夹)
    $ rm -rf hello/    //删除目录(文件夹hello)
    $ cd hello      //切换到当前目录下的hello子目录
    $ ln -s /mnt/hgfs  ./  //在主目录建立软链接(类似快捷方式,避免每次输入一大堆)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.2 文件操作

    $ touch main.c //创建文件
    $ mv  main.c hello.c //更改文件名(改成hello.c)
    $ gedit main.c  //用图形编辑器编辑
    $ vi  main.c   //编辑文件,要编辑要敲i进入编辑模式,按esc退出编辑模式,:wq退出
    $ gedit  main.c   // 以图形化方式 编辑文件
    $ cat main.c   //查看文件内容
    $ cp main.c aa //拷贝文件(把main.c拷贝,新文件叫aa)
    $ rm main.c    //删除文件(后面跟的名字默认是 文件)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.3 压缩解压

    $ tar -zcvf music.tar.gz music/ //压缩(很多源码是tar.xz格式)
    $ tar -xvf music.tar.gz        //解压
    
    • 1
    • 2

    2、系统操作

    2.1 权限设置

    $ sudo  su    //切换到root用户(比如要在根目录下操作)
    $ su ivan     //切换回普通的ivan用户
    $ chmod 777 main.c //设置权限为777(即所有(所有用户可改),777是最高的),只有根用户有这个权限可以改权限(使用chmod)
    $ passwd  //修改当前用户的密码(会有输入更长密码的限制)
    $ sudo passwd yhai  //用root用户权限去修改 yhai用户的密码,就没有限制了,可以设为1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.2 安装新命令

    $ sudo apt-get install tree //安装命令
    $ sudo apt-get remove tree  //卸载命令
    
    • 1
    • 2

    2.3 搜索

    $ find . -name hello.c  //在当前目录(.)下搜索文件(hello.c)
    $ man find // 查看find的手册
    
    • 1
    • 2

    2.4 磁盘空间

    $ df -h  //查看各磁盘空间(一般以dev开始的)使用情况
    $ du -h music/  //查看music文件夹占多大空间
    
    • 1
    • 2

    3、vi命令

    嵌入式御用编辑器,有三种模式:命令模式,输入模式,底行模式
    通过命令终端(串口、网线)远程访问某个设备

    3.1 命令模式(默认启动时进入)

    此状态下敲击键盘动作会被Vim 识别为命令,而非输入字符

    //3个都可以切换到输入模式
    i  //进入插入状态(按下i ,并不会输入一个字符,而被当作一个命令insert)
       //再输入字符,会插入在光标前
    enter // 光标在前把当前行下移一行,在后在当前行下面新建一行光标移至新的行
    a  //进入追加状态(再输入字符,会追加在光标后),光标会移至当前位置之后(如果要在后面加一空白行,需要用a把光标移至最后一个字符之后)
    o  //进入新一行输入状态(再输入字符,会在新一行输入)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意先按esc退出输入模式,回到命令模式

    //移动光标
         k 上 
    h 前       l 后 
         j 下
         
    r  //取代光标处的字符
    x  //删除当前光标所在处的字符
    
    
    ctrl + f //下翻页
    ctrl + b //上翻页 
    gg  //跳到第一行
    shift + g //跳到最后一行
    
    dd //删除一整行
       //3dd: 删除3行(6yy以此类推)
    yy //复制一行
    v + h/j/k/l  //选取字符串,进行整体操作(同时按)
    d // 删除选中的东西
    y //复制
    p  //粘贴 
    
    u  //复原前一个动作
       //再输入 Ctrl+r : 回退到修改前状态j
    
    : //切换到底行模式(即可在最底一行输入命令) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    3.2 输入模式

    enter, tab, 空格 都是正常的

    3.3 底行模式

    先进入命令状态,都是以冒号开始,实际上也是命令模式

    :w  //写入(保存) 
    :q  //退出 
    :q! //不保存退出
    :set nu //显示行号    
    :set nu! //隐藏行号   
    :30   //光标跳到第30行
    /word  //搜索字符串 word
           // n: 查找下一个  shift + n: 查找上一个  
    Backspace //取消底行字符后,自动切换到命令模式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4、源码跟踪(vim、ctags、cscope)

    vim:是vi的升级版,加了一些高亮显示和改进,如u可以无限撤销。
    ctags cscope:帮助多个源文件间建立符号索引库(如跳到函数定义,查找函数的文件位置)

    4.1 安装 vim,ctags,cscope

    $ sudo apt-get install vim  universal-ctags cscope
    $ cd ~/linux-4.9.140  //进入源码目录   
    $ ctags   -R    //生成符号关联  
    $ cscope -Rbkq  //生成索引库
    
    • 1
    • 2
    • 3
    • 4

    4.2 编译文件

    $ vi Makefile
    $ vim .
    
    • 1
    • 2

    4.3 vim配置

    $ vim ~/.vimrc   // 添加vim 的配置文件
    可以个性化定制
    "-------------------------------------------------------------------------------  
    "           基本设置  
    "-------------------------------------------------------------------------------  
    " When started as "evim", evim.vim will already have done these settings.  
    if v:progname =~? "evim"  
      finish  
    endif   
      
    "启用Vim的特性,而不是Vi的(必须放到配置的最前边)  
    set nocompatible  
      
    " 设置编码    
    set encoding=utf-8    
    set fenc=utf-8    
    set fileencodings=ucs-bom,utf-8,cp936,gb2312,gb18030,big5   
       
    "显示行号  
    set number  
      
    "设置默认打开窗口大小  
    "set lines=70 columns=100  
      
    "设置窗口透明度  
    "set transparency=10  
      
    "设置背景色  
    "set bg=dark  
      
    "用 koehler 调色板  
    colorscheme koehler  
      
    "隐藏工具栏和滑动条  
    set guioptions=aAce      
                
    "设置标签栏  
    "最多30个标签  
    set tabpagemax=30   
    "显示标签栏    
    set showtabline=2     
           
      
    "设定文件浏览器目录为当前目录  
    "set bsdir=buffer  
    "set autochdir  
      
    "保存100条命令历史记录  
    set history=100   
          
    "总是在窗口右下角显示光标的位置  
    set ruler     
          
    "在Vim窗口右下角显示未完成的命令   
    set showcmd           
      
    " 启用鼠标  
    if has('mouse')  
      set mouse=a  
    endif  
      
    "设置语法高亮  
    if &t_Co > 2 || has("gui_running")  
    syntax on  
    endif  
      
      
    "-------------------------------------------------------------------------------  
    "           文本操作设置  
    "-------------------------------------------------------------------------------  
    "设置字体  
    set gfn=Courier:h15  
      
    "设置自动缩进  
    "设置智能缩进  
    set tabstop=4  
    set shiftwidth=4  
    set softtabstop=4  
    set expandtab  
    set smarttab  
      
      
    "设置Tab键跟行尾符显示出来  
    set list lcs=tab:>-,trail:-  
      
    "设置自动换行  
    set wrap  
      
    "设置Insert模式和Normal模式下Left和Right箭头键左右移动可以超出当前行  
    set whichwrap=b,s,<,>,[,]  
      
    "设置光标移动到屏幕之外时,自动向右滚动10个字符  
    set sidescroll=10  
      
    "设置使~命令成为操作符命令,从而使~命令可以跟光标移动命令组合使用  
    set tildeop  
      
    "在Insert模式下,设置Backspace键如何删除光标前边的字符。这里三个值分别表示空白字符,分行符和插入模式之前的字符。  
    set backspace=indent,eol,start  
      
    "定义键映射,不使用Q命令启动Ex模式,令Q命令完成gq命令的功能---即文本格式化。  
    map Q gq  
      
    " CTRL-U 在Insert模式下可以删除当前光标所在行所在列之前的所有字符.  Insert模式下,在Enter换行之后,可以立即使用CTRL-U命令删除换行符。  
    inoremap <C-U> <C-G>u<C-U>  
      
    "使 "p" 命令在Visual模式下用拷贝的字符覆盖被选中的字符。  
    vnoremap p <Esc>:let current_reg = @"<CR>gvs<C-R>=current_reg<CR><Esc>  
      
      
    "-------------------------------------------------------------------------------  
    "           搜索设置  
    "-------------------------------------------------------------------------------  
    "打开搜索高亮  
    set hlsearch  
      
    "忽略大小写  
    set ignorecase  
      
    "在查找时输入字符过程中就高亮显示匹配点。然后回车跳到该匹配点。  
    set incsearch     
      
    "设置查找到文件尾部后折返开头或查找到开头后折返尾部。  
    set wrapscan  
      
      
    "put ctrl+shift+- s for find string
    nmap <C-_>s :cs find s <C-R>=expand("")<CR><CR>
    nmap <C-_>g :cs find g <C-R>=expand("")<CR><CR>
    nmap <C-_>c :cs find c <C-R>=expand("")<CR><CR>
    nmap <C-_>t :cs find t <C-R>=expand("")<CR><CR>
    nmap <C-_>e :cs find e <C-R>=expand("")<CR><CR>
    nmap <C-_>f :cs find f <C-R>=expand("")<CR><CR>
    nmap <C-_>i :cs find i ^<C-R>=expand("")<CR>$<CR>
    nmap <C-_>d :cs find d <C-R>=expand("")<CR><CR>  
    "auto add cscope.out to vim   如:cs f s 命令不能用   
    cs add cscope.out
    set csto:0
    set cscopetag
    set nocsverb
    set csverb
    "添加内核目录,让你在任意文件下搜索时,都能跳到内核信息
    "cs add /home/jetbot/kernel/cscope.out  /home/jetbot/kernel/
    "set tags:./tags,tags,/home/jetbot/kernel/tags  
      
    "-------------------------------------------------------------------------------  
    "           文件设置  
    "-------------------------------------------------------------------------------  
      
    "设置当Vim覆盖一个文件的时候保持一个备份文件,但vms除外(vms会自动备份。备份文件的名称是在原来的文件名上加上 "~" 字符  
    if has("vms")  
      set nobackup         
    else  
      set backup          
    endif  
      
     
    "Enter换行时总是使用与前一行的缩进等自动缩进。  
    set autoindent  
    "设置智能缩进  
    set smartindent         
     
      
      
    "编辑一个文件时,你所编辑的内容没保存的情况下,可以把现在的文件内容与编辑之前的文件内容进行对比,不同的内容将高亮显示  
    if !exists(":DiffOrig")  
      command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis  
              \ | wincmd p | diffthis  
    endif  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170

    4.4 常用命令

    进入目录 enter,使用之前介绍的 /word搜索

    Ctrl + ]  //调到定义处
    Ctrl + o  //返回上一次位置
              //Ctrl + i  再返回(ctrl+o 回到上一级(哪都能用) ctrl+i 再回来)
    g f	  //跳到光标停留的include的头文件里 
    d w  //删除个字符串
    u   //可无限撤销
    :cs f f driver.c   //搜索 driver.c 文件
    g d   //选中当前光标处的字符串
          //再 n  查找下一个	
    ctrl + shift + - 再按 s  //全局(整个源码里面,不是当前文件)查找光标处的字符串
                      // j:下一条  k:上一条  f:下一页  b:上一页  shift+g: 到末尾
    :cs f s attach //全局 搜索字符串 attach        
    Ctrl+w v   //  垂直分割窗口
               //  Ctrl+w w 可在窗口间切换
    ctrl +  变大字体
    :e  .    //编辑当前目录,回到目录
    shift+g+数字 // 跳到对应数字行的文件并进去
    :90 // 在文件中直接跳到90行
    g+d // 同时按,且选中字符串,再敲n就可以跳了(当前文件中找)
    v选择 用j光标往下搜
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    springBoot-使用idea创建项目添加依赖并实现数据查询
    【毕业设计】深度学习水果识别系统 - python CNN
    Tomcat的各种对象HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig
    个人开源项目如何上传maven中央仓库
    Springboot Websocket一般封装方法
    APP商品详情源数据接口(淘宝/京东/拼多多/苏宁/抖音等平台详情数据分析接口)代码对接教程
    Redis五种基本数据结构
    Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志
    ProtcolBuffer基础原理
    如何使用ChatGPT辅助设计工作
  • 原文地址:https://blog.csdn.net/AsherGu/article/details/136232138