开发环境配置和Ubuntu基础知识(1)

I 环境配置

交叉编译器直接安装的指令:sudo apt-get install gcc-arm-linux-gnueabihf
在这里插入图片描述

II 常用命令

在这里插入图片描述

III 其他

1 软件安装

1:apt

sudo apt-get install 软件名

2:deb安装包

sudo  dpkg  -i  deb安装包 
ubuntu的应用图标在 "/usr/share/applications" 这个目录下,可以将图标拷贝至桌面下。

3:编译源码安装

下载源码
进入下载文件夹
下载的文件夹内一般会提供帮助文件
在文件夹内按帮助文件提供的命令顺序执行即可
(配置、make 、make install)

4:卸载

apt-get remove   、只删除软件包,不删除配置文件
apt-get purge    、删除软件包并删除配置文件

2 文件系统结构

在这里插入图片描述

3 磁盘管理

1:U盘/SD卡 挂载卸载

U盘/SD卡选用FAT32格式,避免NTFS,exFAT格式。

挂载:
sudo fdisk -l                                                       、查看已经识别的磁盘分区等信息
cd /mnt 
sudo mkdir /mnt/usb     										    、在mnt下创建名为usb的文件夹作为挂载点(挂载多个磁盘或多个分区需要再新建立文件夹)
sudo mount -t vfat -o iocharset=utf8 /dev/U盘名分区名    /mnt/usb   	、以utf-8格式挂载,汉字就不会乱码

df  -h                    、查看是否已经挂载成功

sudo umount /mnt/usb      、卸载U盘

PS:如果卸载时候显示正忙无法卸载的解决办法:
sudo spt-get install psmisc
sudo fuser -mv /mnt/usb/
sudo fuser -kv /mnt/usb/

2:对U盘进行分区操作

sudo fdisk -l         、查看磁盘分区等详细信息  例如 sda1  sda:磁盘名 1:分区名
sudo fdisk /dev/sda   、对磁盘sda进行操作
{
	m                   、帮助
	d1                  、删除第一个分区
	wq                  、保存并退出
	n				    、建立新分区:这里以建立1G的分区为例
	  {
	  	p/e           : 主分区还是扩展分区  p
	  	(1~4)         : 分区号             1(如果走默认的话直接回车就可以了)
	  	(2048~*)      : 第一个扇区         2048
	  	(2048~*)      : 最后一个扇区       2099200 或 +1G
	                                               若分区大小为1GB :1024*1024*1024  =  1073531824B, 1073531824B / 512B(一个扇区512B)  = 2097152 个扇区,2097152 + 2048个扇区(因为第一个扇区是2048) = 2099200 
	    
	  }
}

3:格式化分区

sudo mkfs -t vfat /dev/sda1         、格式化sda磁盘1分区的格式为fat

4 压缩与解压

1:Linux下常用压缩格式

.tar  、仅打包,不改变文件包大小。
.tar.bz2  、高压缩时间,高压缩率
.tar.gz   、低压缩时间,低压缩率

对一个目录下有多个文件 的 压缩过程:打包-》压缩
对一个已经打包的压缩文件 的 解压过程:解压-》解包

2:打包工具“tar”

tar -vcf  新文件名.tar   操作对象名  、打包并显示过程(v)
tar -vxf  操作对象名.tar  、解包并显示过程(v)

3:压缩工具“gzip”-.gz

gzip 文件名 、压缩该文件,原文件会消失
gzip -d 文件名 、解压缩
gzip -r 目录名 、递归压缩,将此目录下所有文件进行压缩,而并不是打包后压缩
gzip -rd 目录名 、递归解压缩,将此目录下所有压缩文件进行解压缩。

4:压缩工具“bzip2” -.bz2

bzip2 文件名  、压缩该文件,原文件会消失
bzip2 -d 文件名  、解压缩

linux也支持rar zip等格式压缩

5 用户管理

1:用户种类

root用户
普通用户

2:用户信息的存放位置

sudo vim  /etc/passwd  

3:UID

sudo vim  /etc/passwd 
每一个用户都有一个ID叫UID
例如pi用户:
pi:x:1000:27:,,,:/home/pi:/bin/bash
1000:用户ID
27:组ID

4:用户组

sudo vim  /etc/group   、查看用户所属组,一个用户可以属于多个组

5:创建用户/组

sudo adduser 用户名   、创建用户
sudo finger 用户名    、查看用户信息 (需要安装:sudo apt-get install finger)
pssswd 用户名         、修改用户密码
sudo deluser 用户名   、删除用户

