linux下command not found详解

本文介绍了在Linux系统中遇到的“command not found”问题及其解决方案。主要针对使用shutdown命令时出现的问题,包括检查和设置环境变量PATH,以及如何正确使用su命令切换用户。
问题一
如果新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,悍然提示:bash:command notfound。那么

首先就要考虑root 的$PATH里是否已经包含了这些环境变量。

主要是这四个:/bin ,/usr/bin,/sbin,/usr/sbin。

四个主要存放的东东:

./bin:

bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmoddf、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。

/usr/bin:
主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、newaliases、nslookup passwd、quota、smb*、wget等。


/sbin:
主要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、runlevel、shutdown等。


/usr/sbin:
放置一些网路管理的必备程式例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。

可以在家目录下查看.bash_profile里的PATH。如果是:PATH=$PATH:$HOME/bin则需要添加成如下:

PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin

问题二:
问题是在root权限下无法使用shutdown -h now,提示command not found !!

这是基础命令 ,原以为是对方没有root权限.不过之后他截图给我看了下发现的确是#  , 而且命令也没有语法错误 , 有点莫名其妙的感觉................


后来一直在找解决的方法和问题所在! 最终还是给我找到了...答案如下::

-------------------------------------------------------------------------------------

使用linux过程中,发现一个问题,当我使用su命令成为超级用户的时候,使用管理系统的一些命令,例如shutdown时,会给我一个"bash:shutdown:commandnot found".根据解决问题的一般思路:


首先这个命令是一定存在的,现在找不到,估计是寻找的路径不对,我首先查看了一下,shutdown的命令位置:/sbin/shutdown,然后是超级用户的搜索路径:(可以通过环境变量得到)


env:


PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/xishan/bin


切换到root用户后,我看了下root用户的环境变量:


PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin


对比很明显,su的超级用户的环境变量差别很大,怎么才能得到root的环境变量呢?


是不是su有其他用法,man su ,看了,果然,


su [OPTION] ...[-] [USER [ARG]...]


-,-l, --login


   make theshell a login shell

应该是su - root / su -l   /su--login 才能作为root用户登陆


问题得到解决了。




但是我以前用过NETBSD系统,使用su命令的时候,也可以使用shutdown的,而不用其他命令,这两个系统内核都差不多,应该可以通过修改环境变量达到目的吧?


vi ~/.bashrc


增加了一条 export PATH=$PATH:/sbin


重新启动之后,通过su命令,进入到超级用户,然后察看了一下环境变量,


PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/xishan/bin:/sbin


增加成功,然后测试了一下:shutdown ,OK,下次直接使用su即可了。
参考链接:http://www.jb51.net/LINUXjishu/32192.html
http://hi.baidu.com/bullfire/blog/item/e8657b4ead11dc02b3de05e1.html

