1.Linux下编译出现这个bash:./configure:No such file or directory 怎么解决
2.如何解析 Bash 程序的源码配置文件 | Linux 中国
3.Linuxä¸ç./configure
4.Bash通过shc加密后解密实战
5.linux中bash是什么
6.[源码级解析] 巧妙解决并深度分析Linux下rm命令提示参数列表过长的问题
Linux下编译出现这个bash:./configure:No such file or directory 怎么解决
1、开始以为是分析sh路径问题,用which查看是源码正确的。2、分析用vim打开文件:vi 文件名。源码
3、分析软件应用编程源码按‘:’号键,源码输入查看文件的分析格式命令set ff或set fileformat。
4、源码可以看到格式是分析DOS的。
5、源码再按‘:’键输入set ff=unix 或 set fileformat=unix设置格式为unix的分析。
6、源码然后‘:’键后输入wq,分析保存,源码再重新运行就可以了。
如何解析 Bash 程序的配置文件 | Linux 中国
将配置文件与代码分离,使任何人都可以改变他们的配置,而不需要任何特殊的编程技巧。
分离程序配置与代码,可以赋予非程序员修改配置的能力,无需接触源代码。在编译后的程序软件源码新闻二进制文件中,由于需要访问源代码并具备编程技能,非程序员往往难以进行此类修改。而 shell 脚本由于未编译为二进制格式,理论上源码可被访问。然而,对非程序员而言,在脚本中进行修改通常不是理想选择。
在 Bash 这样的 shell 语言中,提供了一种简便的解决方案:通过源引(sourcing)功能,可以将外部文件完整地引入 shell 程序中。这类似于编译语言中的 include 语句,允许在运行时包含库文件。源引文件可以包含任何类型的 Bash 代码,包括变量赋值。
举个例子,假设我们有一个名为 `~/bin/main` 的可执行文件,以及一个 `~/bin/data` 配置文件。在 `main` 中,我们可以读取 `data` 文件,解析配置信息并设置变量值。例如:
# main
source ~/bin/data
# 然后在程序中使用这些变量
在 `data` 文件中添加配置信息,然后在 `main` 中源引它,shiro缓存源码分析程序会自动应用这些设置。
源引的快捷方式是使用点符号 `.`,这与 `source` 命令相似。在 `main` 中使用 `.` 替换 `source`,再运行程序,结果会与之前一致。
在 Bash 中,初始化脚本和配置文件是系统运行的关键组成部分。例如,`~/.bashrc` 是每个 Bash shell 在启动时执行的脚本。通过理解这些文件的作用和执行顺序,可以更有效地配置和管理 Bash 环境。
将 Bash 代码与变量赋值分离,不仅简化了配置管理,还让非编程用户能够轻松修改配置,而不会意外地修改到源代码中。这为 Bash 提供了一种快速、简单且灵活的配置管理方法。
Linuxä¸ç./configure
Linuxç¯å¢ä¸ç软件å®è£ ï¼å¹¶ä¸æ¯ä¸ä»¶å®¹æçäºæ ï¼å¦æéè¿æºä»£ç ç¼è¯åå¨å®è£ ï¼å½ç¶äºæ å°±æ´ä¸ºå¤æä¸äºï¼ç°å¨å®è£ åç§è½¯ä»¶çæç¨é½é常æ®éï¼ä½ä¸åä¸ç¦»å ¶ä¸ï¼å¯¹åºç¡ç¥è¯çæå®ææ¡ï¼å®è£ åç§è½¯ä»¶çé®é¢å°±è¿åè解äºãConfigureèæ¬é ç½®å·¥å ·å°±æ¯åºç¡ä¹ä¸ï¼å®æ¯autoconfçå·¥å ·çåºæ¬åºç¨ã
ä¸ä¸äºæå·§ç¸æ¯ï¼Configureæ¾å¾åºç¡ä¸äºï¼å½ç¶ä½¿ç¨åå¦ä¹ èµ·æ¥å°±æ¾å¾æ¯ç¥ä¹å³ä¸äºï¼å½ç¶è¦æ为é«æï¼å¯¹åºç¡ççæä¸è½è¶ è¶å¦ã
为æ¤æ转载äºä¸ç¯å ³äºConfigureé项é ç½®ç详ç»ä»ç»ãä¾å¤§å®¶åè
'configure'èæ¬æ大éçå½ä»¤è¡é项ã对ä¸åç软件å æ¥è¯´ï¼è¿äºé项å¯è½ä¼æååï¼ä½æ¯è®¸å¤åºæ¬çé项æ¯ä¸ä¼æ¹åçã带ä¸'--help'é项æ§è¡'configure'èæ¬å¯ä»¥çå°å¯ç¨çææé项ã尽管许å¤é项æ¯å¾å°ç¨å°çï¼ä½æ¯å½ä½ 为äºç¹æ®çéæ±èconfigureä¸ä¸ªå æ¶ï¼ç¥éä»ä»¬çåå¨æ¯å¾æçå¤çãä¸é¢å¯¹æ¯ä¸ä¸ªé项è¿è¡ç®ç¥çä»ç»ï¼
--cache-file=FILE
'configure'ä¼å¨ä½ çç³»ç»ä¸æµè¯åå¨çç¹æ§(æè bug!)ã为äºå ééåè¿è¡çé ç½®ï¼æµè¯çç»æä¼åå¨å¨ä¸ä¸ªcache fileéãå½configureä¸ä¸ªæ¯ä¸ªåæ éé½æ'configure'èæ¬çå¤æçæºç æ æ¶ï¼ä¸ä¸ªå¾å¥½çcache fileçåå¨ä¼æå¾å¤§å¸®å©ã
--help
è¾åºå¸®å©ä¿¡æ¯ãå³ä½¿æ¯æç»éªçç¨æ·ä¹å¶å°éè¦ä½¿ç¨ä½¿ç¨'--help'é项ï¼å 为ä¸ä¸ªå¤æç项ç®ä¼å å«éå çé项ãä¾å¦ï¼GCCå éç'configure'èæ¬å°±å å«äºå è®¸ä½ æ§å¶æ¯å¦çæåå¨GCCä¸ä½¿ç¨GNUæ±ç¼å¨çé项ã
--no-create
'configure'ä¸çä¸ä¸ªä¸»è¦å½æ°ä¼å¶ä½è¾åºæ件ãæ¤é项é»æ¢'configure'çæè¿ä¸ªæ件ãä½ å¯ä»¥è®¤ä¸ºè¿æ¯ä¸ç§æ¼ä¹ (dry run)ï¼å°½ç®¡ç¼å(cache)ä»ç¶è¢«æ¹åäºã
--quiet
--silent
å½'configure'è¿è¡ä»çæµè¯æ¶ï¼ä¼è¾åºç®è¦çä¿¡æ¯æ¥åè¯ç¨æ·æ£å¨ä½ä»ä¹ãè¿æ ·ä½æ¯å 为'configure'å¯è½ä¼æ¯è¾æ ¢ï¼æ²¡æè¿ç§è¾åºçè¯ç¨æ·å°ä¼è¢«æå¨ä¸æçææ£å¨åçä»ä¹ï¼ä½¿ç¨è¿ä¸¤ä¸ªé项ä¸çä»»ä½ä¸ä¸ªé½ä¼æä½ æå°ä¸æã(è¯æ³¨ï¼è¿ä¸¤å¥è¯æ¯è¾æææï¼åææ¯è¿æ ·çï¼If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)
--version
æå°ç¨æ¥äº§ç'configure'èæ¬çAutoconfççæ¬å·ã
--prefix=PEWFIX
'--prefix'æ¯æ常ç¨çé项ãå¶ä½åºç'Makefile'ä¼æ¥çéæ¤éé¡¹ä¼ éçåæ°ï¼å½ä¸ä¸ªå å¨å®è£ æ¶å¯ä»¥å½»åºçéæ°å®ç½®ä»çç»æç¬ç«é¨åã举ä¸ä¸ªä¾åï¼å½å®è£ ä¸ä¸ªå ï¼ä¾å¦è¯´Emacsï¼ä¸é¢çå½ä»¤å°ä¼ä½¿Emacs Lisp file被å®è£ å°"/opt/gnu/share"ï¼
$ ./configure --prefix=/opt/gnu
--exec-prefix=EPREFIX
ä¸'--prefix'é项类似ï¼ä½æ¯ä»æ¯ç¨æ¥è®¾ç½®ç»æåèµçæ件çå®è£ ä½ç½®ï¼ç¼è¯å¥½ç'emacs'äºè¿å¶æ件就æ¯è¿æ ·ä¸ä¸ªé®ä»¶ãå¦æ没æ设置è¿ä¸ªé项çè¯ï¼é»è®¤ä½¿ç¨çé项å¼å°è¢«è®¾ä¸ºå'--prefix'é项å¼ä¸æ ·ã
--bindir=DIR
æå®äºè¿å¶æ件çå®è£ ä½ç½®ï¼è¿éçäºè¿å¶æ件å®ä¹ä¸ºå¯ä»¥è¢«ç¨æ·ç´æ¥æ§è¡çç¨åºã
--sbindir=DIR
æå®è¶ 级äºè¿å¶æ件çå®è£ ä½ç½®ãè¿æ¯ä¸äºé常åªè½ç±è¶ 级ç¨æ·æ§è¡çç¨åºã
--libexecdir=DIR
æå®å¯æ§è¡æ¯ææ件çå®è£ ä½ç½®ãä¸äºè¿å¶æ件ç¸åï¼è¿äºæ件ä»æ¥ä¸ç´æ¥ç±ç¨æ·æ§è¡ï¼ä½æ¯å¯ä»¥è¢«ä¸é¢æå°çäºè¿å¶æ件ææ§è¡ã
--datadir=DIR
æå®éç¨æ°æ®æ件çå®è£ ä½ç½®ã
--sysconfdir=DIR
æå®å¨å个æºå¨ä¸ä½¿ç¨çåªè¯»æ°æ®çå®è£ ä½ç½®ã
--sharedstatedir=DIR
æå®å¯ä»¥å¨å¤ä¸ªæºå¨ä¸å ±äº«çå¯åæ°æ®çå®è£ ä½ç½®ã
--localstatedir=DIR
æå®åªè½åæºä½¿ç¨çå¯åæ°æ®çå®è£ ä½ç½®ã
--libdir=DIR
æå®åºæ件çå®è£ ä½ç½®ã
--includedir=DIR
æå®C头æ件çå®è£ ä½ç½®ãå ¶ä»è¯è¨å¦C++ç头æ件ä¹å¯ä»¥ä½¿ç¨æ¤é项ã
--oldincludedir=DIR
æå®ä¸ºé¤GCCå¤ç¼è¯å¨å®è£ çC头æ件çå®è£ ä½ç½®ã
--infodir=DIR
æå®Infoæ ¼å¼ææ¡£çå®è£ ä½ç½®.Infoæ¯è¢«GNUå·¥ç¨æ使ç¨çææ¡£æ ¼å¼ã
--mandir=DIR
æå®æå页çå®è£ ä½ç½®ã
--srcdir=DIR
è¿ä¸ªé项对å®è£ 没æä½ç¨ï¼ä»ä¼åè¯'configure'æºç çä½ç½®ãä¸è¬æ¥è¯´ä¸ç¨æå®æ¤é项ï¼å 为'configure'èæ¬ä¸è¬åæºç æ件å¨åä¸ä¸ªç®å½ä¸ã
--program-prefix=PREFIX
æå®å°è¢«å å°æå®è£ ç¨åºçååä¸çåç¼ãä¾å¦ï¼ä½¿ç¨'--program-prefix=g'æ¥configureä¸ä¸ªå为'tar'çç¨åºå°ä¼ä½¿å®è£ çç¨åºè¢«å½å为'gtar'ãå½åå ¶ä»çå®è£ é项ä¸èµ·ä½¿ç¨æ¶ï¼è¿ä¸ªé项åªæå½ä»è¢«`Makefile.in'æ件使ç¨æ¶æä¼å·¥ä½ã
--program-suffix=SUFFIX
æå®å°è¢«å å°æå®è£ ç¨åºçååä¸çåç¼ã
--program-transform-name=PROGRAM
è¿éçPROGRAMæ¯ä¸ä¸ªsedèæ¬ãå½ä¸ä¸ªç¨åºè¢«å®è£ æ¶ï¼ä»çååå°ç»è¿`sed -e PROGRAM'æ¥äº§çå®è£ çååã
--build=BUILD
æå®è½¯ä»¶å å®è£ çç³»ç»å¹³å°ãå¦æ没ææå®ï¼é»è®¤å¼å°æ¯'--host'é项çå¼ã
--host=HOST
æå®è½¯ä»¶è¿è¡çç³»ç»å¹³å°ãå¦æ没ææå®ãå°ä¼è¿è¡`config.guess'æ¥æ£æµã
--target=GARGET
æå®è½¯ä»¶é¢å(target to)çç³»ç»å¹³å°ãè¿ä¸»è¦å¨ç¨åºè¯è¨å·¥å ·å¦ç¼è¯å¨åæ±ç¼å¨ä¸ä¸æä¸èµ·ä½ç¨ãå¦æ没ææå®ï¼é»è®¤å°ä½¿ç¨'--host'é项çå¼ã
--disable-FEATURE
ä¸äºè½¯ä»¶å å¯ä»¥éæ©è¿ä¸ªé项æ¥æä¾ä¸ºå¤§åé项çç¼è¯æ¶é ç½®ï¼ä¾å¦ä½¿ç¨Kerberos认è¯ç³»ç»æè ä¸ä¸ªå®éªæ§çç¼è¯å¨æä¼é ç½®ãå¦æé»è®¤æ¯æä¾è¿äºç¹æ§ï¼å¯ä»¥ä½¿ç¨'--disable-FEATURE'æ¥ç¦ç¨å®ï¼è¿é'FEATURE'æ¯ç¹æ§çååï¼ä¾å¦ï¼
$ ./configure --disable-gui
-enable-FEATURE[=ARG]
ç¸åçï¼ä¸äºè½¯ä»¶å å¯è½æä¾äºä¸äºé»è®¤è¢«ç¦æ¢çç¹æ§,å¯ä»¥ä½¿ç¨'--enable-FEATURE'æ¥èµ·ç¨å®ãè¿é'FEATURE'æ¯ç¹æ§çååãä¸ä¸ªç¹æ§å¯è½ä¼æ¥åä¸ä¸ªå¯éçåæ°ãä¾å¦ï¼
$ ./configure --enable-buffers=
`--enable-FEATURE=no'ä¸ä¸é¢æå°ç'--disable-FEATURE'æ¯åä¹çã
--with-PACKAGE[=ARG]
å¨èªç±è½¯ä»¶ç¤¾åºéï¼æ使ç¨å·²æ软件å ååºçä¼ç§ä¼ ç»ãå½ç¨'configure'æ¥é ç½®ä¸ä¸ªæºç æ æ¶ï¼å¯ä»¥æä¾å ¶ä»å·²ç»å®è£ ç软件å çä¿¡æ¯ãä¾å¦ï¼åèµäºTclåTkçBLTå¨ä»¶å·¥å ·å ãè¦é ç½®BLTï¼å¯è½éè¦ç»'configure'æä¾ä¸äºå ³äºæ们æTclåTkè£ çä½å¤çä¿¡æ¯ï¼
$ ./configure --with-tcl=/usr/local --with-tk=/usr/local
'--with-PACKAGE=no'ä¸ä¸é¢å°æå°ç'--without-PACKAGE'æ¯åä¹çã
--without-PACKAGE
ææ¶åä½ å¯è½ä¸æ³è®©ä½ ç软件å ä¸ç³»ç»å·²æç软件å 交äºãä¾å¦ï¼ä½ å¯è½ä¸æ³è®©ä½ çæ°ç¼è¯å¨ä½¿ç¨GNU ldãéè¿ä½¿ç¨è¿ä¸ªé项å¯ä»¥åå°è¿ä¸ç¹ï¼
$ ./configure --without-gnu-ld
--x-includes=DIR
è¿ä¸ªé项æ¯'--with-PACKAGE'é项çä¸ä¸ªç¹ä¾ãå¨Autoconfæå被å¼ååºæ¥æ¶ï¼æµè¡ä½¿ç¨'configure'æ¥ä½ä¸ºImakeçä¸ä¸ªåéæ¹æ³æ¥å¶ä½è¿è¡äºXç软件ã'--x-includes'é项æä¾äºå'configure'èæ¬ææå å«X头æ件çç®å½çæ¹æ³ã
--x-libraries=DIR
类似çï¼'--x-libraries'é项æä¾äºå'configure'èæ¬ææå å«Xåºçç®å½çæ¹æ³ã
å¨æºç æ ä¸è¿è¡'configure'æ¯ä¸å¿ è¦çåæ¶ä¹æ¯ä¸å¥½çãä¸ä¸ªç±'configure'产ççè¯å¥½ç'Makefile'å¯ä»¥æçæºç å±äºå¦ä¸æ£µæ ç软件å ãå¨ä¸ä¸ªç¬ç«äºæºç çæ ä¸æçæ´¾ççæ件ç好å¤æ¯å¾ææ¾çï¼æ´¾ççæ件ï¼å¦ç®æ æ件ï¼ä¼åä¹±çæ£å¸äºæºç æ ãè¿ä¹ä½¿å¨å¦ä¸ä¸ªä¸åçç³»ç»æç¨ä¸åçé ç½®é项æçåæ ·çç®æ æ件é常å°é¾ã建议使ç¨ä¸æ£µæ ï¼ä¸æ£µæºç æ (source tree)ï¼ä¸æ£µæçæ (build tree)ï¼ä¸æ£µå®è£ æ (install tree)ãè¿éæä¸ä¸ªå¾æ¥è¿çä¾åï¼æ¯ä½¿ç¨è¿ç§æ¹æ³æ¥æçGNU mallocå ï¼
$ gtar zxf mmalloc-1.0.tar.gz
$ mkdir build && cd build
$ ../mmalloc-1.0/configure
creating cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc ) works... yes
checking whether the C compiler (gcc ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for a BSD compatible install... /usr/bin/install -c
checking host system type... i-pc-linux-gnu
checking build system type... i-pc-linux-gnu
checking for ar... ar
checking for ranlib... ranlib
checking how to run the C preprocessor... gcc -E
checking for unistd.h... yes
checking for getpagesize... yes
checking for working mmap... yes
checking for limits.h... yes
checking for stddef.h... yes
updating cache ../config.cache
creating ./config.status
è¿æ ·è¿æ£µæçæ 就被é ç½®äºï¼ä¸é¢å¯ä»¥ç»§ç»æçåå®è£ è¿ä¸ªå å°é»è®¤çä½ç½®'/usr/local'ï¼
$ make all && make install
Bash通过shc加密后解密实战
Linux中,当我们希望保护脚本中的敏感信息并将其转化为二进制程序时,shc是一个推荐的工具。本文将围绕shc进行加密和解密的安卓 sqlite源码实战演示,特别关注了在不同架构(如x和arm)下的应用。
在Ubuntu .上,首先安装shc。通过创建一个简单的脚本并使用shc加密,会生成两个文件。执行加密后的文件确认其格式正确。shc的解密工具unshc在x平台上表现良好,但对于arm架构,解密过程会遇到问题,需要理解shc的加密原理。
shc主要利用arc4函数进行加密,通过IDA Pro进行动态调试,我们可以定位到解密函数的位置。在找到关键点后,设置断点并分析内存中的源代码,成功从内存中导出原始代码。
总结来说,shc在x架构上解密相对顺利,但在arm架构上则需要深入理解加密机制和进行适当调试才能达到解密目的。
linux中bash是什么
linux中bash是什么?我们一起来了解一下吧。
bash是指GNU项目编写的中的Unixshell,也就是天气站源码 php指的linux所用的shell,而Shell是指提供使用者使用界面的软件,也就是一个命令行解释器,BASH是SHELL中的一种,是大多数LINUX发行版默认的SHELL。
linux系统与windows系统的区别
区别1:开放性
所谓的开放性就是linux操作系统是开放源码系统,可以对其程序进行编辑修改。而微软的windows系统是手微软版权保护,就是只能微软内部进行开发及修改。
区别2:价格不同
linux系统是免费使用,而微软开发的windows系统则是需要花费金钱去购买。
区别3:文件格式不同
windows 操作系统内核是NT,而linux 是shell;另外,windows 硬盘文件格式是fat或NTSF,而linux 需要的文件格式是ext2或ext3,该操作系统还多一个SWAP格式的交换分区。
[源码级解析] 巧妙解决并深度分析Linux下rm命令提示参数列表过长的问题
在处理大型文件夹清理任务时,发现使用Linux下rm命令清理包含数百万文件的目录时,会遇到“参数列表过长”的提示问题。经过一系列的试验与深入研究内核源码,最终找到了巧妙的解决方案,并理解了Linux Shell的一些有趣特性。以下内容是对这一问题的详细解析与解决办法的记录。
最初,以为是rm命令对文件数量有特定限制,但尝试执行其他命令如ls和touch时也遇到相同问题,暗示问题可能与Shell的通配符使用有关。于是,通过管道功能,成功完成了清理任务。随后,通过使用find命令列出所有文件,并发现文件名格式包含日期和时间信息,导致在使用rm命令时,文件名被不当分割。为了解决这一问题,引入了-print0与-0参数,这样可以区分空格与分界符,正确解析包含空格的文件名。
吸取教训后,使用find命令配合-1参数,避免了递归操作,确保只删除文件而不删除目录,成功解决了第二次处理大量文件时的问题。紧接着,开始探索通配符长度限制的来源。通过实验,发现限制与Bash无关,而是Shell执行命令的本质。进一步研究得知,Shell执行命令的过程涉及exec()类系统调用,且限制可能源自系统调用,而非Shell自身。深入分析源码后发现,最大参数长度限制为ARG_MAX,且其大小为栈空间的1/4。通过调整栈空间大小,可以增加允许的最大参数数量,从而解决“参数列表过长”的问题。
这一限制在许多现代操作系统中存在,不仅影响了Linux环境,也见于MacOS和Windows等系统。通过理解和调整相关配置,能够有效解决处理大型文件夹清理任务时遇到的“参数列表过长”问题,提升系统管理的效率与灵活性。
Golang源码分析Golang如何实现自举(一)
本文旨在探索Golang如何实现自举这一复杂且关键的技术。在深入研究之前,让我们先回顾Golang的历史。Golang的开发始于年,其编译器在早期阶段是由C语言编写。直到Go 1.5版本,Golang才实现了自己的编译器。研究自举的最佳起点是理解从Go 1.2到Go 1.3的版本,这些版本对自举有重要影响,后续还将探讨Go 1.4。
接下来,我们来了解一下Golang的编译过程。Golang的编译主要涉及几个阶段:词法解析、语法解析、优化器和生成机器码。这一过程始于用户输入的“go build”等命令,这些命令实际上触发了其他内部命令的执行。这些命令被封装在环境变量GOTOOLDIR中,具体位置因系统而异。尽管编译过程看似简单,但实际上包含了多个复杂步骤,包括词法解析、语法解析、优化器、生成机器码以及连接器和buildid过程。
此外,本文还将介绍Golang的目录结构及其功能,包括API、文档、C头文件、依赖库、源代码、杂项脚本和测试目录。编译后生成的文件将被放置在bin和pkg目录中,其中bin目录包含go、godoc和gofmt等文件,pkg目录则包含动态链接库和工具命令。
在编译Golang时,首先需要了解如何安装GCC环境。为了确保兼容性,推荐使用GCC 4.7.0或4.7.1版本。通过使用Docker镜像简化了GCC的安装过程,使得编译变得更为便捷。编译Golang的命令相对简单,通过执行./all即可完成编译过程。
最后,本文对编译文件all.bash和make.bash进行了深入解析。all.bash脚本主要针对nix系统执行,而make.bash脚本则包含了编译过程的关键步骤,包括设置SELinux、编译dist文件、编译go_bootstrap文件,直至最终生成Golang可执行文件。通过分析这些脚本,我们可以深入了解Golang的自举过程,即如何通过go_bootstrap文件来编译生成最终的Golang。
总结而言,Golang的自举过程是一个复杂且多步骤的技术,包含了从早期C语言编译器到自动生成编译器的转变。通过系列文章的深入探讨,我们可以更全面地理解Golang自举的实现细节及其背后的逻辑。本文仅是这一过程的起点,后续将详细解析自举的关键组件和流程。