Linux基础

夜枫微凉 -
Linux基础
Linux基础操作系统的基本概念主流操作系统:Windows、Linux、Android、iOS等Windows:操作简单,性能较低Linux:操作麻烦,学习较为困难,性能好,可移植性强。Android:移动操作系统,是基于Linux开发的(使用的是Linux的内核)多机开发:开发嵌入式程序需要Linux环境,同时也需要一些Windows环境,主要是因为Windows环境中有一些很好用的软件。但是同时使用两台电脑是不太可能的,所以这里就需要用到虚拟机软件了(在虚拟机中装另外一个系统)虚拟机软件VMware在Windows系统中运行,运行后它会模拟一台电脑出来,我们可以在这台电脑上安装其他操作系统,所以叫虚拟机。Linux常用命令及操作隐藏文件:Linux中隐藏文件是以.开头的,跟文件属性无关。

man :用来查询man手册,获取对应命令的帮助信息

man 1 ls :1表示查询的是Linux命令(查询ls的使用方法)man 2 xx :2表示查询的是Linux的apiman 3 xx :3表示查询的是C库函数

ls :显示当前文件夹下所有普通文件(不包含隐藏文件)

ls -a :显示当前文件下所有文件(包含隐藏文件)ls -l :以详细信息显示当前文件夹下所有普通文件和文件夹ls -al/ls -la/ls -l -a/ls - a -l :四种方法都是以详细信息显示所有文件(包含隐藏文件)

显示详细信息后,显示出的文件类型:

以 - 开头的:普通文件(二进制文件和文本文件)以 d 开头的:文件夹以 l 开头的:符号连接文件(软连接)以 s 开头的:socket文件以 p 开头的:管道文件pipe

cd :用来切换目录

cd .. :进入上层目录cd ../../ :进入上上层目录cd test/ :进入当前目录下的test文件。pwd :显示当前目录的全路径(绝对路径)

mkdir :创建文件夹

mkdir -p abc/DEF :级联创建文件夹(在当前文件夹下创建abc文件夹,再在abc文件夹下创建DEF文件夹)

mv(move) :移动文件/修改文件名

用法:mv 原文件夹pathname 目的文件夹pathname例如:mv def/abc ./edg (将当前文件夹下的def文件夹中的abc文件夹的内容移动到当前文件夹中的edg文件夹中,即实现了移动,又实现了改名)touch :创建空文件(注意与mv创建空文件夹区分)

cp(copy) :复制文件或文件夹(与mv有点像)

用法:cp 源文件pathname 目标文件pathnamecp :复制文件cp -f :强制复制文件cp -rf :复制文件夹

rm :删除(remove)

rm 文件pathname :删除文件rm -f 文件pathname :强制删除文件rm -r 文件夹pathname :删除文件夹rm -rf 文件夹pathname :强制删除文件夹rmdir :删除文件夹(只能删除空文件夹)cat :直接在命令行下显示文件内容

ln :连接文件

连接文件:在Windows中,某个文件的快捷方式与这个文件就是连接文件关系,他们是两个文件,但是有某种关联。软连接(符号连接):效果相当于Windows中的快捷方式(源文件删除后,连接文件也无效,有主从关系)硬连接 :源文件删除后,连接文件任然有效,任然能打开源文件中的内容,但是源文件是已经删除了的(没有主从关系,地位平等,删除哪一个对另一个都没影响)创建软连接文件方法: ln -s 源文件名 连接文件名创建硬连接文件方法: ln 源文件名 连接文件名

apt-get :用于在Ubuntu中在线安装/卸载软件(必须联网)

apt-get install vim :在线安装vimapt-get remove vim :在线卸载vim在Ubuntu中安装软件其实是非常困难的,很容易就会安装到不适合该版本的软件,但是使用apt-get安装软件,系统会自动在网络中搜索匹配的软件,不会安装不合适的版本。gcc 文件名 -o 可执行程序名 :编译文件(编译后会得到一个可执行程序,此时输入./可执行程序名,即可运行程序)Linux高级命令find:find -name “abc” 在文件夹a目录下查找名字为abc的文件(查找文件名)grep:在文本文件中查找某个词(用于查找某个字符在哪些地方出现过)具体用法在man手册中去查。uname:显示系统信息(uname -a显示所有系统信息)shutdowm -h now :立即关机init 0 :关机shutdown -r now :立即重启reboot :重启tree :从根目录开始用树形结构的方式显示文件和目录。mount/umount :用来挂载/卸载磁盘到文件系统中去。df -h :显示所有已挂载的分区列表du -h 文件名 :列出文件或文件夹的大小

用户管理:

useradd user1 :添加一个名为user1的用户userdel user1 :删除一个名为user1的用户passwd user1 :为名为user1的用户设置密码

权限管理:用来管理系统中文件的权限

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 :修改文件所属的组

打包文件与解压缩

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高级应用查找功能:在命令模式下输入 /xxx,光标会跳转到xxx位置去。快速切换行:在命令模式下输入 :行号,就可以快速定位到该行。设置显示行号:在命令模式下输入 :set nu,就会显示行号了(:set nonu 取消行号)显示行号只会在这次打开的文件中显示,当关闭文件再次打开时,行号仍然没有显示。永久显示行号方法:vim ~/.vimrc 进入配置文件,再进入输入模式,输入set nu,然后保存并退出即可。行删除:将光标移动到要删除的那一行,在命令模式下按dd即可(结合快速切换行 :4 回车,切换到第四行,然后dd删除)连续删除多行:在命令模式下按4dd,即可删除光标之后的连续4行(行数+dd)行复制: nyy(n是行数,yy是复制命令)行粘贴: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
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

linux嵌入式编程

扩展阅读

加个好友,技术交流

1628738909466805.jpg