sudo addgroup 组名    、创建用户组
groups   用户名       、显示该用户的同组成员
sudo delgroup 组名    、删除

sudo usermod -G 组名 用户名 、将已有用户添加到已有组

6 文件权限

1:- — --- —

ls -l 查看文件详细信息
第一个字母,代表文件类型:- 常规文件,即file
					    d 目录文件
					    b block 块设备文件,如硬盘等
					    c character 字符设备文件
					    i symbolic link 软链接文件
					    p pipe 命名管道文件
					    s socket 套接字文件,用于实现两个进程进行通信
对于常规文件:可分为二进制文件,xml文件,db文件等,可使用file命令具体查看
对于设备类文件:通常情况下,在使用ls -l 时,第五列会显示当前文件的大小,但
               在设备类文件会有两个数字,以逗号间隔,它们并不是表示大小,
               第一个数字:主设备号,用于区分设备类型
               第二个数字:次设备号,用于区分同种类型设备的不同设备,如:硬盘1,硬盘2
3*3 九个字母
用户权限u-组内成员权限g-其他人权限o
r:读
w:些
x:可执行

2:修改文件权限

sudo chmod  用户权限(数字) 组权限(数字) 其他人权限(数字)  文件 

rwx
7:全部权限
6:rw
5:rx
4:r
3:wx
2:w
1:x
0:无

3:修改文件所属用户

sudo chown root  文件名      、修改文件用户为root
sudo chown .root 文件名      、修改文件用户组为root
sudo chown root.root 文件名  、同时修改

sudo chown -r                、r表示递归,可以修改整个目录的所属用户/组

7 软/硬链接

1:软链接,相当于快捷方式

 ln  -s  快捷方式名 原文件名(原文件要用绝对路径/,而且拷贝快捷方式时候用cp -d)  、创建软连接
 ln  -sf 、强制创建

2:硬链接,通过文件系统的inode链接产生新的文件名,而不是新文件。
概括:硬链接一改则全改,全删才真删。

inode:记录文件属性,linux下一切皆文件,一个文件有一个inode,它相当于文件的ID,查找文件
       的时候要先找到inode,然后才能读取出来文件的内容。
1对于硬链接文件,只有删除了原文件,和全部的硬链接文件,文件实体才会被删除。
 所以可以应用此原理创建硬链接,防止文件被误删除
2无论修改,源文件,还是它的硬链接文件,文件的数据都会被修改
3硬链接不能连接到目录
4硬链接不能连接不同的文件系统
--由于以上限制,所以硬链接并不常用       
ln 硬链接名 源文件  、创建硬链接
ls -i              、查看文件的inode

8 vim

vim是vi编辑器的升级版,支持了方向键操作等
在这里插入图片描述

9 多文件编译辅助工具 make

0:引言

有五个文件:calcu.c calcu.h input.c input.h main.c
如果直接用gcc编译:
				gcc -o  main   main.c calcu.c input.c
一旦文件多起来就会很麻烦
而且无论你修改不修改文件,所有的文件都会重新编译。浪费时间。

1:make

make并不是编译器,它会使用gcc编译器去编译代码。
代码发生改动后,仅再次编译 代码发生改动的 源文件或头文件,以减少编译时间。
make工具通过一个称为Makefile的文件来完成并自动维护编译工作,Makefile文件描述了整个工程的编译、连接规则。
若 Makefile已经写好,在文件夹内直接输入命令make即可多文件编译

2:Makefile

Makefile 由特定的语言格式组成,且Makefile和c文件时出于同一目录下的,如引言中的例子需要这样:

main: main.o input.o calcu.o            \main可执行文件依赖:main.o input.o calcu.o
	gcc -o main main.o input.o calcu.o  \依赖如果没有被更新,从这往下的命令都将不会执行
main.o: main.c                          \.o依赖.c
	gcc -c main.c                       \.o是怎么生成的
input.o: input.c
	gcc -c input.c
calcu.o: calcu.c
	gcc -c calcu.c
	
clean:								  \清除工程指令,输入make clean 即可
	rm *.o
	rm main

3:Makefile基础语法

目标···...:依赖文件集合······
	命令1
	命令2
目标···...:依赖文件集合······
	命令1
	命令2
从最开始往下读目标(a),
首先看目标(a)的依赖(a1)在不在,
如果都在就执行命令,
如果不在就去下面找,看看有没有生成这个依赖(a1)的目标(b),
而这个目标(b)可能还会有依赖(b1)   。。。就这样一直找
宏替换:

hong = main.o input.o calcu.o
main: $(hong)
	gcc -o $(hong)
