Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Определить идентификаторы и имена процессов, не связанных с указанным терминалом

Определить идентификаторы и имена процессов, не связанных с указанным терминалом.
Ответ: kalanda,

Bash
1
ps -ef ...
Вопрос: Обработать текстовый файл в Терминале

Помогите сделать это в терминале

1. Создайте два файла с перечнем объектов (каждый объект с новой строки).
2. Отсортируйте каждый из файлов по алфавиту
3. Объедините эти файлы в один
4. Подсчитайте общее количество слов в нем,
5. Выведите на экран первые и последние две строки файла
6. Замените символы перевода строки на символ табуляции и обратно
7. Отсортируйте файл
8. Пронумеруйте строки файла
9. Выведите на экран все строки, содержащие букву "р"
10. Разбейте файл на три файла
Выполнить следующие задания. Объяснить каждый шаг конвейера. Вместо знаков вопроса подставьте нужную команду/аргумент.
1. Вывести на экран всех пользователей системы с сортировкой по алфавиту:
$ cut -d: -f1 /etc/passwd | ???

2. Изменить предыдущую команду таким образом, чтобы помимо имени пользователя на экране также выводился его идентификатор. Подсказка: посмотрите содержимое файла /etc/passwd, чтобы найти, в каком из полей, разделенных двоеточием, находится UID.
3. Подсчитать количество пользователей, у которых командой оболочкой является bash:
$ grep :/bin/bash /etc/passwd | wc -l

4. Вывести на экран всех пользователей, использующих командную оболочку /bin/bash, отсортировав их по алфавиту в обратном порядке:
$ grep :/bin/bash /etc/passwd | ??? | ???

5. Выполнить сортировку пакетов по размеру (большего к меньшему) и вывести первые 25 пакетов:
$ rpm -qa --qf '[%{NAME}: %{SIZE}\n]' | sort -rn -k2,2 | ???

6. Вывести все файлы из пакета man, подсчитать для каждого из них размер, игнорируя ошибки, и выполнить сортировку по размеру:
$ rpm -ql man | xargs -l du 2> /dev/null | sort -n

7. При помощи программы top вывести список работающих процессов и отсортировать их по имени процесса (аргумент команды sort заполнить самостоятельно):
$ top -b -n1 | sort ???

