Setting default path linux

Setting default path when opening a terminal session

I am new to Ubuntu. Whenever I open a terminal my current working directory /home/Varun (as found by typing pwd ). Is there any way I can make the terminal’s path to be set as /home/Varun/Desktop/Java Files when it opens?

8 Answers 8

Just run the following command in your terminal:

echo "cd ~/Desktop/Java\ Files" >> ~/.bashrc 

The above command will add a new line in your ~/.bashrc file that contain cd ~/Desktop/Java\ Files and that will change your default working directory to /home/Varun/Desktop/Java Files when you will open the terminal.

Reopen the terminal and you will see the difference.

But whenever you need open through a file manager, it’ll still open the path you gave in ~/.bashrc file. So, this is not the best option.

You can add the following line to the end of your ~/.bashrc

Although changing the $HOME variable and calling cd command (i’ll use cmd for short) in .bashrc file is right answer to your question,

i find it more comfortable to create alias (for example cdh ) which takes me directly to directory i want.

The reason is that all files which configures other programs (Just like .bashrc for example) stay in default $HOME directory and i can work in my » cdh directory» without interuption from theese files.

If i needed to go back to $HOME directory i can allways use cd cmd.

In some linux distros the .bashrc file is shipped with command or commands which runs or run one or multiple other files intended for that specific use (for example .bash_aliases )

so decide for yourself if you want to use them or not,

in case you want to use them, just use it the same as you use .bashrc but with commands inteded for the specified file.

so in .bashrc (or in .bash_aliases or whichever file you’ve chosen)

alias cdh='cd /home/Varun/Desktop/Java Files' 

if you don’t like cdh alias don’t be afraid to use different name but make sure there isn’t any other cmd or alias named like this, couse you could make that cmd more or less unusable.

You can check if the name is taken by triyng to call it but i would sugest a type cmd with argument of name of another cmd.

The type cmd should tell you if the given cmd is alias, binary file, or bash script, or . whatever. And therefore will tell you when cmd doesn’t exist. (Which is what you want in this case)

Источник

Переменная PATH в Linux

Когда вы запускаете программу из терминала или скрипта, то обычно пишете только имя файла программы. Однако, ОС Linux спроектирована так, что исполняемые и связанные с ними файлы программ распределяются по различным специализированным каталогам. Например, библиотеки устанавливаются в /lib или /usr/lib, конфигурационные файлы в /etc, а исполняемые файлы в /sbin/, /usr/bin или /bin.

Читайте также:  Avr gcc toolchain linux

Таких местоположений несколько. Откуда операционная система знает где искать требуемую программу или её компонент? Всё просто — для этого используется переменная PATH. Эта переменная позволяет существенно сократить длину набираемых команд в терминале или в скрипте, освобождая от необходимости каждый раз указывать полные пути к требуемым файлам. В этой статье мы разберёмся зачем нужна переменная PATH Linux, а также как добавить к её значению имена своих пользовательских каталогов.

Переменная PATH в Linux

Для того, чтобы посмотреть содержимое переменной PATH в Linux, выполните в терминале команду:

На экране появится перечень папок, разделённых двоеточием. Алгоритм поиска пути к требуемой программе при её запуске довольно прост. Сначала ОС ищет исполняемый файл с заданным именем в текущей папке. Если находит, запускает на выполнение, если нет, проверяет каталоги, перечисленные в переменной PATH, в установленном там порядке. Таким образом, добавив свои папки к содержимому этой переменной, вы добавляете новые места размещения исполняемых и связанных с ними файлов.

Для того, чтобы добавить новый путь к переменной PATH, можно воспользоваться командой export. Например, давайте добавим к значению переменной PATH папку/opt/local/bin. Для того, чтобы не перезаписать имеющееся значение переменной PATH новым, нужно именно добавить (дописать) это новое значение к уже имеющемуся, не забыв о разделителе-двоеточии:

Теперь мы можем убедиться, что в переменной PATH содержится также и имя этой, добавленной нами, папки:

Вы уже знаете как в Linux добавить имя требуемой папки в переменную PATH, но есть одна проблема — после перезагрузки компьютера или открытия нового сеанса терминала все изменения пропадут, ваша переменная PATH будет иметь то же значение, что и раньше. Для того, чтобы этого не произошло, нужно закрепить новое текущее значение переменной PATH в конфигурационном системном файле.

В ОС Ubuntu значение переменной PATH содержится в файле /etc/environment, в некоторых других дистрибутивах её также можно найти и в файле /etc/profile. Вы можете открыть файл /etc/environment и вручную дописать туда нужное значение:

Можно поступить и иначе. Содержимое файла .bashrc выполняется при каждом запуске оболочки Bash. Если добавить в конец файла команду export, то для каждой загружаемой оболочки будет автоматически выполняться добавление имени требуемой папки в переменную PATH, но только для текущего пользователя:

Выводы

В этой статье мы рассмотрели вопрос о том, зачем нужна переменная окружения PATH в Linux и как добавлять к её значению новые пути поиска исполняемых и связанных с ними файлов. Как видите, всё делается достаточно просто. Таким образом вы можете добавить столько папок для поиска и хранения исполняемых файлов, сколько вам требуется.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Default values of PATH variable

After searching all over the internet, I came know where to alter the values of PATH variable in case of interactive/non-interactive — login/non-login shell combinations. Found from another post https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/ I have «/bin/sh» as default login shell and only /etc/profile file is being used to export all needed environment variables in my system. And in case of non-interactive login shell, /etc/profile is not being referred too, even though above link says it would. But still when I execute,

