objdump
ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π»ΠΈΠ±ΠΎ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅, Π»ΠΈΠ±ΠΎ Π² Π²ΠΈΠ΄Π΅ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΡΠΈΠ½Π³Π° (Ρ ΠΊΠ»ΡΡΠΎΠΌ -d).
bash$ objdump -d /bin/ls
/bin/ls: file format elf32-i386
Disassembly of section .init:
080490bc <.init>:
80490bc: 55 push %ebp
80490bd: 89 e5 mov %esp,%ebp
. . .
mcookie
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΡΠ΅ 128-Π±ΠΈΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ "magic cookie", ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ X-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ "ΡΠΈΠ³Π½Π°ΡΡΡΡ" Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ°Π»ΠΎΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π».
random000=`mcookie | sed -e '2p'`
# 'sed' ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΏΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄Π»Ρ ΡΠ΅Ρ ΠΆΠ΅ ΡΠ΅Π»Π΅ΠΉ, ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ md5.
# Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π±Ρ.
random001=`md5sum $0 | awk '{print $1}'`
# 'awk' ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ mcookie ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ "ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅" ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ 12-43. ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ²
#!/bin/bash
# tempfile-name.sh: ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΈΠΌΠ΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
BASE_STR=`mcookie` # 32-ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ (128 Π±ΠΈΡ) magic cookie.
POS=11 # ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½Π°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΡΡΡΠΎΠΊΠ΅ magic cookie.
LEN=5 # $LEN ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
prefix=temp # Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ("temp") ΡΠ°ΠΉΠ».
suffix=${BASE_STR:POS:LEN}
# ΠΠ·Π²Π»Π΅ΡΡ ΡΡΡΠΎΠΊΡ, Π΄Π»ΠΈΠ½ΠΎΠΉ Π² 5 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 11.
temp_filename=$prefix.$suffix
# Π‘Π±ΠΎΡΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°.
echo "ΠΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° = \"$temp_filename\""
# sh tempfile-name.sh
# ΠΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° = temp.e19ea
exit 0
units
ΠΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅Π»ΠΈΡΠΈΠ½ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² Π΄ΡΡΠ³ΠΈΠ΅. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ units Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ 12-44. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΡΠΎΠ² Π² ΠΌΠΈΠ»ΠΈ
#!/bin/bash
# unit-conversion.sh
convert_units () # ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ.
{
cf=$(units "$1" "$2" | sed --silent -e '1p' | awk '{print $2}')
# Π£Π΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ ΠΊΡΠΎΠΌΠ΅ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.
echo "$cf"
}
Unit1=miles
Unit2=meters
cfactor=`convert_units $Unit1 $Unit2`
quantity=3.73
result=$(echo $quantity*$cfactor | bc)
echo "Π $quantity ΠΌΠΈΠ»ΡΡ $result ΠΌΠ΅ΡΡΠΎΠ²."
# Π§ΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ,
#+ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ "acres" (Π°ΠΊΡΡ) and "miles" (ΠΌΠΈΠ»ΠΈ)?
exit 0
m4
ΠΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π° ΠΊΠ»Π°Π΄, m4 -- ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΡΠΈΠ»ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ[ 37 ], ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ -- ΡΠ΅Π»ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π²ΡΠ°ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π΄Π»Ρ RatFor, m4 ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠΈΠ»ΠΈΡΠ°. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, m4 ΡΠΎΡΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ eval, tr, awk, ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠΈΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ.
Π Π°ΠΏΡΠ΅Π»ΡΡΠΊΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅, Π·Π° 2002 Π³ΠΎΠ΄, ΠΆΡΡΠ½Π°Π»Π° Linux Journal Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ°ΡΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΈΠ»ΠΈΡΡ m4.
ΠΡΠΈΠΌΠ΅Ρ 12-45. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ m4
#!/bin/bash
# m4.sh: ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΠΈΠ΅ΠΉ ΠΌΠ°ΠΊΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° m4
# Π‘ΡΡΠΎΠΊΠΈ
string=abcdA01
echo "len($string)" | m4 # 7
echo "substr($string,4)" | m4 # A01
echo "regexp($string,[0-1][0-1],\&Z)" | m4 # 01Z
# ΠΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠ°
echo "incr(22)" | m4 # 23
echo "eval(99 / 3)" | m4 # 33
exit 0
doexec
ΠΠΎΠΌΠ°Π½Π΄Π° doexec ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ argv[0] (Π΄Π»Ρ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $0), ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ, Π΅Π΅ ΡΠ΅Π°ΠΊΡΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ /usr/local/bin ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ "aaa", ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ doexec /usr/local/bin/aaa list Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° "a", Π° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ doexec /usr/local/bin/aaa delete , ΠΎΠ½Π° ΡΠ΄Π°Π»ΠΈΡ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ.
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ΅Π°ΠΊΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π΄Π»Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
case `basename $0` in
"name1" ) ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ name1;;
"name2" ) ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ name2;;
"name3" ) ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ name3;;
* ) Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ;;
esac
ΠΠ»Π°Π²Π° 13. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π² ΡΡΠ΅Π½Π°ΡΠΈΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ /etc/rc.d. ΠΠ½ΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ, Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ root ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·ΡΡΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΡΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈ Π³ΡΡΠΏΠΏΡ
users
ΠΡΠ²Π΅Π΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π²ΡΠΈΡ ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ½Π°, Π΄ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ who -q.
groups
ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π³ΡΡΠΏΠΏ, Π² ΡΠΎΡΡΠ°Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΠΈΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $GROUPS, Π½ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡ Π³ΡΡΠΏΠΏ, Π° Π½Π΅ ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ.
bash$ groups
bozita cdrom cdwriter audio xgrp
bash$ echo $GROUPS
501
chown, chgrp
ΠΠΎΠΌΠ°Π½Π΄Π° chown ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½Π° Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° root Ρ ΠΎΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΎ Π½Π° ΡΠ°ΠΉΠ» ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΡΡΠ³ΠΎΠΌΡ. ΠΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠ°ΠΉΠ»Π°, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²ΠΎΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ².
root# chown bozo *.txt
ΠΠΎΠΌΠ°Π½Π΄Π° chgrp ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π³ΡΡΠΏΠΏΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ. Π§ΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π³ΡΡΠΏΠΏΡ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π° (ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Ρ ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΡΡΠ°Π² ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ Π³ΡΡΠΏΠΏΡ) ΠΈΠ»ΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ (root).
chgrp --recursive dunderheads *.data
# ΠΡΡΠΏΠΏΠ° "dunderheads" ΡΡΠ°Π½Π΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ Π²ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ² "*.data"
#+ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ($PWD) (Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠ»ΡΡΡ "--recursive").
useradd, userdel
ΠΠΎΠΌΠ°Π½Π΄Π° useradd Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ΅ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π°Ρ, ΠΏΠΎ ΡΠΌΡΡΠ»Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° userdel ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΡΠ΅ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΡ[ 38 ] ΠΈ ΡΠ΄Π°Π»ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ.
ΠΠΎΠΌΠ°Π½Π΄Π° adduser ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΎΠΌ Π΄Π»Ρ useradd ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° useradd.
id
ΠΠΎΠΌΠ°Π½Π΄Π° id Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ) ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π³ΡΡΠΏΠΏ, Π² ΡΠΎΡΡΠ°Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠΎ ΡΡΡΠΈ -- Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ $UID, $EUID ΠΈ $GROUPS.
bash$ id
uid=501(bozo) gid=501(bozo) groups=501(bozo),22(cdrom),80(cdwriter),81(audio)
bash$ echo $UID
501
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΠΡΠΈΠΌΠ΅Ρ 9-5.
who
ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅.
bash$ who
bozo tty1 Apr 27 17:45
bozo pts/0 Apr 27 17:46
bozo pts/1 Apr 27 17:47
bozo pts/2 Apr 27 17:49
Π‘ ΠΊΠ»ΡΡΠΎΠΌ -m -- Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅. ΠΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΡΠ°Π²Π½ΠΎ Π΄Π²ΡΠΌ, ΡΠΎ ΡΡΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π²ΡΠ·ΠΎΠ²Ρ who -m, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ who am i ΠΈΠ»ΠΈ who The Man.
bash$ who -m
localhost.localdomain!bozo pts/2 Apr 27 17:49
whoami -- ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° who -m, Π½ΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
bash$ whoami
bozo
w
ΠΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ. ΠΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ who. ΠΡΠ²ΠΎΠ΄ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ w ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ grep, Ρ ΡΠ΅Π»ΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ/ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
bash$ w | grep startx
bozo tty1 - 4:22pm 6:41 4.47s 0.45s startx
logname
ΠΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠΌΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (ΠΈΠ· ΡΠ°ΠΉΠ»Π° /var/run/utmp). ΠΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΈΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ whoami.
bash$ logname
bozo
bash$ whoami
bozo
ΠΠ΄Π½Π°ΠΊΠΎ...
bash$ su
Password: ......
bash# whoami
root
bash# logname
bozo
su
ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ»ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. su rjones -- Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ rjones. ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ su Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π·Π°ΠΏΡΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ root. Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ A-17.
sudo
ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ root (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ).
#!/bin/bash
# ΠΠΎΡΡΡΠΏ ΠΊ "ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΌ" ΡΠ°ΠΉΠ»Π°ΠΌ.
sudo cp /root/secretfile /home/bozo/secret
ΠΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ sudo, Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ /etc/sudoers.