8. Используя команду awk, изменить вывод команды top таким образом, чтобы в первой колонке отображалось имя процесса, во второй - объём занимаемой памяти:
$ top -b -n1 | awk '{printf "%35s %s\n", $12, $6}'
9. Вывести файл /etc/passwd в отсортированном по пользователям виде, заменив знаки двоеточия пробелами:
$ ??? | tr ":" " "
10. Вывести файл /etc/passwd в отсортированном по пользователям виде в две колонки - в первой - имя пользователя, во второй - командная оболочка пользователя:
$ ??? | awk -F: '{printf "%15s %s\n", $1, $7}'
11. На примере файла user-manual.txt из документации git исследовать конвейеры.
$ cd /usr/share/doc/git-*
12. Выполнить анализ частоты появления каждого слова в файле user-manual.txt. Конвейер нужно строить по шагам, наблюдая за изменением результата. Определить этап получения первичной информации, этап обработки и этап представления результатов.
$ cat user-manual.txt | tr ' ' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[unct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head -5
Или:
$ cat user-manual.txt | tr -cs '[:alpha:]' '\n' | tr '[:upper:]' '[:lower:]' | sort | uniq -c | sort -rn | head -5
Почему различаются результаты работы конвейеров?
13. Выполнить анализ частоты появления каждого символа.
$ tr '[:lower:]' '[:upper:]' < user-manual.txt | tr -d '[unct:] \n\t' | fold -w1 | sort | uniq -c | sort -rn | head -5
14. Вывести самые часто встречаемые слова, в которых количество символов больше семи:
$ tr -cs '[:alpha:]' '\n' < user-manual.txt | less | grep -E ........ | sort | uniq -c | sort -rn | head
Ответ: 1. Создайте два файла с перечнем объектов (каждый объект с новой строки).
2. Отсортируйте каждый из файлов по алфавиту
3. Объедините эти файлы в один
4. Подсчитайте общее количество слов в нем,
5. Выведите на экран первые и последние две строки файла
6. Замените символы перевода строки на символ табуляции и обратно
7. Отсортируйте файл
8. Пронумеруйте строки файла
9. Выведите на экран все строки, содержащие букву "р"
10. Разбейте файл на три файла
Выполнить следующие задания. Объяснить каждый шаг конвейера. Вместо знаков вопроса подставьте нужную команду/аргумент.
1. Вывести на экран всех пользователей системы с сортировкой по алфавиту:
Bash
1
$ cut -d: -f1 /etc/passwd | ??? 
2. Изменить предыдущую команду таким образом, чтобы помимо имени пользователя на экране также выводился его идентификатор. Подсказка: посмотрите содержимое файла /etc/passwd, чтобы найти, в каком из полей, разделенных двоеточием, находится UID.
3. Подсчитать количество пользователей, у которых командой оболочкой является bash:
Bash
1
$ grep :/bin/bash /etc/passwd | wc -l 
4. Вывести на экран всех пользователей, использующих командную оболочку /bin/bash, отсортировав их по алфавиту в обратном порядке:
Bash
1
$ grep :/bin/bash /etc/passwd | ??? | ??? 
5. Выполнить сортировку пакетов по размеру (большего к меньшему) и вывести первые 25 пакетов:
Bash
1
$ rpm -qa --qf '[%{NAME}: %{SIZE}\n]' | sort -rn -k2,2 | ??? 
6. Вывести все файлы из пакета man, подсчитать для каждого из них размер, игнорируя ошибки, и выполнить сортировку по размеру:
Bash
1
$ rpm -ql man | xargs -l du 2> /dev/null | sort -n 
7. При помощи программы top вывести список работающих процессов и отсортировать их по имени процесса (аргумент команды sort заполнить самостоятельно):
Bash
1
$ top -b -n1 | sort ???
8. Используя команду awk, изменить вывод команды top таким образом, чтобы в первой колонке отображалось имя процесса, во второй - объём занимаемой памяти:
Bash
1
$ top -b -n1 | awk '{printf "%35s %s\n", $12, $6}' 
9. Вывести файл /etc/passwd в отсортированном по пользователям виде, заменив знаки двоеточия пробелами:
Bash
1
$ ??? | tr ":" " " 
10. Вывести файл /etc/passwd в отсортированном по пользователям виде в две колонки - в первой - имя пользователя, во второй - командная оболочка пользователя:
Bash
1
$ ??? | awk -F: '{printf "%15s %s\n", $1, $7}' 
11. На примере файла user-manual.txt из документации git исследовать конвейеры.
Bash
1
$ cd /usr/share/doc/git-*
12. Выполнить анализ частоты появления каждого слова в файле user-manual.txt. Конвейер нужно строить по шагам, наблюдая за изменением результата. Определить этап получения первичной информации, этап обработки и этап представления результатов.
Bash
1
$ cat user-manual.txt | tr ' ' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[unct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head -5 
Bash
1
2
Или: 
$ cat user-manual.txt | tr -cs '[:alpha:]' '\n' | tr '[:upper:]' '[:lower:]' | sort | uniq -c | sort -rn | head -5 
Почему различаются результаты работы конвейеров?
13. Выполнить анализ частоты появления каждого символа.
Bash
1
$ tr '[:lower:]' '[:upper:]' < user-manual.txt | tr -d '[unct:] \n\t' | fold -w1 | sort | uniq -c | sort -rn | head -5 
14. Вывести самые часто встречаемые слова, в которых количество символов больше семи:
Bash
1
$ tr -cs '[:alpha:]' '\n' < user-manual.txt | less | grep -E ........ | sort | uniq -c | sort -rn | head
Вопрос: Определить изменялся ли файл после указанной даты

Здравствуйте! Помогите пожалуйста создать скрипт.

Разработать скрипт, который:
• выводит имя текущего каталога
• запрашивает имя файла
• если файл не существует, выводит сообщение об ошибке и снова спрашивает имя файла
• запрашивает дату
• определяет, менялось ли содержание файла после указанной даты, и выводит сообщение об этом
Ответ: А сами что? Вообще никаких идей?

Добавлено через 17 минут
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/binbash
#check file modification after entered date
 
echo $PWD
until [ -f "$cfile" ] ; do
    if [ "$try" ] ; then
        echo "Entered file name do not exist"
        try=1
    fi
    read -p 'Enter the file name >>> ' cfile
done
read -p 'Enter the check date >>> ' cdate
if [ "$(date -r "$cfile" +%s)" -gt "$(date --date="$cdate" +%s)" ] ; then
    echo "File $cfile has been modified after $cdate"
else
    echo "No modifications for file $cfile after $cdate"
fi
Вопрос: Как запустить GUI программу в Linux с правами суперпользователя без терминала

Доброго времени суток!

Помогите пожалуйста решить такую проблему. Есть куча задач по редактированию файлов и каталогов в файловом менеджере. Большая часть из них редактируется только с правами Суперпользователя. Для работы используются приложения с GUI интерфейсом. Можно открыть программы от имени Суперпользователя командой из терминала
Bash
1
sudo nautilus
или
Bash
1
sudo gedit
Но это очень неудобно, плюс если надо открыть несколько каталогов слева и справа (для сравнения), то на фоне висит открытый терминал и ждёт закрытия всех процессов nautilus, gedit или другого используемого приложения.

Запуск через [ALT]+[F2] не работает. Диалоговое окно закрывается, но ничего не открывается.

Подскажите пожалуйста! Как я могу запустить программу от имени суперпользователя без запуска терминала? Можно ли добавить в настройки linux конфиг, чтобы вписать необходимые мне приложения для запуска под суперпользователем по-умолчанию?

Сборка: Ubuntu 18.04.1 LTS
Ответ: Оказывается сделали замену для лентяев
How to edit system files using a GUI without gksu?

Enter admin://. The recommended way of performing operations that require elevated permissions using a GUI is by using the gvfs admin backend, which is available in both Ubuntu 18.04 LTS (and Linux Mint 19 Tara) and 17.10, by using the admin:// prefix.
All you have to do is open Nautilus (or Nemo), press [Ctrl] + [L] so you can type in its address bar, and type admin:// followed by the path of the folder containing the file you want to edit, and enter your password. After doing this, you can use any GUI application to alter system files, like Nautilus to add / delete files or folders, Gedit (or Xed in Linux Mint 19) to edit text file, and so on.
Вопрос: Написать сценарий, посылающий сигнал завершения процессам текущего пользователя

Написать сценарий, посылающий сигнал завершения процессам текущего пользователя. Символьная маска имени процесса вводится с клавиатуры.
Ответ: Similar в корень обленился.
Вопрос: Создание пользователя в терминале и добавление ему прав

Здравсвуйте.
Поделитесь опытом, по созданию в терминале пользователей и назначение им прав.
Кто может написать код по этому вопросу:

Доступ пользователя на чтение и запись, доступ группы на чтение и выполнение, доступ только на чтение для остальных

P.s создал пользвователя
Bash
1
 adduser user1
Ответ: Вообщем с тяжелым трудом справился сам) спасибо тем кто мне помог т.е мне самому)


