1. Создайте новый файл second, в котором бы трижды повторялась строка текста из файла first.
2. Приведите все возможные способы просмотра каталога /usr/bin/
3. Найдите в системе файл, содержащий в имени три гласные буквы подряд.
4. Найдите в системе файл, состоящий из 5 и более заглавных букв подряд.
5. Составте конвейер, при помощи которого слово ABRAKADABRA, выведется на экран с заменой букв R на L (echo, tr)
6. Прокомментируйте права доступа к файлу (команде) passwd
7. Создайте сжатый архив файлов, измененных за последнюю неделю (tar, gzip, find, cpio)
8. Сохраните в отдельном файле и прокомментируйте данные о процессе init
9. Сохраните листинг самых ресурсоемких процессов и прокомментируйте его.
10. Переведите часы на зимнее время (на 1 час назад)
ОГРОМНОЕ СПАСИБО ВСЕМ, КТО ПЫТАЛСЯ ПОМОЧЬ!
как и обещал, выкладываю решения этих задач. надеюсь, кому-нибудь когда-нибудь помогут. да и тем, кто хоть как-то пытался мне помочь, может быть будет интересно посмотреть верный вариант решения.))
1.Создайте новый файл second, в котором бы трижды повторялась строка текста из файла first.
# создание файла first
[root@djskel ~/task01]
$ touch first
# запись слова text в файл first
[root@djskel ~/task01]
$ echo text>first
# вывод содержимого файла first на экран
[root@djskel ~/task01]
$ cat first
text
# запуск цикла, который повторится 3 раза; вывод содержимого файла first в файл second; завершение цикла
[root@djskel ~/task01]
$ for i in i=1 to 3; do cat first>>second; done
# вывод содердимого файла second на экран
[root@djskel ~/task01]
$ cat second
text
text
text
2. Приведите все возможные способы просмотра каталога /usr/bin/
#сортировка по имени файла. параметр -l показывает подробную информацию о каждом файле. фильтр head показывает первые 10 строк результата листинга.
djskel@djskel ~
$ ls -l -U /usr/bin/ | head -n 10
total 16439
-rwxr-x---+ 1 djskel Пользователи 67072 Dec 17 2002 addftinfo.exe
-rwxr-x---+ 1 djskel Пользователи 8544 Dec 17 2002 afmtodit
-rwxr-x---+ 1 djskel Пользователи 1786 Apr 6 2007 apropos
-rwxr-x---+ 1 djskel Пользователи 7168 Aug 24 16:40 ascii.exe
-rwxr-x---+ 1 djskel Пользователи 74240 Jan 27 2004 ash.exe
lrwxrwxrwx 1 djskel Пользователи 8 Nov 19 13:30 awk.exe -> gawk.exe
-rwxr-x---+ 1 djskel Пользователи 9216 Aug 24 16:40 banner.exe
-rwxr-x---+ 1 djskel Пользователи 24064 Aug 22 06:04 base64.exe
-rwxr-x---+ 1 djskel Пользователи 18432 Aug 22 06:04 basename.exe
#сортировка по расширению. параметр -l показывает подробную информацию о каждом файле. фильтр head показывает первые 10 строк результата листинга.
djskel@djskel ~
$ ls -l -X /usr/bin/ | head -n 10
total 16439
-rwxr-x---+ 1 djskel Пользователи 8544 Dec 17 2002 afmtodit
-rwxr-x---+ 1 djskel Пользователи 1786 Apr 6 2007 apropos
-rwxr-x---+ 1 djskel Пользователи 6935 Sep 27 11:22 bashbug
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzcmp -> bzdiff
-rwxr-x---+ 1 djskel Пользователи 2147 Nov 11 2006 bzdiff
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzegrep -> bzgrep
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzfgrep -> bzgrep
-rwxr-x---+ 1 djskel Пользователи 3642 Nov 11 2006 bzgrep
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzless -> bzmore
#сортировка по размеру. параметр -l показывает подробную информацию о каждом файле. фильтр head показывает первые 10 строк результата листинга.
djskel@djskel ~
$ ls -l -S /usr/bin/ | head -n 10
total 16439
-rwxr-x---+ 1 djskel Пользователи 1873811 Jan 31 2007 cygwin1.dll
-rwxr-x---+ 1 djskel Пользователи 999424 Oct 23 2006 cygiconv-2.dll
-rwxr-x---+ 1 djskel Пользователи 470528 Sep 27 11:23 bash.exe
-rwxr-x---+ 1 djskel Пользователи 470528 Sep 27 11:23 sh.exe
-rwxr-x---+ 1 djskel Пользователи 470016 Jan 31 2007 dumper.exe
-rwxr-x---+ 1 djskel Пользователи 393216 Dec 17 2002 troff.exe
-rwxr-x---+ 1 djskel Пользователи 309760 Jun 27 12:54 cygpcrecpp-0.dll
-rwxr-x---+ 1 djskel Пользователи 299008 Aug 24 16:40 lpr.exe
-rwxr-x---+ 1 djskel Пользователи 293376 Oct 26 18:27 pgawk-3.1.6.exe
#сортировка по дате. параметр -l показывает подробную информацию о каждом файле. фильтр head показывает первые 10 строк результата листинга.
djskel@djskel ~
$ ls -l -t /usr/bin/ | head -n 10
total 16439
-rw-r--r-- 1 djskel Отсутствует 2613 Nov 20 19:38 out
lrwxrwxrwx 1 djskel Пользователи 7 Nov 19 13:30 manpath.exe -> man.e
xe
-rwxr-x---+ 1 djskel Пользователи 293376 Nov 19 13:30 pgawk.exe
-rwxr-x---+ 1 djskel Пользователи 292864 Nov 19 13:30 gawk.exe
lrwxrwxrwx 1 djskel Пользователи 8 Nov 19 13:30 awk.exe -> gawk.exe
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzless -> bzmore
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzfgrep -> bzgrep
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzegrep -> bzgrep
lrwxrwxrwx 1 djskel Пользователи 6 Nov 19 13:28 bzcmp -> bzdiff
#сортировка по версии. параметр -l показывает подробную информацию о каждом файле. фильтр head показывает первые 10 строк результата листинга.
djskel@djskel ~
$ ls -l -v /usr/bin/ | head -n 10
total 16439
-rwxr-x---+ 1 djskel Пользователи 29696 Aug 22 06:04 [.exe
-rwxr-x---+ 1 djskel Пользователи 67072 Dec 17 2002 addftinfo.exe
-rwxr-x---+ 1 djskel Пользователи 8544 Dec 17 2002 afmtodit
-rwxr-x---+ 1 djskel Пользователи 1786 Apr 6 2007 apropos
-rwxr-x---+ 1 djskel Пользователи 7168 Aug 24 16:40 ascii.exe
-rwxr-x---+ 1 djskel Пользователи 74240 Jan 27 2004 ash.exe
lrwxrwxrwx 1 djskel Пользователи 8 Nov 19 13:30 awk.exe -> gawk.exe
-rwxr-x---+ 1 djskel Пользователи 9216 Aug 24 16:40 banner.exe
-rwxr-x---+ 1 djskel Пользователи 24064 Aug 22 06:04 base64.exe
3. Найдите в системе файл, содержащий в имени три гласные буквы подряд.
# поиск файлов начиная с корневой директории, в которых содержатся 3 гласные буквы подряд. сам поиск осуществлен с помощью параметра "-regex"(регулярные выражения). в данном случае в шаблоне пришлось три раза перечислить все гласные буквы латинского алфавита. параметр "-type f" заставляет искать только файлы. сообщения об ошибках перенаправляем в /dev/null. параметр head покажет количество строк, указанных в параметре -n (в данном случае 10) с начала вывода.
root@djskel ~
$ find / -type f -regex '.*[euioaEUIOA][euioaEUIOA][euioaEUIOA].*' 2>/dev/null |head -n 10
/cygdrive/c/distr/winxp1/I386/AAAAMON.DL_
/cygdrive/c/distr/winxp1/I386/ANGSAUI.TT_
/cygdrive/c/distr/winxp1/I386/AQUEUE.DL_
/cygdrive/c/distr/winxp1/I386/BROWAUI.TT_
/cygdrive/c/distr/winxp1/I386/BROWSEUI.DL_
/cygdrive/c/distr/winxp1/I386/COMPDATA/HPAIO1.HTM
/cygdrive/c/distr/winxp1/I386/COMPDATA/HPAIO1.TXT
/cygdrive/c/distr/winxp1/I386/COMPDATA/HPAIO2.HTM
/cygdrive/c/distr/winxp1/I386/COMPDATA/HPAIO2.TXT
/cygdrive/c/distr/winxp1/I386/CORDIAI.TT_
4. Найдите в системе файл, состоящий из 5 и более заглавных букв подряд.
# ищем файлы, в которых содержатся 5 заглавных букв подряд. для этого в шаблоне поиска пять раз повторена маска, соответствующая всем заглавным буквам латинского алфавита. поиск осуществляется начиная с корневой директории. ключ "-n" выводит номер строки, в которой встретилось данное совпадение, "-a" - заставляет обрабатывать бинарные файлы как текстовые и, таким образом, выводить совпадающие сторки из бинарных файлов, "-R" - рекурсия. сообщения об ошибках перенаправляем в /dev/null. фильтр head показывает первые 10 строк результата поиска.
root@djskel ~
$ egrep '.*[A-Z][A-Z][A-Z][A-Z][A-Z].*' / -naR 2>/dev/null | head -n 10
/bin/afmtodit:13:# groff is distributed in the hope that it will be useful, but WITHOUT ANY
/bin/afmtodit:14:# WARRANTY; without even the implied warranty of MERCHANTABILITY or
/bin/afmtodit:15:# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
/bin/afmtodit:19:# with groff; see the file COPYING. If not, write to the FreeSoftware
/bin/afmtodit:146: open(ENCODING, $opt_e) || die "$prog: can't open \`$opt_e': $!\n";
/bin/afmtodit:147: while (<ENCODING>) {
/bin/afmtodit:158: close(ENCODING);
/bin/apropos:10:# License as specified in the README file that comes with the man
/bin/ascii.exe:17: but WITHOUT ANY WARRANTY; without even the implied warranty of
/bin/ascii.exe:18: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5. Составте конвейер, при помощи которого слово ABRAKADABRA, выведется на экран с заменой букв R на L (echo, tr)
# выводим слово "ABRAKADABRA" и сразу же перенаправляем его путем создания конвейера с помощью оператора "|" на ввод фильтра tr. этот фильтр преобразует символ "R" в символ "L". в итоге на вывод получим слово "ABRAKADABRA" пропущенное через фильтр - "ABLAKADABLA".
root@djskel ~
$ echo "ABRAKADABRA"| tr R L
ABLAKADABLA
6. Прокомментируйте права доступа к файлу (команде) passwd
# переходим в каталог /usr/bin и просматриваем файл passwd. первый символ "-" обозначает что passwd - это именно файл(а не, например, директория, каталог, сокет, ссылка и т.п.).
# первая триада битов(права владельца) "rws" означает, что пользователь root имеет право читать/выполнять/изменять его, плюс на файл установлен SUID-бит(бит смены идентификатора пользователя). смысл этого бита состоит в следующем: обычно, когда пользователь запускает некоторую программу на выполнение, эта программа получает те же права доступа к файлам и каталогам, которые имеет пользователь, запустивший программу. если же установлен "бит смены идентификатора пользователя", то программа получит права доступа к файлам и каталогам, которые имеет владелец файла программы(таким образом, рассматриваемый атрибут лучше называть "битом смены идентификатора владельца"). это позволяет решать некоторые задачи, которые иначе было бы трудно выполнить. самый характерный пример - это как раз команда смены пароля passwd. все пароли пользователей хранятся в файле /etc/passwd, владельцем которого является суперпользователь root. поэтому программы, запущенные обычными пользователями, в том числе команда passwd, не могут производить запись в этот файл. а, значит, пользователь как бы не может менять свой собственный пароль. но для файла /usr/bin/passwd установлен "бит смены идентификатора владельца", каковым является пользователь root. следовательно, программа смены пароля passwd запускается с правами root и получает право записи в файл /etc/passwd (уже средствами самой программы обеспечивается то, что пользователь может изменить только одну строку в этом файле).
# вторая триада(права группы) "r-x" означает, что все пользователи, входящие в группу root могут только читать/выполнять его, не имея права на модификацию этого файла.
# третья триада(права для всех остальных) "r-x" означает, что остальные пользователи(не входящие в группу root) могут только читать/выполнять его, не имея права на модификацию этого файла(т.е. точно такие же права, как и у пользователей группы root.).
# далее расположено поле со счетчиком ссылок на файл. в данном случае здесь стоит единица, значит /usr/bin/passwd - единственное имя, под которым известен данный файл.
# cледующие два поля - владелец и группа файла. в данном случае владельцем файла является пользователь root, и файл принадлежит группе root.
# затем следует поле, отображающее размер файла в байтах. рассматриваемый файл имеет размер 29060 байт, т.е. чуть больше 28 Кбайт.
# далее указывается дата последнего изменения: 20 октября 2006 г. и время последнего изменения: 2 часа 52 минуты.
# в последнем поле содержится имя файла - /usr/bin/passwd.
root@djskel ~
$ cd /usr/bin && ls -l passwd
-rwsr-xr-x 1 root root 29060 2006-10-20 02:52 passwd
# переходим в каталог /etc и просматриваем файл passwd. первый символ "-" обозначает что passwd - это именно файл.
# первая триада битов(права владельца) "rw-" означает, что пользователь root имеет право производить чтение/запись этого файла, но не может выполнять его.
# вторая триада(права группы) "r--" означает, что все пользователи, входящие в группу root могут только читать его, не имея права на модификацию/выполнение этого файла.
# третья триада(права для всех остальных) "r--" означает, что остальные пользователи(не входящие в группу root) могут только читать его, не имея права на модификацию/выполнение этого файла(т.е. точно такие же права, как и у пользователей группы root.).
# далее расположено поле со счетчиком ссылок на файл. в данном случае здесь стоит единица, значит /etc/passwd - единственное имя, под которым известен данный файл.
# cледующие два поля - владелец и группа файла. в данном случае владельцем файла является пользователь root, и файл принадлежит группе root.
# затем следует поле, отображающее размер файла в байтах. рассматриваемый файл имеет размер 1237 байт, т.е. чуть больше 1 Кбайта.
# далее указывается дата последнего изменения: 24 ноября 2007 г. и время последнего изменения: 19 часов 59 минут.
# в последнем поле содержится имя файла - /etc/passwd.
root@djskel ~
$ cd /etc && ls -l passwd
-rw-r--r-- 1 root root 1237 2007-11-24 19:59 passwd
7. Создайте сжатый архив файлов, измененных за последнюю неделю (tar, gzip, find, cpio)
# ищем только файлы, начиная с корня, с датой модификации на старше 7 дней. результат поиска выводим в files.txt. сообщения об ошибках перенаправляем в /dev/null.
root@djskel ~
$ find / -type f -mtime -7 > files.txt 2>/dev/null
# создаем несжатый архив файлов. "-с" создает новый архив, "-f" задает имя для архива(в данном случае arch.tar). "-T" берет список файлов для архива из files.txt. сообщения об ошибках перенаправляем в /dev/null.
root@djskel ~
$ tar -cf arch.tar -T files.txt 2>/dev/null
# сжимаем архив программой gzip
root@djskel ~
$ gzip arch.tar
# выводим на экран информацию о только что созданном архиве: имя файла, содержащегося в архиве, его сжатый и не сжатый размеры и степень сжатия.
root@djskel ~
$ gzip -l arch.tar.gz
compressed uncompressed ratio uncompressed_name
60560158 163093504 62.9% arch.tar
8. Сохраните в отдельном файле и прокомментируйте данные о процессе init
# программа "ps" используется для получения списка запущенных процессов. с помощью "aux" получаем подробную информацию о каждом запущенном процессе. ключем "-p" задаем конкретный PID процесса - в данном случае это единица, что соответствует процессу init(init - это первый действительный процесс, запускаемый ядром при загрузке, и его PID всегда равен 1). вывод перенаправляем в файл processes.txt
root@djskel:~
$ ps aux -p 1 > processes.txt
# выводим содержимое файла processes.txt на экран. поле USER отображает имя пользователя, запустившего процесс, PID - идентификатор процесса, %CPU - уровень использования процессора, %MEM - уровень использования памяти, VSZ - объём используемой виртуальной памяти, RSS - объём используемой реальной памяти, TTY - терминал, с которым связан процесс("?" потому, что init это первый системный процесс и он не связан ни с одним терминалом), STAT - состояние выполнения("S" - означает, что процесс бездействует, "s" - то что процесс лидер сеанса), START - время старта, TIME - время исполнения (на процессоре), COMMAND - имя программы.
root@djskel:~
$ cat processes.txt
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.7 0.0 1628 536 ? Ss 13:53 0:01 /sbin/init splash
9. Сохраните листинг самых ресурсоемких процессов и прокомментируйте его.
# поле USER отображает имя пользователя, запустившего процесс, PID - идентификатор процесса, %CPU - уровень использования процессора, %MEM - уровень использования памяти, VSZ - объём используемой виртуальной памяти, RSS - объём используемой реальной памяти, TTY - терминал, с которым связан процесс, STAT - состояние выполнения, START - время старта, TIME - время исполнения (на процессоре), COMMAND - имя программы.
# в выводе этого листинга видно, что процесс amarok с PID 4997, созданный пользователем root является самым ресурсоемким по использованию процессора. он использует процессор на 5.5, память на 3.8, его виртуальная память 127632, реальная память 40044, он не прикреплен ни к одному терминалу, его статус: "S" - означает, что процесс бездействует(ожидает выполнения), "L" - означает что это real-time процесс, имеются страницы заблокированные в памяти, время запуска процесса 11 часов 56 минут, время выполнения 16 секунд.
root@djskel:~
ps aux --sort -pcpu | head -n 3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 4997 5.5 3.8 127632 40044 ? SLl 11:56 0:16 amarok
root 5304 3.9 0.0 1852 776 ? RN 12:00 0:01 /usr/bin/updatedb
# поле USER отображает имя пользователя, запустившего процесс, PID - идентификатор процесса, %CPU - уровень использования процессора, %MEM - уровень использования памяти, VSZ - объём используемой виртуальной памяти, RSS - объём используемой реальной памяти, TTY - терминал, с которым связан процесс, STAT - состояние выполнения, START - время старта, TIME - время исполнения (на процессоре), COMMAND - имя программы.
# в выводе этого листинга видно, что процесс "/sbin/init splash" с PID 1, созданный пользователем root является самым ресурсоемким по использованию оперативной памяти. он использует процессор на 0.2, память на 0.1, его виртуальная память 1628, реальная память 536, он не прикреплен ни к одному терминалу, его статус: "S" - означает, что процесс бездействует, "s" - то что процесс лидер сеанса, время запуска процесса 11 часов 54 минуты, время выполнения 2 секунды.
root@djskel:~
ps aux --sort -pmem | head -n 3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.1 1628 536 ? Ss 11:54 0:02 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 11:54 0:00 [migration/0]
10. Переведите часы на зимнее время (на 1 час назад)
#выводим на экран текущую дату
root@djskel ~
$ date
Fri Nov 30 15:58:48 2007
#переводим текущую дату на 1 час назад. (параметр "--s" расшифровывается как "set" - "установить")
root@djskel ~
$ date --s -1hour
Fri Nov 30 14:58:54 2007