Linux的指令和shell指令

vim指令

● 模式切换
插入模式
1)i 进入插入模式,光标前
2)a 进入插入模式,光标后
3)I 行首
4)A 行末

命令模式:ESC
末行模式:shift + ;
1)w 存盘
2)wq 存盘退出
3)q! 不存盘退出

删除行:dd
翻页:ctrl + f(上一页) ctrl + b(下一页)
复制行:yy
粘贴:p
撤销上一步的操作:u 
恢复上一步被撤销的操作:Ctrl+r 

● 文本搜索
?pattern Enter
n 朝同一方向搜索
N 朝相反方向搜索

其他指令


清空命令行:reset

文件操作:
显示列表
ls -l 
ls -la 所有
ls -l ja* 通配符查找

创建文件
touch today.c

复制文件
cp src.txt dest.txt
cp -i src.txt dest.txt 询问
cp src.txt . 复制到当前目录
cp -R 目录 dest 复制整个目录到指定路径
cp c_?1 ../  通配符复制到上级目录

删除文件
rm file

删除目录
rm -rf 目录

查看文件类型:
file 文件

查看文件内容:
cat file
cat -n file 显示行号

查看文件最后10行
tail -n 10 file
查看文件最开始的10行
head -n 10 file

创建用户
useradd -m jack 创建用户的同时,创建了home目录
userdel -r jack 删除用户

创建组
groupadd androidgroup
分配用户到组
usermod -G androidgroup jack

文件权限
r读 w写 x执行
drwxr-xr-x
d rwx r-x r-x
d目录
1.文件所属用户具备的权限(root对该文件具备读写执行权限)
2.文件所属用户的所属组具备的权限(读、执行)
3.系统的其他用户具备的权限(读、执行)

rwx必须是固定顺序

权限		二进制		八进制
---			000			0
--x			001			1
-w-			010			2
-wx			011			3
r--			100			4
r-x			101			5
rw-			110			6
rwx			111			7

修改文件权限
chmod 644 file
给用户加上执行权限
chmod u+x file

改变创建目录的默认权限
umask 026

777-026

改变文件的所属
chown user.group file
chown user file
chown .group file

----------------------shell脚本
输出
echo 

#!/bin/bash                                                                 
NDK=10
text="i love shell"

#命令的执行结果的输出作为变量的值
text1=`date`
text2=$(who)

echo $NDK
echo $text
echo "$text very much"
echo "\$NDK"
echo $text1
echo $text2

清空命令行:reset

文件操作:
显示列表
ls -l 
ls -la 所有
ls -l ja* 通配符查找

创建文件
touch today.c

复制文件
cp src.txt dest.txt
cp -i src.txt dest.txt 询问
cp src.txt . 复制到当前目录
cp -R 目录 dest 复制整个目录到指定路径
cp c_?1 ../  通配符复制到上级目录

删除文件
rm file

删除目录
rm -rf 目录

查看文件类型:
file 文件

查看文件内容:
cat file
cat -n file 显示行号

查看文件最后10行
tail -n 10 file
查看文件最开始的10行
head -n 10 file

创建用户
useradd -m jack 创建用户的同时,创建了home目录
userdel -r jack 删除用户

创建组
groupadd androidgroup
分配用户到组
usermod -G androidgroup jack

文件权限
r读 w写 x执行
drwxr-xr-x
d rwx r-x r-x
d目录
1.文件所属用户具备的权限(root对该文件具备读写执行权限)
2.文件所属用户的所属组具备的权限(读、执行)
3.系统的其他用户具备的权限(读、执行)

rwx必须是固定顺序

权限		二进制		八进制
---			000			0
--x			001			1
-w-			010			2
-wx			011			3
r--			100			4
r-x			101			5
rw-			110			6
rwx			111			7

修改文件权限
chmod 644 file
给用户加上执行权限
chmod u+x file

改变创建目录的默认权限
umask 026

777-026

改变文件的所属
chown user.group file
chown user file
chown .group file

----------------------shell脚本
输出
echo 

#!/bin/bash                                                                 
 2 NDK=10
 3 text="i love shell"
 4 
 5 #命令的执行结果的输出作为变量的值
 6 text1=`date`
 7 text2=$(who)
 8 
 9 echo $NDK
10 echo $text
11 echo "$text very much"
12 echo "\$NDK"
13 echo $text1
14 echo $text2

命令执行退出的状态:
0 成功
127 没有找到命令
1 未知错误
126 命令不可执行

只有if命令的退出状态码为0,才会执行then部分
if 命令
then 
   命令
fi

test数值比较
-gt
-eq 等于
-le 
-ne 不等于

test字符串比较
str1 == str2
str1 != str2
str1 < str2
-n str1 长度是否非0
-z str1 长度是否为0

文件比较
-d 检查是否存在,并且是一个目录
-e 检查file是否存在
-f 检查是否存在,并且是一个文件
-r 检查是否存在,并且可读
-w、-x
file1 -nt file2 file1比file2新
file1 -ot file2 file1比file2旧

case命令
case 变量 in
pattern1) 命令;;
pattern2) 命令;;
*) 默认命令;;
esac

for命令
for var in list
do
	命令
done	

while命令
while test command
do
	命令
done	

清空命令行:reset

文件操作:
显示列表
ls -l 
ls -la 所有
ls -l ja* 通配符查找

创建文件
touch today.c