1. Создайте пользователя user1.
Для создания нового пользователя используем команду под правами суперпользователя «adduser user1» в терминале:
2. Войдите от имени созданного пользователя, используя виртуальный терминал.
Для входа под пользователем user1 можно вызвать терминал используются комбинации клавиш <Ctrl>+<Alt>+<F1>указать логин и пароль или воспользоваться командой sudo –su user1, где так же потребуется ввод пароля.

3. Комбинацией клавиш <Ctrl>+<Alt>+<F7> перейдём к графическому терминалу.
4. Проверьте текущие права доступа к файлу.
Используем пакетный файл с названием «cp.sh», и расположенный в: /home/black/KP.
Для просмотра прав файла используем команду: «ls cp.sh –l»:
Установлены следующие права:
Владелец – r - чтение, w - запись, x - выполнение
Группа – r - чтение, w - запись, x - выполнение
Прочие – r – чтение.

5. Запускаем файл cp.sh от имени пользователя user1.
Из-за того, что для остальных пользователей доступно только чтение, то файл запускается, но не может вносить изменения. Поэтому получаем отказ в доступе.

6. От имени пользователя black назначьте права доступа к файлу -
Указываем команду: chmod u=rw, g=rx, o=r cp.sh

7. Попытайтесь запустить указанный файл от имени пользователя user1. Объясните полученный результат.
Отказано в доступе т.к доступ остальным только на чтение.

