在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
(睡醒午觉后,头脑特别清晰,于是整理一篇把曹同学的昨天问题解答了^_^,收集资料的过程,也是学习的过程) 背景: 昨天快下班时,每次赶燕郊班车的曹同学都会准时跑掉,可是都已经快7点了,曹同学还在座位无动于衷,这很反常,过了一小会,曹同学跑过来。 曹同学:我犯错误了~~~把一台linux机器搞挂了~~~ me:10.10.0.5?告警中层? 曹同学:是的 me:挂了是什么情况? 曹同学:把mqadmin用户改成c shell后,所有命令都失效了... me:(觉得很神奇,但只要不是丢文件,只是登录不进去,也没什么紧张的,多数都是环境变量问题吧) 登录演示一番,mqadmin由 b shell 改为 c shell 后,环境变量使用.cshrc了 进去的现象就是:除了cd 命令,其他命令 全部提示 command not found. 所以无法到 mqadmin用户的根目录去删除 .cshrc (曹同学想去 删除.cshrc 那么其他命令就会生效了)想法是对的,但是怎么进去呢;而且删了.cshrc就能ok。那就说明环境变量的事情啊。
为了能够登录进去,先使用root用户登录,修改/etc/passwd文件,把 csh 用户 改成 bash。ok啦,b shell 用户就可以 删除.cshrc了。木有问题了。
但是问题是:曹同学还是想使用c shell 自称熟悉 c shell。(我使用b shell 可不是因为熟悉b shell,是因为是默认。不过给我b shell 我就用bash_profile,给c shell 就用cshrc,我可没有曹同学那么挑剔^_^)
我知道用户从b shell 修改为 c shell 命令不生效,肯定是环境变量的问题,但是怎么解释这个事情呢。那就要搜集几篇文章了。 1 为什么linux 下b shell 用户都木有问题? 第一個流行的 shell 是由 Steven Bourne 發展出來的,為了紀念他所以就稱為 Bourne shell ,或直接簡稱為 sh !而後來另一個廣為流傳的 shell 是由柏克萊大學的 Bill Joy 設計依附於 BSD 版的 Unix 系統中的 shell ,這個 shell 的語法有點類似 C 語言,所以才得名為 C shell ,簡稱為 csh !由於在學術界 Sun 主機勢力相當的龐大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一個很重要而且流傳很廣的 shell 之一 。 因为Linux 预设的是 Bash Shell 哦,默认的 Shell linux的Bash shell,Unix的c shell 还有各种扩充出来的ksh tcsh...(语法不通,道理相同...) root用户默认是bash呢...
2 command not found 几乎都是环境变量的事 换了c shell后,为什么ls 命令门都不生效了呢,为啥only cd一个命令还有效呢?
ls命令们在哪里? /bin: bin为binary的简写主要放置一些系统的必备执行档例如: cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。 /sbin: 主要放置一些系统管理的必备程式例如: cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。 /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等。 /usr/sbin: 放置一些网路管理的必备程式例如: dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等
既然大部分命令们都在 /bin /sbin/ /usr/bin /usr/sbin里面,那么就在path里面将它们都加进去了,以防 你再改成cshrc它不让命令们生效啊 ^_^ $PATH $HOME/bin /sbin /usr/bin /usr/sbin
ok啦,这样用户从b shell 改成 c shell ,只需要用root用户在/etc/passwd里面将bash 改成csh 就可以了。只要在.cshrc里面加上path,而且 要 source .cshrc 生效哦~~~
3 为什么cd命令没有收到影响捏??? 网上的解释:Bash 有一些自己内部的命令,cd 就是其中一个。 因为在我们的系统中 cd 命令其实并没有对应某个 binary,但是我们却又仍然可以执行这个命令,这就是因为 cd 其实是 BASH 的一个内部命令。内部命令都是被整合进入 shell 里面的
补充知识:b shell 下的bashrc bash_profile profile (. ./.bash_profile使环境变量生效,至于是.bashrc还是.bash_profile只是login的区别了。) /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. ~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件. ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.(每个用户都有一个.bashrc文件,在用户目录下) ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. ~/.bash_profile 是交互式、login 方式进入bash 运行的; ~/.bashrc 是交互式 non-login 方式进入bash 运行的; 通常二者设置大致相同,所以通常前者会调用后者。
当新创建一个b shell 用户的时候,系统默认生成三个文件.bashrc .bash_profile .bash_logout
按照上述阐述各文件之间的关系,简言之.bashrc与.bash_profile是两种不同的登入方式 .bashrc if一段呼叫/etc/basrc(linux Red Hat 特有的) .bash_profile if 一段判断家目录是否有bashrc存在,读取家目录的bashrc中设定。 login 与 non-login
.bashrc 或者.bash_profile 如何生效呢 使用 . 或者 source . ./.bash_profile source ~/.bash_profile
--by Joyce
happy weekend. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论