Root profile ubuntu

-rw-r--r--.  1 root root   18 Mar 31 21:17 .bash_logout
-rw-r--r--.  1 root root  193 Mar 31 21:17 .bash_profile
-rw-r--r--.  1 root root  231 Mar 31 21:17 .bashrc

Bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

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

export PATH

Bashrc

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

/etc/bashrc and /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

/etc/profile

-rw-r--r--.  1 root root  771 Mar 31 21:50 256term.csh
-rw-r--r--.  1 root root  841 Mar 31 21:50 256term.sh
-rw-r--r--.  1 root root  196 Mar 24  2017 colorgrep.csh
-rw-r--r--.  1 root root  201 Mar 24  2017 colorgrep.sh
-rw-r--r--.  1 root root 1741 Aug  6  2019 colorls.csh
-rw-r--r--.  1 root root 1606 Aug  6  2019 colorls.sh
-rw-r--r--.  1 root root   80 Mar 31 23:29 csh.local
-rw-r--r--.  1 root root 1706 Mar 31 21:50 lang.csh
-rw-r--r--.  1 root root 2703 Mar 31 21:50 lang.sh
-rw-r--r--.  1 root root  123 Jul 30  2015 less.csh
-rw-r--r--.  1 root root  121 Jul 30  2015 less.sh
-rw-r--r--.  1 root root   81 Mar 31 23:29 sh.local
-rw-r--r--.  1 root root  164 Jan 27  2014 which2.csh
-rw-r--r--.  1 root root  169 Jan 27  2014 which2.sh

You can see that many of the files are for use in the C shell. The most important file for this article’s focus is sh.local. The contents of sh.local is listed below.

#Add any required envvar overrides to this file, it is sourced from /etc/profile

As you can see from the message, if you want to override any currently configured envvar (Environment variables) entries with a corporate standard, make entries in this file to do that.

Глава 28. Профили пользователей

Вошедшие в систему пользователи получают в свое распоряжение множество установленных (и изменяемых) псевдонимов команд, переменных и функций, но откуда они берутся? Командная оболочка использует множество загрузочных файлов сценариев, которые исполняются (или подключаются) в момент ее вызова. Ниже приводится обзор упомянутых загрузочных сценариев.

Системный профиль

Как командная оболочка bash, так и командная оболочка ksh будет проверять существование файла /etc/profile и подключать его в случае существования.

При чтении данного файла вы можете обнаружить (как в дистрибутиве Debian, так и в дистрибутиве Red Hat Enterprise Linux), что именно его силами создается переменная окружения PATH (помимо других переменных окружения). Данный сценарий также может изменять значение переменной окружения PS1, устанавливать значение переменной окружения HOSTNAME и исполнять дополнительные сценарии, такие, как /etc/inputrc.

В примере ниже для демонстрации механизма манипуляций с значением переменной окружения PATH в файле /etc/profile из дистрибутива Debian используется утилита grep.

root@debian7:~# grep PATH /etc/profile
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
export PATH
root@debian7:~#

В следующем примере утилита grep используется для демонстрации аналогичного механизма манипуляций с значением переменной окружения PATH в файле /etc/profile из дистрибутива RHEL/CentOS7.

[root@centos7 ~]# grep PATH /etc/profile
    case ":${PATH}:" in
                PATH=$PATH:$1
                PATH=$1:$PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
[root@centos7 ~]#

Пользователь root может использовать данный сценарий для объявления псевдонимов команд, функций и переменных для каждого из пользователей в системе.

Файл ~/. bash_profile

В том случае, если данный файл существует в домашней директории пользователя, командная оболочка bash осуществит его подключение. В дистрибутивах Debian 5/6/7 данного файла по умолчанию не существует.

В дистрибутивах RHEL7/CentOS7 используется небольшой сценарий ~/.bash_profile, который проверяет существование сценария ~/.bashrc и осуществляет его подключение в случае существования. Также он добавляет путь к директории $HOME/bin к списку путей, хранящемуся в переменной окружения $PATH.

[root@rhel7 ~]# cat /home/paul/.bash_profile
# .bash_profile

# Получение псевдонимов команд и функций
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# Пользовательское окружение и запускаемые программы

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

export PATH
[root@rhel7 ~]#

Файл ~/. bash_login

Если сценария .bash_profile не существует, командная оболочка bash будет выполнять проверку существования сценария ~/.bash_login и его подключение в случае существования.

Дополнительно:  Почему выключается ноутбук сам по себе и как это исправить

Данного файла не существует по умолчанию ни в дистрибутиве Debian, ни в дистрибутиве Red Hat.