ssh -4 -q -o StrictHostKeyChecking=no root@xxxx "env" Password: SHELL=/bin/sh . **PATH=/usr/bin:/bin:/usr/sbin:/sbin** . 

I could see some default values for PATH variable. I would like to know where exactly these default values of PATH are being set.

Читайте также:  Linux copy file content to clipboard

2 Answers 2

You should not care at all where PATH is set. You should set PATH always in your shell startup file ( .profile or .bashrc ).

This way you do not rely on someone else’s soon useless assumption what directories should be in your PATH . The only one who knows is YOU.

and then add to your liking with

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

PS: In your specific case, it looks like the PATH is inherited from the remote end’s SSH daemon which eventually forks your shell. If a shell does not inherit a PATH from its parent, it will set a default value that you can query with env -i /bin/sh -c ‘echo $PATH’ .

Источник

What files set the default PATH

I’m puzzled as to what files set the default PATH on Linux (specifically, Debian). (I’m not interested in the user-specific ones in ~ ( .profile , xsessionrc , maybe others) here.) So far I’ve ruled out the (not-so-)usual suspects /etc/ and /usr/sbin/sshd but still my default PATH is set to /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games every time I log in. Grepping for «/local/games» in /etc turns up nothing. I suspect it’s hard coded in a binary somewhere. I’m using bash

@StephenKitt I do, but the paths are ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin there

2 Answers 2

In a nutshell, an empirical rule for a standard user, on Debian 11

  1. /etc/profile , sets the authoritative PATH;
  2. /etc/environment or /etc/default/locale ;
  3. /usr/local/bin:/usr/bin:/bin:/usr/games (if GDM,XDM. or OpenSSH);
  4. /etc/login.defs ‘ ENV_PATH option (if console);
  5. fallback on getconf PATH — or C equivalent (if console).

if GDM,XDM. or OpenSSH means: if your session is a graphical desktop or SSH.

if console means : if your session is a console, ie not in a graphical desktop or SSH (see below).

This should not fit on su nor sudo environments.

Below, we assume the user logs out/in between each test.

A test setup

  • VERSION=»11 (bullseye)»
  • Display Manager: GDM3
  • Desktop: Gnome, terminal: gnome-terminal, shell: bash

Afer removing user’s ~/.bashrc , ~/.bash_profile , ~/.bash_login and ~/.profile , the command printenv PATH returns : /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games . A search on this string in /etc pops up the /etc/profile file.

First step: change /etc/profile and see how it goes

After commenting out /etc/profile lines 4-9 (PATH manipulation section), printenv PATH then says: /usr/local/bin:/usr/bin:/bin:/usr/games . The lack of /usr/local/games in the PATH shows the action had an effect on the system, sweet!

Next step: look for /usr/games string wherever we can

Things become a bit more tricky, you’d need to install source packages xdm , gdm3 , lightdm , openssh . Then looking for /usr/games shows that three of them ( xdm , gdm3 , openssh ) set some kind of default_path in debian/rules file.

Читайте также:  Astra linux толстый клиент

Gdm3’s code states that this value is used if pam_getenv(3) doesn’t return a PATH value.

This one is slightly different, there is a debian/patches/01_set-default-path.patch file that hard-codes the path in the source code (instead of a compilation parameter).

Warning: the Debian maintainer used the very same PATH sequence than /etc/profile ( /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games ). Harder to notice a change by commenting code in this case.

Next step: look at /etc/pam.d policies

The file /etc/pam.d/gdm-launch-environment seems to be a good candidate. It sources two files:

Long story short, we did not check all possible behaviors, but GDM and OpenSSH behaved the same, so you can bet this is the Debian way :

  • if /etc/profile does not set PATH
    • if you set a PATH=/somepath entry in /etc/environment
      • this entry is applied,
      • compiled fallback is used ( /usr/local/bin:/usr/bin:/bin:/usr/games )
      Strip down a bit more

      So, OpenSSH and DMs override empty PATH variable, but the console does not use them. It turns out that when /etc/profile ‘s PATH section is commented and the /etc/environment file is empty (default state), then a third PATH value is used: the /etc/login.defs ENV_PATH option.

      You may comment /etc/login.defs line 103 to get something like :

      $ grep -nE '^#?ENV_(SU)?PATH' /etc/login.defs 102:ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 103:#ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

      Then you can log in a console (serial and TTY should behave the same) and play printenv PATH again. This time it should display: /bin:/usr/bin . This is equal to getconf PATH on my system, so I think we’ve reach the bottom there.

      Other (maybe) intersting points

      Note that OpenSSH and Graphical Display sessions break environment variables inheritance (cf environ(7)).

      There are many places in a Linux system where the PATH variable may be set or updated. This depends on the mode of accessing the system and the software involved (the SSH daemon, sshd , for example, contains a hard-coded value for PATH ). I don’t know where the value you see on your system is set. So in this answer, I’m instead addressing the suspicion you mention at the end of the question.

      The bash executable contains a default value for the PATH variable.

      When compiling the bash shell from the source code, one can modify the file config-top.h . This file contains various compile-time settings that would typically be changed by a system distributor (package maintainer) to conform to the flavour of their operating system distribution.

      One of the things that this file sets is the DEFAULT_PATH_VALUE macro’s value. The value that is set in the shell’s distributed sources is the string

      /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:. 

      This will be what is outputted by the command

      This would output the value of the PATH variable from a shell that does not inherit any environment variables from the parent shell, and that does not source any shell initialization files.

      Источник

Оцените статью
Adblock
detector