01-Linux命令和C语言基础

1 Linux开发环境搭建

1.1 虚拟机安装

1、安装VM Ware
2、安装ubuntu

分区 -- Linux没有盘符的概念
/ -- 5000M
/boot -- 系统启动过程中读取的重要文件
/swap -- 2000M,虚拟内存是物理内存的两倍左右
/home -- 常见的分区
  • Linux文件系统结构是通过文件夹管理的
  • 虚拟内存是一段硬盘空间,当作是内存使用

1.2 Linux文件与Windows文件传输

直接拖拽或者复制粘贴,如果不行执行下面命令

sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools
sudo apt-get install open-vm-tools-desktop

2.文件和目录相关命令

2.1 Linux文件系统结构

  • Linux系统是一个分层的树形组织结构

  • Filesystem Hierarchy Standard(文件系统层次结构标准)
  • Linux是开源软件,各个linux发行机构都可以按照在即的需求对于文件系统进行剪裁,所以众多的linux发行版本的目录结构也不尽相同。为了规范文件目录命名和存放标准,Linux基金会颁发了FHS(Fliesystem Hierarchy Standard)

2.2 命令

pwd -- 显示路径

ls -- 显示当前文件下文件
ls /home(可以加目录) 
ls -a -- 不忽略点开头的文件(隐藏文件)
ls -l -- 用长格式方式显示,权限、用户、大小
ls -l /bin
ls -R 目录 -- 递归显示目录

df -T 显示文件系统的信息
  • ctrl+shift+t,新建一个终端窗口
  • rwx -- 读写执行,-表示无权限,权限通常有9位,三种用户各占3位(创建者,同组用户,其他用户)
  • Linux系统下插入U盘,引入一个新的目录结构
df -T -- 显示文件系统的信息
// 增删改查
cat test.c -- 显示在屏幕中
cat -s 多个空行合并成一个空行显示
cat -b 多加行号显示

nl test.c -- 加行号显示

vi test.c

cp test1.c test4.c
cp test.c /home/evan/test

cp -rf 文件夹/文件 文件目录

mv test.c test1.c -- 重命名
mv test.c ../test3.c -- 移动并重名名
mv -rf 文件夹 文件目录

touch 文件 -- 创建文件
touch 已经存在的文件 -- 修改时间戳

rm 文件
rm -rf 文件夹

mkdir 文件夹名称
mkdir -p 多级文件夹

3.vi编辑器

vi是一个编辑环境,有三种模式

:w -- 保存
:q -- 退出没有修改的文件
:q! --强制退出,不保存修改过的部分
:x -- 保存并退出
:wq -- 保存并退出
:w test1.c -- 另存为文件
:r file -- 读入其他文件的内容

a -- 光标之后
i -- 光标之前
o -- 插入一个新的行
A -- 行尾插入
I -- 行首插入

:! -- 执行外部命令,按enter键返回
// 拷贝粘贴
ndd -- 表示剪切n行
nyy -- 复制n行
p -- 粘贴在行下
P -- 粘贴在上面
nx -- 删除n个从光标开始的字符
u -- undo撤销操作
// 一些高级操作
// vi 光标的命令
h,l,j,k -- j,k光标上下移动,h,l光标左右移动
gg -- 返回首行
1G -- 返回首行
nG -- 到第一行
G -- 返回最后一行

:set nu -- 显示行号
:set nonu -- 不显示行号

// 查找
/string -- 查找内容
n -- 向下查找
N -- 向上查找
支持正则表达式

// 替换

:10,20s/str1/str2/g -- 在10,20行内用str2替换str1,g表示全部替换
:1,$s/man/MAN/g -- 全文替换
:%s/man/MAN/g -- 全文操作
:s/man/MAN/g -- 不写范围,就是指的是当前行
:s/man/Man -- 不加g表示替换第一个
:10,15s/man/MAN/g 

y0 -- 从光标复制到行首
y$ -- 从光标复制到行尾
d0 -- 从光标剪切到行首
d$ -- 从光标剪切到行尾

// 块复制,删除
:118,125y -- 复制118,125行复制
:118,$d -- 删除118行之后的所有行

