文章目录

  • Linux
    • 一、了解嵌入式系统
      • 1. 嵌入式设备
      • 2. 嵌入式系统
      • 3. Linux操作系统
        • Linux系统结构
      • 4.Linux的系统目录
    • 二、vim编辑器
      • 1.什么是vi/vim
      • 2.三种模式
        • 1)命令模式
        • 2)底行模式
        • 3)插入模式
      • 3.用vi/vim打开文件
      • 4.安装vi/配置vi
    • 三、Shell特殊字符
      • 1.通配符
      • 2.管道
      • 3.输入/输出重定向
      • 4.命令置换
      • 5.其他符号
    • 四、Shell命令
      • 1.目录操作
        • A)增
          • 1)mkdir
          • 2) cp -r (递归复制)(且复制文件夹内的文件)
        • B)删
        • C)改
        • D)查
          • 1)cd
          • 2)ls
          • 3)find
      • 2.文件操作
        • A)文件基础
        • B)增
        • C)删
        • D)改
        • E)查
      • 3.归档打包
        • A)压缩解压
        • B)归档
      • 4.用户管理
        • A)增
        • B)删
        • C)改
        • D)查
      • 5.进程管理
        • A)进程状态
        • B)进程优先级
        • C)查看进程
        • D)清理进程
      • 6.网络管理
        • A)基础知识
    • 五、Shell脚本
      • 1. 什么是Shell脚本
      • 2. 编程流程
      • 3. Shell变量
      • 4. Shell语句
        • 1) 说明性语句
        • 2) 功能性语句
        • 3) 控制性语句
    • 六、make工具

Linux

一、了解嵌入式系统

简单理解:将软件嵌入到硬件当中,使其变得智能嵌入式系统(官方): 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统

1. 嵌入式设备

鼠标,键盘,交换机,路由器,智能手表,智能洗衣机,手机

2. 嵌入式系统

一个程序,管理计算机上的软硬件资源
嵌入式系统功耗低,体积小,专用性强。

特点

1)可裁剪性。支持开放性和可伸缩性的体系结构。2)强实时性。EOS实时性一般较强,可用于各种设备控制中。3)统一的接口。提供设备统一的驱动接口。4)操作方便、简单、提供友好的图形GUI和图形界面,追求易学易用。5)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预、这就要负责系统管理的EOS具有较强的稳定性。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供服务。6)固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。7)良好的移植性更,也就是好的硬件适应性。

3. Linux操作系统

1.开源免费
2.内核可裁剪,内核小 - 2G
3.移植性比较好
4.安全性高

Linux系统结构

Linux内核:1.文件管理2.内存管理3.网络管理4.设备管理5.进程管理
shell:被称为命令行解释器,可以看作是一种程序软件. shell提供了应用于操作系统交互的功能,实
现对操作系统的保护...(作用:解释shell命令 例如:ls、cd....)
应用程序:操作系统上基础的一些应用,这些应用一般会和操作系统一起被安装.图形用户界面(GUI)——X window、KDE、GNOME管理程序(控制中心):设置桌面系统的外观、功能、行为、感觉等应用程序:Linux中可以安装的应用程序举不胜举。Openoffice、firefox、Gaim、XPlay等等编程工具: 包括用来创建专业接口的应用程序和库的编程应用程序GCC,java Elcalisp

4.Linux的系统目录

├── bin -> usr/bin # 用于存放二进制命令
├── boot # 内核及引导系统程序所在的目录
├── dev  # 所有设备文件的目录(如磁盘、光驱等)
├── etc  # 配置文件默认路径、服务启动命令存放目录
├── home # 用户家目录,root用户为/root
├── lib -> usr/lib # 32位库文件存放目录
├── lib64 -> usr/lib64 # 64位库文件存放目录
├── media # 媒体文件存放目录
├── mnt   # 临时挂载设备目录
├── opt   # 自定义软件安装存放目录
├── proc  # 进程及内核信息存放目录
├── root  # Root用户家目录
├── run   # 系统运行时产生临时文件,存放目录
├── sbin -> usr/sbin # 系统管理命令存放目录
├── srv # 服务启动之后需要访问的数据目录
├── sys # 系统使用目录
├── tmp # 临时文件目录
├── usr # 系统命令和帮助文件目录
└── var # 存放内容易变的文件的目录

二、vim编辑器

1.什么是vi/vim

#vi是Visual Interface的缩写,即可视化接口
#vim是Visual Improve的缩写,即vi的增强版(具有语法着色功能)
#基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)

2.三种模式

1)命令模式

  • 移动光标
#逐字符移动k              ↑h      l      ←        →j              ↓
#h:移动#个字符
#以单词为单位移动
w   #移到下一个单词的词首
e   #跳至当前或下一个单词的词尾
b   #跳至当前或上一个单词的词首
nw  #表示移动n个单词
#行内(当前行)跳转
0   #绝对行首
^   #行首第一个非空白字符
$   #绝对行尾
#行间跳转
nG      #跳转到第n行
G       #最后一行
#翻页
Ctrl+f     #向下翻一屏
Ctrl+b     #向上翻一屏
Ctrl+d     #向下翻半屏
Ctrl+u     #向上翻半屏
  • 删除d
#删除单个字符
x       #删除光标所在字符
nx      #删除光标所在的n个字符
#删除命令 d
#使用方法1:删除命令加移动命令组合使用,例如
ndw      #删除光标到其后n个单词词首的所有字符
#使用方法2:dd
dd      #删除光标所在行
ndd     #删除光标所在后的n行(包含光标所在行)
  • 复制y
#复制命令y
#使用方法1:删除命令加移动命令组合使用,例如
nyw      #复制光标到其后n个单词词首的所有字符
#使用方法2:dd
yy      #复制光标所在行
nyy     #复制光标所在后的n行(包含光标所在行)
  • 粘贴p
#粘贴命令p/P
p(小写p)
#如果删除的或复制的为整行内容,则粘贴到光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面
P(大写P)
#如果删除的或复制的为整行内容,则粘贴到光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面
  • 替换r
r    #单字符替换,会替换光标选中字符
R   #替换模式,可以做字符替换。
  • 撤销u
#撤销命令u
u       #撤销前一次编辑操作
nu      #直接撤销n次操作Ctrl+r    #撤销最近一次撤销操作
  • 可视化模式v/V
#在命令模式下按v: 
v(小写)       #按字符选取,键盘控制光标 划过 的区域被选取
V(大写)       #按矩形选取,键盘控制光标划过的行被选取
  • 重复上次操作
.    #上一次dd删除了一行,现在输入.就可以重复dd删除行的操作

2)底行模式

  • 位置符号
.        #表示当前行
$       #表示最后一行
n       #表示第n行
+n     #表示向下n行
$-n     #表示向上n行
  • 删除字符
#删除符号可以配合位置符合使用
dn      #表示n行start,end+d       #删除start到end行的所有行  10,20d
  • 跳转到某行
#冒号加上位置符号,就可以跳转到某行
:n      #跳转到n行
:$      #跳转到最后一行
  • 查找
/PATTERN:从当前位置向后查找
?PATTERN:从当前位置向前查找
n:向下查找
N:向上查找
  • 保存和退出
w        #保存
q       #退出
!       #强制执行 必须跟在命令之后
a       #所有
q!      #强制退出
qa      #退出所有
  • shell交互
