یکی از نخستین چیزهای آزار دهنده توی این نسخهی دبیان اینه که توش کامل کردن خودکار وجود نداره. برای اضافهکردن این قابلیت، زیباتر کردن کنسول و چندتا اصلاحیهی ریز دیگه، باید پروندهی پیکربندی پوستهی بش (bashrc./~) رو تغییر داد. ولی از اونجا که نمیخوام این کار رو برای کاربر ریشه انجام بدم، تصمیم میگیرم که یه کاربر جدید عادی برای خودم ایجاد کنم و این تغییرات رو داخل اون انجام بدم.
از قبل کاربری به نام user روی سیستمعامل هست. نخست اون رو پاک میکنم:
# userdel user
و بعد کاربر خودم رو میسازم:
root@mele:~# useradd danialbehzadi
root@mele:~# passwd danialbehzadi
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
تا یادم نرفته گذرواژهی کاربر ریشه رو هم عوض میکنم:
root@mele:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
حالا که دارم کارهای امنیتی رو انجام میدم خوبه که کلیدهای اساساچ رو هم با گذرواژهی جدید کد کنم و جایگزین قبلیها کنم:
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
اون اعلان root@mele هم رو اعصابمه، برای همین اون رو هم عوض میکنم:
# echo "danial-cubie" > /etc/hostname
حالا میتونم با خیال راحتتری به کاربر خودم سوئیچ کنم. البته از اونجا که کاربر من عادیه، راحتتر اینه که برای انجام کارهای نیازمند دسترسی sudo رو نصب کنم:
# apt-get update
# apt-get install sudo
بعد از نصب سودو، باید اون رو برای استفادهی کاربرم تنظیم کنم، برای این کار باید راهنماش رو ببینم، ولی man نصب نیست، پس اون رو هم نصب میکنم:
# apt-get install man
خب توی راهنماش چیز زیادی ننوشته بود (باید بستهی دیگهای نصب کنم؟) پس به سراغ
ویکی دبیان میرم و با کمکش این دستور رو اختراع میکنم:
# usermod -a -G sudo danialbehzadi
برای بررسی این که الآن میتونم سودو کنم یا نه به حساب خودم میرم:
# su - danialbehzadi
در حالت عادی الآن باید وارد شاخهی خانگی من بشه، ولی چون قبلاً براش چنین چیزی تعریف نکردم میگه:
No directory, logging in with HOME=/
و با اعلان $ در ریشهی سامانهپرونده منتظر من میشه. اتّفاقاً در این مرحله این اتّفاق خوبیه. میخوام یه پرونده ایجاد کنم، پس میزنم:
$ touch a
که همونجوری که انتظار داشتم مینویسه:
touch: cannot touch `a': Permission denied
پس اون رو با سودود امتحان میکنم:
$ sudo touch a
این بار با موفّقیت این رو برام مینویسه:
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for danialbehzadi:
و بعد از دادن گذرواژهی خودم پروندهی a رو ایجاد میکنه. برای پاک کردنش هم:
$ sudo rm a
حالا برای ایجاد کردن شاخهی خانگی ابتدا به حساب ریشه برمیگردم:
$ exit
و بعد اون رو ایجاد میکنم:
# mkdir /home/danialbehzadi
و بهش دسترسی لازم رو میدم
chown danialbehzadi:danialbehzadi /home/danialbehzadi
حالا با بازگشت دوباره به حساب کاربر خودم در شاخهی خانگی قرار میگیرم:
# su - danialbehzadi
فعلاً از حساب خودم میآم بیرون، چون میخوام کاربرم رو به چندتا گروه سیستمی اضافه کنم:
$ exit
# usermod danialbehzadi --append --groups adm,cdrom,dip,www-data,plugdev
بعد برای کاربرم پوستهی بش رو به عنوان پوستهی پیشفرض قرار میدم:
# usermod danialbehzadi --shell /bin/bash
حالا میتونم با خیال راحت اتّصال رو قطع کنم و با کاربر خودم وارد بشم، ولی قبلش خوبه که یه بار دستگاه رو راهاندازی مجدّد کنم که مقادیر جدید (مثل نام میزبان و…) بار بشن:
# reboot
وقتی دوباره الدیدی سبز روشن ش میخوام با کاربر خودم به دستگاه متّصل شم. چون نام کاربری من روی لپتاپی که دارم روش این اعمال رو انجام میدم هم danialbehzadi است و همنام با کاربر مقصد میتونم به سادگی بنویسم:
$ ssh 192.168.1.5
و گذرواژه رو وارد کنم، اگه نامهای کاربری یکسان نبودن، باید دستور رو به این صورت وارد میکردم:
$ ssh danialbehzadi@192.168.1.5
خب حالا رسیدم به نکته ی اصلی که در ابتدای این پست گفته شد، یعنی کامل کردن خودکار. قبل از هرچیز بستهی bash-autocompletion رو نصب میکنم:
$ sudo apt-get install bash-completion
و بعد همونطور که گفتم باید برم سر پیکربندی پروندهی bashrc. برای این کار با ویرایشگر مورد علاقهام یعنی vim اون پرونده رو ویرایش میکنم. شما میتونین از ویرایشگر بسیار سادهتر nano استفاده کنین:
$ vim .bashrc
و بعد این متن رو داخلش مینویسم و ذخیرهاش میکنم:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# don't put duplicate lines in the history. See bash(1) for more options
# ... or force ignoredups and ignorespace
HISTCONTROL=ignoredups:ignorespace
# append to the history file, don't overwrite it
shopt -s histappend
# ignore common commands for history
export HISTIGNORE=":pwd:uptime:clear:c:ls:"
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=100000
HISTFILESIZE=409600
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u\[\033[01;31m\]@\[\033[01;32m\]\h\[\033[00;33m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
برای این که این پرونده در ابتدای شروع به کار پوسته خونده بشه، باید پروندهی profile. رو به صورت زیر درست کنم. من با vim این کار رو میکنم، شما با هرچیز دیگهای که دوست دارین میتونین:
$ vim .profile
و این رو توش ذخیره میکنم:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
حالا اگه یک بار اتّصال رو قطع کنم:
$ exit
و دوباره متّصل بشم (اگه تفاوت نام کاربری دارین توجّه کنین باید مثل بالا نام کاربری مقصد رو هم قبل از آیپی وارد کنین):
$ ssh 192.168.1.5
میبینم که تغییرات اعمال شدن