通配符与自动化变量:

main: main.o input.o calcu.o            
	gcc -o main main.o input.o calcu.o  
%.o: %.c                               \%是通配符 有冒号冒号左右同步            
	gcc -c  $<                         \$< 是一种自动化变量 自动匹配,害就是偷懒用的
	
clean:								  
	rm *.o
	rm main

伪目标:

clean:								  \名称独立,不要与文件夹内任何东西重名,这就是个伪目标
	rm *.o							  \输入 make 为目标名 就会执行目标下的命令
	rm main

10 shell脚本

PS:shell 脚本对空格很严格
运行设立了脚本要为它提供可执行权限
扩展名:.sh

1:打印hello world

#!/bin/bash
echo "hello world!"

2:交互

#!/bin/bash
echo "please input name"
read name                #读取键盘输入
echo "your name:" $name
#!/bin/bash
read -p "input your age and  height:" age height #读取多个值,并提示信息.
echo "your age is $age , your height is $height" 

3:数值计算

#!/bin/bash
read -p "first:" first
read -p "second:" second
total=$(($first+$second)) #不能有空格:total=%
echo "$fdirst + $second = $total" 

4:test 命令
查看文件是否存在

#!/bin/bash
read -p "input file name:" name
test -e $name && echo "exist" || echo "not exist"
#test -e可以查看某个文件是否存在,是返回值为1
#上面这句话的意思就是 文件存在输出 exist 不存在输出 not exist

比较字符串是否匹配

#!/bin/bash
read -p "input  name1:" name1
read -p "input  name2:" name2
test   $name1 == $name2 && echo "equal" || echo "not equal"

5:[空格 判断符 空格]

#!/bin/bash
read -p "input  name1:" name1
read -p "input  name2:" name2
[ "$name1" == "$name2" ] && echo "equal" || echo "not equal"
#[]内字符串必须加双引号

6:默认变量

#!/bin/bash
 echo "file name" $0       #脚本名字
 echo "total param num"$#  #有多少参数
 echo "whole param "$@     #整个参数内容
 echo "first param "$1     #第一个参数
 echo "second param "$2    #第二个参数

——》
windoo@windoo-VirtualBox:~/桌面$  ./a.sh a b
file name $0      
total param num 2 
whole param a b
first param a
second param b

7:条件判断语句
if

#!/bin/bash
read -p "please input(Y/N):" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
	echo "your input is YES"
	exit 0
fi
if [ "$value" == "N" ] || [ "$value" == "n" ]; then
	echo "your input is NO"
	exit 0
fi

if else

#!/bin/bash
read -p "please input(Y/N):" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
	echo "your input is YES"
	exit 0
else
	echo "your input is $value"
	exit 0
fi

if elif else

#!/bin/bash
read -p "please input(Y/N):" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
	echo "your input is YES"
	exit 0
elif [ "$value" == "N" ] || [ "$value" == "n" ]; then
	echo "your input is $value"
	exit 0
else
	echo "your input is $value"
	exit 0
fi

case

#!/bin/bash
read -p "please input 'a' or 'b' :" value
case $value in

	"a")
	echo "is a"
	;;
	
	"b")
	echo "is b"
	;;
	
	*)
	echo "please input 'a' or 'b' !!"
	;;
esac

8:函数

#!/bin/bash

function help(){
    
    
	echo "this is help cmd!"
}
function close(){
    
    
	echo "this is close cmd!"
}

case $1 in #$1是第一个参数,上文提到过

	"-h")
	help
	;;
	
	"-c")
	close
	;;
	
	*)
	echo " what are you doing???"
	;;
esac

函数传参

#!/bin/bash

print(){
    
    
	echo "first:$1"
	echo "first:$2" #注意!函数内的$1 $2 和脚本参数的$1 $2 是两个东西
}
print a b 

9:循环

#!/bin/bash
while [ "$value" != "close" ]
do
	read -p " My son, please input close :" value	
done
echo "oh my gentle son!"
#!/bin/bash
for fruit in banana apple orange pear
do
	echo "lucky fruit : $fruit"
done
#!/bin/bash
read -p "please in put a num:" num
total=0
for ((i=0;i<=num;i=i+1))
do
	total=$(($total+$i))
done

echo "$num! = $total"

IV 补充

1、显示隐藏的目录(文件夹)

众所周知,linux下以.开头的文件会被隐藏,图形化界面下用快捷键:ctrl+H,命令行直接ls -a

猜你喜欢

转载自blog.csdn.net/helloworld573/article/details/106462382