Файл ~/. profile

Если в домашней директории пользователя не существует ни сценария ~/.bash_profile, ни сценария ~/bash_login, командная оболочка bash будет проверять наличие сценария ~/.profile и исполнять его. По умолчанию данного сценария не существует в дистрибутиве Red Hat.

В дистрибутиве Debain данный сценарий может исполнять сценарий ~/.bashrc и добавлять путь к директории $HOME/bin в список директорий, хранящийся в переменной окружения $PATH.

root@debian7:~# tail -11 /home/paul/.profile
if [ -n "$BASH_VERSION" ]; then
    # подключение сценария .bashrc в случае его существования
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

# изменение значения переменной PATH с целью включения пути к пользовательской директории бинарных файлов в случае ее существования
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

По умолчанию данного файла не существует в дистрибутивах RHEL/CentOS.

Файл ~/. bashrc

Сценарий ~/.bashrc обычно подключается средствами других сценариев. Давайте рассмотрим задачи, решаемые этим сценарием по умолчанию.

В дистрибутиве Red Hat используется очень простой сценарий ~/.bashrc, проверяющий существование сценария /etc/bashrc и подключающий его в случае существования. Также он позволяет объявлять специальные псевдонимы команд и функции.

[root@rhel7 ~]# cat /home/paul/.bashrc
# .bashrc

# Подключение файла с глобальными объявлениями
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Раскомментируйте следующую строку, если вам не нравится функция автоматического разделения вывода утилиты systemctl на страницы:
# export SYSTEMD_PAGER=

# Пользовательские псевдонимы команд и функции

В дистрибутиве Debian данный сценарий немного длиннее и также осуществляет установку значений переменной $PS1, некоторых переменных истории, а также множества активных и неактивных псевдонимов команд.

root@debian7:~# wc -l /home/paul/.bashrc
110 /home/paul/.bashrc

Файл ~/. bash_logout

При завершении работы командная оболочка bash может исполнять сценарий ~/.bash_logout.

В дистрибутиве Debian данная возможность используется для очистки консоли.

serena@deb503:~$ cat .bash_logout
# ~/.bash_logout: исполняется bash(1) при завершении работы командной оболочки.

# при завершении работы с консолью в целях повышения безопасности экран очищается

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

В дистрибутиве Red Hat Enterprise Linux 5 данный сценарий осуществляет простой вызов бинарного файла /usr/bin/clear.

[serena@rhel53 ~]$ cat .bash_logout
# ~/.bash_logout

/usr/bin/clear

В дистрибутивах Red Hat Enterprise Linux 6 и 7 данный сценарий создается, но остается пустым (не содержит ничего кроме комментария).

paul@rhel65:~$ cat .bash_logout
# ~/.bash_logout

Обзор сценариев дистрибутива Debian

Ниже приведена таблица для дистрибутива Debian с указанием моментов запуска каждого из описанных стартовых сценариев командной оболочки bash.

Таблица 28.1. Пользовательское окружение дистрибутива Debian

Обзор сценариев дистрибутива RHEL5

Ниже приведена таблица для дистрибутива Red Hat Entrprise Linux 5 с указанием моментов запуска каждого из описанных стартовых сценариев командной оболочки bash.

Таблица 28.2. Пользовательское окружение дистрибутива Red Hat

Профили пользователей

1. Выведите список всех файлов профиля пользователя в вашей системе.

2. Прочитайте содержимое каждого из этих файлов, обычно в них осуществляется подключение дополнительных сценариев.

3. Объявите уникальную переменную, псевдоним команды и функцию в каждом из этих файлов.

5. Можете ли вы сходу определить последовательность исполнения обнаруженных стартовых сценариев?

6. Если работа приложения зависит от значения объявленной в файле $HOME/.profile переменной, имеет ли значение существование файла $HOME/.bash_profile или нет?

Корректная процедура выполнения практического задания

1. Выведите список всех файлов профиля пользователя в вашей системе.

ls -a ~ ; ls -l /etc/pro* /etc/bash*

2. Прочитайте содержимое каждого из этих файлов, обычно в них осуществляется подключение дополнительных сценариев.

3. Объявите уникальную переменную, псевдоним команды и функцию в каждом из этих файлов.

5. Можете ли вы сходу определить последовательность исполнения обнаруженных стартовых сценариев?

Нет, так как при совпадении имен псевдонимов команд, функций и переменных производится их перезапись.

6. Если работа приложения зависит от значения объявленной в файле $HOME/.profile переменной, имеет ли значение существование файла $HOME/.bash_profile или нет?

Да, имеет. (Обратитесь к странице руководства man bash /INVOCATION)


