关于linux:Linux基础

4次阅读

共计 5808 个字符,预计需要花费 15 分钟才能阅读完成。

Linux 根底

操作系统的基本概念

  • 支流操作系统:Windows、Linux、Android、iOS 等
  • Windows:操作简略,性能较低
  • Linux:操作麻烦,学习较为艰难,性能好,可移植性强。
  • Android:挪动操作系统,是基于 Linux 开发的(应用的是 Linux 的内核)
  • 多机开发:开发嵌入式程序须要 Linux 环境,同时也须要一些 Windows 环境,次要是因为 Windows 环境中有一些很好用的软件。然而同时应用两台电脑是不太可能的,所以这里就须要用到虚拟机软件了(在虚拟机中装另外一个零碎)
  • 虚拟机软件 VMware 在 Windows 零碎中运行,运行后它会模仿一台电脑进去,咱们能够在这台电脑上装置其余操作系统,所以叫虚拟机。

Linux 常用命令及操作

  • 暗藏文件:Linux 中暗藏文件是以. 结尾的,跟文件属性无关。
  1. man:用来查问 man 手册,获取对应命令的帮忙信息

    • man 1 ls:1 示意查问的是 Linux 命令(查问 ls 的应用办法)
    • man 2 xx:2 示意查问的是 Linux 的 api
    • man 3 xx:3 示意查问的是 C 库函数
  2. ls:显示以后文件夹下所有一般文件(不蕴含暗藏文件)

    • ls -a:显示以后文件下所有文件(蕴含暗藏文件)
    • ls -l:以详细信息显示以后文件夹下所有一般文件和文件夹
    • ls -al/ls -la/ls -l -a/ls – a -l:四种办法都是以详细信息显示所有文件(蕴含暗藏文件)
  3. 显示详细信息后,显示出的文件类型:

    • 以 – 结尾的:一般文件(二进制文件和文本文件)
    • 以 d 结尾的:文件夹
    • 以 l 结尾的:符号连贯文件(软连贯)
    • 以 s 结尾的:socket 文件
    • 以 p 结尾的:管道文件 pipe
  4. cd:用来切换目录

    • cd ..:进入下层目录
    • cd ../../:进入上下层目录
    • cd test/:进入当前目录下的 test 文件。
  5. pwd:显示当前目录的全门路(绝对路径)
  6. mkdir:创立文件夹

    • mkdir -p abc/DEF:级联创立文件夹(在以后文件夹下创立 abc 文件夹,再在 abc 文件夹下创立 DEF 文件夹)
  7. mv(move):挪动文件 / 批改文件名

    • 用法:mv 原文件夹 pathname 目标文件夹 pathname
    • 例如:mv def/abc ./edg(将以后文件夹下的 def 文件夹中的 abc 文件夹的内容挪动到以后文件夹中的 edg 文件夹中,即实现了挪动,又实现了改名)
  8. touch:创立空文件(留神与 mv 创立空文件夹辨别)
  9. cp(copy):复制文件或文件夹(与 mv 有点像)

    • 用法:cp 源文件 pathname 指标文件 pathname
    • cp:复制文件
    • cp -f:强制复制文件
    • cp -rf:复制文件夹
  10. rm:删除(remove)

    • rm 文件 pathname:删除文件
    • rm -f 文件 pathname:强制删除文件
    • rm -r 文件夹 pathname:删除文件夹
    • rm -rf 文件夹 pathname:强制删除文件夹
  11. rmdir:删除文件夹(只能删除空文件夹)
  12. cat:间接在命令行下显示文件内容
  13. ln:连贯文件

    • 连贯文件:在 Windows 中,某个文件的快捷方式与这个文件就是连贯文件关系,他们是两个文件,然而有某种关联。
    • 软连贯(符号连贯):成果相当于 Windows 中的快捷方式(源文件删除后,连贯文件也有效,有主从关系)
    • 硬连贯:源文件删除后,连贯文件任然无效,任然能关上源文件中的内容,然而源文件是曾经删除了的(没有主从关系,位置平等,删除哪一个对另一个都没影响)
    • 创立软连贯文件办法:ln -s 源文件名 连贯文件名
    • 创立硬连贯文件办法:ln 源文件名 连贯文件名
  14. apt-get:用于在 Ubuntu 中在线装置 / 卸载软件(必须联网)

    • apt-get install vim:在线装置 vim
    • apt-get remove vim:在线卸载 vim
    • 在 Ubuntu 中装置软件其实是十分艰难的,很容易就会装置到不适宜该版本的软件,然而应用 apt-get 装置软件,零碎会主动在网络中搜寻匹配的软件,不会装置不适合的版本。
  15. gcc 文件名 -o 可执行程序名:编译文件(编译后会失去一个可执行程序,此时输出./ 可执行程序名,即可运行程序)