! command        #!在最前面
! ls /etc/      #会列出/ect目录下所有文件及目录 按enter后回到vim编辑状态
  • 设置
set nu               #显示行号(set number)
set nonu            #取消显示行号
set ic              #忽略大小写(set ignorecase)
set noignorecase    #区分大小写
set ai              #自动缩进(set autoindent)
set noai            #取消自动缩进
set hlsearch        #高亮显示搜索到的文本
set nohlsearch      #取消高亮显示搜索到的文本
syntax on           #打开语法高亮显示
syntax off          #关闭语法高亮显示

3)插入模式

#如何进入
a   #在光标后插入
i   #在光标所在位置插入
o   #在光标所在位置的下一行插入
#在插入模式下可以进行输入字符

3.用vi/vim打开文件

vi FILE1 FILE2 FILE3     #同时打开三个文件
:next   #切换到下一个文件
:prev   #切换到上一个文件
:last   #切换到最后一个文件
:first  #切换到第一个文件
:qa     #全部退出
#分割显示
vi -o 1.c 2.c   #水平分割显示(小写)
vi -O 1.c 2.c   #垂直分割显示(大写)
#在窗口间切换光标
Ctrl+w,ARROW  #,表示先按Ctrl+w再按方向键(或hjkl)
Ctrl+w,→       #(使用箭头方向键)光标切换到右边的窗口
Ctrl+w,h       #(左), j(下), k(上), l(右) 也可以切换窗口

4.安装vi/配置vi

