- How to find list of available shells by command-line?
- 4 Answers 4
- Determine the Current Shell in Linux
- 1. Overview
- 2. Using the echo Command
- 2.1. echo $SHELL
- 2.2. echo $0
- 3. Using the ps Command
- 4. Viewing the /etc/passwd File
- 5. Using the lsof Command
- 6. Using the readlink Command
- 7. Using /proc/$$/cmdline
- 8. Other Approaches
- 9. Conclusion
- Как определить и изменить командную оболочку (shell) в Linux
- Оболочки Linux
- Как определить текущую командую оболочку
- Способ 1
- Способ 2
- Способ 3
- Как посмотреть список оболочек, доступных в системе
- Как временно переключиться на другую оболочку
- Как изменить оболочку
- Заключение
- 4 Ways to Check Which Shell You are Using on Linux
- 1. Using echo command
- 2. Using ps command
- 3. By viewing /etc/passwd file
- 4. Using lsof command
- How to check the valid login shells
- Conclusion
How to find list of available shells by command-line?
(IFS=: && grep -rl tcsetpgrp $PATH | xargs grep -rl setrlimit) on a Debian system seems to give a good approximation.
4 Answers 4
To list available valid login shells for use at time, type following command:
pandya@pandya-desktop:~$ cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /bin/ksh93
For information about shell visit wikipedia.
Note that this will not work for all systems. E.g. Solaris and HP-UX do not have an /etc/shells file by default.
You can also use chsh -l This will print the list of shells.
[anurag@focused ~]$ chsh -l /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin
@Pandya can you provide the complete command you are using. You might be using it with combination of other shell methods or constructs like ((. )) or [. ] or [[. ]]
@Pandya man7.org/linux/man-pages/man1/chsh.1.html This provides -l option. Just click on the link on the top of the page, to go to linux-util man page
On at least OpenBSD and NetBSD:
On (Ubuntu) Linux and many other Unices (including BSDs):
On Solaris, the file /etc/shells may not exist. The list of valid shells is contained in the shells(4) manual. On my vanilla Solaris 11.3 system, this lists the following shells:
/bin/bash /usr/bin/bash /bin/pfbash /usr/bin/pfbash /bin/csh /usr/bin/csh /bin/pfcsh /usr/bin/pfcsh /bin/jsh /usr/bin/jsh /sbin/jsh /usr/sbin/jsh /bin/ksh /usr/bin/ksh /bin/pfksh /usr/bin/pfksh /bin/ksh93 /usr/bin/ksh93 /bin/pfksh93 /usr/bin/pfksh93 /bin/sh /usr/bin/sh /bin/pfsh /usr/bin/pfsh /bin/tcsh /usr/bin/tcsh /bin/pftcsh /usr/bin/pftcsh /sbin/sh /usr/xpg4/bin/sh /sbin/pfsh /usr/xp4/bin/pfsh /bin/zsh /usr/bin/zsh /bin/pfzsh /usr/bin/pfzsh /usr/sfw/bin/zsh
It’s worth noting that on my installation, neither /usr/sfw/bin/zsh nor /usr/xp4/bin/pfsh exists.
A shorter list of valid Solaris shells (duplicates of each shell removed):
/bin/bash /bin/ksh /bin/pfcsh /bin/pfsh /bin/sh /bin/csh /bin/ksh93 /bin/pfksh /bin/pftcsh /bin/tcsh /bin/jsh /bin/pfbash /bin/pfksh93 /bin/pfzsh /bin/zsh
Determine the Current Shell in Linux
The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.
To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.
Connect your cluster and start monitoring your K8s costs right away:
1. Overview
A shell is a program that provides a command-line interface to the operating system.
Linux and Unix-like operating systems provide different shells to the users. Bash (Bourne Again Shell), csh (C Shell), ksh (Korn Shell), and sh (Bourne Shell) are the most common ones.
In this tutorial, we’ll look at various ways to find out the current shell we are working in.
2. Using the echo Command
The echo command in Linux is used to display a line of text or string that is passed to it as an argument. We can also use this command to print the current shell.
2.1. echo $SHELL
The $SHELL variable contains the name of the default shell. We can display its value:
While this approach works in most cases, it is not a reliable way since the currently running shell may not be the default shell.
2.2. echo $0
We can also use the echo command with the $0 variable:
This approach works well on the command line but not from within a script. Within a script file, the $0 variable will not print the current shell. Instead, it prints the name of the file or the program.
3. Using the ps Command
The ps (process status) command provides a snapshot of the currently running processes:
$ ps PID TTY TIME CMD 4467 pts/0 00:00:00 bash 5379 pts/0 00:00:00 ps
The last column CMD in the output shows that the bash shell is currently running.
4. Viewing the /etc/passwd File
/etc/passwd file is a plain text file in Linux which contains users’ account information such as username, user ID, group ID, home directory, and shell.
Using the grep command, we can search this file for a string that starts with the username of the currently logged in user:
$ grep "^$USER" /etc/passwd vroot:x:1000:1000:Vroot:/home/vroot:/bin/bash
The last part of the output shows that the default shell is bash. Again, this is not a reliable approach since the default shell may not always be the current shell.
5. Using the lsof Command
The lsof command lists all the open files of all the running processes. We can use this command with the -p option to only select the files belonging to the current shell’s process ID:
$ lsof -p $$ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 2796 vroot cwd DIR 253,2 4096 2097153 /home/vroot bash 2796 vroot rtd DIR 253,0 4096 2 / bash 2796 vroot txt REG 253,0 1514000 2490662 /usr/bin/bash bash 2796 vroot mem REG 253,0 8406312 131168 /var/lib/sss/mc/passwd . other lines omitted . bash 2796 vroot 255u CHR 136,0 0t0 3 /dev/pts/0
The $$ is a special parameter that expands to the process ID of the current shell.
The first column COMMAND in the output shows that the running shell is bash.
6. Using the readlink Command
The readlink command prints resolved symbolic links or canonical file names. /proc/[pid]/exe is a symbolic link containing the actual pathname of the executed command with process id pid.
We can use the $$ special parameter to run readlink on the current shell’s process id:
$ readlink /proc/$$/exe /usr/bin/bash
From the pathname to the shell command, we can infer that the shell we are running is bash.
7. Using /proc/$$/cmdline
/proc/[pid]/cmdline is a read-only file that contains the complete command line for any process with id pid.
We can use the $$ special parameter as the pid:
The output shows that we are running the bash shell.
8. Other Approaches
Sometimes none of the approaches we looked at might work. This can happen if the executable does not match the running shell.
In such cases, we can look at some shell-specific environment variables to infer which shell is running.
For instance, if it’s a bash shell, the $BASH variable will be set. Similarly, in the tcsh shell, the $version variable will be set.
The $PS1 and $PS2 variables are set in the sh shell, while the $PS3 and $PS4 variables are set in the ksh shell.
9. Conclusion
In this article, we learned various ways of determining which shell we are currently running in Linux. We looked at examples for several approaches and the limitations of each approach. We also learned about some heuristics we can use when none of the common approaches work.
Как определить и изменить командную оболочку (shell) в Linux
Командная оболочка или командный интерпретатор в Linux — это программа, которая в текстовой среде выступает в качестве интерфейса между пользователем и операционной системой. Она интерпретирует вводимые команды с терминала и вызывает необходимые программы.
Когда вы работаете в терминале, именно командная оболочка обрабатывает вводимые вами команды. Более того, оболочки Linux поддерживают написание программ на языке оболочки.
Оболочки Linux
Одна из самых популярных командных оболочек — это оболочка Bash (Bourne Again Shell). Она используется по умолчанию в большинстве дистрибутивов Linux.
Существуют разные оболочки Linux. Можно отметить:
Оболочки могут очень сильно отличаться друг от друга. Они отличаются функциональностью, синтаксисом команд, строкой приветствия, дружелюбностью к пользователю и другими параметрами и возможностями.
Как определить текущую командую оболочку
Есть несколько способов определить оболочку, используемую по умолчанию в вашей системе Linux. Рассмотрим несколько из них, так как в разных системах (и оболочках) какие-то способы могут не сработать.
Также нужно знать, что у разных пользователей системы могут использоваться разные оболочки.
Способ 1
Переменная окружения SHELL хранит путь до исполняемого файла оболочки. Выполним команду:
Из вывода команды, мы видим, что используется оболочка bash.
Способ 2
Также можно воспользоваться командой echo $0 . Данная команда выведет на экран имя текущего работающего процесса, внутри которого она выполнена. Так как мы выполняем команду внутри оболочки, то будет выведено имя оболочки.
Способ 3
Определим, работающий процесс оболочки командой ps.
ps -p $$ PID TTY TIME CMD 10792 pts/3 00:00:00 bash
Как посмотреть список оболочек, доступных в системе
Список оболочек, которые в данный момент установлены и доступны в системе Linux, хранится в файле /etc/shells
Выведем содержимое файла /etc/shells , для этого выполняем команду:
cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/bash /bin/rbash /bin/dash
Как временно переключиться на другую оболочку
Чтобы временно переключиться на другую оболочку, достаточно выполнить в терминале команду, соответствующую ее имени. После этого вы переключитесь на новую оболочку.
Например, переключимся на оболочку sh. Выполняем команду:
Как изменить оболочку
Для изменения командной оболочки на постоянной основе служит команда chsh (от слов change shell).
Чтобы изменить оболочку текущего пользователя нужно выполнить команду:
В качестве параметра путь_новой_оболочки необходимо указать путь до исполняемого файла оболочки, который вы можете найти в файле /etc/shells (см. выше).
Например, изменим оболочку на sh. Для этого выполняем команду (при выполнении команды нужно будет ввести пароль):
После этого нужно выйти и снова войти в систему.
Чтобы изменить оболочку, используемую по умолчанию, для другого пользователя, то команде chsh необходимо указать имя этого пользователя:
Заключение
Мы рассмотрели, как определить текущую оболочку Linux, как просмотреть список доступных оболочек, а также как изменить оболочку, используемую по умолчанию.
Чтобы получить информацию о какой-либо оболочке (доступной в системе) можно воспользоваться Man-страницами. Например:
Дополнительные оболочки можно устанавливать средствами системы (из репозиториев). Например, для установки оболочки fish в Ubuntu Linux, выполните команду
4 Ways to Check Which Shell You are Using on Linux
Out of the box, Linux provides a wide variety of shells. There is bash (Bourne Again shell) shell which ships by default in many Linux distributions. We also have sh (Bourne Shell), tcsh (TC shell), csh (C shell), Zsh (Z shell) and ksh (Korn Shell).
Curious to know which shell you are using on your Linux system? In this guide, we explore different ways that you can use to check which shell you are currently using in Linux.
1. Using echo command
The Linux echo command is a built-in command that is used to print the output of a string which is passed as an argument. Additionally, you can use the echo command to check the shell that you are running commands in. To accomplish this, execute:
The output shows that I am using the bash shell. Additionally, you can simply run the command:
To get the PID of the shell that you are currently in, run:
2. Using ps command
Commonly used for listing running processes, the ps command in its basic format sheds light on the shell that you are using. Simply execute the command:
From the first line of the output, we can clearly see the PID of the shell and the last column prints out the type of shell, in this case — bash.
Alternatively, you can run the command:
You can also use ps -p $$ -o args= which output just the shell name.
3. By viewing /etc/passwd file
The grep command can be used to probe the /etc/passwd file that contains attributes of the users such as username, user ID and group ID.
To display the shell used, invoke the command:
At the very last segment, we get to see the bash used, in this case /bin/bash This also gives you a glimpse of which shell is opened first when you first log in to your system.
4. Using lsof command
Ordinarily, the lsof command, short for list of open files, is used to provide a list of open files on your system. However, when used with the -p $$ flag, it gives a pointer to the shell you are in when you look at the first column of the output.
For example, we can clearly see that we are on the bash shell.
How to check the valid login shells
We have seen various ways that you can employ to check the shell that you are currently in. If you want to know the valid shells on your system, check the /etc/shells file, This file will provide you with the full pathnames of valid login shells in your system. Using the cat command, view the file as shown:
Conclusion
In this guide, we have shared simple but nifty ways that you can use to know which shell you are working on. This is important when writing scripts so that you can know how to start off writing the shebang header. We do hope that this tutorial was beneficial. Send us a shout and don’t forget to share this guide on your social platforms.
If this resource helped you, let us know your care by a Thanks Tweet. Tweet a thanks