Если вам понравилась статья, поделитесь ею с друзьями:


Программа оболочка /bin/bash (в дальнейшем
называемая просто «оболочка») использует набор стартовых файлов
для помощи создания окружения.Каждый файл имеет специфическое использование.
Файлы в директории /etc обычно предоставляют
глобальные установки. Если аналогичные файлы присутствуют в вашей домашней
директории, то они могут заменить глобальные установки.

Интерактивнвя регистрация оболочки запускается после успешного входа, используя
/bin/login, который читает файл /etc/passwd. Эта оболочка во время загрузки читает /etc/profile и его персональный эквивалент ~/.bash_profile.

Неинтерактивная оболочка обычно присутствует при загрузке стартовых скриптов.
Она неинтерактивная потому, что она выполняет скрипт и не ожидает ввода от
пользователя между выполнением команд. Для такой оболочки используется
окружение только из основной оболочки.

Дополнительно:  Root пароли к ssh

Файл ~/.bash_logout не используется для вызова
оболочки. Он читается и выполняется при появлении пользователя после
интерактивной регистрации.

К стандартным файлам относится /etc/bashrc,
вызываемый из пользовательского ~/.bashrc для
системной инициализации нерегистрированных оболочек.

Для большей информации смотрите info
bash
Ноды: Стартовые
файлы Bash и интерактивные оболочки.

/etc/profile

Здесь приведен базовый /etc/profile. Этот файл
запускается для установки некоторых помогающих функций и базовых
параметров. Он описывает некоторые параметры истории команд bash и в целях безопасности убирает поддержку постоянного
файла истории для пользователя roor. Он так же устанавливает вид системного
приглашения. Затем он вызывает маленький скрипт в директории
/etc/profile.d для предоставления большей
инициализации.

Для большей информации по escape-последовательностям, которые вы можете
использовать для вашего системного приглашения (т.е. переменной окружения
PS1), обратитесь к — Нода:
Печать системного приглашения.

cat > /etc/profile << "EOF"
# Begin /etc/profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# modifications by Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg>
 
# Общесистемные переменные окружения и запускаемые программы.
 
# Общесистемные псевдонимы и функции должны быть в /etc/bashrc. Личные
# переменные окружения и запускаемые программы должны быть в
# ~/.bash_profile. Личные псевдонимы и функции должны быть в
# ~/.bashrc.
 
# Функции, помогающие в управлении путями.  Вторым агрументом является имя
# переменной ПУТЬ для изменения (по умолчанию: PATH)
pathremove () {
        local IFS=':'
        local NEWPATH
        local DIR
        local PATHVARIABLE=${2:-PATH}
        for DIR in ${!PATHVARIABLE} ; do
                if [ "$DIR" != "$1" ] ; then
                  NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
                fi
        done
        export $PATHVARIABLE="$NEWPATH"
}
 
pathprepend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
 
pathappend () {
        pathremove $1 $2
        local PATHVARIABLE=${2:-PATH}
        export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
 

# Установка начального пути
export PATH=/bin:/usr/bin

if [ $EUID -eq 0 ] ; then
        pathappend /sbin:/usr/sbin
        unset HISTFILE
fi
 
# Установка некоторых переменных окружения.
export HISTSIZE=1000
export HISTIGNORE="&:[bf]g:exit"
#export PS1="[\u@\h \w]\\$ "
export PS1='\u@\h:\w\$ '
 
for script in /etc/profile.d/*.sh ; do
        if [ -r $script ] ; then
                . $script
        fi
done
 
# Очистка
unset pathremove pathprepend pathappend 

# End /etc/profile

Директория /etc/profile.d

Теперь создадим директорию /etc/profile.d,
в которой размещены индивидуальные скрипты инициализации.

install --directory --mode=0755 --owner=root --group=root /etc/profile.d

/etc/profile.d/dircolors.sh

Этот скрипт использует файлы ~/.dircolors и
/etc/dircolors для управления цветом файлов в
листинге директории. Они раскрашивают вывод таких команд, как
. Разъяснение по
инициализации этих файлов находится в конце этого раздела.

cat > /etc/profile.d/dircolors.sh << "EOF"
# Настройки /bin/ls для поддержки цвета, псевдоним находится в /etc/bashrc.
if [ -f "/etc/dircolors" ] ; then
        eval $(dircolors -b /etc/dircolors)
 
        if [ -f "$HOME/.dircolors" ] ; then
                eval $(dircolors -b $HOME/.dircolors)
        fi
fi
alias ls='ls --color=auto'

/etc/profile.d/extrapaths.sh

Этот скрипт добавляет некоторые полезные пути к переменным окружения
PATH и PKG_CONFIG_PATH.
Если хотите, вы можете раскоментировать последний раздел для
размещения точки в конце вашего пути. Это позволит исполняемым файлам в
текущей рабочей директории запускаться без указания ./, хотя мы предупреждаем,
что обычно это связано с риском для безопасности.

cat > /etc/profile.d/extrapaths.sh << "EOF"
if [ -d /usr/local/lib/pkgconfig ] ; then
        pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH
fi
if [ -d /usr/local/bin ]; then
        pathprepend /usr/local/bin
fi
if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then
        pathprepend /usr/local/sbin
fi
for directory in $(find /opt/*/lib/pkgconfig -type d 2>/dev/null); do
        pathappend $directory PKG_CONFIG_PATH