全局vim配置文件:/etc/vimrc
个人vim配置文件:~/.vimrc
sudo apt-get install vim    #安装vim
"Keyboard COMMANDS: {{{1
nmap  <F2> gg=G
nmap  <F3> :TlistToggle<cr>
"nmap  <F6> :NERDTreeToggle<cr>
nmap  <F4> :MRU<cr>
"nmap  <F5> <Plug>LookupFile<cr>
"nmap  <F9> :call RunShell("Generate tags", "ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .")<cr>
"nmap <F10> :call HLUDSync()<cr>
"nmap <F11> :call RunShell("Generate filename tags", "~/.vim/shell/genfiletags.sh")<cr>
"nmap <F12> :call RunShell("Generate cscope", "cscope -Rb")<cr>:cs add cscope.out<cr>"Parentheses are automatically completed:
if &term=="xterm"set   t_Co=8set t_Sb=^[[4%dmset t_Sf=^[[3%dm
endiflet g:neocomplcache_enable_at_startup = 1function! ClosePair(char)if getline('.')[col('.')] - 1== a:charreturn "\<Right>"elsereturn a:charendif
endfunctionmap <F6> :call CompileRunGcc()<CR>
func! CompileRunGcc()exec "w"if &filetype == 'c'exec "!gcc % -o %<"exec "! ./%<"elseif &filetype == 'cpp'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'java' exec "!javac %" exec "!java %<"elseif &filetype == 'sh':!./%endif
endfunc"  AUTO COMMANDS: {{{1
"auto expand tab to blanks
"autocmd FileType c,cpp set expandtab
autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
" Restore the last quit position when open file.
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") |     exe "normal g'\"" | endif" SHORTCUT SETTINGS: {{{1
" Set mapleader
let mapleader=","
" Space to command mode.
nnoremap <space> :
vnoremap <space> :
" Switching between buffers.
nnoremap <C-h> <C-W>h
nnoremap <C-j> <C-W>j
nnoremap <C-k> <C-W>k
nnoremap <C-l> <C-W>l
inoremap <C-h> <Esc><C-W>h
inoremap <C-j> <Esc><C-W>j
inoremap <C-k> <Esc><C-W>k
inoremap <C-l> <Esc><C-W>l
" "cd" to change to open directory.
let OpenDir=system("pwd")
nmap <silent> <leader>cd :exe 'cd ' . OpenDir<cr>:pwd<cr>" PLUGIN SETTINGS: {{{1
" taglist.vim
let g:Tlist_Auto_Update=1
let g:Tlist_Process_File_Always=1
let g:Tlist_Exit_OnlyWindow=1
let g:Tlist_Show_One_File=1
let g:Tlist_WinWidth=25
let g:Tlist_Enable_Fold_Column=0
let g:Tlist_Auto_Highlight_Tag=1
" NERDTree.vim
let g:NERDTreeWinPos="right"
let g:NERDTreeWinSize=25
let g:NERDTreeShowLineNumbers=1
let g:NERDTreeQuitOnOpen=1
" cscope.vim
if has("cscope")set csto=1set cstset nocsverbif filereadable("cscope.out")cs add cscope.outendifset csverb
endif
" OmniCppComplete.vim
set nocp
filetype on
filetype plugin on
let g:OmniCpp_DefaultNamespaces=["std"]
let g:OmniCpp_MayCompleteScope=1
let g:OmniCpp_SelectFirstItem=2" VimGDB.vim
if has("gdb")set asm=0let g:vimgdb_debug_file=""run macros/gdb_mappings.vim
endif
" LookupFile setting
let g:LookupFile_TagExpr='"./tags.filename"'
let g:LookupFile_MinPatLength=2
let g:LookupFile_PreserveLastPattern=0
let g:LookupFile_PreservePatternHistory=1
let g:LookupFile_AlwaysAcceptFirst=1
let g:LookupFile_AllowNewFiles=0
" Man.vim
source $VIMRUNTIME/ftplugin/man.vim
" snipMate
let g:snips_author="Du Jianfeng"
let g:snips_email="cmdxiaoha@163.com"
let g:snips_copyright="SicMicro, Inc"
" plugin shortcuts
function! RunShell(Msg, Shell)echo a:Msg . '...'call system(a:Shell)echon 'done'
endfunction
nmap <leader>sa :cs add cscope.out<cr>
nmap <leader>ss :cs find s <C-R>=expand("<cword>")<cr><cr>
nmap <leader>sg :cs find g <C-R>=expand("<cword>")<cr><cr>
nmap <leader>sc :cs find c <C-R>=expand("<cword>")<cr><cr>
nmap <leader>st :cs find t <C-R>=expand("<cword>")<cr><cr>
nmap <leader>se :cs find e <C-R>=expand("<cword>")<cr><cr>
nmap <leader>sf :cs find f <C-R>=expand("<cfile>")<cr><cr>
nmap <leader>si :cs find i <C-R>=expand("<cfile>")<cr><cr>
nmap <leader>sd :cs find d <C-R>=expand("<cword>")<cr><cr>
nmap <leader>zz <C-w>o
nmap <leader>gs :GetScripts<cr>let Tlist_Show_One_File=0
set noswapfile
set tags+=/usr/include/tags
set tags+=./tags
map ta :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q.<CR>"
" Copyright (c) 2010 Jeffy Du. All Rights Reserved.
"
" Maintainer: Jeffy Du <jeffy.du@gmail.com>
"    Created: 2010-01-01
" LastChange: 2010-04-22" GENERAL SETTINGS: {{{1
" To use VIM settings, out of VI compatible mode.
set nocompatible
" Enable file type detection.
filetype plugin indent on
" Syntax highlighting.
syntax on
syntax enable
" Setting colorscheme" Other settings.
set   autoindent
set   cindent
set   autoread
set   autowrite
set   background=dark
set   backspace=indent,eol,start
set   nobackup
"set   cinoptions=:0
set   cursorline
set   completeopt=longest,menuone
set   noexpandtab
set   fileformat=unix
if version >= 603set helplang=cnset encoding=utf-8
endifset   foldmethod=marker
set   history=500
set   hlsearch
set   ignorecase
set   incsearch
set   mouse=a
set   number
set   pumheight=10
set   ruler
set   scrolloff=3
set   shiftwidth=4
set   showcmd
set   smartindent
set   smartcase
set   smarttab
set   tabstop=4
set   iskeyword+=_,$,@,%,#,-
set   novisualbell
set   statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
set   laststatus=2
set   magic                   " 设置魔术
set   guioptions-=T           " 隐藏工具栏
set   guioptions-=m           " 隐藏菜单栏"Set File Title: {{{1
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.py,*.java exec ":call SetTitle()"
func SetTitle()if &filetype == 'sh'call setline(1,"\#!/bin/bash")call append(line("."),"\#############################################################")call append(line(".")+1,"\# File Name     : ".expand("%"))call append(line(".")+2,"\# Creator       : 程云浩")call append(line(".")+3,"\# QQ            : 1877090085")call append(line(".")+4,"\# Email         : daylong00@126.com")call append(line(".")+5,"\# Creat Time    : ".strftime("%c"))call append(line(".")+6,"\# 备注          : ")call append(line(".")+7,"#############################################################/")call append(line(".")+8,"")elseif &filetype == 'python'call setline(1,"\#!/usr/bin/env python")call append(line("."),"\#############################################################")call append(line(".")+1,"\# File Name     : ".expand("%"))call append(line(".")+2,"\# Creator       : 程云浩")call append(line(".")+3,"\# QQ            : 1877090085")call append(line(".")+4,"\# Email         : daylong00@126.com")call append(line(".")+5,"\# Creat Time    : ".strftime("%c"))call append(line(".")+6,"\# 备注          : ")call append(line(".")+7,")+6,"\#############################################################")call append(line(".")+8,"")else call setline(1, "/**************************************************************")call append(line("."),  " * File Name     : ".expand("%"))call append(line(".")+1," * Creator       : 程云浩")call append(line(".")+2," * QQ            : 1877090085")call append(line(".")+3," * Email         : daylong00@126.com")call append(line(".")+4," * Creat Time    : ".strftime("%c"))call append(line(".")+5," * 备注          : ")call append(line(".")+6,"***************************************************************/")endifif expand("%:e") == 'h'call append(line(".")+7, "#ifndef _".toupper(expand("%:t:r"))."_H")call append(line(".")+8, "#define _".toupper(expand("%:t:r"))."_H")call append(line(".")+9, "")call append(line(".")+10, "")call append(line(".")+11, "#endif")elseif &filetype == 'cpp'call append(line(".")+7, "#include <iostream>")call append(line(".")+8, "using namespace std;")call append(line(".")+9, "")call append(line(".")+10, "int main(int argc, char *argv[])")call append(line(".")+11, "{")call append(line(".")+12, "")call append(line(".")+13, "    return 0;")call append(line(".")+14, "}")elseif &filetype == 'cc'call append(line(".")+7, "#include <iostream>")call append(line(".")+8, "using namespace std;")call append(line(".")+9, "")call append(line(".")+10, "int main(int argc, char *argv[])")call append(line(".")+11, "{")call append(line(".")+12, "")call append(line(".")+13, "   return 0;")call append(line(".")+14, "}")elseif &filetype == 'c'call append(line(".")+7, "#include <stdio.h>")call append(line(".")+8, "#include <string.h>")call append(line(".")+9, "#include <stdlib.h>")call append(line(".")+10, "")call append(line(".")+11, "int main(int argc, char *argv[])")call append(line(".")+12, "{")call append(line(".")+13, "")call append(line(".")+14, " return 0;")call append(line(".")+15, "}")endif
endfunc"Keyboard COMMANDS: {{{1
nmap  <F2> gg=G
nmap  <F3> :TlistToggle<cr>
"nmap  <F6> :NERDTreeToggle<cr>
nmap  <F4> :MRU<cr>
"nmap  <F5> <Plug>LookupFile<cr>
"nmap  <F9> :call RunShell("Generate tags", "ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .")<cr>
"nmap <F10> :call HLUDSync()<cr>
"nmap <F11> :call RunShell("Generate filename tags", "~/.vim/shell/genfiletags.sh")<cr>
"nmap <F12> :call RunShell("Generate cscope", "cscope -Rb")<cr>:cs add cscope.out<cr>"Parentheses are automatically completed:
if &term=="xterm"set   t_Co=8set t_Sb=^[[4%dmset t_Sf=^[[3%dm
endiflet g:neocomplcache_enable_at_startup = 1function! ClosePair(char)if getline('.')[col('.')] - 1== a:charreturn "\<Right>"elsereturn a:charendif
endfunctionmap <F6> :call CompileRunGcc()<CR>
func! CompileRunGcc()exec "w"if &filetype == 'c'exec "!gcc % -o %<"exec "! ./%<"elseif &filetype == 'cpp'exec "!g++ % -o %<"exec "! ./%<"elseif &filetype == 'java' exec "!javac %" exec "!java %<"elseif &filetype == 'sh':!./%endif
endfunc" SHORTCUT SETTINGS: {{{1
" Set mapleader
let mapleader=","
" Space to command mode.
nnoremap <space> :
vnoremap <space> :
" Switching between buffers.
nnoremap <C-h> <C-W>h
nnoremap <C-j> <C-W>j
nnoremap <C-k> <C-W>k
nnoremap <C-l> <C-W>l
inoremap <C-h> <Esc><C-W>h
inoremap <C-j> <Esc><C-W>j
inoremap <C-k> <Esc><C-W>k
inoremap <C-l> <Esc><C-W>l
" "cd" to change to open directory.
let OpenDir=system("pwd")
nmap <silent> <leader>cd :exe 'cd ' . OpenDir<cr>:pwd<cr>" PLUGIN SETTINGS: {{{1
" taglist.vim
let g:Tlist_Auto_Update=1
let g:Tlist_Process_File_Always=1
let g:Tlist_Exit_OnlyWindow=1
let g:Tlist_Show_One_File=1
let g:Tlist_WinWidth=25
let g:Tlist_Enable_Fold_Column=0
let g:Tlist_Auto_Highlight_Tag=1
" NERDTree.vim
let g:NERDTreeWinPos="right"
let g:NERDTreeWinSize=25
let g:NERDTreeShowLineNumbers=1
let g:NERDTreeQuitOnOpen=1
" cscope.vim
if has("cscope")set csto=1set cstset nocsverbif filereadable("cscope.out")cs add cscope.outendifset csverb
endif
" OmniCppComplete.vim
set nocp
filetype on
filetype plugin on
let g:OmniCpp_DefaultNamespaces=["std"]
let g:OmniCpp_MayCompleteScope=1
let g:OmniCpp_SelectFirstItem=2" VimGDB.vim
if has("gdb")set asm=0let g:vimgdb_debug_file=""run macros/gdb_mappings.vim
endif
" LookupFile setting
let g:LookupFile_TagExpr='"./tags.filename"'
let g:LookupFile_MinPatLength=2
let g:LookupFile_PreserveLastPattern=0
let g:LookupFile_PreservePatternHistory=1
let g:LookupFile_AlwaysAcceptFirst=1
let g:LookupFile_AllowNewFiles=0
" Man.vim
source $VIMRUNTIME/ftplugin/man.vim
" snipMate
let g:snips_author="Du Jianfeng"
let g:snips_email="cmdxiaoha@163.com"
let g:snips_copyright="SicMicro, Inc"
" plugin shortcuts
function! RunShell(Msg, Shell)echo a:Msg . '...'call system(a:Shell)echon 'done'
endfunction
nmap <leader>sa :cs add cscope.out<cr>
nmap <leader>ss :cs find s <C-R>=expand("<cword>")<cr><cr>
nmap <leader>sg :cs find g <C-R>=expand("<cword>")<cr><cr>
nmap <leader>sc :cs find c <C-R>=expand("<cword>")<cr><cr>
nmap <leader>st :cs find t <C-R>=expand("<cword>")<cr><cr>
nmap <leader>se :cs find e <C-R>=expand("<cword>")<cr><cr>
nmap <leader>sf :cs find f <C-R>=expand("<cfile>")<cr><cr>
nmap <leader>si :cs find i <C-R>=expand("<cfile>")<cr><cr>
nmap <leader>sd :cs find d <C-R>=expand("<cword>")<cr><cr>
nmap <leader>zz <C-w>o
nmap <leader>gs :GetScripts<cr>let Tlist_Show_One_File=0
set noswapfile
set tags+=/usr/include/tags
set tags+=./tags
map ta :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q.<CR>

三、Shell特殊字符

1.通配符

[]       #里面的内容都是以单个字符为单位匹配.
*       #匹配任意长度字符串. rm *.c 删除所有.c文件
?       #匹配任意单个字符[1-4]  #匹配1-4之间的字符. rm demo[1-4].c
[14]    #匹配1,4字符
[^123]  #匹配除了1,2,3以外的所有字符

2.管道

|    #将一个命令的输出作为另一个命令输入.
基本用法: 命令 .. | 命令 ... 例如: ls /dev | wc -w 可以统计/dev下面文件的总个数

3.输入/输出重定向

<     #输入重定向 用法: wc < file 将file作为输入源 wc 接收来自file内容的输入
>        #输出重定向 用法: > file 将file作为新的输出源. 先清空再写入文件>>      #输出重定向 用法: >> file 将file作为新的输出源. 以追加方式写入文件.
&>       #错误输出重定向 用法: &> file 将错误信息输出定位到file中

4.命令置换

``     #将一个命令的输出作为另一个命令的参数.
ls -l `pwd`   #命令1 [选项] `命令2`

5.其他符号

#单引号''
echo 'ls ./'      #严格按原样输出
var=1;echo '$var'    #严格按原样输出,输出 $var
#双引号""#双引号内则会解析特殊字符,包括'(单引号)、"(双引号)、$(取内容符)、\(转义符),如果要忽略特殊字符,就可以利用\来转义。
echo "ls ./"          #输出 ls ./
var=1;echo "$var"        #输出 1
var=1;echo "\*\$var$var'$var'"aaa""      #输出 \*$var1'1'aaa
#在""中''会失效
#分号;
1.在配置文件中任何以";(分号)或#(井号)"开头的行表示一个注释,并被忽略。通常"#(井号)"表示备注,对于配置文件可能会启用的部分使用;(分号)。
2.在case语句中;;    # 表示退出case语句,相当于C中的break
3.在终端;  #表示一个语句的结束
#斜杠\、/
1.Linux“/”斜杠表示路径,“\”反斜杠表示转义
2.Windows“/”斜杠表示参数,“\”反斜杠表示本地路径
#单小括号()
1.初始化数组array=(a b c d)
2.子Shell赋值(var=1;echo $var)
3.与”$“结合实现命令替换echo $(ls -l)
4.命令集合的结果重定向( echo "a";echo "b" )| awk '{print NR,$0}'    #1 a#2 b
#双小括号(()) 里面的语法和C类似
1.算术运算  #里面有逗号#省略”$“进行算术运算,同时支持在括号内用“,”对多个表达式进行分割a=3;b=4;((a++,b--));echo $a $b      #5 2echo $((9*6,6+6))                  #输出12echo ((9*6,6+6))                  #会语法错误,有计算结果,但没获取结果a=2;b=5;((d=a*b,c=a+b));echo $c $d    #7 10
2.算术运算  #里面没有逗号$((4+6)) 、expr 4+6 和$[ 4+6 ]效果相同
3.逻辑运算(((a<=b||c<a)&&a)) #和c逻辑相同
4.进制转换cho $((16#100))       #将16进制100转换为10进制256
#单中括号[]
1.逻辑运算if [ a -eq b ];   #左中括号是调用test的命令标识,右中括号是关闭条件判断
2.作正则表达式的一部分(通配符)[0-9]          #描述一个字符的匹配范围
3.引用数组元素a={1 2 3 4}; echo ${a[2]}  #3
4.在命令简介中gzip [ -acdfhklLnNrtvV19 ] [-S suffix] [ name ...  ]    #gzip的命令简介#[] 里面的选项或参数表示可选,可有可无的意思 可以带上这个参数也可以不要#双中括号[[ ]]
1.bash的关键字#检测字符串是否符合某个正则表达式[[ string =~ regexp ]]      #判断右边的模式是否为左边字符串的子字符串 #使用=~操作符时,其右边的字符串被认为是一个扩展正则表达式。扩展之后跟左边字符串进行比较,看左边字符串是否包含指定模式。注意是包含关系,不是完整匹配!
2.
#大括号{}
1.在变量名中var=1;echo "${var}aa"  # 1aa1.# 特殊的替换结构${var:-string}     # 若变量var为空,则用在命令行中用string来替换${var:=string}      # 在于var为空时,string会赋给var${var:+string}       # 若变量var不为空,替换成string,若var为空时则不替换${var:?string}       # 若变量var不为空,则用变量var的值来替换2.# 四种模式匹配替换结构# #是去掉左边(在键盘上#在$之左边)# %是去掉右边# #和%中的单一符号是最小匹配,两个相同符号是最大匹配。# 是否匹配给定的模式pattern结尾${variable%pattern}        # 如果是,把variable中的内容去掉右边最短的匹配模式${variable%%pattern}   # 如果是,就从命令行把variable中的内容去掉右边最长的匹配模式# 是否匹配给定的模式pattern开始${variable#pattern}       # 如果是,就从命令行把variable中的内容去掉左边最短的匹配模式${variable##pattern}  # 如果是,就从命令行把variable中的内容去掉右边最长的匹配模式3.# 字符串的提取和替换${var:num}                   # shell在var中提取第num个字符到末尾的所有字符${var:num1:num2}           # num1是位置,num2是长度${var:num1:num2}            # 表示将var字符串的第一个匹配的pattern替换为另一个pattern${var//pattern/pattern}       # 表示将var字符串中的所有能匹配的pattern替换为另一个pattern
2.大括号拓展{1,2,3}.txt、{1..3}.txt       #表示1.txt、2.txt、3.txt
3.代码块fun()  #在函数中{}
#点.
1.一点 .cd .  # 表示当前目录a.txt   # 表示后缀名
2.两点 ..cd ..    # 表示上一级目录touch {1..3}.c # 表示创建1.c、2.c、3.c
#and符号&
1.在终端&gedit .vimrc &        #后台运行文本编辑器#默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&'实现这个目的。
2.在逻辑运算中&&      #实现逻辑与的功能
3.&>             #错误输出重定向

四、Shell命令

1.目录操作


A)增

1)mkdir
  1. 在当前目录新建一个/多个文件夹
mkdir aaa        #在当前目录下创建aaa目录,相对路径;
mkdir ./bbb     #在当前目录下创建bbb目录,相对路径;
mkdir /ccc      #在根目录下创建ccc目录,绝对路径;mkdir {dirA,dirB}  # 批量创建测试目录
mkdir folderTwo folderThree folderFour #在当前目录创建三个目录。
  1. 新建多级目录
mkdir -p folderFive/subFolder      #会创建里面没有的目录文件夹#选项 -p为递归创建
#选项 -v显示创建目录的过程信息
#选项 -m在创建目录的同时设定权限
#选项 -z
  1. 在多个文件夹下新建子文件夹
mkdir {folderFour,folderThree,folderTwo,folderOne}/subfolder
2) cp -r (递归复制)(且复制文件夹内的文件)
cp -r /aaa /bbb          #将/目录下的aaa目录复制到/bbb目录下,在/bbb目录下的名称为aaa
cp -r /aaa /bbb/aaa     #将/目录下的aa目录复制到/bbb目录下,且修改名为aaa;

B)删

rm -r /bbb           #递归删除、且删除文件夹内的文件,若你非管理员时会询问你是否删除每一个文件
rm -rf /bbb         #强制删除/目录下的bbb目录。如果bbb目录中还有子目录,也会被强制删除,不会提示;
rmdir test01        #目录的删除

C)改

#改名
mv 原先目录 文件的名称   mv tomcat001 tomcat         #mv的功能是将文件重命名或将其移至一个新的目录中
#改位置
mv 目录名称 目录的新位置  mv /usr/tmp/aaa /usr       #将usr目录移动到/usr/tmp/aaa下

D)查

1)cd
cd /         #切换到根目录
cd /usr         #切换到根目录下的usr目录
cd ../          #切换到上一级目录 或者  cd ..
cd ~            #切换到home目录
cd -            #切换到上次访问的目录
2)ls
ls              #查看当前目录下的所有目录和文件
ls -a           #查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l           #或 ll       列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls -al          #查看所有文件的详细信息
ls /dir         #查看指定目录下的所有目录和文件   如:ls /usr
3)find
find / -name 'b'       #查询根目录下(包括子目录),名以b的目录和文件;
find / -name 'b*'     #查询根目录下(包括子目录),名以b开头的目录和文件;
#为什么会查找到文件是因为在linux下目录(文件夹)也是一个文件

2.文件操作


A)文件基础

# 文件类型 lsp-bcd
l    # 符号链接文件
s    # 套接字文件
p    # 管道文件
-    # 普通文件
b    # 块设备文件
c    # 字符设备文件
d    # 目录文件

inode包含文件的元信息,具体来说有以下内容:(对于文件来说,每个文件都有一个独立的inode号)

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:
  • ctime指inode上一次变动的时间
  • mtime指文件内容上一次变动的时间
  • atime指文件上一次打开的时间
  • 链接数,即有多少文件名指向这个inode
  • 文件数据block的位置

B)增

#普通文件
touch dirA/{A1,A2,A3}     #dirA创建三个文件dirA/A1,dirA/A2,dirA/A3
#链接文件
ln 文件名 链接文件名            #硬链接
ln -s                        #软连接#软连接:快捷方式   文件类型:链接文件 l
1.以绝对路径的方式,去访问文件
2.源文件改名后,无法访问
3.可以跨操作系统,因为用的是路径#硬链接: 备份      文件类型:普通文件 -
1.以inode号,去访问文件
2.源文件改名后任然可以访问
3.不能跨操作系统(不同的操作系统,分配的inode号可能不同)

C)删

rm           #命令的功能为删除一个目录中的一个或多个文件或目录
rm ./*.c    #删除当前目录下的.C文件
find . -name '*.pyc' -exec rm -rf {} \;       #递归删除.pyc格式的文件#rm
-d或--directory  直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或--force  强制删除文件或目录,忽略不存在的文件,不提示确认。
-i或--interactive  删除既有文件或目录之前先询问用户。
-I   在删除超过三个文件或者递归删除前要求确认。此选项比-i 提示内容更少,但同样可以阻止大多数错误发生。
-r或-R或--recursive  递归删除,将指定目录下的所有文件及子目录一并删除。
-v或--verbose  显示指令执行过程。
--help   在线帮助。查看该命令功能和可带参数等。

D)改

  1. 改名
#改名
mv 原先目录 文件的名称   mv tomcat001 tomcat
  1. 改内容
#改内容
vi 文件名      #使用vi编辑器编辑
gedit 文件名   #使用文本编辑器编辑
  1. 改权限
#改权限chmod        User、Group、Other
chmod +x aaa.txt #表示ugo都有执行权限
#   u 表示该档案的拥有者、g 表示与该档案的拥有者属于同一个群体(group)者、o 表示其他以外的人
#   a 表示这三者皆是。
#   r 表示可读取、w 表示可写入、x 表示可执行
#   + 增加权限、- 撤销权限、= 设定某类用户只有该权限(=表示该类用户只有某个权限)
chmod o+rx aaa.txt;chmod o=x aaa.txt #执行该命令后o用户只有执行权限chmod 0100 aaa.txt   #使用8进制赋予权限 必须在最前面加0
#改所属用户chown#改用户组chgrp

E)查

#查看文件内容
cat     #看最后一屏 -n 显示行号 -v 用^I显示tab建
more    #百分比显示
less    #翻页查看
tail    #指定行数或者动态查看
#查找文件
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
-name       按文件名称查找
-user       按文件拥有者查找
-group      按文件拥有组查找
-type       按文件类型查找
-perm       按文件权限查找
-exec       对查找到的文件执行指定动作
-maxdepth   指定查找范围最大为第几级目录
-mindepth   指定查找范围最小为第几级目录
-cmin   按文件修改时间查找
-size   按文件大小查找
-o / -a / -not  查找条件或/且/非grep   [options]   [pattern]   file
#命令   选项         匹配模式     文件数据
-V  排除匹配结果
-n  显示匹配行与行号
-i  不区分大小写
-c  只统计匹配行数
-E  使用egrep命令
-o  只输出匹配内容
-w  只输出过滤的单词
-F  不适用正则表达式
-l  列出包含匹配项的文件名
-L  列出不包含匹配项的文件名grep -i  "^h" names.txt    # 输出以h开头的行,不区分大小写
#常用正则表达式
#表达式    解释说明
^   # 用于模式最左侧,如 “^yu” 即匹配以yu开头的单词
$   # 用于模式最右侧,如 “yu$” 即匹配以yu结尾的单词
^$  # 组合符,表示空行
.   # 匹配任意一个且只有一个字符,不能匹配空行
|   # 转义字符
*   # 重匹配前一个字符连续出现0次或1次以上
.*  # 匹配任意字符
^.* # 组合符,匹配任意多个字符开头的内容
.*$ # 组合符,匹配任意多个字符结尾的内容
[abc]   # 匹配 [] 内集合中的任意一个字符,a或b或c,也可以写成 [ac]
[^abc]  # 匹配除了 ^后面的任意一个字符,a或b或c,[]内 ^ 表示取反操作
#统计文件
wc [-clw][--help][--version][文件...]
-c      # 字节数 或 --bytes或 --chars 只显示Bytes数/字节数。
-m      # 统计字符数,不能与-c同时使用
-l      # 显示行数  或 --lines 显示行数。
-L      # 打印最长长度
-w      # 显示字数 或 --words 只显示字数。
--help  # 在线帮助
--version # 显示版本信息。

3.归档打包

A)压缩解压

#zip     压缩
-r          #递归目录。
-DF         #也写作 --dif。只包括有改变的文件或比输入归档较新的文件。
-1~-9       #1是更快地压缩,9是更好地压缩,默认值是6。
-sf         #表示查看压缩内的文件
-d          #表示删除压缩文件内指定的文件
--out       #输出到新的归档。如果输入是拆分的,输出将会默认为相同的拆分大小。
zip zipfile -r . -i "*.h"     #递归当前目录并压缩以 .h 为结尾的文件
zip zipfile -FS -r dir          # 归档更新
zip -r foofull . -DF --out foonew
#递归当前目录,如果有 foofull 中没有的文件或有改变的文件,就压缩到 foonew 中#unzip     解压
-f          #更新压缩包的文件;
-l          #显示压缩文件内的文件;
-v          #执行时显示详细的信息(显示压缩率);
-o          #不询问用户,覆盖原有文件;
-q          #不显示执行过程;
-d          #指定文件解压缩后所要存储的目录;
unzip -q -d /zip/ test.zip      #-d 后面必须接路径,不然会报错,且当路径不存在时会自动创建
#gzip
gzip #命令只能用来压缩文件,压缩后会删除源文件,不能压缩目录,即便指定了目录,也只能压缩目录内的所有文件。
-d          #解开压缩文件
-l          #列出压缩文件的相关信息
-r          #递归处理,将指定目录下的所有文件及子目录一并处理
-v          #显示指令执行过程
-<n>      #压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高
#ungzip/gunzip
#bzip2
#bunzip
#rar

B)归档

#tar     文件、目录打(解)包
#这五个是独立的命令, 压缩解压都要用到其中一个, 可以和别的命令连用但只能用其中一个
-c  #建立压缩档案
-x  #解压
-t  #查看内容
-r  #向压缩归档文件末尾追加文件
-u  #更新原压缩包中的文件
#下面的参数是根据需要在压缩或解压档案时可选的。
-z  #有gzip属性的
-j  #有bz2属性的
-Z  #有compress属性的
-v  #显示所有过程
-O  #将文件解开到标准输出
#下面的参数-f是必须的
-f  #使用档案名字, 切记, 这个参数是最后一个参数, 后面只能接档案名。tar -rf all.tar *.gif    #条命令是将所有.gif的文件增加到all.tar的包里面
tar -cvf jpg.tar *.jpg  #将目录里所有jpg文件打包成tar.jpg

4.用户管理

sudo #让普通用户具有临时使用root权限的权利lsp ALL=(ALL:ALL) ALL     #允许lsp用户以root身份执行各种应用命令,需要输入lsp用户的密码
lsp  ALL=NOPASSWD:  /bin/ls, /bin/cat  #仅允许lsp用户以root身份免密执行ls 、cat命令su 用户名 #用于用户之间的切换
#           root向普通或虚拟用户切换不需要密码,反之普通用户切换到其它任何用户都需要密码验证
su test     #切换到test用户,但是路径还是/root目录
su - test   #切换到test用户,路径变成了/home/test
su          #切换到root用户,但是路径还是原来的路径
su -        #切换到root用户,并且路径是/rootexit        #退出返回之前的用户

A)增

adduser      #添加用户指令

B)删

deluser      #删除用户 (先退出该用户登录状态)

C)改

usermod      #修改用户信息指令
usermod -d /home/[新名字] -m -l            #【新名字】【旧名字】修改用户名(也需要该主目录名称)
sudo usermod -d /home/yh2 -m -l yh2 yh
usermod -g [grname] [username]              #修改从属的组:
usermod -s /bin/sh yh                       #修改bash路径:passwd [用户]        #修改用户密码

D)查

vi /etc/sudoers或者visudo  #进入sudo配置文件命令,可以提升用户权限为root
vi /etc/passwd           #存放了系统下所有用户的信息.
vi /etc/group            #查看用户组.
vi /etc/skel             #每一次创建新用户,都会将该目录下的内容拷贝到新用户的主目录下.

5.进程管理

#通俗来讲,进程就是一个正在执行的程序。在这里我们理解为进程由进程控制块PCB、数据和代码构成。ps aux #显示信息如下:USER         PID %CPU %MEM    VSZ   RSS     TTY      STAT   START   TIME    COMMAND
进程所属人     #|    |   |       |     |       |进程id#|     |       |     |       |cpu使用量     #|     |       |内存使用量         #|     |虚拟内存的大小   #|常驻内存的使用大小进程使用到的终端进程状态进程运行时长进程占用cpu时长进程名称

A)进程状态

R 运行状态           #进程不一定在运行,表明进程要么在运行中,要么在运行队列里。
S 睡眠状态          #可中断睡眠,进程在等待事件完成,此时进程处于等待队列。
D 磁盘休眠状态       #不可中断睡眠状态,在这个状态的进程通常会等待IO的结束。
T 停止状态          #发送 SIGSTOP 信号停止进程。发送 SIGCONT 信号让进程继续运行。
X 死亡状态          #这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
Z-僵尸进程          #僵尸进程会以终止状态保持在进程表中,并且一直等待父进程读取退出状态代码
孤儿进程            #父进程如果提前退出,子进程就会成为孤儿进程,孤儿进程会被1号init进程领养。
僵尸状态            #是一个比较特殊的状态,当进程退出并且父进程没用读取到子进程的退出码时,就会产生僵尸状态。一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
<    #(高优先级)
N   #(低优先级)
s   #(父进程)
+  #(前台进程)

B)进程优先级

PRI      #代表这个进程可被执行的优先级,其值越小越好,默认值都是80
NI      #代表这个进程的NICE值,用户通过调整NICE值修改进程的优先级,而NICE的取值范围为(-20~19)

C)查看进程

ps -aux      #以用户为主,显示当前用户在当前终端的所有进程
ps -elf     #以完整的长格式显示系统内所有进程
top          #以全屏交互式的界面显示进程,每三秒刷新一次
top -c  #显示完整的命令路径
top -d  #<时间> 设置间隔时间
top -u  #<用户名> 指定用户名
top -p  #<进程号> 指定进程
top -n  #<次数> 循环显示的次数
top -d 1 -c -p 12   #每隔1秒显示pid是12的进程的资源使用情况,并显示该进程启动的命令行参数#在top基本视图,按
f   #编辑基本视图中的显示字段
c   #显示进程的路径
k   #不退出top命令的情况下杀死某个正在运行的进程
b   #高亮显示当前正在运行的进程
1   #监控每个逻辑CPU的状况#第一行:显示任务队列信息系统当前时间:top - 09:15:52系统运行时间:up 0 min当前登录用户:1 user负载均衡情况:后面的三个数分别是1分钟、5分钟、15分钟的负载情况
#第二行:Tasks — 任务(进程)总进程:95 total运行进程:1 running休眠进程:94 sleeping停止进程:0 stopped僵尸进程:0 zombie
#第三行:cpu状态信息0.3 us:用户空间占用CPU的百分比。0.0 sy:内核空间占用CPU的百分比。0.0 ni:改变过优先级的进程占用CPU的百分比99.7 id:空闲CPU百分比0.0 wa:IO等待占用CPU的百分比0.0 hi:硬中断占用CPU的百分比0.0 si:软中断占用CPU的百分比0.0 st:当Linux系统是在虚拟机中运行时,等待CPU资源的时间占比
#第四行:内存状态total:总内存量(4G)free:空闲内存(2G)used:已用内存(1G)buff/cache:缓存内存(307M)
#第五行:swap交换分区信息total:总内存量(839M)free:空闲内存(839M)used:已用内存(0)avail Mem:可用内存(2G)
#第六行:各进程状态监控
pstree -aup      #以树状图的方式展现进程之间的派生关系,显示效果比较直观

D)清理进程

#清理普通进程
1.通过进程IDps -ef|grep firefox     #查找进程IDkill -9 <PID>          #强制终止
2.通过程序名称killall firefox         #杀死进程pkill firefox          #杀死所有进程
3.通过点击xkill                 #会出现一个白色的x, 然后用鼠标单击想要杀死的应用
4.通过system monitor(系统监视器)gnome-system-monitor #打开系统监视器
#kill命令
kill -STOP [pid]    #发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
kill -CONT [pid]    #发送SIGCONT (19,18,25)重新开始一个停止的进程。
kill -KILL [pid]    #发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
kill -9 -1          #终止你拥有的全部进程。#清理僵尸进程#为什么要清理僵尸进程:僵尸进程一般指进程已经死了或者已经停止运行了,但是它仍存在与进程列表中,依然占用着系统资源。1.查找僵尸进程ps aux | egrep "Z|defunct"2.获取父进程idps -o ppid= <Child PID>3.通过父进程杀死子进程kill -s SIGCHLD <Parernt PID>4.父进程无法清理子进程,直接杀父kill -9 <Parernt PID>     #kill -9 来强制终止退出

6.网络管理

A)基础知识

# IP地址
公有ip    # 由InterNIC负责,通过它直接访问因特网
私有ip    # 专门为组织机构内部使用
#不写了,这部分内容很多

五、Shell脚本

1. 什么是Shell脚本

  • shell命令的有序集合,就可以称为shell脚本文件. 脚本执行,shell命令批量执行的过程
  • shell脚本也可以被看作是一门语言,shell脚本是一种解释型语言 (需要借助shell解释器)
A.编译性语言1.需要通过编译器,且有编译过程(编译器会优化语法)2.执行效率高3.程序语法错误时不会执行
B.解释性语言1.通过对应解释器,才可执行2.执行效率低3.解释器无法检查语法错误,并且会执行有错误的语句(但会在错误处打印发生错误的提示信息)4.可以在不同操作系统上执行.

2. 编程流程


  1. 编写程序

    • 表示注释
    • #!/bin/bash 表示该段程序使用bash解释
  2. 赋予权限(非必须)
  3. 执行程序
    • 直接./*.sh(有权限且在当前目录时)
    • 使用bash或sh +文件名(权限时)
    • 用指令source #source /home/test.sh
  4. 添加到环境变量(非必须)

3. Shell变量


  1. 变量的定义(用户自定义变量)
a=0  #定义了变量a且赋值为0了
#定义变量的同时赋值 unset表示取消变量赋值
#赋值等号两边不能有空格
#变量没有数据类型的说法,所有变量都会被解释为字符串.
#变量名遵循C语言标识符的定义(不能和shell关键字重名)
  1. 变量的引用
  • 变量
#引用变量里的内容,需要添加 $ 来引用 例如: $A
echo '$path'      #严格按原样输出
echo "$path"      #输出变量path的内容            #同:echo $path
echo "${a}bc"         #打印变量a的内容后连着打印bc
  • 位置变量 命令行参数
#变量引用是从 $0 开始依次往后引用, $0......$n
ls -A ./*.c     #第0个参数是ls,一般情况下从第一个参数开始使用
#如果参数大于9个,对于9后面的引用 需要加{ } 例如: ${10}
  • 预定义变量
#被shell解释器提前定义好(预定义)的变量,这些变量都已经被赋予了特殊的意义,不能修改,且可以直接使用.
$*:表示所有命令行参数,不包含 $0
$#:表示所有命令行参数的总个数,不包含 $0
$?:表示上一次命令执行后的返回状态.正常表示为0。
$@:表示所有命令行参数,不包含 $0
$$:显示正在执行程序的进程ID
  • 环境变量
env      #查看所有环境变量
export      #添加环境变量

4. Shell语句


1) 说明性语句

#  #表示单行注释
#多行注释
!<<:语句
:
#解开多行注释
!>>:语句
:

2) 功能性语句

  • 输入输出类语句
#表示接收终端输入的内容,如果终端没有输入,则会阻塞等待
read -p:                    #添加提示内容 例如: read -p "input:" a b
read var1 var2 var3....     #需要从终端输入三个变量,以空格分隔
read var1 var2 var3         #第一个存入var1,第二个存入var2,后面所有的都会存入 var3!
  • 算术运算类语句 (整数四则运算 +、-、*、 /、 %)
#整数四则运算 (+、-、*、 /、 %)
#expr  该命令有结果
expr $A + 3 - 5 \* 4
#乘法符号与通配符冲突所以需要添加 \ 2 \* 3
sum=`expr 4 / 2`
#在shell脚本中需要使用 命令置换 来获取计算的结果
#$[$a+$b]   #该命令表示的是取变量的内容,单独放出来会报错,可以使用 echo $[2**8] 来打印该信息
$[4+5]     #表示4+5 在这个括号里面不需要加空格
$[2**8]     #表示2的8次方
  • 测试判断语句(真返回0、假返回1)
test #针对的对象: 字符串、整数、文件属性
#通常使用 $?(查看上一条指令执行的返回状态) 来常看测试返回值,因为该语句没有输出结果
test 表达式1 –a 表达式2           #两个表达式都为真
test 表达式1 –o 表达式2           #只有一个为真
[  ] #方括号两边的里面都必须有空格
[ $a = $b ] #里面的等号两边必须有空格
(()) #类似C的语法,在C中不能完成的判断在这个括号里面也不能完成
(( a<=b && c>=a )) #在(())里面引用可以不加 $ 符号
                             #常用判断命令选项
#对表达式
表达式1 –a 表达式2    #都为真
表达式1 –o 表达式2    #只有一个为真
#对整数的判断
a –eq b         #a与b是否相等  –eq
a -ne b         #不等于
a -ge b         #大于等于
a -gt b         #大于
a -le b         #小于等于
a -lt b         #小于
#对字符的判断
str1 = str2    #str1是否与str2相同(str1、str2是字符串)
str1 != str2   #str1是否与str2不同
str1 < str2      #str1是否小于str2
str1 > str2      #str1是否大于str2
-n str          #判断str长度是否非零
-z str          #str长度是否为0
#对文件属性
-d file         #判断file是否为目录
-e file         #判断file是否存在
-f file         #检查file是否为文件
-r file         #判断文件是否可读
-s file         #判断file是否存在并非空
-w file         #判断file是可写
-x file         #判断file是可执行

3) 控制性语句

  • if语句
#if else
if 条件语句
then语句块
else语句块
fi
#if elif elif
if 条件语句
then语句块     #then 后面才是语句块
elif 条件语句
then语句块
elif 条件语句
then语句块
else语句块     #else后面不需要then
fi            #以fi结尾
  • case … esac
case $var in  #var是字符串变量模式1)     # 如果是多个模式匹配 则可是使用 | 来连接 yes | YES | Y)语句1;;          # ;; 表示 退出case语句模式2)语句2;;*)语句3;;        # 最后可以不需要加 ;;
esac
  • for…do…done
# 带列表        for..in..do..done
for varible1 in {1..5}      # for file in $( ls )
do  echo "Hello, Welcome $varible1 times "
done for i in {1..100..2}
do  let "sum+=i"
done# 不带列表for循环
for argument        # argument 相当于所有命令行参数的列表
do  echo "$argument"
done
do  echo "$argument"
done# C风格的for
for((integer = 1; integer <= 5; integer++))
do  echo "$integer"
done
  • while…do…done
#死循环
while :;
doecho hello,word!
done# 一般用法
while(( $int<=5 ))
doecho $int
done

六、make工具

#下文更新

2022.11.14 不用更新了
找到一篇非常详细的文章:

Makefile教程


文章目录

  • Linux
    • 一、了解嵌入式系统
      • 1. 嵌入式设备
      • 2. 嵌入式系统
      • 3. Linux操作系统
        • Linux系统结构
      • 4.Linux的系统目录
    • 二、vim编辑器
      • 1.什么是vi/vim
      • 2.三种模式
        • 1)命令模式
        • 2)底行模式
        • 3)插入模式
      • 3.用vi/vim打开文件
      • 4.安装vi/配置vi
    • 三、Shell特殊字符
      • 1.通配符
      • 2.管道
      • 3.输入/输出重定向
      • 4.命令置换
      • 5.其他符号
    • 四、Shell命令
      • 1.目录操作
        • A)增
          • 1)mkdir
          • 2) cp -r (递归复制)(且复制文件夹内的文件)
        • B)删
        • C)改
        • D)查
          • 1)cd
          • 2)ls
          • 3)find
      • 2.文件操作
        • A)文件基础
        • B)增
        • C)删
        • D)改
        • E)查
      • 3.归档打包
        • A)压缩解压
        • B)归档
      • 4.用户管理
        • A)增
        • B)删
        • C)改
        • D)查
      • 5.进程管理
        • A)进程状态
        • B)进程优先级
        • C)查看进程
        • D)清理进程
      • 6.网络管理
        • A)基础知识
    • 五、Shell脚本
      • 1. 什么是Shell脚本
      • 2. 编程流程
      • 3. Shell变量
      • 4. Shell语句
        • 1) 说明性语句
        • 2) 功能性语句
        • 3) 控制性语句
    • 六、make工具

Linux基础和命令大全相关推荐

  1. Linux基础及命令大全(入门级教学基础命令)

    Linux基础及命令大全(入门级教学基础命令) 一.什么是shell,Linux的格式 shell就是Linux系统中运行的一种程序,也是用户和内核之间的翻译官,Bash是Linux系统中默认使用的s ...

  2. Linux(Ubuntu 命令大全)

    Linux(Ubuntu 命令大全) Ubuntu 一. Ubuntu简介 Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,据说其名称来自非洲南部祖鲁语或科萨语的&q ...

  3. Linux基础 常见命令 思维导图总结

    该系列文章总纲链接:专题分纲目录 Linux环境 1 Linux基础 常见命令 学习链接 @1 该链接旨在 对Linux系统 从0到1 进行入门级学习,同时对Linux命令有一个基本的了解: Linu ...

  4. eoiioe linux下解压命令大全

    http://www.cnblogs.com/eoiioe/archive/2008/09/20/1294681.html eoiioe linux下解压命令大全 .tar 解包:tar xvf Fi ...

  5. linux系统正常停机的命令,Linux系统重启命令大全

    在进行Linux系统操作的时候,如果出现更换硬件.更改系统配置及死机等情况时,就需要对电脑进行重启,而不同的情形重启的方式也不同,即使用的命令不同,接下来是小编为大家收集的Linux系统重启命令大全, ...

  6. linux下解压命令大全

    linux下解压命令大全 .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------- ...

  7. Linux菜鸟入门级命令大全

    Linux菜鸟入门级命令大全 1. man 对你熟悉或不熟悉的命令提供帮助解释 eg:man ls 就可以查看ls相关的用法 注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前 ...

  8. Linux基础shell命令 ls

    Linux基础shell命令 ls ls 用来展示目录文件 man ls :官方文档显示所有的ls用法(其他命令也可用相同方法查看文档) ls [命令符选项] [文件路径(相对路径绝对路径均可)] [ ...

  9. linux下mysql命令大全

    linux下mysql命令大全 1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux ...

最新文章

  1. ssd_mobilenet_v2_quantized_coco 转为 tflite 格式在 Android 上运行
  2. 基础知识--:before伪元素和:after伪元素
  3. PCIE BAR空间
  4. 清华姚班校友马腾宇斩获斯隆奖!与鬲融师承一脉,李飞飞点赞祝贺
  5. python程序从哪里开始执行-python如何启动
  6. maven进阶:一个多模块项目
  7. 跪求解,oc内存回收问题
  8. HTML标记之Form表单
  9. android 手机固定mac地址吗,Android手机获取Mac地址的几种方法
  10. 锐起无盘安装图文教程
  11. 自动售货机软件工程课设_饮料自动售货机系统实验.docx
  12. 计算机没有地址栏,“我的电脑”地址栏不见了怎么解决?
  13. H5页面通过浏览器调用摄像头拍照
  14. arcgis 批量计算几何_GIS中的计算几何
  15. h5 ios 切入后台运行倒计时问题
  16. LVGL V8之Animation timeline
  17. 诛仙手游android转苹果,诛仙手游安卓和iOS互通吗 安卓和iOS能不能一起玩
  18. 快搜搜:在网上找工作如何防骗!
  19. 视觉技术中的图像采集卡
  20. 合适的教育ERP管理系统,可让你省去很多麻烦

热门文章

  1. 深圳“毕业”生灵活就业社保缴纳方式
  2. 【产品人卫朋】2022年产品人必备的13个设计类网站(1.0版)
  3. 史诗级漏洞爆发,Log4j 背后的开源人何去何从?
  4. 基于树莓派的流星雨监测系统(RMS)的搭建
  5. Dell xps13 win10 安装于PCI-E SSD
  6. 【BZOJ3470】Freda’s Walk
  7. PPT文件不能编辑,什么情况?
  8. eas bos 获取编码规则
  9. 夜雨数竞笔记-不定积分(1)-换元法-倒代换
  10. 现代基准测试程序种类以及使用方法