8. Измените пользователя user1, переместив его в ту же группу, к которой принадлежит black. Для редактирования информации о пользователях используем команду usermod с правами суперпользователя. В качестве параметров укажем –g (первичная группа пользователя), название группы и имя пользователя:

9. Завершили сеанс пользователя user1 (команда logout или exit - для графического терминала) и снова вошли в систему от его имени.

10. Снова запускаем пакетный файл cp.sh.
Объясните полученный результат.

После перемещения пользователя user1 в группу black, пакетный файл cp.sh открылся на чтение и выполнение т.к доступ для группы rx.

11. Удалите пользователя user1.
Для того, чтобы удалить пользователя используем команду userdel с правами суперпользователя и указанием имени удаляемого пользователя:

Доступ пользователя на чтение и запись, доступ группы на чтение и выполнение, доступ только на чтение для остальных
Абсолютный вид: chmod 00654 cp.sh
Символьный вид: chmod u=rw,g=rx,o=r cp.sh
Вопрос: Рождение процесса в Linux

Здравствуйте!
Некоторое время назад я начал изучать С++ и параллельно заинтересовался юникс-подобными системами. Люблю изучать всё новое. По С++ прогресс есть, много читаю, что непонятно, спрашиваю на этом замечательном форуме. Но в мире линукса вообще ничего не понимаю. Использую дистрибутив Manjaro Linux на базе Arch, знаю основные команды терминала из разряда обновить систему\ядро, установить\удалить пакеты или драйверы, почистить кэш и т.д., но я не имею ни малейшего представления о том, как вообще устроена эта система, каким образом она функционирует, что значит "сконфигурировать ядро" или "подключить такие-то модули". В общем, обложился я книгами и начал читать, но сразу застопорился на теме рождения процессов. Ни черта не могу понять

Насколько я понимаю, процесс - это, грубо говоря, ход выполнения какой-то программы. Под каждый процесс выделяется определённая область памяти. Допустим, запустил я у себя на машине калькулятор. Работа этого калькулятора происходит в новом пользовательском процессе, который создаётся функцией fork(), вызываемой исходным(родительским) процессом. Функция fork() создаёт клон процесса-родителя с другим идентификатором. Но откуда изначально берётся этот самый родительский процесс? Зачем его клонировать, если он уже существует? У меня полная каша в голове. Нагуглил я тут, что, оказывается, все процессы изначально порождаются одним и тем же прародителем всех процессов - процессом init, но это только прибавило каши в голове, ведь если все процессы в системе являются клоном одного и того же процесса, между ними вообще не должно быть никаких различий, это должна быть просто куча одинаковых процессов.

Не объясните человеческим языком, что из себя представляют родительские процессы, и откуда они вообще берутся? Может, хорошую литературу по линуксу посоветуете?
Ответ:
Сообщение от Marinero
...И после запуска перестает быть процессом консоли, а становится Си-программой.
Сообщение от DeadPenguin
...вызывается exec, замещающий образ родителя чем надо.
Большое спасибо!
Так понятно.
Вопрос: Перевести процесс в фоновый режим

Задание у меня такое:
Запустите первый файл в фоновом режиме
Запустите второй файл в приоритетном режиме
Переведите второй процесс в фоновый режим
Переведите первый процесс в приоритетный режим
Для каждого из процессов выведите:
  • долю оперативной памяти, занимаемой процессом
  • время, прошедшее с момента запуска процесса
  • имя управляющего терминала
  • время старта процесса
Первый файл sin.out второй cos.out.

