安装软件的命令(重点)
sudo dpkg -i  软件安装包的名字
卸载软件的命令(重点)
sudo dpkg -r  软件的名字   (-p是完全卸载)
在线安装
sudo apt-get install  软件名

bzip2  要压缩的文件的名字    bunzip2  要解压缩的文件.bz2
xz     要压缩的文件的名字      unxz  要解压缩的文件.xz
gzip  要压缩的文件的名字      gunzip 要解压缩的文件.gz

归档:(没有压缩) tar -vcf   文件名.tar   要归档的文件夹的名字
拆包:                 tar -vxf   文件名.tar
tar -jvcf   压缩文件名.tar.bz2   要压缩的文件的名字
tar -Jvcf   压缩文件名.tar.xz   要压缩的文件的名字
tar -zvcf   压缩文件名.tar.gz   要压缩的文件的名字
万能拆包并解压    tar -vxf   压缩文件名.tar.xx  

cat  文件名    cat -n 文件名    ---> 显示行号
cat hello.c world.c ----> 回显两个文件的内容到终端
head 文件名 默认前10行
head -n 文件名  ---> n是一个数字,表示显示前n行
tail  文件名 默认后10行
tail -n 文件名   ---> n是一个数字,表示显示后n行

find  路径  -name  文件名字  ---> 从“路径”查看“文件名字”文件
find .  -name hello.c   ----> 从当前目录下查找hello.c
find /  -name passwd    ----> 从根目录下查找passwd文件
功能:查看文件属性相关的信息  用法: file  文件名
将/etc/passwd文件拷贝到用户的某个路径下sudo cp /etc/passwd   ./

功能:从文件中查找字符串(重要)
格式:grep  -参数   "要查找的字符串"   文件的名字或者路径
grep -n "linux" ./passwd   ---> 回显行号
grep -nR "linux" ./        ---> 递归查找当前目录下的所有文件,并回显行号
grep -niR "Linux" ./       ---> 不区分大小写     
grep -niwR  "Linu"  ./     ---> 按照单词查找 
grep -n "^linux"  ./passwd  ---> 从文件中查找每行的开头为linux
grep -n "bash$"  ./passwd  ---> 从文件中查找每行结尾为bash
grep -n "^linux$"  ./passwd  ---> 从文件中查找每行的开头为linux结尾为linux 

ls -1 ./ > 1.txt  清空写入    ls -1  ~ >> 1.txt 追加写入

管道符:将前一个命令的结果作为后一个命令的输入
用法: 命令1 | 命令2 | 命令3 | ............
cat -n passwd | head -46 | tail -1

read  变量名 read name  类似scanf
echo  字符串    echo  "字符串"    echo  '字符串'  都可以
echo ${name}  类似printf
echo输出字符串之后默认会将光标定位到下一行的行头 自动换行

截取格式: cut -d "分隔符" -f  域   文件名及路径
cut -d ":" -f 1,6 /etc/passwd > user.txt
常和grep 管道符一起使用
grep "^linux" /etc/passwd | cut -d ":" -f 3-4
cat /etc/passwd | head -46 | tail -1 | cut -d ":" -f 3-4

touch  a1.c a2.c a3.c touch可以创建多个文件
通配符 *   ----> 匹配多个字符 ?   ----> 匹配1个字符
[]  ----> 匹配中括号中的一个字符 a[^a-d].c   ----> 匹配除了abcd

sudo shutdown 关机 reboot 重启 

-rw-rw-r--  1 linux linux    75 Oct 16 23:12 hello.c
| |  |  |   |   |     |-----> 所属的组
| |  |  |   |   |----> 所属用户   a---all
| |  |  |   |----> 硬链接数
| |  |  |----> 其他用户权限    o---other
| |  |-----> 所属组的权限      g---group
| |----> 所属用户权限 4 2 1 u ---user
|------> 文件类型
bsp-lcd   : 块设备文件/套接字文件/管道文件/普通文件/链接文件/字符设备文件/目录
+ ----> 添加权限  - ----> 移除权限 = ----> 修改权限
chmod 修改文件权限 chmod  a+x    文件的名字 chmod  0777  文件的名字
chown 修改用户和组的权限 chown   修改所属用户名:修改所属组名  文件名
chown   :修改所属组名    文件名  chown   修改所属用户名   文件名 