4.基础知识

计算机基本结构
一.冯诺依曼模型

  • 计算机硬件由五部分构成
  • 存储程序的思想:系统的运行过程就是按照一定的顺序不断执行存储器中的程序指令的过程

    二.存储器分类
  • 主存储器及内存,程序中待处理的数据和处理的结果都存储在内存中
  • 外存储器是用来长期保存数据的大容量存储器
  • 寄存器是CPU内部的高速存储器,速度快,数量少
    三.程序
    广义上讲,为了实现一个特定的目标而预先设计的一组操作的工作步骤,称之为一个程序
    程序就是系统可以识别的一组有序的指令,程序存储在磁盘上,被加载到内存中执行
    四.程序设计语言的发展
    1.机器语言,直接使用机器指令01序列来设计程序,可以被计算机系统直接识别
    2.汇编语言,把机器指令符号化,即通过一组简单的符号来表示机器指令
    3.高级语言,和特定的计算机系统无关,更接近于人类自然语言,一条语句对应多条机器指令
    五.程序设计步骤
    编辑--编译,链接-执行,调试

5.数据的表示

一.计算机数据表示
送入计算机的数字,字母,符号等信息必须转换成0,1组合的数据形式才能被计算机识别
能够进行算术运算得到明确数值概念的信息,是计算机数值数据,其余的信息称为非数值数据
二.数值数据的表示
十进制\八进制\二进制\十六进制
三.原码\反码\补码
四.非数值型数据表示
字符的存储,ASCII表

6.程序编译和调试

gcc(GNU Compiler)是GUN推出的多平台编译器,可以将C,C++源程序编译连接成可执行文件支持以下后缀文件

.c -- c语言源代码
.h -- 程序所包含的头文件
.i -- 已经进过预处理的c源代码
.s -- 汇编语言源代码文件
.o -- 编译后的目标文件
//编译输出可执行文件
gcc -o hello hello.c
-o 输出可执行文件
-c 只要求编译器输出目标代码(.o文件),而不必输出可执行文件
-g 用于调试
./hello 查看输出结果

gcc -o hello hello.c -Wall 

gcc -o hello.c  没有指定输出文件,默认文件名就是a.out

__FILE__  -- %s -- 显示文件
__LINE__ -- %d -- 哪一行
__FUNCTION__ -- %s ,哪个函数

7.数据结构与算法

算法的概念:解决问题采取的方法和步骤就称之为算法

gcc作为一个交叉编译器,如何生成ARM平台的执行程序

本文转载于网络 如有侵权请联系删除