Делаю по шагам:
Запускаю первый файл в фоновом режиме: ./sin.out &
Запускаю второй файл в приоритетном режиме: ./cos.out
Теперь этот второй файл нужно перевести в фоновый режим. В методичке пишется, что это делается с помощью Ctrl+z.
Но всю работу я делаю в файле .sh, поэтому после нажатия Ctrl+z у меня завершается вся программа .sh убив все два процесса и полностью сама завершается.
Ну а потом как я понимаю нужно будет писать fg, чтобы первый процесс перевести в приоритетный режим. Ещё мимолётом вопрос, как командой fg выбрать, что именно первый файл стоит переводить в приоритетный режим?
Подскажите пожалуйста как быть?

За ранее спасибо
Ответ:
Сообщение от zuxa-zuxa
Теперь этот второй файл нужно перевести в фоновый режим. В методичке пишется, что это делается с помощью Ctrl+z.
Имеет смысл только при прямом вызове в терминале. При работе скрипта не может быть «приоритетного» режима.
Вопрос: Запуск процесса в приоритетном режиме (cron)

Доброго времени суток. Изучаю Ubuntu 16.04.
Загорелся архивацией системы при помощи rsync, и планировщика cron. Написал скрипт bash небольшой, в котором монтируется раздел для архивации, запускается rsync и т.д.. Вобщем, все красиво, с оповещениями что сейчас будет выполняться архивация, с предложением перенести ее, но проблема в том, что cron запускает скрипт (как я понял) в фоновом режиме. И терминала с выполнением архивации не видно.
Пробовал запускать кроном другой скрипт, который в новом окне терминала запускает мой скрипт, тоже безуспешно. Попробовал использовать fg без параметра и с единицей (по идее ведь этот процесс должен быть под номером 1, т.к. нумерация идет в пределах родительского процессп) , но она отвечает что нету такого процесса.
Подскажите пожалуйста как я могу запустить этот скрипт из крона так, что бы он выполнялся в окне терминала и видимом режиме
Ответ: Marinero, тоже ни чего.
htop тоже молчит вроде бы... Дочерних процессов у процесса cron не появляется. По фильтру тоже ни че похожего не вылазит
Вопрос: Скрипт с получением имени владельца файла

Все привет!

Есть такое задание:
Разработать скрипт, который:
• выводит имя текущего каталога
• запрашивает имя файла
если файл не существует, выводит сообщение об ошибке и снова запрашивает имя файла
• запрашивает имя пользователя
если пользователь не является владельцем файла, то выводит имя владельца файла и имя группы файла

Проблема с 3 пунктом. Нашел только вот такое: Верно, если файл с именем file существует и его владельцем является пользователь, на которого указывает эффективный идентификатор пользователя "-G file".
Как я понял, он сравнивает текущего пользователя/или пользователя, который запустил текущий процесс.
Каким образом можно сделать сравнение любого пользователя системы с владельцем файла? Прошу у Вас помощи!

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!bin/bash
echo "Текущий каталог:"
pwd
a=0
b=0
path=/home/maks/
while [ $b -lt 1 ]
do
b=$a
echo "Введите имя файла:"
read name
if [ ! -f $path/$name ]
then echo "Файл не найден.Повторить?(y/n)"
read yn
if [ $yn = y ]
then
continue
else echo "Завершение программы"
fi
fi
if [ -G $name ]
then echo ""
else echo "2:"
ls -l $name
fi
b=$(( b + 1 ))
done
Ответ: Есть задание:
Разработать скрипт, который:
- выводит имя текущего каталога
- запрашивает имя файла
- если файл не существует, выводит сообщение об ошибке и снова запрашивает имя файла
- запрашивает имя пользователя
- если пользователь не является владельцем файла, то выводит имя владельца файла и имя группы файла.
Смог сделать все до момента сравнивания имени пользователя с именем владельца файла, тут возникает проблема, как вытащить имя этого владельца из ls.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
pwd
echo "Введите имя файла:"
while true; do
read file1
echo "Поиск по имени файла $file1"
find . -name $file1
if [ -a $file1 ] ; then
echo "Файл найден"
pwd $file1
break
else
echo "Файл не найден.Повторите ввод"
fi
done
 
echo "Введите имя пользователя:"
read user
Заранее спасибо за помощь.