Linux 高级命令

  1. find:find -name“abc”在文件夹 a 目录下查找名字为 abc 的文件(查找文件名)
  2. grep:在文本文件中查找某个词(用于查找某个字符在哪些地方呈现过)具体用法在 man 手册中去查。
  3. uname:显示零碎信息(uname - a 显示所有零碎信息)
  4. shutdowm -h now:立刻关机
  5. init 0:关机
  6. shutdown -r now:立刻重启
  7. reboot:重启
  8. tree:从根目录开始用树形构造的形式显示文件和目录。
  9. mount/umount:用来挂载 / 卸载磁盘到文件系统中去。
  10. df -h:显示所有已挂载的分区列表
  11. du -h 文件名:列出文件或文件夹的大小
  12. 用户治理:

    • useradd user1:增加一个名为 user1 的用户
    • userdel user1:删除一个名为 user1 的用户
    • passwd user1:为名为 user1 的用户设置明码
  13. 权限治理:用来管理系统中文件的权限

    • r 可读的数字编码 4、w 可写的数字编码 2、x 可执行的数字编码 1、- 无权限的数字编码 0
    • 三个组用户的编号:属主 u、属主所在的组 g、其余用户 o。
    • 将权限 rwxr-xr- x 编码为 755,改为 rwxr–r– 编码为 744
    • 第一种办法:chmod 744 文件名
    • 第二种办法:chmod g-x o-x 文件名(此办法是在原有的根底上进行减少或删除权限、加增减删)
    • chown:批改文件的属主
    • chgrp:批改文件所属的组
  14. 打包文件与解压缩

    • tar -czvf dir.tar.gz dir/(将 dir/ 目录打包成 dir.tar.gz)
    • tar -cjvf dir.tar.bz2 dir/(将 dir/ 目录打包成 dir.tar.bz2,两个都是打包,只是算法不同)
    • tar -zxvf dir.tar.gz(解压缩 dir.tar.gz)
    • tar -jxvf dir.tar.bz2(解压缩 dir.tar.bz2)

vim 编辑器的应用

  • vim 编辑器其实就是一个软件,用来编辑代码
  • Linux 中自带的编辑器是 vi,然而比拟好用的是 vim(vi 的升级版,要本人下载)
  • 如果用 vim 关上一个不存在的文件时,零碎会主动创立一个文件。

vim 根本利用

  • vim 有两种模式:命令模式和输出模式
  • 当 vim 关上文件时默认处于命令模式下,按 a 或者 i 键切换到输出模式
  • 在命令模式下,键盘输入的内容都被当作命令来解决,而不是输出到文件中。
  • 在输出模式下按 esc 键退回到命令模式。
  • 保留文件办法:(留神切换到命令模式)

    • :wq 保留并且退出
    • :w 保留但不退出
    • :q 不保留退出
    • :wq! 强制保留并退出
    • 结尾加!示意强制执行

vim 高级利用

  1. 查找性能:在命令模式下输出 /xxx,光标会跳转到 xxx 地位去。
  2. 疾速切换行:在命令模式下输出 : 行号,就能够疾速定位到该行。
  3. 设置显示行号:在命令模式下输出 :set nu,就会显示行号了(:set nonu 勾销行号)
  4. 显示行号只会在这次关上的文件中显示,当敞开文件再次关上时,行号依然没有显示。
  5. 永恒显示行号办法:vim ~/.vimrc 进入配置文件,再进入输出模式,输出 set nu,而后保留并退出即可。
  6. 行删除:将光标挪动到要删除的那一行,在命令模式下按 dd 即可(联合疾速切换行 :4 回车,切换到第四行,而后 dd 删除)
  7. 间断删除多行:在命令模式下按 4dd,即可删除光标之后的间断 4 行(行数 +dd)
  8. 行复制:nyy(n 是行数,yy 是复制命令)
  9. 行粘贴:p(p 是命令,粘贴是粘贴到光标所在行的下一行)