复制文件
cp src.txt dest.txt
cp -i src.txt dest.txt 询问
cp src.txt . 复制到当前目录
cp -R 目录 dest 复制整个目录到指定路径
cp c_?1 ../  通配符复制到上级目录

删除文件
rm file

删除目录
rm -rf 目录

查看文件类型:
file 文件

查看文件内容:
cat file
cat -n file 显示行号

查看文件最后10行
tail -n 10 file
查看文件最开始的10行
head -n 10 file

创建用户
useradd -m jack 创建用户的同时,创建了home目录
userdel -r jack 删除用户

创建组
groupadd androidgroup
分配用户到组
usermod -G androidgroup jack

文件权限
r读 w写 x执行
drwxr-xr-x
d rwx r-x r-x
d目录
1.文件所属用户具备的权限(root对该文件具备读写执行权限)
2.文件所属用户的所属组具备的权限(读、执行)
3.系统的其他用户具备的权限(读、执行)

rwx必须是固定顺序

权限		二进制		八进制
---			000			0
--x			001			1
-w-			010			2
-wx			011			3
r--			100			4
r-x			101			5
rw-			110			6
rwx			111			7

修改文件权限
chmod 644 file
给用户加上执行权限
chmod u+x file

改变创建目录的默认权限
umask 026

777-026

改变文件的所属
chown user.group file
chown user file
chown .group file

----------------------shell脚本
输出
echo 

#!/bin/bash                                                                 
 2 NDK=10
 3 text="i love shell"
 4 
 5 #命令的执行结果的输出作为变量的值
 6 text1=`date`
 7 text2=$(who)
 8 
 9 echo $NDK
10 echo $text
11 echo "$text very much"
12 echo "\$NDK"
13 echo $text1
14 echo $text2

命令执行退出的状态:
0 成功
127 没有找到命令
1 未知错误
126 命令不可执行

只有if命令的退出状态码为0,才会执行then部分
if 命令
then 
   命令
fi

test数值比较
-gt
-eq 等于
-le 
-ne 不等于

test字符串比较
str1 == str2
str1 != str2
str1 < str2
-n str1 长度是否非0
-z str1 长度是否为0

文件比较
-d 检查是否存在,并且是一个目录
-e 检查file是否存在
-f 检查是否存在,并且是一个文件
-r 检查是否存在,并且可读
-w、-x
file1 -nt file2 file1比file2新
file1 -ot file2 file1比file2旧

case命令
case 变量 in
pattern1) 命令;;
pattern2) 命令;;
*) 默认命令;;
esac

for命令
for var in list
do
	命令
done	

while命令
while test command
do
	命令
done	


输入输出重定向
./14.sh 1> test7 将标准输出重定向到test7文件,不再输出到屏幕上


编译ffmpeg
编写shell脚本之前,要执行./configure --disable-yasm,主要目录进行一系列的准备工作,比如说检查gcc的版本,会生成config.mak等文件

Maven、ANT、Gradle构建工具

Makefile 构建工具,只需通过make一句命令就可以构建一个可执行程序

在很多C/C++开源项目中,configrue文件用来检查系统配置生成配置文件(这些配置文件会在接下来的Makefile文件中被使用到)
Makefile文件用来生成我们需要的动态库文件

为什么要写Makefile文件?
1.当项目非常庞大时,让构建过程,自动化,简单
2.依赖文件比目标更新,会重建目标文件

plus.c
minus.c
multi.c
divi.c
main.c

.c -> .o目标文件
.o -> 打包myapp,可执行文件

直接make,构建的是终极目标
构建非终极目标,make main.o


调用my-dir函数,返回Android.mk文件所在的目录
LOCAL_PATH := $(call my-dir) 放在第一行,地址当前所在目录
include file Makefile可以引入其他的Makefile文件
include $(CLEAR_VARS) 编译模块时,清空LOCAL_MODULE等参数
LOCAL_MODULE 模块名称
LOCAL_SRC_FILES 编译需要的源文件
LOCAL_C_INCLUDES 需要的头文件
LOCAL_SHARED_LIBRARIES 编译需要的动态库
gdb调试

编译加上-g参数
gcc test1.c -g -o test1

进入调试
gdb test1

开始调试
start

显示代码
list-简写l
list 函数名称(查看函数内容)
list 行数(查看某行代码)

执行下一步
next-简写n

查看变量
print 变量名-简写p

进入到某个函数
step-简写s

设置断点
break 行号(gdb中的行号)-简写b

全速运行
continue-遇到断点会停止-简写b

查看断点信息
info breakpoints

删除断点
delete breakpoints 断点编号

修改变量的值
set var 变量=值

程序调用堆栈
当前函数之前的所有已调用函数列表,每一个都分配一个“帧”,最近调用的函数在0号帧里
backtrace-简写bt

切换栈帧
frame 1(查看指定栈帧的变量)

自动显示
display 变量名
取消自动显示
undisplay 行号(自动显示的行号)

查看内存布局
x /20 地址
x /20 buff-查看buff数组的前20个元素

程序非正常退出,如何查看错误?
1.ulimit -a 查看core文件是否分配大小
2.ulimit -c 1024 创建的core文件大小为1024字节
3.gcc test2.c -g -o test2 编译链接得到带有-g选项的可执行程序
4../test2 执行程序,会生成core日志文件
5.gdb test2 core 打开日志文件,定位错误信息到具体的代码行数

你可能感兴趣的:(Linux基础)