linux命令系统(二)

一.常用命令

chmod :改变文件权限
eg: ls -l drwxrw-r-- xxxx字节
drw-r–rw-
总共10位 (xxxxxxxxxx)
第一位为文件的类型·: -代表普通文件
d代表目录
l代表链接文件
p代表管道文件
c代表字符设备文件
b代表块设设备
[ u ]第二位到第四位:代表属主的权限:r (read) w (write) x (execute)执行
[ g ] 第五位到第七位: 代表同组其他用户的权限
[ o ] 第八位到第十位: 代表其他用户的权限
而十位drwxrw-r-- 可表示为二进制码 1111110100 (有字符代表1,无字符代表0,eg: -)
除去文件类型的第一位,其他九位二进制可换成十进制 (3位一位的换,eg : 111 110 100 化为 7 6 4)
这代表这个文件的权限是764 在有些情况下,文件权限不够,不能执行,我们可以修改权限。
chmod xxx 文件
eg:上面的文件权限是764,可以这样修改权限,chmod 777 XXX(文件名)
或者还可以这样 : chmod u-x xxx
chmod g-w xxx
chmod o+x xxx
chmod a-x xxx
(相当于对不同的用户的权限进行修改 - 代表减号,减去这项权限 w: write x:execute; + 代表加号,加上这项权限 a在这里情况特殊,它代表的意思是all 全部 所有用户的权限都加或者减)
还有u(属主的权限必须高于或者等于其他用户的权限,属主的权限是最高级,如果属主没有执行的权限,那其他的用户更没有权限执行)

find:查找文件,内容
find / -name “xxxx(文件名字)” 名字查找,找文件所在
grep:搜索内容
grep “xxx(所搜索的内容)” 搜索内容,所有有显示的内容都能搜索到,并一一罗列。

二.写代码的步骤

1.Vim 文件名 (vim三种模式: 命令模式,插入模式,底行模式)
2.切换到插入模式(按a或者i)
3.写代码
4.按键 esc 切换到命令模式
5.按住shift zz 退出(保存退出)
6.编译 gcc 文件名 -o 生成的名字
7.运行 ./文件名

三.vim的三种命令模式

1.命令模式: x删除字符 nx删除n个字符 u撤销操作
dd删除一 行 ndd删除n行 yy复制一行 nyy复 制n行 p粘贴
2.底行模式: 查找插入模式底行模式:
:shift+g最后一行(跳到最后一行) gg第一行(跳到第一行)
进入底行模式,wq保存退出 w保存 q退出 wq!强制保存退出
q!强制退出 数字跳到指定行 %s/old/new/替换 nohl消除高亮
set nonu去除行号 set nu添加行号
sp xxx. c打开另一个文件ctr|+w+w切换光标
3.插入模式:书写程序
由vim进入写程序,进去时命令模式,按a或者i进入插入模式;
按Escj键,退出插入模式。

【可以修改Vim的书写设置:vim /ect/vimrc vim /ect/vin/vimrc】

四.gcc 编译的步骤

1.预处理: 处理所有#开头的代码 (#include:头文件 #define:宏定义 #if:条件编译 )
eg : gcc -E hello.c -o hello.i
2.编译:a. 语法检查
b. 把C代码变成汇编代码
eg: gcc -S hello.i -o hello.s
3.汇编: 把汇编代码变成二进制代码
eg: gcc -c hello.s -o hello.o
4.链接:链接需要用的代码(库或者其他文件)
eg: gcc hello.o(可以同时多个文件) -o hello|

五.静态库的制作

1.编写 main.c show.c print.c
2.把 show.c 和 print.c 变成二进制文件
eg: gcc -c show.c print.c 回车(会自动生成print.o show.o) 方便
eg : gcc -c show.c print.c -o show.o print.o
3.生成静态库 ar -crv libxx.a show.o print.o
(xx是库的名字)
4.静态编译
gcc main.c -o main -L . -lxx -static
(-L:指定静态的位置
-lxx:链接静态库的名字
-static : 使用静态编译)

六.动态库的制作

1.生成动态库
gcc - fPIC - shared -o | ibxxxx. so print. c show. c(xxxx是库名字)
2、动态编译源文件
gcc main. c -0 main-dynamic -L. --| xxxx
3、把动态库复制到系统默认目录下/usr/lib
eg : cp libxxxx. so /usr/lib
4、运行文件 ./main-dynamic

七.静态编译和动态编译的区别

1.动态编译:只编译源文件(默认都是动态编译)
优点:文件小
缺点:对运行环境没有要求(需要动态库的支持)
eg: printf(“hello word\n”);
需要printf()的库文件
2静态编译: 把源文件和需要的库文件编程成一个文件
优点: 对运行环境没有要求
确定: 文件大
eg: {
printf(" ");
}
int printf()
{


}

