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