软连接 ln -s 绝对路径/被软链接的文件的名字 绝对路径/创建的软链接文件的名字
           ln -s /mnt/hgfs/共享文件夹的名字  /home/linux/windows_share
硬链接 ln  绝对路径/被链接的文件名   绝对路径/硬链接的文件名

linux@ubuntu:DC22091$ ls /dev/sd* -l  ---> 查看ubuntu系统下的块设备文件
brw-rw---- 1 root disk 8,  0 Oct 17 19:05 /dev/sda1
    sd[a-z][1-9]
            |    |----> 块设备文件对应的分区
            |----> 用来表示哪个块设备

挂载U盘
1. 在/mnt目录下创建udisk文件夹   sudo mkdir /mnt/udisk    
2. 使用mount挂载的命令将/dev/sdb1挂载到/mnt/udisk目录下
sudo mount /dev/sdb1  /mnt/udisk

ifconfig ----> 查看ubuntu系统的网络信息
ping命令----> 测试网络的命令  ping  39.156.66.14 ping www.baidu.com

文件名   第一个参数   第二个参数 。。。n
   $0     $1                $2                   $n
$*  $@ 获取所有参数  $#参数个数总和

在shell中定义变量时,等号两边不允许出现空格赋值 name=zhangsan  变量名="初始值"
取变量的值   ${变量名}      echo $var1       # 打印var1变量的值

命令置换符     $(shell命令) 或者 `shell命令` 通常用  ``     1前面的符号

数组的定义格式
数组名=(成员0 成员1 成员2 成员3 成员4 ....)-----> 数组中的成员是连续的    
数组名=([0]=成员0 [2]=成员2 [5]=成员5 .....)-----> 数组中的成员是不连续
赋值:数组名[index(下标)]=新的初始值    取值: ${数组名[index]}
读取数组所有成员 ${数组名[*]} ${数组名[@]}
${#数组名[*]}  ${#数组名[@]}  统计数组元素个数
${#数组名[下标]} 统计某个元素里的字符个数

算数运算 (())   ((算数表达式1,算数表达式2,算数表达式3, ....)返回最后一个值
获取结果   ret_val=$((算数表达式))  或者    $((ret_val=算数表达式))
expr 常用法 变量=`expr 表达式或者shell命令`   返回值或者命令结果
 if用法      if ((表达式))
    then
        shell语句
    elif ((表达式));then
        shell语句
    else 
        shell语句
    fi

case in     case 常量表达式 in            -----> 等价于c语言中的switch ... case语句
用法    常量1)         -----> 等价于C语言中的"case 常量:"分支
        shell语句        -----> 等价于C语句
        ;;                   -----> 等价于C语言中的break
    常量2) 
        shell语句
        ;;
    ......
    *)        ----> 等价于C语言中的"default:"分支
        shell语句
        ;;
esac

while用法    while [ 表达式 ]
    do
        shell语句
    done

for循环:    for ((表达式1;表达式2;表达式3))
    do 
        shell语句4
    done

for 变量名 in  字符串格式的单词列表,字符串单词之间使用空格隔开
    do
        shell语句
    done

    

select    select 变量名  in  单词列表:单词之间使用空格隔开
用法    do
        shell语句
    done 
# [] 相当于test命令,使用[]最终调用的是test命令(重要)    while循环语句经常和test命令结合使用
-eq : 等于    -ne : 不等于 -gt : ⼤于 -lt : ⼩于 -ge : ⼤于等于 -le : ⼩于等于
[ INTEGER1 -eq INTEGER2 ]   -字母命令判断用方括号[]
-a 与 &&            -o 或 ||              !  ⾮ !
文件类型判断  也用方括号[]        [ -b  filename ]
-b filename 判断⽂件是否存在,是否是块设备
    -c filename 判断⽂件是否存在,是否是字符设备
    -d filename 判断⽂件是否存在,是否是⽬录
    -f filename 判断⽂件是否存在,是否是普通⽂件
    -p filename 判断⽂件是否存在,是否是管道⽂件
    -L filename 判断⽂件是否存在,是否是链接⽂件 (经测试链接⽂件也是普通⽂件)
    -S filename 判断⽂件是否存在,是否是套接字⽂件
    -e filename 判断⽂件是否存在
    -s filename 判断⽂件是否存在,判断⽂件是否为空

function  函数名()                  调用  函数名  $1      $2        $3 
{                                                                参数1 参数2  参数3
    函数体
}