<think>我们正在解决用户在使用arm-linux-gcc时遇到“command not found”错误的问题。根据引用,我们可以总结出以下几个常见原因及解决方案: 1. **权限问题**:在普通用户下设置了PATH,但使用sudo时环境变量未传递(引用[1][3])。 2. **未正确安装交叉编译工具链**:可能安装了x86架构的gcc而不是arm架构的交叉编译器(引用[2])。 3. **安装包名称错误**:使用apt-get安装时可能包名不正确(引用[2])。 4. **路径设置问题**:即使安装正确,但PATH环境变量未包含编译器路径(引用[3])。 5. **文件不存在或符号链接问题**:编译器文件可能不存在,或者需要创建符号链接(引用[4])。 下面我们将逐步解决: ### 1. 确认交叉编译器是否安装 首先,我们需要确认交叉编译器是否已经正确安装在系统上。通常,交叉编译器会安装在特定目录,例如`/usr/local/arm/`或`/opt/`下。我们可以通过以下命令查找: ```bash # 在常见安装目录下搜索 sudo find / -name "*arm-linux-gcc*" 2>/dev/null ``` 如果找到类似`/usr/local/arm/4.3.2/bin/arm-linux-gcc`的路径,说明已安装。 ### 2. 安装交叉编译器(如果未安装) 如果未找到,需要安装。在Ubuntu中,可以通过以下命令安装: ```bash # 更新软件包列表 sudo apt update # 安装gcc-arm-linux-gnueabi(适用于ARM架构) sudo apt install gcc-arm-linux-gnueabi # 或者安装gcc-arm-linux-gnueabihf(带硬件浮点支持) sudo apt install gcc-arm-linux-gnueabihf ``` 安装后,编译器命令可能是`arm-linux-gnueabi-gcc`或`arm-linux-gnueabihf-gcc`,而不是`arm-linux-gcc`。 ### 3. 设置环境变量 如果已经安装,但直接输入`arm-linux-gcc`提示未找到,可能是因为环境变量PATH未包含该编译器的路径。我们可以将路径添加到PATH中: ```bash # 临时添加到当前终端(替换为你的实际路径) export PATH=$PATH:/path/to/compiler/bin # 例如,如果安装路径是/usr/local/arm/4.3.2/bin export PATH=$PATH:/usr/local/arm/4.3.2/bin ``` ### 4. 解决sudo环境变量问题 当使用sudo执行命令时,会使用root的环境变量,而root的PATH可能不包含交叉编译器的路径。解决方法: - 方法1:使用sudo时显式指定PATH(推荐) ```bash sudo env PATH=$PATH make ``` - 方法2:将交叉编译器路径添加到root的PATH中(通过修改root的.profile或.bashrc) ```bash # 使用sudo切换到root,然后编辑配置文件 sudo -i echo 'export PATH=$PATH:/usr/local/arm/4.3.2/bin' >> ~/.bashrc source ~/.bashrc exit ``` - 方法3:在/etc/profile中设置(全局生效,所有用户) ```bash echo 'export PATH=$PATH:/usr/local/arm/4.3.2/bin' | sudo tee -a /etc/profile source /etc/profile ``` ### 5. 创建符号链接(可选) 如果安装的交叉编译器命令名称不是`arm-linux-gcc`,我们可以创建一个符号链接: ```bash # 假设实际命令是arm-none-linux-gnueabi-gcc sudo ln -s /path/to/arm-none-linux-gnueabi-gcc /usr/local/bin/arm-linux-gcc ``` ### 6. 验证安装 设置完成后,验证: ```bash # 检查版本 arm-linux-gcc -v # 如果创建了符号链接,使用新命令 arm-linux-gnueabi-gcc -v ``` ### 7. 处理“未找到命令”的其他可能原因 - **32位库支持**:在64位系统上运行32位编译器可能需要安装支持库: ```bash sudo apt install lib32z1 lib32ncurses5 ``` - **文件权限**:确保编译器可执行: ```bash sudo chmod +x /path/to/arm-linux-gcc ``` ### 总结步骤 1. 确认交叉编译器是否安装,如果没有则安装。 2. 将编译器所在目录添加到PATH环境变量。 3. 处理sudo环境变量问题(使用sudo env或修改root的环境变量)。 4. 如果命令名称不一致,创建符号链接。 5. 验证安装。 通过以上步骤,应该能够解决“arm-linux-gcc: command not found”的问题。 ### 相关问题 1. 如何在Ubuntu中安装ARM交叉编译器? 2. 为什么使用sudo时找不到arm-linux-gcc? 3. 如何将交叉编译器的路径永久添加到环境变量? 4. 交叉编译器命令名称不一致怎么办? 5. 在64位Ubuntu上运行32位交叉编译器需要安装哪些库? [^1]: [arm-linux-gcc找不到命令](https://blog.sina.com.cn/s/blog_4670451c0100e1uw.html) [^2]: [Ubuntu下如何解决问题arm-linux-gcc:未找到命令](https://blog.sina.com.cn/s/blog_4670451c0100e1uw.html) [^3]: [ubuntu 下搭建arm-linux-gcc 命令未找到问题](http://blog.sina.com.cn/s/blog_4670451c0100e1uw.html) [^4]: [arm-none-linux-gnueabi-gcc:未找到命令](https://blog.sina.com.cn/s/blog_4670451c0100e1uw.html)</think>### 解决 `arm-linux-gcc: command not found` 错误 以下是逐步解决方案,结合引用内容和常见问题场景: --- #### 1. **确认安装状态** ```bash # 检查编译器是否存在 ls /usr/local/arm/ # 默认安装路径 find / -name "*arm-linux-gcc*" 2>/dev/null # 全盘搜索 ``` - ✅ 如果找到类似 `/usr/local/arm/gcc-4.3.3/bin/arm-linux-gcc` 的路径,说明已安装 - ❌ 如果未找到,需要先安装交叉编译器 --- #### 2. **安装交叉编译器**(若未安装) ```bash # 更新软件源 sudo apt update # 安装 ARM 交叉编译器(选择其一) sudo apt install gcc-arm-linux-gnueabi # 基础版 sudo apt install gcc-arm-linux-gnueabihf # 带硬件浮点支持 ``` > 📌 安装后编译器名可能是 `arm-linux-gnueabi-gcc`,需创建符号链接: > ```bash > sudo ln -s /usr/bin/arm-linux-gnueabi-gcc /usr/local/bin/arm-linux-gcc > ``` --- #### 3. **解决环境变量问题**(最常见原因) ##### 情况1:普通用户权限 ```bash # 临时生效(仅当前终端) export PATH=$PATH:/usr/local/arm/gcc-4.3.3/bin # 永久生效(添加到用户配置文件) echo 'export PATH=$PATH:/usr/local/arm/gcc-4.3.3/bin' >> ~/.bashrc source ~/.bashrc ``` ##### 情况2:使用 `sudo` 时找不到(关键!) ```bash # 方法1:使用 sudo -E 保留环境变量 sudo -E make zImage # 方法2:切换到 root 环境操作 sudo -s export PATH=$PATH:/usr/local/arm/gcc-4.3.3/bin make zImage exit # 方法3:全局配置(推荐) sudo nano /etc/environment # 在 PATH 末尾添加 :/usr/local/arm/gcc-4.3.3/bin ``` > 💡 引用[3]证实:`sudo` 会重置环境变量,需特殊处理[^3] --- #### 4. **检查文件权限** ```bash # 赋予执行权限 sudo chmod +x /usr/local/arm/gcc-4.3.3/bin/arm-linux-gcc* # 验证可执行性 /usr/local/arm/gcc-4.3.3/bin/arm-linux-gcc --version ``` --- #### 5. **处理架构不匹配问题** ```bash # 检查当前编译器架构 gcc -dumpmachine # 输出 x86_64 表示主机架构 # 确认 ARM 编译器架构 arm-linux-gcc -dumpmachine # 应输出 arm-linux-gnueabi ``` > ⚠️ 引用[2]指出:误装 x86 版 GCC 会导致此错误[^2],需确保安装的是 ARM 交叉编译器 --- #### 6. **验证修复** ```bash # 检查版本信息 arm-linux-gcc -v # 测试编译 echo 'int main(){return 0;}' > test.c arm-linux-gcc test.c -o test file test # 应显示 ELF 32-bit LSB executable, ARM ``` --- ### 常见错误排查表 | 现象 | 原因 | 解决方案 | |------|------|----------| | `No such file or directory` | 路径错误/文件缺失 | 执行 `find / -name arm-linux-gcc` 定位文件 | | `Permission denied` | 权限不足 | `sudo chmod +x [编译器路径]` | | `invalid ELF header` | 文件损坏 | 重新安装编译器 | | 仅在 sudo 下失效 | 环境变量重置 | 使用 `sudo -E` 或修改 `/etc/sudoers` | > 📌 引用[4]建议:若路径包含空格或特殊字符,尝试创建符号链接到 `/usr/local/bin`[^4] --- ### 相关问题 1. 如何为不同 ARM 架构(如 Cortex-A53 和 Cortex-M4)选择正确的交叉编译器? 2. 在 Docker 容器中配置 ARM 交叉编译环境需要注意哪些问题? 3. 如何验证交叉编译生成的可执行文件能否在目标 ARM 设备上运行? 4. 交叉编译时出现 `libc.so.6 not found` 错误该如何解决? 5. 在 Windows 的 WSL2 中安装 ARM 交叉编译器有哪些特殊配置? [^1]: [arm-linux-gcc 权限问题解决方案](https://blog.sina.com.cn/s/blog_4670451c0100e1uw.html) [^2]: [Ubuntu 下 ARM 编译器安装问题](https://blog.sina.com.cn/s/blog_4670451c0100e1uw.html) [^3]: [sudo 环境变量问题详解](http://blog.sina.com.cn/s/blog_4670451c0100e1uw.html) [^4]: [符号链接解决路径问题](https://blog.sina.com.cn/s/blog_4670451c0100e1uw.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值