PDA

Просмотр полной версии : Кто силен в bash? помогите плз решить задачки...


Dj Skeleton™
19.11.2007, 17:06
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

Ky3bMu4
19.11.2007, 19:22
http://forum.antichat.ru/thread24516.html - тут почти всё, что тебе надо.


2. Приведите все возможные способы просмотра каталога /usr/bin/



#!/bin/bash
dir /usr/bin/
ls /usr/bin/
cd /usr/bin/ && echo *
find /usr/bin/

Dj Skeleton™
20.11.2007, 14:23
2Ky3bMu4, спасибо, +++

ну вот смотри например как я пытаюсь решить третью задачу:

find / -regex '.*[qeuioaQEUIOA][qeuioaQEUIOA][qeuioaQEUIOA].*'


после этой команды, он выводит ВСЕ файлы, которые соответствуют условию. как сделать так, чтобы вывелся, например, только один первый файл, который будет найден?


echo /usr/bin/


вот что получается:
dj-skeleton@djskel ~
$ echo /usr/bin/
/usr/bin/


т.е. он просто печатает то, что после echo. может как-то по-другому выполнить эту команду? или получается, что всего 3 возможных варианта просмотра? это точно, все возможные, или могут быть еще?

Ky3bMu4
20.11.2007, 15:27
Сорри, чуть-чуть ошибся. Исправил.

Dj Skeleton™
20.11.2007, 15:32
Сорри, чуть-чуть ошибся. Исправил.

а насчет остальных задач что-нибудь можешь помочь? глянул линк, которых там дан... ничего полезного для этих задач не нашел.

