点击↑深色口袋物联,选择关注公众号,获取更多内容,不迷路
问题
最近在集成amy62x平台时,发现默认生成的根文件系统,使用ls,文件和目录都是一个“颜色”,没有通过颜色进行区别
但在nxp平台上,默认是有颜色区分的,
如下所示,在不同的平台,都通过ssh登录,同样使用ls,但显示结果不同
分析
颜色方案,一般有2种选择
一种是终端控制,可能默认的配色不同,当然也可以自定义设置,
一种是命令控制,如在命令行敲入命令ls,实际上不同的平台,实际执行的不一定是ls,也许是ls --color=auto
定位
那么当前的问题,明显不是终端不同导致的,那是什么原因呢?
通过网络查找和AI问答,应该问题出在命令上
NXP平台使用了alias机制,将默认的ls,关系为ls --color=auto,导致其可以显示颜色
而Ti平台没有alias,就是ls,所以没有显示颜色
而在ti平台,使用ls --color=auto,同样可以显示不同的颜色

进阶
那么ls --color=auto到底在哪里关联上的呢
系统的配置文件,一般在etc目录,所以查找,确认在/etc/profile文件里存在
root@imx8mqrom5720a1:~# grep -rn color /etc//etc/profile:33:alias ls='/bin/ls --color=auto'
为什么要放到这个文件呢?
这就要从系统登录初始化说起
在用户登录时,分为系统级配置和用户级配置的设置和生效
系统级配置,主要涉及/etc/profile和/etc/bashrc;用户级配置,主要涉及~/.bash_profile、~/.bashrc、~/.profile,它们的主要功能如下描述:
- • /etc/profile系统级登录初始化文件,所有用户登录时执行。包含全局环境变量(如 PATH、USER)和系统级配置。
- • /etc/bashrc,系统级交互式 shell 启动文件,所有用户每次打开新 shell 时执行。通常通过 ~/.bashrc 调用。
- • ~/.bash_profile,用户级登录初始化文件,仅在用户登录时执行(如通过 SSH 登录或本地终端)。优先级高于 ~/.bashrc。
- • ~/.bashrc,用户级交互式非登录,shell 启动文件,每次打开新 shell 时执行(如在终端中输入 bash 命令)。包含别名、函数和自定义提示符。
- • ~/.profile,兼容性文件,某些系统(如 Debian)使用 ~/.profile 替代 ~/.bash_profile。登录时执行。
总的来说,这5种的主要特点如下
| | |
/etc/profile | | |
/etc/bashrc | | |
~/.bash_profile | | |
~/.bashrc | | |
~/.profile | | |
又因为在arm linux系统中,默认只存在/etc/profile中,所以只能修改它
解决
作为一名应用开发者,只要在profile中,加入如下代码,重启就可以生效
alias ls='/bin/ls --color=auto'
总结
颜色区分不同的文件或目录,确实可以给使用者带来方便
通过控制终端,可以实现,但不具备通用性,换了电脑或平台,可能就显示不同的特性
而使用ls自带的功能,可以大大方便使用
但每次多打 --color=auto,又显得累赘
所以作为一名bsp或系统工程师,怎样在制作根文件系统中,自动修改,让生成的根文件系统自动就生效就显得很有必要
接下来通过两篇,分别实现buildroot机制和yocto机制下的profile内容修改