Linux 中特殊符号的含意

  • 留神:上面的括号不是特殊符号,括号外面的才是。
  • (.)代表当前目录
  • (..)代表上一层目录(/bjf/abc/123,当前目录是 123,上一层目录是 abc)
  • (-)代表前一个目录(从 /bjf/abc/123 目录跳转到 /edg/zxc/456 目录后,456 是当前目录,上一个目录是 123)
  • (~)代表以后用户的宿主目录(零碎为以后用户所设置的用来寄存文件 / 工作的默认目录,就像 Windows 中的“我的文档”这个文件夹)
  • (/)代表根目录
  • ($)代表普通用户的命令行提示符。
  • (#)代表 root 用户的命令行提示符(管理员用户)
  • (*)万能匹配符,能够匹配一个或多个字符。
  • 例如:rm ab* 示意删除 ab 结尾的所有文件

普通用户与特权用户

  • 特权用户:即管理员用户,领有零碎中所以势力。
  • 普通用户:只能操作本人的文件,不能对其余文件进行操作,连 apt-get 命令都不能用。
  • 用户切换:su 用户名
  • ls -l 显示详细信息时文件结尾呈现 drwxr-xr-x 等字样

    • drwxr-xr-x:第一个字符示意文件类型,后 9 个分三组 3 * 3 示意权限。
    • r 可读,w 可写,x 可执行,- 示意无权限
    • 前三个 rwx 示意此文件的属主的权限。
    • 中三个 r - x 示意此文件属主所在的组的权限。
    • 后三个 r - x 示意其余用户对该文件的权限。
  • 应用 sudo 使普通用户长期获取管理员权限(sudo apt-get install vim 普通用户下长期应用管理员权限下载 vim)

VMware 共享文件夹

  • 作用:用来与 Windows 共享文件(咱们个别在 Windows 中写代码,在 Ubuntu 中编译执行)
  • 设置办法

    • 首先在 Windows 中创立一个文件夹,留神不能有中文
    • VMware 中,点击上方菜单栏中虚拟机 – 设置 – 选项 – 共享文件夹
    • 文件共享后,在虚拟机中的地位是:/mnt/hgfs/(cd 进入后能够查看)

Linux 编程 C 语言根底补充

  • Ubuntu 终端中编译程序要应用 gcc,具体看 Linux 常用命令及操作的最初一个。
  • \n 换行
  • 整型有正负之分,浮点型没有。
  • printf 中:%d 对应整型,%c 对应字符型,%f 对应浮点型,%p 对应指针变量(打印进去是指针变量的地址)
  • 在 C 语言中:单个字符要用单引号括起来,字符串用双引号。
  • 字符串“abcde”,利用 sizeof 算进去理论占 6 个字节,开端还有一个结尾字符即空字符‘\0’。
  • 变量类型隐式转换:默认朝精度更高、范畴更大的方向转换。

指针

  • int a;int *p;
  • 指针变量 p 自身是指针类型,指针所指向的变量是 int 型,赋值时留神变量匹配。
  • a:代表变量 a 自身
  • p:代表指针
  • &a:代表变量 a 的地址
  • &p:代表指针 p 所在的地址
  • a:示意把 a 看作一个指针, a 是这个指针指向的变量,这个变量的地址是 a 的值(该符号存在但不非法)
  • *p:示意指针 p 所指向的变量,这个变量的地址是 p 的值。
int mian()
{
    int a = 10;
    int *p;       // 定义一个指针
    p = &a;    // 这个指针指向变量 a 所在的地址。*p = 111;  // 扭转指针所指地址的值,* p 代表指针所指向的变量
   printf("a = %d",a);  // 输出 a = 111
   return 0;
}

指针与数组

  • 数组的首地址和数组的首元素地址意义上是不同的,然而数值上是一样的。
  • &a 是数组的首地址,要赋给数组指针;&a[0]是数组首元素的地址,要赋给 int 指针。
  • 数组拜访形式:a[0] a[1] a[2] a[3] a[4]
  • 指针拜访形式:p (P+1) (P+2) (P+3) *(P+4)
  • 指针的运算:指针 p 加减 1,示意 p 指向的地址后退或后移一位。
int main()
{int a[5] = {1,2,3,4,5};
    int *p;
    p = &a;            // 编译后会呈现正告,因为 &a 是数组的首地址,应该赋给一个数组指针。p = &a[0];
    p = a;       // 数组名 a 作右值时代表数组的首元素地址,即 a[0]的地址。}

构造体与共用体

  • 构造体与共用体的定义形式和应用形式都是一样的。
  • 构造体:是多个属性的联合,每个属性都是独立的。
  • 共用体:是一个属性,然而有多种称说;即给共用体中的某个变量赋值时,其余变量也会跟着被赋值。
// 构造体定义
struct jiegouti
{
   int a;
   char b;
   float c;
};

// 共用体定义
union gongyongti
{
    int a;
    char b;
    float c;
};

宏定义与枚举

  • 宏定义:#define N 100
  • 例如:#define N(100+10)
  • 留神:宏定义结尾是没有分号的,定义的如果是表达式时必须加括号。
  • 利用宏定义定义一年有多少秒:#define S (3652460*60)UL
  • 结尾的 UL 是强制类型转换,将表达式得出的后果转换为 unsigned long 类型,因为计算结果超出 int 的接受范畴。
  • 留神:定义枚举时,外部的内容用逗号隔开。

    // 定义一个枚举
    enum week
    {
      1,
      2,
      3,
    };
    
    int main()
    {enum week  day; // 定义一个枚举变量(变量类型是 enum week}

变量

  • 定义在函数外部的是局部变量,只能在本函数中应用;定义在函数外的是全局变量,能够在此文件中应用。
  • 代码块:所谓代码块就是用 {} 大括号括起来的范畴都是代码块
  • 作用域:局部变量的作用域就只在大括号范畴内。
  • 在定义时若没有初始化,则局部变量是个随机值,而全局变量默认为 0。
  • 编译器编译代码时是从返回后看的,所以定义全局变量必须在结尾就定义(函数申明也必须在后面)
  • 动态局部变量 static:static 定义的变量,只在第一次调用函数时定义,再次调用时是不会定义的(跟全局变量有点类似)
  • 一般局部变量 auto:auto 是能够省略的。

常量

  • 常量 const:只能在定义时初始化赋值,其余时候不能赋值。
  • 当初有一个定义:int a = 10;

    • const int *p = &a;p 是一个指针,指向 a,此定义示意 p 所指向的是一个常量,即 a 是常量。
    • int const *p = &a;p 是一个指针,指向 a,此定义示意 p 所指向的是一个常量,即 a 是常量。
    • int *const p = &a;p 是一个指针,指向 a,此定义示意 p 自身是常量,p 所指向的是一个变量,即 a 是变量。指针 p 是常量示意它只能指向 a,不能指向其余中央。
    • const int *const p = &a;p 是一个指针,指向 a,此定义示意 p 和 a 都是常量。

跨文件调用

  • 跨文件函数调用:在调用前先申明此函数(跟申明本文件的函数一样的办法)
  • 跨文件一般全局变量调用:在调用前先申明此变量(用 extern,留神申明时不能初始化)
  • 局部变量是不能跨文件应用的。
  • 动态全局变量只能在本文件应用,其余文件即便申明了也不能应用,然而其余文件能够定义雷同名称的变量(这就解决了变量重名的问题)

头文件援用

  • 例如:#include <stdio.h>
  • 尖括号 <>:用来蕴含零碎自带的头文件。
  • 双引号“”:用来蕴含咱们本人写的头文件(.h 文件)
  • 本人写头文件时,留神避免反复蕴含。

    #ifndef  __A_H__
    #define __A_H__
    
    // 避免反复蕴含
    // 在此区域写申明
    
    #endif
正文完
 0