Linux下制作bin可执行文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下制作bin可执行文件相关的知识,希望对你有一定的参考价值。

参考技术A 一 Linux安装文件

Linux常见的安装为tar,zip,gz,rpm,deb,bin等。我们可以简单的分为三类,
第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文件;

第二:对应的有管理工具的deb,rpm等,通常的这类安装文件可以通过第三方的命令行或UI来简单的安装,例如Ubuntu中的apt来安装deb,Redhat中的yum来安装rpm;

第三:像.bin类,其实就是把sh和zip打包为bin,或把sh和rpm打包为bin等,当在命令行运行bin安装文件时,其实就是bin里面的sh来解压bin中的zip或安装rpm的过程;

.bin安装文件可以认为是sh文件和zip或rpm等其他安装文件的打包形式。如下图:

shell脚本:

脚本很简单,关键在于sed那一行,大概意思是匹配exit 0,如果匹配到了,把它后面的打印出来。

然后将安装包打包成 install.tar.gz,如:

最终将上述两个文件打包成bin文件,并赋予执行权限

执行bin文件和执行shell脚本一样,直接运行

Tip:提取文件也可以使用tail来分割文件的,这个有时候可能会失败(网上很多人都说tail方法可能有各种问题,我测试没碰见)。建议使用sed方式提取文件

Linux学习(第一篇)

Linux 系统学习

Linux的具体目录结构

root

该目录为系统管理员目录,root是具有超级权限的用户;

Bin->usr/bin

存放系统预装的可执行程序,这里存放的可执行文件可以在系统的任何目录下执行

usr

是linux的系统资源目录,里边存放都是一些系统可执行文件或者系统以来的一些文件库

usr/local/bin

存放用户自己的可执行文件,同样这里存放的可执行文件可以在系统的任何目录下执行

lib->usr/lib

这个目录存放着系统最基本的动态链接共享库,其作用类似于Windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库

boot

这个目录存放启动linux时使用的一些核心文件,包括一些链接文件以及镜像文件

dev

该目录存放的是linux的外部设备,linux中的设备也是文件的形式存在

etc

这个目录存放所有系统管理所需要的配置文件

Home

用户的主目录,在linux中,每个用户都有一个自己的目录,一般该目录名以用户的账号命名,叫做用户的根目录;用户登录以后,默认打开自己的根目录;

opt

这是给linux额外安装软件所存放的目录,比如你安装一个Oracle数据库则就可以放到这个目录下,默认为空

 

常用命令

查询IP:ifconfig

mkdir  创建目录  

vim test.txt  创建并打开这个文件
一般模式:用vim或vi命令打开,可以查看文件的内容,并且可以通过上下左右键移动光标,查看文件的某一部分,但是不能编辑文件内容;
编辑模式:在一般模式下按 i / a / I / A 键,都可以进入编辑模式;但是不能保存内容;按

          ESC键退出编辑模式,返回到一般模式。

命令模式:在一般模式下,按 冒号shift + : ,进入命令模式。输入q! -----不保存编辑内容;
          wq-----保存并且退出。
vim快捷键

          复制当前行:在 一般模式下,按 yy 把光标所在行复制到剪切板;按p,把剪切板中的内容粘贴到光标所在的位置。

          复制当前行往下5行:在一般模式下,按5yy 把光标所在的行往下5行复制到剪贴板;然后粘贴光标(p)所在的下一行。
          在文本文件中查找关键字:在命令模式下,输入 /关键字  如(/world),回车按n表示查找下一个。
          删除光标所在的当前行:在一般模式下,按dd,删除当前行;删除当前行向下的5行(5dd)

         一般模式下,使用快捷键到大文档的最首行[gg] 和最末行[G]
         一般模式下,在一个文件中输入“xxxx”,然后又撤回这个动作(u)
         一般模式下,并将光标移动到10行, shift+g。 第一步输入10,第二步输入shift+g,第三步回车。
         命令行模式,设置文件的行号,取消文件的行号(命令行下:(: set nu) 和 (: set nonu))

 