done
for directory in $(find /opt/*/bin -type d 2>/dev/null); do
        pathappend $directory
done
if [ -d ~/bin ]; then
        pathprepend ~/bin
fi
#if [ $EUID -gt 99 ]; then
#        pathappend .
#fi

/etc/profile.d/readline.sh

Этот скрипт настраивает файл конфигурации inputrc.
Если пользователь не имеет индивидуальных установок, он использует глобальный файл.

cat > /etc/profile.d/readline.sh << "EOF"
# Настройка переменной окружения INPUTRC.
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then
        INPUTRC=/etc/inputrc
fi
export INPUTRC

/etc/profile.d/tinker-term.sh

Некоторые приложения требуют описания установки TERM
для поддержки цвета.

cat > /etc/profile.d/tinker-term.sh << "EOF"
# Это поправляет значение TERM для удовлетворения некоторых 
# приложений и мы действительно можем отображать цвет в их окне.
 
if [ -n "$COLORTERM" ]; then
  export TERM=xterm-color
fi
 
if [ "$TERM" = "xterm" ]; then
  export TERM=xterm-color
fi

/etc/profile.d/umask.sh

Установка значения
важна для безопасности. Здесь права доступа для записи группы по умолчанию
выключены для пользователей системы и когда имена пользователя и группы
не совпадают.

cat > /etc/profile.d/umask.sh << "EOF"
# По умолчанию мы хотим получить установленный umask.
if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then
  umask 002
else
  umask 022
fi

/etc/profile.d/X.sh

Если установлены, переменные
PATH и PKG_CONFIG_PATH так же обновляются.

cat > /etc/profile.d/X.sh << "EOF"
if [ -x /usr/X11R6/bin/X ]; then
        pathappend /usr/X11R6/bin
fi
if [ -d /usr/X11R6/lib/pkgconfig ] ; then
        pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH
fi

/etc/profile.d/xterm-titlebars.sh

Этот скрипт показывает пример другого пути установки системного
приглашения. Обычная переменная PS1 дополнена
PROMPT_COMMAND. Если переменная установлена,
значение PROMPT_COMMAND выполняется как команда
перед выводом каждого первичного приглашения.

Дополнительно:  Java logging. Hello World

cat > /etc/profile.d/xterm-titlebars.sh << "EOF"
# Подстрока подтверждает, что это работает для "xterm" и "xterm-xfree86".
if [ "${TERM:0:5}" = "xterm" ]; then
  PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} : ${PWD}\007"'
  export PROMPT_COMMAND
fi

/etc/profile.d/i18n.sh

Этот скрипт показывает установку некоторых переменных окружения,
необходимых для поддержки различных языков. Правильная установка
этих переменных даст вам:

  • вывод программ, транслированный на ваш язык

  • правильную классификацию символов в буквы, цифры и другие классы
    – это необходимо для
    для работы в не английских локалях

  • правильный алфавитный порядок сортировки для для вашей страны

  • правильный размер бумажной страницы

  • правильный фомат денег, значения времени и даты

man 3 setlocale

Список всех локалей, поддерживаемых может быть получен запуском следующей команды:

Как только подходящие параметры локали будут определены, создайте файл
/etc/profile.d/i18n.sh:

cat > /etc/profile.d/i18n.sh << "EOF"
# Настройка переменных i18n
export LC_ALL=[ll]_[CC]
export LANG=[ll]_[CC]
export G_FILENAME_ENCODING=@locale

Переменная LC_ALL устанавливает одинаковое
значение для всех категорий локализации. Для лучшего контроля вы можете
предпочесть установку значений индивидуально для всех категорий,
перечисленных в выводе команды .

Переменная G_FILENAME_ENCODING говорит таким
приложениям, как и
, что имена файлов находятся по умолчанию
в кодировке локали, а не в -8, как
предполагалось по умолчанию.

Другие значения инициализации

Другие инициализации могут быть легко добавлены в profile добавлением дополнительных скриптов в
директорию /etc/profile.d.

/etc/bashrc

cat > /etc/bashrc << "EOF"
# Begin /etc/bashrc 
# Written for Beyond Linux From Scratch 
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Убедимся, что терминал настроен правильно для каждой оболочки

if [ -f /etc/profile.d/tinker-term.sh ]; then
  source /etc/profile.d/tinker-term.sh
fi

if [ -f /etc/profile.d/xterm-titlebars.sh ]; then
  source /etc/profile.d/xterm-titlebars.sh
fi

# Общесистемные псевдонимы и функции.

# Общесистемные переменные окружения и запускаемые программы должны быть в
# /etc/profile.  Личные переменные окружения и запускаемые программы
# должны быть в ~/.bash_profile. Личные псевдонимы и функции должны быть в
# ~/.bashrc

# Предоставляет цветную команду /bin/ls.  Используетс я совместно с кодом в
# /etc/profile.

alias ls='ls --color=auto'

# Предоставляет вид приглашения для нерегистрируемых оболочек, указанных оболочек,
# запускаемых в окружении .

#export PS1="[\u@\h \w]\\$ "
export PS1='\u@\h:\w\$ '

# End /etc/bashrc

Bash_profile

Это базовый ~/.bash_profile. Если вы хотите,
чтобы каждый новый пользователь имел этот файл автоматически, просто измените
вывод команды на /etc/skel/.bash_profile и проверьте права доступа после
выполнения команды. Затем вы можете скопировать /etc/skel/.bash_profile в домашние директории уже имеющихся
пользователей, включаяя root, и установить соответствующего владельца и группу.

cat > ~/.bash_profile << "EOF"
# Begin ~/.bash_profile
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>
# updated by Bruce Dubbs <bdubbs@linuxfromscratch.org>

# Личные переменные окружения и запускаемые программы.

# Личные псевдонимы и функции должны быть в ~/.bashrc.  Общесистемные
# переменные окружения и запускаемые программы должны быть в /etc/profile.
# Общесистемные псевдонимы и функции в /etc/bashrc.

append () {
  # Сначала удалим директорию
  local IFS=':'
  local NEWPATH
  for DIR in $PATH; do
     if [ "$DIR" != "$1" ]; then
       NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
     fi     
  done
  
  # Затем добавим директорию
  export PATH=$NEWPATH:$1
}

if [ -f "$HOME/.bashrc" ] ; then
        source $HOME/.bashrc
fi

if [ -d "$HOME/bin" ] ; then
  append $HOME/bin      
fi

unset append

# End ~/.bash_profile

Bashrc

cat > ~/.bashrc << "EOF"
# Begin ~/.bashrc
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>

# Личные псевдонимы и функции.

# Личные переменные окружения и запускаемые программы должны быть в
# ~/.bash_profile.  Общесистемные переменные окружения и запускаемые программы
# должны быть в /etc/profile.  Общесистемные псевдонимы и функции находятся в 
# /etc/bashrc. 

if [ -f "/etc/bashrc" ] ; then
        source /etc/bashrc
fi

# End ~/.bashrc

Bash_logout

Это пустой файл ~/.bash_logout, который
может быть использован как временный. Заметьте, что базовый ~/.bash_logout не включает команду clear. Это потому, что clear поддерживается
в файле /etc/issue.

cat > ~/.bash_logout << "EOF"
# Begin ~/.bash_logout
# Written for Beyond Linux From Scratch
# by James Robertson <jameswrobertson@earthlink.net>

# Личный пункт для выполнения logout.

# End ~/.bash_logout

/etc/dircolors

Если вы хотите использовать возможности dircolors, то выполните следующую команду. Шаги по
установке/etc/skel, описанные выше, так же
могут быть использованы здесь для предоставления файла ~/.dircolors при установке нового пользователя.
Как раньше, просто измените имя выходного файла в следующей команде
и установите права доступа, владельца и группу у созданных и/или
скопированных фалов.

dircolors -p > /etc/dircolors

Если вы желаете настроить цвета, используемые для различных типов файлов,
вы можете отредактировать файл /etc/dircolors.
Инструкции по установке цветов находятся внутри файла.

И напоследок, Ian Macdonald написал превосходную колекцию советов и трюков
для расширения окружения вашей оболочки. Вы можете прочитать их на
.

Последнее обновление 2005-01-16 09:56:15 -0700

Оцените статью
Master Hi-technology
Добавить комментарий