相关文章

  • 扩展现实(XR)远程研究:缺点和机会的调查(CS HC)

    诸如虚拟现实和增强现实之类的扩展现实(XR)技术现已广泛用于人机交互(HCI)、社会科学和心理学实验中。然而,这些实验主要是共同在场的研究人员在实验室内进行的。尽管非XR研究的远程方法取得了成功,但在没有共同研究人员在场的情况下,远程实验并没有蓬勃发展。本文总结了对46位XR研究人员进行的30个项目的调查结果,以了解远程XR实验的局限性和好处。我们的主题分析确定了非XR远程研究中常见的问题,例如参与者招募,以及XR特定的问题,包括安全性和硬件可变性。我们确定了XR技术潜在的积极优势,包括利用HMD内置的数据收集功能(例如手、注视跟踪)以及实验装置的便携性和可再现性。我们建议将XR技术概念化为一种交互式技术和一种适合远程实验的功能强大的数据收集设备。原文题目:ExtendedReality(XR)RemoteResearch:aSurveyofDrawbacksandOpportunities原文:ExtendedReality(XR)technology-suchasvirtualandaugmentedreality-isnowwidelyusedinHumanComputerInt

  • 1/3 的软件测试从业者,孤军奋战且薪资下降 。

    接着上一篇文章<2019年软件测试从业者生存现状报告>,继续聊。注:此系列文章,是基于2019年末的问卷调查数据;基于数据,反推结论;以及,验证数据得出的结论,与你的过往感知是否一致。1.先看看测试团队规模: 从结果来看,65%的软件测试从业者,所在的测试团队,人员少于15人。甚至有32.4%的软件测试从业者,所在测试团队人数少于5人;可以理解为,团队就那么1-2人,甚至自己一个人孤军奋战;任何问题自己解决,遇到问题自己摸索,没人带;太难了。 另外,也说明一个结论:如果你所在的公司,测试团队15人以上,那么已经不错了;15人的编制,已经可以安排1-2人的测开小团队,做测试开发工作了;服务于测试团队,赋能于所有的业务测试工程师,提升效率,提升测试团队综合竞争力。 另,大于100人的软件测试团队,占比4.6%,基本上就那几个大厂了; 2.再来看看这份数据,将近30%的从业者,2019薪资没涨,甚至薪资下降。 说到薪资下降,不得不提裸辞的问题;之前,老徐的文章,反复建议,别裸辞;但,还是有很多同学,冲动或者被迫离职(公司倒闭/部门裁员等);离职后,久久找不到满意的工作,甚至有闲置

  • JAVA | Spring + quartz 实现定时任务

    前言很久不见,因为忙着泡妞,断更了一个月,实在是罪过。废话不多说,最近在工作中遇到了使用quartz实现定时任务的需求。写出来分享给大家,权当笔记。Spring+quartz实现定时任务因为在开发中遇到的是非Maven的老项目,所以先介绍这种方式。这种实现方式更多的是xml的配置。首先在lib目录下加入quartz这l两个jar包 quartz.jarScheduler(任务调度器)的配置 在applicationContext.xml加入Scheduler的配置<beanid="MyScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <propertyname="triggers"> <list> <refbean="MyTriggers"></ref> </list> </property> <propert

  • greenplum gptransfer命令使用

    12.2gptransfer命令使用12.2.1gptransfer介绍详细请查看官网介绍: https://gpdb.docs.pivotal.io/510/utility_guide/admin_utilities/gptransfer.html 或查看中文文档: https://gp-docs-cn.github.io/docs/admin_guide/managing/gptransfer.html复制12.2.2gptransfer命令参数介绍gptransfer参数详细介绍请查看: https://blog.csdn.net/xfg0218/article/details/90233815 $gptransfer--help gptransfer {--full| {[-d<database1>[-d<database2>...]]| [-t<db.schema.table>[-t<db1.schema1.table1>...]]| [-f<table-file>[--partition-transfer|--pa

  • Navicat连接远程数据库报1251的错误

    mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。解决问题方法有两种:方法1.升级navicat驱动;(我官网下载目前最新的Navicat12forMySQL是可以直接连上的)方法2.把mysql用户登录密码加密规则还原成mysql_native_password.这里采用方法2解决,具体操作步骤如下:用如下命令查看用户信息,看pluginselecthost,user,plugin,authentication\_stringfrommysql.user;复制用如下命令修改密码ALTERUSER'root'@'%'IDENTIFIEDWITHmysql\_native\_passwordBY'newpassword';复制这样回到客户端就可以成功连接了(我没有用FLUSHPRIVILEGES命令刷新权限也可以)

  • OpenStack 系列之Manila install and using the Virtualenv

    今天继续分享下Manila系列文章知识,之前两篇博文一个是Manila详解,一个是ManilaforCentos的安装部署,今天呢我们采用PythonVirtualenv的模式来安装Manila服务:)。什么是Virtualenv?Virtualenv是Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpreter,而不用与其他Python程序共享统一个library和interpreter。虚拟环境的好处是避免了不同Python程序间的互相影响(共同使用globallibrary和interpreter),例如程序A需要某个库的1.0版本,而程序B需要同样这个库的2.0版本,如果程序B执行则A就不能执行了。为什么使用Virtualenv?很多人会问为什么会采用ManilaforVirtualenv,因为避免不了有时候OpenStack组件版本不一致的情况,之所以这样是因为ManilaL版本功能开始逐渐健全并完善的,而云平台OpenStack组件版本相较于L版来说老一些,毕竟生产环境还是不能跟随社区版本发布而更新的,求稳为主,所以这时候就出现了

  • 玩转3D Swiper美女性感秀之思路分析

    CSS3玩转3DSwiper性感秀之思路分析总结前言  继一次的3D魔方之后,这次利用CSS3的transform、translate、rotate、preserve-3d等结合JS的requestAnimationFrame、class带你一起玩转性感美女秀,正常套路,请先一堵为快,有兴趣继续,没兴趣也可以看看美女养眼哦?!想直接在线预览?3DSwiper实例展示这里是@IT·平头哥联盟,我是首席填坑官∙苏南,用心分享做有温度的攻城狮。 群:912594095回顾:  看过上次的3D魔方的同学对于本次的分析会有一定的帮助,当然如果大佬您本身就对css3就已经玩的很666了,那么对于下文的分解就请扮演老师的角色吧,小弟如有不足之处,欢迎斧正。CSS3·画出最懂你的3D魔方Canvas·手把手教你如何绘制一辆会跑车解析:创建列DIV:从上图中我们能看出,每次旋转的动画是由多列小卡片组成的;每列根据它的下标,对背景进行位移,做到拼接的效果,整体看起来就成了一张图一起来看一下真像是啥样的:旋转的动画是由多列小卡片组成colNode(){ //生成列的节点 for(vari=0;i<th

  • Shiro框架02权限认证+MD5加盐加密+散列1024+Hex/Base64(源码)

    目1.导入基于Shiro的数据库脚本2.引入依赖(shiro-1.4.1)3.自定义Realm注1:体系结构见“shiro提供的realm.png”​编辑4.Spring与Shiro集成5.修改web.xml文件,添加shiroFilter的配置6.实现Shiro身份认证登录7.盐加密(MD5+散列1024+Hex/Base64)1.导入基于Shiro的数据库脚本 t_sys_user:用户信息表,例如:zs,ls,ww  t_sys_role:用户角色表,例如:普通员工,x项目经理等等  t_sys_permission权限信息表,例如:做自己的工作、做自己的工作及管理整个部门,做自己的工作及管理这个公司  t_sys_user_role用户角色表  t_sys_role_permission角色权限表(一个角色对应多个权限)  关联关系:              用户与角色                       角色与权限用户-------------------------------------------------------角色------------------

  • linux配置ssh互信

                                        linux配置ssh互信 公钥认证的基本思想: 对信息的加密和解密采用不同的key,这对key分别称作privatekey和publickey,其中,publickey存放在欲登录的服务器上,而privatekey为特定的客户机所持有。当客户机向服务器发出建立安全连接的请求时,首先发送自己的publickey,如果这个publickey是被服务器所允许的,服务器就发送一个经过publickey加密的随机数据给客户机,这个数据只能通过privatekey解密,客户机将解密后的信息发还给服务器,服务器验证正确后即确认客户机是可信任的,从而建立起一条安全的信息通道。通

  • Elasticsearch配置详解、文档元数据

    目录   返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解   a.在上面博客中,我们已经安装并且成功配置了Elasticsearch以及部分插件,接下来我们就需要看看Elasticseach的配置文件的信息以及文档的一些说明。   b.首先找到Elasticsearch的安装位置,跳转到elasticsearch的config文件夹下,在此文件夹下含有两个配置文件:elasticsearch.yml和logging.yml,第一个是Elasticsearch的基本配置文件,第二个是日志配置文件,Elasticsearch是使用log4j来记录日志的,所以logging.yml里的设置按普通的log4j配置文件夹来设置即可。下面我们主要来说一下elasticsearch.yml文件中的配置信息。   c.文档说明采用写备注的方法来说明elasticsearch.yml文件,Elasticsearch的版本是:2.3.1。     c.1 cluster.name: 

  • C# File.Exists 判断系统文件,警惕32位和64位的差异

    今天在调试一个Winform程序,使用File.Exists判断一个已经存在的驱动文件,程序一直返回false。因为驱动文件属于系统目录,心想难道是权限不够导致的?然后用管理员身份运行软件,依然返回false。吓的我赶紧去系统目录C:\Windows\system32\drives搜索该文件,一看在这里啊,怎么还是返回false。开始还以为VS出问题了,然后尝试判断一个D盘下的文件,发现可以判断成功。 判断代码如下 //获取系统目录 varsystem=Environment.GetFolderPath(Environment.SpecialFolder.System); varfilePath=system+@"\drivers\evserial7.sys"; varflag=File.Exists(filePath); MessageBox.Show("系统路径:"+filePath+"\r\n"+"checkDrives:"+flag);复制 运行结果 在系统中找文件确实存在,如下图 奇怪在于当我把程序设置成Release运行的时候判断又成功了,第一张图Debug运行的,

  • tracer ftrace笔记(10)—— trace内容分析

    基于Linux-5.10 一、trace打印格式 1.在把rawtrace数据格式化成用户可读的形式时,trace数据分成两部分:一部分是common信息,一部分是用户自定义的trace信息,这两部分分开格式化。 common信息:这部分有系统根据当前是“Normalformat”还是“Latencytraceformat”,选择使用trace_print_context()或者是trace_print_lat_context()函数来进行格式化。 用户trace信息:这部分根据type字段找到对应的trace_event结构,根据其event->funcs->trace()函数来进行格式化。遵循谁存储谁解析的原则,由TRACE_EVENT的TP_printk参数决定。 以#cat/sys/kernel/tracing/trace为例, trace_create_file("trace",0644,d_tracer,tr,&tracing_fops); tracing_fops.read seq_read//读操作实际最后落在tracer_seq_ops的s_n

  • ionic安装开发环境

    依旧是使用CNPM安装    1,安装cnpm npminstall-gcnpm--registry=https://registry.npm.taobao.org   2,安装ioniccordova cnpminstall-gcordovaionic  如果出现错误用git安装上面步骤   3,安装空模版 不要在npm下载去github下载   4,空模版添加配置文件ionic.config.json   {"name":"simp","app_id":""}复制   5,安装依赖cnpminstall 这就安装好了!!

  • vhosts

    #VirtualHosts##Requiredmodules:mod_log_config #Ifyouwanttomaintainmultipledomains/hostnamesonyour#machineyoucansetupVirtualHostcontainersforthem.Mostconfigurations#useonlyname-basedvirtualhostssotheserverdoesn'tneedtoworryabout#IPaddresses.Thisisindicatedbytheasterisksinthedirectivesbelow.##Pleaseseethedocumentationat#<URL:http://httpd.apache.org/docs/2.4/vhosts/>#forfurtherdetailsbeforeyoutrytosetupvirtualhosts.##Youmayusethecommandlineoption'-S'toverifyyourvirtualhost#configuration. ##Vi

  • c语言指针的数据类型

    在c语言中一个变量的数据类型与其指针的数据类型应保持一致,如果不一致,应对变量进行数据类型转换 例 int a; int*i=&a; char*j=&a; 第三行语句是错误的 应该改为char*j=(char*)&a;  

  • 编程素养Day009

    Q1:JavaScript编程题 null和undefined的区别? 【分析】 undefined类型只有一个值,即undefined。当声明的变量还未被初始化时,变量的默认值为undefined。null类型也只有一个值,即null。null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。 Q2:MySQL编程题 表名students 查询出只选修了一门课程的全部学生的学号和姓名。 【分析】先将学生学号、姓名进行分组,计算他的选课数量,如果选修的是一门课程,则选出来。 SELECTsno,username,count(course)不能少!!!复制 代码如下: SELECTsno,username,count(course)FROMstudents GROUPBYsno,username HAVINGcount(course)=1;复制 Q3:Java编程题 打印出所有的「水仙花数」,所谓「水仙花数」是指一个三位数,其各位数字立方和等于该数本身。 例如:153是一个「水仙花数」,因为153=1的三次方+5的三次方+3的三次方。 packagetest; p

  • 2021寒假每日一题《明明的随机数》

    明明的随机数 题目来源:NOIP2006普及组 时间限制:\(1000ms\)内存限制:\(64mb\) 题目描述 明明想在学校中请一些同学一起做一项问卷调查。 为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数,对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。 然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。 请你协助明明完成“去重”与“排序”的工作。 输入格式 输入文件包含2行,第1行为1个正整数,表示所生成的随机数的个数:N 。 第2行有N个用空格隔开的正整数,为所产生的随机数。 输出格式 输出文件也是2行,第1行为1个正整数M,表示不相同的随机数的个数。 第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。 数据范围 \(1≤N≤100\) 样例输入 10 2040326740208930040015 复制 样例输出 8 152032406789300400 复制 解题思路 用一个List<Integer>存放数据,读入的时候判断list内是否已经有此元素,如果有,则不进行录入;如果没有,则

  • 入手《C#入门经典(第6版)》,据说今天是读书日

    亚马逊上买的,75.3RMB,放进心愿单那么久都没人送我,太杯具了。为了表扬自己学习完前7章内容,提高后面的学习效率和质量,果断入手,嘿嘿。 预防自己买了书就不看的毛病,下定决心,每天阅读2-3小时。 后面做笔记的话,可能就会很少在博客上写了,感觉对加深印象没有多大的帮助,可能记在书上会好一些。等学完一些内容后,做些小例子,再放上来,写点描述性的东西,这样或许要好些~~~

  • CF246E Blood Cousins Return 题解

    一道线段树合并的题,照理来说这道题思路不值得我写题解但是写法值得。 应当说对于深度问题线段树合并可以乱杀,对于这道题每个节点维护一棵关于深度的线段树,每个叶子节点维护一个set表示当前这个节点子树内该深度的名字组成的set,注意深度是全局深度,合并时采用启发式合并。 然后就是写法问题。 线段树合并有两种常见的写法: 一种是直接动态开点即每次合并时都开新点然后用新点来维护合并的两个点的信息,即若当前要将\(p2\)合并到\(p1\)上那就新开一个点\(p\)代替\(p1\)。 该做法优势是可以在线查询,不需要提前离线存询问,但劣势是空间开销较大,偶尔会被卡空间/MLE。 一种是就将\(p2\)合并到\(p1\)上,不重新动态开点。 该做法优势是空间开销较小,但劣势是必须提前离线所有询问,对于每一个点,做完这个点的合并后必须即刻回答询问,否则会因为一个点被多次修改导致答案错误。 正常来讲这两种写法都能过题,但是对于这道题叶子节点的合并复杂度不是\(O(1)\),需要启发式合并,所以不能采用第一种做法(第一种做法会TLE)。 GitHub:CodeBase-of-Plozia Code: /

  • 理解内存对齐

    原文地址:https://blog.fanscore.cn/p/24/ 相信大家都听说过内存对齐的概念,不过这里还是通过一个现象来引出本篇话题。 一、求一个结构体的size 猜下下面这个结构体会占用多少字节 typeSstruct{ Bbyte//Go中一个byte占1字节,int32占4个字节,int64占8个字节 I64int64 I32int32 } 复制 是不是以为是1+8+4=13个字节?写段代码验证下: typeSstruct{ Bbyte I64int64 I32int32 } funcmain(){ s:=S{} fmt.Printf("ssize:%d\n",unsafe.Sizeof(s)) } 复制 输出: ssize:24 复制 与预想显然不同,这是为什么呢?答案是编译器替我们做了内存对齐。 二、什么是内存对齐 要理解这个问题需要先了解一下字长的概念以及内存的物理结构 2.1字长 在计算器领域,对于某种特定的计算机设计而言,字(word)是用于表示其自然的数据单位的术语。在这个特定计算机中,字是其用来一次性处理事务的一个固定长度的位(bit)组。一个

  • 关于Vue中,父组件获取子组件的数据(子组件调用父组件函数)的方法

    1.父组件调用子组件时,在调用处传给子组件一个方法 :on-update="updateData"   2.子组件在props中,接收这个方法并声明 props:{  onUpdate:Function }   3.子组件中,需要通知父组件时,调用onUpdate这个方法,并传入参数data this.opUpdate(data)   4.父组件中,通过updataData方法,获取到子组件传过来的data,并做以操作 updateData(data){  //这里可以使用子组件传过来的数据data  //也可以放子组件需要调用的父组件方法 }

相关推荐

推荐阅读