当前位置: 首页 > Linux

Linux基础_4

时间:2023-04-07 01:10:29 Linux

Linux基础操作系统的基本概念主流操作系统:Windows、Linux、Android、iOS等Windows:操作简单、性能低Linux:操作麻烦、学习困难、性能好、可移植性强。Android:基于Linux开发的手机操作系统(使用Linux内核)。多机开发:嵌入式程序的开发需要Linux环境,也需要一些Windows环境,主要是Windows环境下有一些非常好用的。软件。但是两台电脑是不可能同时使用的,所以这里需要用到虚拟机软件(在虚拟机中安装另外一个系统)虚拟机软件VMware在Windows系统中运行,运行后会模拟一台电脑出来了,我们可以在这台电脑上安装其他的操作系统,所以叫虚拟机。Linux常用命令及操作隐藏文件:Linux中的隐藏文件以.开头,与文件属性无关。man:用于查询man手册,获取相应命令的帮助信息。man1ls:1表示查询的是linux命令(查询ls的使用方法)man2xx:2表示查询的是linux的apiman3xx:3表示查询的是一个C库函数ls:display当前文件夹下的所有普通文件(不包括隐藏文件)ls-a:显示当前文件下的所有文件(包括隐藏文件)ls-l:显示当前文件夹下的所有普通文件及其详细信息文件和文件夹ls-al/ls-la/ls-l-a/ls-a-l:这四种方法是显示所有文件(包括隐藏文件)的详细信息。显示详细信息后,显示的文件类型:Startwith-:普通文件(二进制文件和文本文件)Startwithd:FoldersStartwithl:Symboliclinkfiles(软链接)Startwiths:SocketfilesStartwithp:管道文件pipecd:用于切换目录cd..:进入上层目录cd../../:进入上层目录cdtest/:进入当前目录下的测试文件。pwd:显示当前目录的完整路径(绝对路径)mkdir:创建文件夹mkdir-pabc/DEF:级联创建文件夹(在当前文件夹下创建abc文件夹,再在abc文件夹下创建DEF文件夹)mv(move):移动文件/修改文件名用法:mv原文件夹路径名目标文件夹路径名例如:mvdef/abc./edg(将当前文件夹下def文件夹中abc文件夹的内容移动到edg文件夹在当前文件夹下,实现移动和重命名)touch:创建一个空文件(注意和mv创建一个空文件夹不同)cp(copy):复制一个文件或文件夹(有点像mv一样)用法:cp源文件路径名目标文件路径名cp:复制文件cp-f:强制复制文件cp-rf:复制文件夹rm:删除(删除)rm文件路径名:删除文件rm-f文件路径名:强制删除文件rm-r文件夹路径名:删除文件夹rm-rffolderpathname:强行删除文件夹在Windows下,某个文件的快捷方式连接到这个文件。它们是两个文件,但是它们有一定的关系。软链接(符号链接):作用相当于Windows中的快捷方式(删除源文件后,链接文件失效,有主从关系)硬链接:删除源文件后,链接文件仍然有效,仍然可以打开源文件中的内容,但是源文件已经被删除(没有主从关系,地位平等,删除哪个对另一个没有影响)创建一个软链接文件方式:ln-s源文件名链接文件名创建硬链接文件方式:ln源文件名连接文件名apt-get:用于Ubuntu在线安装/卸载软件(必须联网)apt-getinstallvim:在线安装vimapt-getremovevim:在线卸载vim在Ubuntu中安装软件其实很难,很容易安装不适合这个版本的软件,但是使用apt-get安装软件,系统会自动在网络中搜索匹配的软件,不会安装不合适的版本。gccfilename-oexecutableprogramname:编译文件(编译后会得到一个可执行程序,此时输入./executableprogramname运行程序)在文件夹a中查找名为abc的文件(查找文件名)grep:在文本文件中查找一个单词(用于查找某个字符出现过的地方)。具体用法可以查看man手册。uname:显示系统信息(uname-a显示所有系统信息)shutdownm-hnow:立即关闭init0:关闭shutdown-rnow:立即重启reboot:重启tree:从根开始以树状结构显示文件和文件目录目录。mount/umount:用于挂载/卸载磁盘到文件系统。df-h:显示所有挂载的分区列表du-hfilename:列出文件或文件夹的大小usermanagement:useradduser1:添加一个名为user1的用户userdeluser1:删除一个名为user1的用户passwduser1:设置密码名为user1的用户权限管理:用于管理系统中文件的权限r可读数字代码4,w可写数字代码2,x可执行数字代码1,-无权限数字代码0为三组用户数:所有者u,所有者所属的组g,以及其他用户o。将权限rwxr-xr-x编码为755,改成rwxr--r--codeto744第一种方法:chmod744文件名第二种方法:chmodg-xo-x文件名(此方法是在原来的基础上增加或删除权限,增加,删除或删除)chown:修改文件属主chgrp:修改文件所属组打包文件并解压tar-czvfdir.tar.gzdir/(将dir/目录打包成dir.tar.gz)tar-cjvfdir.tar.bz2dir/(将dir/目录打包成dir.tar.bz2,两者都是打包,只是算法不同)tar-zxvfdir.tar.gz(解压dir.tar.gz)tar-jxvfdir.tar.bz2(unzipdir.tar.bz2)vim编辑器的使用vim编辑器实际上是一个编辑代码的软件。Linux自带的编辑器是vi,不过我用vim比较好(vi的升级版,需要自己下载)。如果用vim打开一个不存在的文件,系统会自动创建一个文件。vim的基本应用有两种模式:命令模式和输入模式。vim打开文件时,默认是命令模式。按a或i切换到输入模式。在命令模式下,键盘输入的内容被视为命令,而不是在文件中键入。在输入模式下按esc键返回命令模式。保存文件方法:(注意切换到命令模式):wq保存退出:w保存不退出:q不保存退出:wq!最后强制保存退出添加!表示强制执行vim的高级应用程序搜索功能:在命令模式下输入/xxx,光标会跳转到xxx位置。快速切换线路:在命令模式下输入:linenumber可以快速定位线路。设置显示行号:在命令模式下输入:setnu,将显示行号(:setnonu取消行号)。显示的行号只会显示在本次打开的文件中。当文件关闭并再次打开时,将显示行号。号码仍未显示。永久显示行号的方法:vim~/.vimrc进入配置文件,然后进入输入模式,输入setnu,然后保存退出。行删除:将光标移动到要删除的行,在命令模式下按dd(结合快速换行:4个回车,切换到第四行,再用dd删除)连续删除多行:在命令模式下按4dd删除光标后连续4行(行数+dd)行复制:nyy(n为行数,yy为复制命令)行粘贴:p(p为命令,paste为粘贴到该行wherecursorislocatedNextline)Linux中特殊符号的含义注意:后面的括号不是特殊符号,括号里面的才是。(.)代表当前目录(..)代表上一个目录(/bjf/abc/123,当前目录为123,上一个目录为abc)(-)代表上一个目录(来自/bjf/abc/123目录跳转到/edg/zxc/456目录后,456为当前目录,上一个目录为123)(~)表示当前用户的家目录(系统默认设置的存放文件的目录/为当前用户工作,就像Windows中的“我的文档”文件夹)(/)代表根目录($)代表普通用户的命令行提示符。(#)代表root用户的命令行提示符(管理员用户)(*)通用匹配器,可以匹配一个或多个字符。例如:rmab*表示删除所有以ab开头的文件普通用户和特权用户特权用户:即管理员用户,拥有系统中的所有权限。普通用户:只能操作自己的文件,不能操作其他文件,连apt-get命令也不行。用户切换:su用户名ls-l显示详细信息时,文件开头出现drwxr-xr-x等字样drwxr-xr-x:第一个字符表示文件类型,后9个字符分开分为三组。r是可读的,w是可写的,x是可执行的,-表示没有权限。前三个rwx表示该文件所有者的权限。里面的三个r-x代表这个文件的属主所在组的权限。最后三个r-x表示其他用户对该文件的权限。使用sudo让普通用户临时获得管理员权限(sudoapt-getinstallvim普通用户临时使用管理员权限下载vim)在Ubuntu中执行)设置方法首先在Windows中创建一个文件夹,VMware中注意不要有中文,点击上方菜单栏中的虚拟机--设置--选项--共享文件夹文件共享,在虚拟机中的位置为:/mnt/hgfs/(进入后可查看cd)Linux编程C语言基础补充Ubuntu终端编译程序使用gcc,详见Linux常用命令及操作最后一节。\n换行整型有正负之分,浮点型没有。printf中:%d对应整数类型,%c对应字符类型,%f对应浮点数类型,%p对应指针变量(打印地址为指针变量的地址)在C中语言:单个字符必须用单引号括起来,字符串用双引号括起来。字符串“abcde”,通过sizeof计算,实际占用6个字节,最后还有一个结束字符,即空字符'\0'。变量类型的隐式转换:默认的转换是向更高的精度和更广的范围。指针inta;诠释*p;指针变量p本身是指针类型,指针指向的变量是int类型,赋值时注意变量匹配。a:表示变量a本身p:表示指针&a:表示变量a的地址&p:表示指针p所在地址a:表示将a视为指针,a是指向的变量指针,这个变量的地址是一个Value(符号存在但不合法)*p:表示指针p指向的变量,这个变量的地址就是p的值。intmian(){inta=10;诠释*p;//定义一个指针p=&a;//这个指针指向变量a所在的地址。*p=111;//改变指针指向的地址的值,*p表示指针指向的变量printf("a=%d",a);//inputa=111return0;}指针和数组array首地址和数组首元素地址意义不同,但值相同。&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减1,表示p指向的地址向前或向后移动一位。intmain(){inta[5]={1,2,3,4,5};诠释*p;p=&a;//编译后会有警告,因为&a是数组的首地址,应该赋给一个数组指针。p=&a[0];p=一个;//当数组名a作为右值时,表示数组首元素的地址,即a[0]的地址。}结构和联合结构和联合的定义和用法是一样的。结构:它是多个属性的组合,每个属性都是独立的。union:是一个属性,但是有很多名字;也就是说,当联合体中的一个变量被赋值时,其他变量也会被赋值。//结构体定义structjiegouti{inta;字符b;floatc;};//联合体定义uniongongyongti{inta;字符b;浮动c;};宏定义和枚举宏定义:#defineN100例如:#defineN(100+10)注意:宏定义末尾没有分号,如果定义是表达式,必须加括号。使用宏定义来定义一年有多少秒:#defineS(3652460*60)UL最后的UL是强制类型转换,将表达式得到的结果转换为unsignedlong类型,因为计算结果超出了int的容忍范围。注意:定义枚举时,内部内容用逗号分隔。//定义一个枚举enumweek{1,2,3,};intmain(){enumweekday;//定义一个枚举变量(变量类型为enumweek}函数内部定义的变量为局部变量,只能在本函数中使用;函数外部定义的全局变量可以在本文件中使用。代码块:所谓代码块就是用{}花括号括起来的范围就是代码块作用域:局部变量的作用域作用域只在花括号内,如果定义的时候没有初始化,局部变量就是一个随机值,全局变量默认为0。编译器在编译代码时,是从前向后看的,所以全局变量的定义必须在开头定义(函数声明也必须在前面)静态局部变量static:static定义的变量只被定义当函数第一次被调用时,再次调用时不会被定义(类似于全局变量)。普通局部变量auto:auto可以省略。常量常量const:只能在定义时初始化赋值,其他时候不能赋值。现在有一个定义:inta=10;constint*p=&a;p是一个指向a的指针,这个定义意味着p指向的是一个常量,即a是一个常量。intconst*p=&a;p是一个指针,指向a,这个定义的意思就是p指向的是一个常量,即a是一个常量。int*constp=&a;p是一个指针,指向a,这个定义意味着p本身是一个常量,p指向的是一个变量,即a是一个变量。指针p是一个常量,也就是说它只能指向a,不能指向其他地方。constint*constp=&a;p是指向a的指针,这个定义意味着p和a都是常量。跨文件调用跨文件函数调用:在调用前声明这个函数(方法同在本文件中声明函数)跨文件普通全局变量调用:在调用前声明这个变量(使用extern,注意不能声明时进行初始化)局部变量不能跨文件使用。静态全局变量只能在本文件中使用,其他文件即使声明也不能使用,但其他文件可以定义同名变量(这样就解决了变量名重名的问题)。头文件引用如:#include尖括号<>:用于包含系统自带的头文件。双引号“”:用来包含我们自己写的头文件(.h文件)。自己写头文件的时候要注意防止重复包含。#ifndef__A_H__#define__A_H__//防止重复包含//在该区域写语句#endif