八.Make 和 Makefile工程管理器

make命令运行时,须要一个 Makefile 文件,以告诉make命令须要怎么样的去编译和链接程序。
Makefile内容的核心是一系列的规则,这些规则告诉make程序要做的事以及做这件事所依赖的条件。
Makefile文件由以下三个基本内容组成:
1  需要生成的目标文件(target file)
2  生成目标文件所需要的依赖文件(dependency file)
3   生成目标文件的编译规则命令行 (command)
做法:
1.  vim Makefile 建立文件并进行编程
  以main.c print.c show.c为例子(show.c print.c满足main.c运行的文件,相当于制作静态库中的库文件)
  目标文件是main(由main.c show.c print.c组成)
  首先 : main=main.c  show.c print.c
  然后:  main:main.c  (由main.c来源)
  最后: 回车键,下一行,Tab键 ,书写command编译规则命令
              gcc   main.c  show.c  print.c  -o  main
 【上面可进一步修改为(简便) 
      Target=main
      Object=print.c show.c main.c
      $(Target):$(Object)
      Tab键   gcc $(Object)  -o  $(Target)
      】    
      进一步修改:把 .c文件修改为 .o文件
      为什么可以修改呢? Makefile具有隐含规则:
      Target=main
      Object=print.c show.c main.c
      $(Target):$(Object)
      Tab键   gcc $(Object)  -o  $(Target)
 (    print.o:print.c
      Tab键 gcc -c print.c  -o  print.o
      show.o:show.c
      Tab键 gcc -c show.c  -o show.o
      main.o:main.c
      Tab键 gcc -c mian.c -o main.o
  )隐含规则
  2    回到当前目录后,输入命令 :  make 
   会自动生成目标文件 xxxx
   3 运行 xxxx  
   小提示:如果·自动生成的二进制文件太多怎么办?清理不方便的话就在程序后加上
        .PHONY:clean  (把clean声明成伪目标)
        clean:
        Tab键 rm *.o main  (*号表示所有的意思,在linux系统下)
        清理时输入命令 make clean

九.gdb调试器

1.,建立文件,编写程序
2. 进行gcc编译,最好使用-g参数将调试信息编入文件。
gcc -g 文件.c -o 文件名
3.启动调试 gdb 文件名
4进入gdb界面 ,调试命令:run ®运行 输入r 按下回车键,即可进行运行
list (l) 显示代码 GDB以10行为单位进行显示,在运行一次命令,就再显示下10行代码
beak (b) 打断点 ,使用行号或者函数名
continue © 继续运行
print (p) 打印变量的值
next (n) 执行下一条语句 【跳过函数】
step (s) 不跳过 【遇到函数,进入函数】
info b 查看断点信息

5.结束进程:Ctrl键+c 退出gdb, 输入命令quit 。

十.shell是命令解析器(bash)

Shell是命令解析器,将用户的输入的指令转化为机器可以运行的程序。
Linux的Shell种类众多,不同的Shell语言的语法有所不同,所以不能交换使用。
一般情况下,人们并不区分 Bourne Shell和Bourne Again Shell ,
所以我们可以书写脚本: #!/bin/sh ,也可以改为 #!/bin/bash
利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:
#!/bin/sh
#comments
$#:传入脚本的命令行参数个数
$*:所有命令行的参数值,在各个参数值之间留有空格
$1:第一个命令行参数
$2:第二个命令行参数
$(引用变量或者引用参数)
书写步骤:
1.vim xxxx.sh (建立 .sh文件)
2.书写固定格式 首行: #!/bin/bash
3 书写自己想要实现的命令
eg: STR=“xxxx”
echo “xxxxxx”
echo $STR
echo $1
echo $2
echo $3
echo $# (输出命令行参数个数)
echo $ * (输出所有参数)
echo: 输出作用。
4.运行 ./xxxx.sh
eg: 目的 创建五个目录 1 2 3 4 5 ,进入每个目录,建立一个文件1.txt,在文件中输入一句“hello”。
第一种做法: vim xx.sh
#!/bin/bash
echo “hello”
mkdir 1 2 3 4 5
cd 1
touch 1.txt
echo “hello” > 1.txt
然后
cd 2
touch 1.txt

第二种做法:vim 2.sh
#!/bin/bash
for ((i=1;i<6;i++)) 这句可改为 for i in 1 2 3 4 5
do
mkdir $i
cd $i
touch $i.txt
echo “this is $i” > $i.txt
cd …
done

shell判断:
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
[ -a FILE ] 如果 FILE 存在则为真
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。
eg :#!/bin/bash
if [ -z $1 ]; then
echo " 请输入路径"
exit
fi 结束进程
if [ -f $1 ]; then
echo "是文件“
elif [ -d $1 ]; then
echo ”是文件夹“
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值