зы. неужели никто помочь не может?((

sedoy_xxx
20.11.2007, 16:49
_http://ru.gentoo-wiki.com/Секреты_командной_строки
должно помочь

L0rd_Ha0S
20.11.2007, 17:00
cd /usr/bin/ && echo *
Так наверное проще будет :):
$ echo /usr/bin/*
чтобы показывал красиво, в одну колонку, тогда вот так:
$ echo /usr/bin/* |sed -e 's/ /\n/g'
ну вот смотри например как я пытаюсь решить третью задачу:
find / -regex '.*[qeuioaQEUIOA][qeuioaQEUIOA][qeuioaQEUIOA].*'
после этой команды, он выводит ВСЕ файлы, которые соответствуют условию. как сделать так, чтобы вывелся, например, только один первый файл, который будет найден?

find / -regex '.*[qeuioaQEUIOA][qeuioaQEUIOA][qeuioaQEUIOA].*'|head -n 1

Покажет количество строк, указанных в параметре -n (в данном случае 1) с начала вывода
find / -regex '.*[qeuioaQEUIOA][qeuioaQEUIOA][qeuioaQEUIOA].*'|tail -n 1
То же самое, только показывает указанное количество строк с конца.

Dj Skeleton™
20.11.2007, 17:44
2L0rd_Ha0S, спасибо, выручил. нигде не мог найти этой инфы. +10.

если возникнут проблемы, можно еще обратиться?))

Dj Skeleton™
20.11.2007, 19:13
по поводу седьмой задачи... пытаюсь архивировать файлы за прошедшию неделю, вот кусок из шелла:

dj-skeleton@djskel ~/task07
$ find . -mtime -7 -exec gzip -c '{}' > files.gz \;
gzip: . is a directory -- ignored


gzip ругается что проигнорировал . т.к. это директория. но мне нужно осуществлять поиск именно в текущей.

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

объясните, плз, что я делаю не так?

sunb0rn
20.11.2007, 21:03
непроверял, но может так получится:
$ find . -type f -mtime -7 -exec gzip -c '{}' \;>> files.gz

Ky3bMu4
20.11.2007, 22:52
http://ruslandh.narod.ru/howto_ru/Bash-Prog-Intro/Bash-Prog-Intro.html

Очень интесный сайт. KOI8-R .

L0rd_Ha0S
21.11.2007, 01:34
1. Создайте новый файл second, в котором бы трижды повторялась строка текста из файла first.
$ cat first > second; cat first >>second ; cat first >> second :)
5. Составте конвейер, при помощи которого слово ABRAKADABRA, выведется на экран с заменой букв R на L (echo, tr)
$ echo "ABRAKADABRA"| tr R L
6. Прокомментируйте права доступа к файлу (команде) passwd

$ ls -lah `which passwd`
-rws--x--x 1 root root 36K Апр 17 2007 /bin/passwd

На файл установлен suid-бит. Пользователь root имеет право читать/выполнять/изменять его. Все пользователи, входящие в группу root могут только выполнять его, не имея права не чтение/модификацию этого файла. Остальные пользователи(не входящие в группу root) могут только выполнять его, не имея права не чтение/модификацию этого файла. Т.е. точно такие же права, как и у пользователей группы root.
7. Создайте сжатый архив файлов, измененных за последнюю неделю (tar, gzip, find, cpio)
$ find / -type f -mtime -7 | cpio -ov >archive.cpio
Создаёт несжатый cpio-архив
$ find / -type f -mtime -7 -exec tar -jcf archive.tar.bz2 {} +
Создает сжатый bzip-архив (это больше подходит к условию)
10. Переведите часы на зимнее время (на 1 час назад)
$ date --help
;)

Dj Skeleton™
21.11.2007, 12:15
2L0rd_Ha0S, слушай, сможешь объяснить, почему забраковали задания?


задание #2

dir /usr/bin/
ls /usr/bin/
cd /usr/bin/ && echo *
$ echo /usr/bin/*
find /usr/bin/



задание #3

root@djskel ~
$ find / -type f -regex '.*[qeuioaQEUIOA][qeuioaQEUIOA][qeuioaQEUIOA].*'|head -n 1
/cygdrive/c/.quoTESTasdgh

Ky3bMu4
21.11.2007, 18:10
8. Сохраните в отдельном файле и прокомментируйте данные о процессе init



$ ps u -C init > init.txt

Dj Skeleton™
22.11.2007, 06:11
2Ky3bMu4, не мог бы ты сюда выложить данные о своем процессе init? у меня cygwin и этого процесса просто-напросто нет(( и каким образом и что там нужно прокомментировать?

Ky3bMu4
22.11.2007, 14:23
root@alex-desktop:~# ps u -C init
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


USER - собственно сам юзер.
PID - process ID. Уникальный номер процесса. У init`a всегда 1.
%CPU - скоко отедает у процессора
%MEM - скоко от оперативки
VSZ и RSS - признаюсь честоно - незнаю что это
TTY - номер вирутального десктопа под которым запущен процесс. Т.к.
init по сути системный, то он вне всяких десктопов.
STAT - в каком состоянии находится. Всего непомню, помню, что S - suspended(в ожидании), Т - приостановеленный. R - running.
START - когда запустили.
TIME - сколько времени работает процесс.
CMD - собственно комманда.

ShadOS
22.11.2007, 15:17
1. Создайте новый файл second, в котором бы трижды повторялась строка текста из файла first.

touch ./second
i=1
while [ "$i" -le 3 ]
do
head -n 1 ./first >> ./second;
let "i+=1";
done

Так будет правильнее в отличие от вышеприведённых способов.


2. Приведите все возможные способы просмотра каталога /usr/bin/

Кроме того, в некоторых системах можно напрямую открыть каталог как файл и посмотреть его содержимое. Например:
vim /usr/bin

Dj Skeleton™
22.11.2007, 16:41
2ShadOSб первую задачу у меня давно уже приняли... такое написать несложно)) а вот насчет остальных - жопа(( за попытку помочь с задачей спс, но у мну не работает((

Dj Skeleton™
22.11.2007, 16:44
2Ky3bMu4, спасибо, +10 за не однократную попытку помочь, но к сожалению комментарии типа "наверное", "не знаю", "скорее всего" не прокатят((( нужны четкие пояснения((( эх..... че ж я пару лет назад линукс себе не поставил(((

Dj Skeleton™
22.11.2007, 16:56
ребят, кто все задачи по полочкам разложит, обещаю 1000WMR. хм... может это и мало, но думаю для того кто хорошо разбирается в баше это раз плюнуть... :-/

зы. только уговор. если задачу у меня не примут, вместе с тем кто подпишется все разложить обсуждаем ее недостатки пока не будет все ок. деньги только после этого. не волнуйтесь, не обману. я сейчас не в том положении, чтобы кого-то обманывать...)) да и на ачате давно. дидлайн уже скоро)) как только получу ответ "принял" на все задачи - тут же деньги получишь. а пока что ответ "принял" получил только на первое задание, которое написал сам еще до публикации первого поста здесь. остальные два задания, которые частично написал сам, частично с чьей-то помощью не приняли... почему - так и не понял. у меня даже в cygwin все работает((


UPDATE: давайте договоримся так - по 100 wmr за каждую принятую задачу с вашей помощью.

L0rd_Ha0S
23.11.2007, 01:10
2L0rd_Ha0S, слушай, сможешь объяснить, почему забраковали задания?

задание #2

dir /usr/bin/
ls /usr/bin/
cd /usr/bin/ && echo *
$ echo /usr/bin/*
find /usr/bin/

задание #3

root@djskel ~
$ find / -type f -regex '.*[qeuioaQEUIOA][qeuioaQEUIOA][qeuioaQEUIOA].*'|head -n 1
/cygdrive/c/.quoTESTasdgh
Честно говоря, понятия не имею, почему препод их забраковал. Задания правильные, поставленную задачу команды выполняют, чего ещё нужно - я не знаю. Когда будет известно как должны выглядеть правильные задания - отпиши тут, интересно будет посмотреть.

Upd: Dj Skeleton™, если никто ещё не откликнулся, стукни в аську(отправил в ПМ). Попробуем помочь :)

ShadOS
23.11.2007, 03:25
2ShadOSб первую задачу у меня давно уже приняли... такое написать несложно)) а вот насчет остальных - жопа(( за попытку помочь с задачей спс, но у мну не работает((
Всё равно интересно почему оно у тебя не работает. Напиши какую ошибку выводит и как ты пытаешься это делать? Я делаю это в bash. Может у тебя просто sh? =) Можно ещё вместо head tail использовать.
А кто кстати сказал что он это преподу сдаёт? Колись, кто даёт такие злые задания, а то прикрою топик =))) Что-то ты слишком много придлагаешь за такие пустиковые задачи =)

Dj Skeleton™
23.11.2007, 04:17
Всё равно интересно почему оно у тебя не работает. Напиши какую ошибку выводит и как ты пытаешься это делать? Я делаю это в bash. Может у тебя просто sh? =) Можно ещё вместо head tail использовать.
А кто кстати сказал что он это преподу сдаёт? Колись, кто даёт такие злые задания, а то прикрою топик =))) Что-то ты слишком много придлагаешь за такие пустиковые задачи =)

у меня винда и cygwin со всем необходимым для шелла.

выдает такое:
dj-skeleton@djskel ~
$ vim /usr/bin/
bash: vim: command not found

получается, что даже если такая команда и существует, у меня ее нет, наверное не установлена.

задания дает препод. и почему 1000 это много? я думаю по 100 руб за задачу вполне норм... или нет? и я же прошу просто помочь с реализацией задачи, комментировать все пытаюсь сам(это обязательное условие для приема задачи), может потому и не принимают))) но с другой стороны, что такого неправильно можно прокомментировать например во втором задании? О_о почему мне пришел ответ "не принял"?

L0rd_Ha0S
23.11.2007, 04:36
выдает такое:
dj-skeleton@djskel ~
$ vim /usr/bin/
bash: vim: command not found

Так у тебя просто vim не установлен. :)

Ky3bMu4
23.11.2007, 21:24
Про VSZ и RSS очень подробно тут (http://www.opennet.ru/base/sys/ps_shared_stat.txt.html).
Про процессы можно почитать здесь (http://www.linuxrsp.ru/artic/process.html).
Ну и выдержка из статьи:

Колонка STAT может содержать следующие значения:

* R - процесс выполняется или готов к выполнению (состояние готовности) D - процесс в "беспробудном сне" - ожидает дискового ввода/вывода
* T - процесс остановлен (stopped) или трассируется отладчиком
* S - процесс в состоянии ожидания (sleeping)
* Z - процесс-зобми
* < - процесс с отрицательным значением nice
* N - процесс с положительным значением nice (о команде nice мы поговорим позже)
.................................................. .................................................. ....
Осталось только рассмотреть команду для повышения приоритета процесса - это команда nice. Повысить приоритет команды может только пользователь root, указав соответствующий коэффициент понижения. Для увеличения приоритета нужно указать отрицательный коэффициент, например, nice -5 process.

ShadOS
24.11.2007, 04:01
эх зажрались люди, 1000 рублей за такую фигню... это ж сколько пива выпить можно =))
Напиши что за ответ ты отправил преподу дословно и мы напишем тебе почему он тебе сказал не принято.

Dj Skeleton™
01.12.2007, 07:10
2ShadOS,

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

да там все было правильно за исключением того, что я не переправлял поток ошибок в /dev/null. просто получалась такая фигня, что до того как будет найден результат, find обращался к папкам/файлам, к которым нет доступа(т.к. в институте не рут) и сыпалась целая куча сообщений

отказано в доступе
отказано в доступе
отказано в доступе


вот)))

Dj Skeleton™
18.12.2007, 17:36
пипл!, со всеми задачами разобрался сам, только срочно жизненно необходима ваша помощь!
выполните кто-нибудь у себя следующие команды и отпишите здесь реакцию баша на них.

для 6-й задачи.
cd /etc/
ls -l passwd

и

cd /usr/bin/
ls -l passwd



для 8-й задачи.
ps aux |head -n 5

и

ps -l

и потом ps -l -p [UID]
где [UID] - айдиншик процесса init



для 9-й.
ps aux --sort -pcpu |head -n 3

и

ps au --sort -pmem |head -n 3


просто у меня cygwin, и в списке присутствует только один процесс - bash.(((

как только доделаю эти задачки, выложу сюда решения всех 10-ти вместе с комментариями. если, конечно, кому-то интересно))

Ky3bMu4
19.12.2007, 13:03
# cd /etc && ls -l passwd
-rw-r--r-- 1 root root 1237 2007-11-24 19:59 passwd

# cd /usr/bin && ls -l passwd
-rwsr-xr-x 1 root root 29060 2006-10-20 02:52 passwd

# ps aux | head -n 5
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.3 0.0 1628 536 ? Ss 11:54 0:01 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 11:54 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN 11:54 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 11:54 0:00 [watchdog/0]

#ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 5095 5092 0 75 0 - 997 wait pts/0 00:00:00 bash
0 R 0 5164 5095 0 76 0 - 566 - pts/0 00:00:00 ps

#ps -l -p 1
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 76 0 - 407 - ? 00:00:01 init

# 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

# ps aux --sort -pmem | head -n 3
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.0 1628 536 ? Ss 11:54 0:01 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 11:54 0:00 [migration/0]