添加用户:useradd 用户名  (一般是超级管理员才有权限;)在linux中任何一个用户都至少属于一个组,新建用户如果不指定组,则会新建一个组,组名跟用户名相同,并且把该用户添加到该组中。
useradd –d /home/ww wangwu 指定路径创建用户
给用户设置密码:password test123 
删除用户 userdel wangwu  删除用户的同时级联它的主目录passwd
userdel list  -r wangwangwu  删除用户的同时级联它的主目录passwd
查看用户信息: id  用户名

切换用户:su 用户名  eg: su zhangsan  备注

添加组:groupadd  组名 eg: groupadd dev
删除组: groupdel 组名 eg: groupdel dev
把用户添加到组中: gpasswd –a 用户名 组名 eg: gpasswd –a  zhangsan dev

把用户从组中移除: gpasswd –d 用户名 组名 eg: gpasswd –d zhangsan dev

添加用户时,指定所属的组(主组): useradd –g 组名 用户名  eg: useradd –g dev lisi

用来查看linux系统手册上的帮助信息:man 命令 eg: man ls

          分屏显示、按回车翻一行,按空格翻一页,按q退出查看;

查看当前所在的目录:pwd

查看指定目录下所有的子目录:ls [指定目录] eg: ls  /home  

以列表显示  ls –l [指定目录]

显示指定目录下所有子目录和文件(包括虚拟的目录) ls –a /home

以列表形式显示指定目录下所有的子目录和文件  ls –al  /home

切换目录: cd  目录名

绝对目录: cd /opt/testDir  以盘符开始的目录

相对目录: cd testDir

在任何目录下进入根目录直接:cd ~

.. : 当前目录的上一级目录,从当前目录开始查找它的上一级目录;

. : 当前目录  eg: ./xxx.sh

创建一个或者多个空文件: touch 文件名列表(文件名之间用空格隔开) touch test1.txt  test2.txt

复制文件: cp source(源) dest(目标) 

eg: cp t1.txt test2  把t1.txt文件复制到test2目录中

eg: cp test2 test5 把test2目录复制到test5目录中 注意:只能复制空目录

递归复制文件 cp –r source(源)  dest(目标)

删除文件或者目录: rm 文件名 或者目录名

Eg: rm  t1.txt  提示删除     rm –f t2.txt 强制删除     rm –r  test2  递归提示删除

rm –rf test3 递归强制删除

移动目录或者文件  mv  source(源)  dest(目标)

mv test.txt test1     mv test1  test2

mv t1.txt  t2.txt  文件重命名,若文件存在,则会提示是否需要覆盖

echo: 输出系统变量或者常量的值到命令行终端;

echo $JAVA_HOME  

echo hello world!

把前一个查看命令的结果输出到指定的文件中:查看命令 > 文件名

Ls > test.txt  如果目标文件不存在则会新建一个文件,并且将ls命令的结果输出到文本中

Cat test1.txt > test2.txt 将文本拷贝一份

查看或者设置系统的日期或者时间 date

date +%Y 系统当前的年份  date +%m  系统当前的月份   date +%d系统当前的日期

date ‘+%Y-%m-%d %H:%M:%S’  按yyyy-MM-ddd HH:mm:ss 格式显示

查看系统日历:cal

cal: 查看当前月份的日历  eg: cal 2020

 

搜索文件或者目录的命令:find 关键字 [-name 默认按名称] [-siize] 按文件大小搜索

[-user]按文件的所有者搜索

Eg: find *.txt  搜索当前目录下,所有的.txt文件  find *e*  搜索当前目录下所有包含e的

find  /etc *.txt 搜索指定目录下的txt文件

find /etc  -size +5M  搜索大于5M的文件

find /etc –user zhangsan 搜索/etc目录下素有者是zhangsan的文件和目录

 

locate:在整棵目录树种搜索文件或者目录,都是根据名称搜索,效率高。

updated 先同步数据库 然后locate 关键字

搜索过滤命令,在前一个搜索命令的结果中进行按名称进一步过滤,

搜索命令 |grep [选项]过滤条件

查看命令 |grep [选项]过滤条件 –i  忽略大小写  -n  显示行号

 

压缩或者解压单个文件
gzip 文件名----压缩单个文件,生成一个.gz的压缩包,并且会把原来的文件删除;

gunzip  .gz压缩包名----解压.gz压缩包,并且会把原来的.gz压缩包删除

压缩或者解压多个文件和目录:

zip目录压缩包名称(通常使用.zip压缩包)  文件或者目录列表  

eg: zip test.zip  ret.txt test1.txt

uzip 压缩包名(.zip)  -d  解压目录名(绝对或者相对): 将指定的.zip压缩包解压到当前目录

压缩或者解压多个文件和目录  tar 选项  目标压缩包名称(xxx.tar.gz)  文件或者目录列表

tar –c [产生.tar.gz打包文件]  -C[指定解压到哪个目录]

tar -x[解压tar.gz文件]    -v[显示详细信息]  -f[指定压缩后的文件名]   -z[打包同时压缩]

打包操作  tar –zcvf  xxxxx.tar.gz  文件/目录列表

解压操作  tar –zxvf  xxxx.tar.gz  -C 解压目录名

文件或者目录与组基本介绍

在linux中,每一个用户都至少属于一个组,用户不能独立于组存在,一个用户可以属于多个组。
在linux中,每一个文件或者目录也必须属于一个组,而且只能属于一个组,默认情况下,文件所有者所属的主组就是文件所属的组。

在文件或者目录看,linux系统中所有的用户分为三类:

所有者:默认情况下,文件或者目录的所有者都是创建者,可以修改;
同组用户:跟文件或者目录属于同一个组的用户
其他组用户:既不是文件或者目录所有者,也不是同组用户。

在linux中,任何文件或者目录都有三种权限,读,写,执行

修改文件所有者---chown  新的所有者 文件名  或者 chown 新的所有者:新的组  文件名

Eg: chown zhangsan test.txt 

修改文件或者目录的所在组: chgrp 新的组名 文件名  eg: chgrp dev  test.txt

对于文件而言,

读:可以读取、查看文件的内容,比如: cat、more、less、head、tail等

写:可以修改文件的内容,比如:vi 或者vim等

执行:如果文件是可执行文件,(.sh),可以直接运行。

对于目录而言:

读:可以读取、查看目录下边的内容,比如: ls等;

写:可以修改目录中的内容,创建子目录、创建文件、删除文件,重名文件或者目录

执行:可以进入该目录,比如cd

任何一个文件或者目录都有三部分权限:所有者权限,同组用户权限,其他组用户权限。

第一部分权限:所有者权限,文件或者目录的所有者对该文件所有的权限,使用rwx分别表示读、写、执行的权限。比如:rwx,拥有读写执行的权限,r-x拥有读写的权限,

第二部分权限:同组用户权限,文件或者目录的同组用户对该文件所拥有的权限。

第三部分权限:其他组用户权限,文件或者目录的其他组用户堆顶该文件所拥有的权限。

查看文件或者目录的权限:ls -aul

修改文件或者目录的权限:

用r、w、x分辨表示读写执行的权限;

用u、g、o、a分别表示所有者、同组用户、其他组用、所有用户修改权限

用+、-、= 分别表示给指定用户增加、减少、设置对应的权限。

Eg: chmod g-w,o+w t5.txt  chmod g=rwx t5.txt

Chmod 777 t5.txt   chmod 655 t5.txt

以上是关于Linux下制作bin可执行文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习(第一篇)

Linux下获取可执行程序的绝对路径

Linux文件管理

小胖学习linux day06:文件管理

请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

Linux添加可执行文件/头文件/链接库的环境变量