find . -type d -exec chmod u=rwx,go=rx {} \;<br>find . -type f -exec chmod u=rw,go=r {} \;
или
find . -type d -exec chmod 755 {} \;<br>find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod u=rwx,go=rx {} \;<br>find . -type f -exec chmod u=rw,go=r {} \;
или
find . -type d -exec chmod 755 {} \;<br>find . -type f -exec chmod 644 {} \;
<?php $filename = 'image.jpg'; $radius = 15; /** * Чем выше rate, тем лучше качество сглаживания и больше время обработки и * потребление памяти. * * Оптимальный rate подбирается в зависимости от радиуса. */ $rate = 3; $img = imagecreatefromstring(file_get_contents($filename)); imagealphablending($img, false); imagesavealpha($img, true); $width = imagesx($img); $height = imagesy($img); $rs_radius = $radius * $rate; $rs_size = $rs_radius * 2; $corner = imagecreatetruecolor($rs_size, $rs_size); imagealphablending($corner, false); $trans = imagecolorallocatealpha($corner, 255, 255, 255, 127); imagefill($corner, 0, 0, $trans); $positions = array( array(0, 0, 0, 0), array($rs_radius, 0, $width — $radius, 0), array($rs_radius, $rs_radius, $width — $radius, $height — $radius), array(0, $rs_radius, 0, $height — $radius), ); foreach ($positions as $pos) { imagecopyresampled($corner, $img, $pos[0], $pos[1], $pos[2], $pos[3], $rs_radius, $rs_radius, $radius, $radius); } $lx = $ly = 0; $i = —$rs_radius; $y2 = —$i; $r_2 = $rs_radius * $rs_radius; for (; $i <= $y2; $i++) { $y = $i; $x = sqrt($r_2 — $y * $y); $y += $rs_radius; $x += $rs_radius; imageline($corner, $x, $y, $rs_size, $y, $trans); imageline($corner, 0, $y, $rs_size — $x, $y, $trans); $lx = $x; $ly = $y; } foreach ($positions as $i => $pos) { imagecopyresampled($img, $corner, $pos[2], $pos[3], $pos[0], $pos[1], $radius, $radius, $rs_radius, $rs_radius); } header(‘Content - Type: image / png’); imagepng($img);
Небольшая тулза на PHP+Ajax, которая позволяет выполнять shell команды.
<?php if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { if (!empty($_POST['command'])) { exec($_POST['command'], $result); if (is_array($result)) { foreach ($result as $str) $res[] = htmlspecialchars($str); $res = isset($res) ? implode("<br />", $res) : ''; } else { $res = $result; } echo $res; } exit(); } ?>
<!DOCTYPE HTML> <html> <head> <title>Shell</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> function clear(c) { c.attr("value", ""); } $(document).ready(function () { var c = $("input[name='command']"); clear(c); c.focus(function () { $("span").hide(); }); c.blur(function () { $("span").show(); }); c.keyup(function (event) { if (event.keyCode == 13) $.post('sh.php', { command: $(this).val() }, function (data) { $("div").html(data); clear(c); }); }); }); </script> <style type="text/css"> * { background: #000; border: 0; color: green; font: 62.5% Arial, Helvetica, sans-serif; width: 100%; } body { font-size: 1.5em; margin: 0; padding: 0; } input { background-color: #000; font-size: 1em; width: 80%; } div { background: #000; font-size: 1em; height: 100%; min-height: 20px; width: 90%; } strong { color: #fff; } hr { color: #fff; background-color: #fff; height: 1px; margin-top: 0; width: 100%; } blink { font-size: 1.5em; } p { background: #fff url(http://www.catb.org/~esr/hacker-emblem/glider.png) no-repeat top right; display: block; height: 55px; right: 20px; position: absolute; width: 55px; } </style> </head> <body> <?php system('hostname')?>><span><blink>_</blink></span> <input name="command"/> <hr/> <p></p> <div></div> </body> </html>
После примерно полугода использования в качестве оконного менеджера XFCE4,
я все таки решил вернуться к старому доброму fluxbox, может это от того, что у меня
тяга ко всему простому и аскетичному, может от того что на еже fluxbox смотрится прикольний,
но так или иначе мне пришлось восстонавливать все настройки с нуля, собственно поэтому решил написать пост, чтобы
сохранились настройки, ну и может кому пригодиться, в конце поста представлен скриншот того, что получилось.
Для начала обнаружил, что после перехода у меня слетела возможность переключаться на русский язык.
Это показалось странным так как setxkbmap у меня запускался в .xsession, но как я понял после запуска fluxbox
любые команды прописанные в startup игнорируются, поэтому прописал
<code>setxkbmap -layout us,ru -variant ,winkeys -option </code>
<code>grp:caps_toggle,grp_led:scroll,terminate:ctrl_alt_bksp,compose:ralt</code>
в файл .fluxbox/startup перед командой запуска fluxbox
<br><code>exec fluxbox</code><br>
Прописал так же в этом же файле запуск коньков
<br><code>conky&</code>
Туда же добавляем обои рабочего стола, закидываем обои куда-нибудь в .fluxbox/bg/ и прописываем путь к обоене. В качестве обоены я решил использовать няшку из манги с тату-логотипом арчилинукса %))
Например вот так:
<br><code>fbsetbg -f bg/archMangaBabe.jpg</code><br>
Название виртуальных столов в панели — «Рабочий стол <N>» смотрится уныло и слишком длинно, поэтому решил поправить название на D<N>, правится это в файле .fluxbox/init:
<br><code>session.screen0.workspaceNames: D1,D2,D3,D4</code>
Можно немного сэкономить место на экране и сделать автоскрытие тулбара
<br><code>session.screen0.toolbar.autoHide: true</code>
Так как экран на нетбуке маленький, то удобно когда в тулбаре показывается как можно больше открытых приложений, так что изменил ширину тулбара с 70 на 80
session.screen0.toolbar.widthPercent: 80
Редактим .fluxbox/menu и добавляем то что хотим видеть в меню, а так же убираем ненужные пункты, у меня получилось что-то вроде этого:
[begin] (Trinity) [encoding] {UTF-8} [exec] (Terminal) {terminal} [separator] [exec] (Mc) {mc} [exec] (Thunar) {thunar} [separator] [exec] (Eclipse) {eclipse} [separator] [exec] (Firefox) {firefox} [separator] [exec] (Climm) {terminal -e climm} [exec] (Skype) {skype} [separator] [exec] (Moc) {terminal -e mocp} [exec] (Alsamixer) {terminal -e alsamixer} [exec] (Alsa reload) {terminal -e sudo alsactl restore} [separator] [exec] (Gimp) {gimp} [separator] [submenu] (System Tools) [exec] (top) {xterm} [exec] (top) {xterm -e top} [separator] [end] [submenu] (Fluxbox menu) [config] (Configure) [submenu] (System Styles) {Choose a style...} [stylesdir] (/usr/share/fluxbox/styles) [end] [submenu] (User Styles) {Choose a style...} [stylesdir] (~/.fluxbox/styles) [end] [workspaces] (Workspace List) [commanddialog] (Fluxbox Command) [reconfig] (Reload config) [exec] (About) {(fluxbox -v; fluxbox -info | sed 1d) | xmessage -file - -center} [end] [separator] [exec] (Xlock) {xlock -mode blank} [separator] [restart] (Restart) [exit] (Exit) [endencoding] [end]
Как-то поднадоело мне постоянно редактировать вручную httpd.conf и /etc/hosts и я решил написать скрипт, который бы позволил автоматизировать этот процесс
Вот такой скрипт:
#!/bin/sh # Константы: HOSTS='/tc/hosts'; # Путь к файлу hosts HTTPD_CONF='/etc/httpd/conf/extra/httpd-vhosts.conf'; # Путь к файлу с настройками виртуальных хостов DIR_HTTP='/srv/http/'; # Путь к директориям с хостами IP_MASK='127.0.0.'; # Маска по которой будет формироваться новый IP INDEX_FILE='index.php'; # Index файл в корневой папке нового виртуального хоста DIR_LOG='/var/log/httpd/'; # Путь к папке с логами EMAIL_ADMIN='wikide@gmail.com'; # Email админестратора # Функция вывода ошибок get_error() { echo $1; exit 0; } # Функция проверки ip check_ip() { if [ "`cat $HOSTS | grep \"$ip\"`" ]; then echo 1; fi } # Проверяем наличея параметра с именем хоста if [ "$1" ]; then if [ "$2" ]; then # Если задан свой IP new_ip=$2; if [ "`check_ip $new_ip`" ]; then # Проверка на наличее в файле get_error 'Такой ip адрес - '$new_ip' уже занят. Введите другой или пусть скрипт '$0' сам сгенерирует ip адресс для нового хоста.'; fi; else # Получаем IP автоматически new_ip=$IP_MASK$((`tail -1 $HOSTS | awk '{ split($1, ip, "."); print ip[4]}'`+1)); fi # Если корневая папка нового хоста уже существует if [ -d $DIR_HTTP$1/ ]; then get_error 'Директория '$1' уже есть в '$DIR_HTTP'. Подберите другое имя.'; else # Создаем корневую директорию виртуального хоста mkdir $DIR_HTTP$1; echo -e " <html> <head> <title>New host</title> </head> <body> <h1>Created host '$1'!</h1> </body> </html>" > $DIR_HTTP$1'/index.php'; # Запись в hosts sudo echo $new_ip $1 | sudo tee -a $HOSTS 1>/dev/null; # Запись в конфиг Apache sudo echo -e "#Create date: `date '+%F %T'` DirectoryIndex $INDEX_FILE ServerAdmin $EMAIL_ADMIN DocumentRoot \"$DIR_HTTP$1/\" ServerName $1 ServerAlias $1 ErrorLog \"$DIR_LOG$1.log\" CustomLog \"$DIR_LOG$1\" common" | sudo tee -a $HTTPD_CONF 1>/dev/null; # Перезапускаем сервер sudo apachectl restart; # Выводими сообщение echo 'Виртуальный хост "'$1'" успешно создан' fi else get_error 'Нужно обязательно указать название нового хоста $0 NAME_HOST [IP_HOST]'; fi exit 0;
Небольшой скрипт для подключения к сетям wifi в ARCH linux
#!/bin/bash # Определяем интрфейс ( в моем случае это - wlan0) if [ "$2" ]; then dev=$2; else dev="wlan0"; fi # Действие case "$1" in start) sudo ifconfig $dev up; sudo wpa_supplicant -B -i$dev -c/etc/wpa_supplicant.conf; sleep 3; sudo dhcpcd $dev 2>/dev/null; ;; stop) sudo killall -9 dhcpcd 3>/dev/null; sudo killall -9 wpa_supplicant 3>/dev/null; sudo ifconfig $dev down; ;; list) sudo ifconfig $dev up; sleep 1; sudo iwlist $dev scanning; sudo ifconfig $dev down; ;; restart) $0 stop; $0 start; ;; status) echo -n 'IP arrdess: '; ifconfig wlan0 | grep "inet addr" | awk '{print $2}' | sed 's/addr://' echo -n "Essid: "; iwconfig wlan0 | grep "Ralink STA" | awk '{print $4}' | sed 's/ESSID://' ;; *) if [ "$1" ]; then echo "usage: $0 {start|stop|list|restart}"; else echo "Restarting"; $0 restart; fi esac exit 0
Вот такой вот скрипт :)
Запись звука в Linux из консоли.
На моём субноуте есть микрофон, вот подумал, что неплохобы понять как записывать снимать звук с него, вот что нашёл:
Запись в wav:
$ arecord test.wav
Переконвертировать wav в mp3 можно вот так:
$ cat test.wav | lame - > test.mp3
или сразу создать mp3
$ arecord | lame - > test.mp3
Вот так можно записать ядро системы linux в mp3 :)
$ cat /boot/mykernel.img > /dev/dsp & arecord | lame - > test.mp3
Вот очередной велосипед на тему показа статуса аккумулятора для нэтбука на ARCH Linux :)
Вот такой получается скрипт на sh (думаю все ясно из комментов):
#!/bin/zsh # Определяем уровень заряда аккумулятора на текущий момент remaining_bat=`cat /proc/acpi/battery/BAT0/state | grep remaining | awk {'print $3'}`; # Определяем 100% заряда для аккумулятора full_bat=`cat /proc/acpi/battery/BAT0/info | grep full | awk {'print $4'}`; # Определяем подключён сетевой провод или нет stat=`cat /proc/acpi/battery/BAT0/state | grep charging | awk {'print $3'}`; if [ $stat = 'charging' ]; then stat='+'; # Провод подключён ( ноут зяряжеается ) else if [ $stat = 'charged' ]; then stat=''; # ( Аккумулятор зяряжен) else stat='-'; # Провод не подключён ( ноут разряжается ) fi fi # получаем заряд батареи в % ( Школьная математика - Рулит! :) ) bat=$(($remaining_bat*100/$full_bat)); # основные цвета ( ESC - последовательности, подробнее - $ man console_codes ) RED="\033[31m"; # Красный YELLOW="\033[33m"; # Жёлтый WHITE="\033[38m"; # Белый # Цвет по-умолчанию DEFAULT="\033[0m"; if [ $bat -lt 10 ]; then # Если заряд аккамулятора меньше 10% (краасные цвет) result="$RED$stat$bat"; else if [ $bat -lt 30 ]; then # Если заряд аккамулятора меньше 30% (жёлтый цвет) result="$YELLOW$stat$bat"; else result="$WHTE$stat$bat"; # Заряд аккамулятора больше 30% ( белый цвет ) fi fi # Выводим результат echo -e $result%%$DEFAULT; exit 0;
Далее говорим zsh о том, что нужно выводить в PROMPT результат этого скрипта.
В файле ~/.zshrc в функции precmd() прописываем где-нибудь в начале:
precmd() { BAT=`binf.sh`; PROMPT="battery:(`echo $BAT`)::%{$reset_color%}%{$fg_bold[green]%}%m {$reset_color%}::%{$fg_bold[crey]%}[ %~ ]%{$rese+t_color%}> " .....
Как-то вот так, где binf.sh — скрипт выше.
Обязательно нужно, чтобы binf.sh лежал по пути в переменной PATH, я для этой цели создал папку bin в домашней директории и сделал ссылку на файл в папке /bin
В precmd() — можно запихнуть любые команды, которые будут выполнятся при обновлении командной строки.
Вот так можно быстро настроить раскладку в Xorg:
$ setxkbmap -layout us,ru -variant ,winkeys -option grp:caps_toggle,grp_led:scroll,terminate:ctrl_alt_bksp,compose:ralt
За способ спасибо muhas — http://muhas.ru/?p=133
Вот способ получисть снимок с web камеры из шел.
Искал способ как получить снимок (фото) с web камеры
Наткнулся только на статью про видеозахват через — ffmpeg. Вот ссылка — http://www.newmoldova.com/?q=node/85
Почитав немного ман по ffmpeg попробовал вот такую конструкцию:
$ ffmpeg -f video4linux2 -s 1024x768 -i /dev/video0 -f image2 snapshot.jpg 2>/dev/null
Вроде работает :)
-f video2linux — формат видео для захвата
-s 1024×768 — размер кадра захвата
-i /dev/video0 — файла web камеры
-f image2 snapshot.jpg — выходной тим и имя файла
Небольшая функция на javascript, которая позволяет узнать все свойства объекта
Вот сама функция:
function fnShowProps(obj, objName) { var result = ""; for (var i in obj) // обращение к свойствам объекта по индексу result += objName + "." + i + " = " + obj[i] + "\n"; document.write(result); }
Вот пример исползования:
fnShowProps(window.location, "location")
Результат:
location.pathname = /JavaScript/ location.protocol = http: location.search = ?8 location.hash = location.hostname = htmlcssjs.ru location.href = http://htmlcssjs.ru/JavaScript/?8 location.host = htmlcssjs.ru location.port = location.reload = function reload() { [native code] } location.replace = function replace() { [native code] } location.assign = function assign() { [native code] }
Источник: http://htmlcssjs.ru/JavaScript/?8
Во несколько способов реализации foreach в javascript
Вариант 1:
for (var key in some_array) { var val = some_array [key]; alert (key+' = '+val); }
Вариант 2:
for(i=0, c=arr.length; i<c; i++) { my_func(arr[i]); }
Нужно отметить, что второй вариант не совсем реализует foreach, так как перебираются только значения массива без ключей.
Вот небольшой мануал по использованию svn
Создать репозитарий можно вот так:
$ svnadmin create new_repo
Настраиваем svn вот так:
Идем в new_repo/conf и открываем в любимом редакторе файл svnserve.conf.
В нём мне пригодилось исправить только секцию [general] вот так:
[general]<br>anon-access = none<br>password-db = passwd
anon-access = none — этим сообщаем, что анонимный доступ нужно запретить
password-db = passwd — этим сообщаем, что пароли и логины пользователей svn находится в файле passwd
Файл passwd правим таким образом:
[users]<br>user = password
Запуск серванта svn в FreeBSD:
Если уже запущен, то убиваем процесс (скорее всего прекращать работу сервера через killall -9 не совсем правильно, да простит меня Джа)
$ killall -9 svnserve<br>$ svnserve -d -r ./new_repo
Чекаем свой проджект вот так:
$ svn co svn://my_name_user@host_svn/new_repo project_dir
my_name_user — пользователь svn
host_svn — хост с svn
new_repo — наша директория с репозитарием
project_dir — локальная папка проекта
Далее svn спросит пароль, имя ползователя и возможно задаст ещё пару вопросов, отвечаем..
Если всё правильно, то svn выдаст сообщение типа — Checked out revision n,
где n — номер версии (если репозитарий чекается первый раз, то версия будет 0)
Далее добавляем файлы своего проекта в папку проекта (project_dir) и делаем вот так :
$ svn add * Отправляем обновление на svn сервер:
$ svn commit -m "Добавляем файло в нашу репу ;) "
Вот и все! Кратко, дёшево и сердито, как и должно быть у бадлокодера %)))
З.Ы. Не забывайте про руководства svn и google! Всем удачи!
То что давно хотел узнать :)
Вот так можно найти строку по содержимому файла.
$ find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null
Вот так можно найти все файлы в каталоге /etc в которых есть слово «nameserver»
Опции grep:
H — выводим имя файла со строкой.
n — номер строки в файле.
Ошибки перенаправляем в /dev/null
При желании можно написать вот такой скрипт:
#/bin/sh dir='.'; if [ -z $1 ] then echo 'Команду нужно запускать вот так: find.str [dir]'; else if [ -z $2 ] then dir=$2 fi find . -type f -exec grep -Hn $1 {} \; 2>/dev/null fi
Скачал тут недавно книгу из двух текстовых файлов в koi8-r и с переводами строки в стиле Win (^M)
Решил поправить это дело таким вот образом:
$ cat book_p1.txt book_p2.txt | sed 's/\r//' | iconv -f koi8-r -t utf8 > book.txt
Вот так вот :) Unix — это круто!
Если нужно зашифровать отдельный файл (к примеру архив или документ) — можно воспользоваться утилитой openssl.
Шифрование файла file будет выглядеть так:
$ openssl enc -e -aes-256-cbc -k ПАРОЛЬ -in ./file -out ./file.encoded
или так:
$ cat ./file | openssl enc -e -aes-256-cbc -k ПАРОЛЬ > file.encoded Параметр -k и пароль можно не указывать, тогда он будет запрошен во время выполнения команды. вот ещё варианты: $ openssl aes-128-cbc -salt -in file -out file.aes $ openssl aes-128-cbc -d -salt -in file.aes -out file
Расшифровать обратно файл можно будет командой:
<span style="font-family: monospace;">$ </span>openssl enc -d -aes-256-cbc -k ПАРОЛЬ -in ./file -out ./file.encoded
(параметр -e меняется на -d) ну или соответственно:
$ cat ./file.encoded | openssl enc -d -aes-256-cbc -k ПАРОЛЬ > ./file
Параметр -k и пароль можно не указывать, тогда он будет запрошен во время выполнения команды.
Естественно команды можно комбинировать, и к примеру создание архива директории dir со сжатием gzip и шифрованием openssl aes будет выглядеть так:
$ tar -czf - ./dir | openssl enc -e -aes-256-cbc -k ПАРОЛЬ > archive.tar.gz.encoded
Рашифровываем (в обратном порядке):
$ openssl enc -d -aes-256-cbc -in ./archive.tar.gz.encoded | tar -xz
Плюс если шифрованный архив надо разбить на куски — добавляем split, все ограничивается только вашей фантазией :)
$ tar -czf - ./dir | openssl enc -e -aes-256-cbc -k ПАРОЛЬ | split -db 4M - arc
Склеиваем, дешифруем, разжимаем, разворачиваем:
$ cat arc* | openssl enc -d -aes-256-cbc | tar -xzf -
GnuPG очень известный способ шифрования и подписи электронных писем или других данных, кроме того gpg предоставляет расширенную систему управления ключами. В данных примерах рассматривается только шифрование файлов
Самым простым является симметричный шифр. В этом случае файл шифруется с помощью пароля, соответственно расшифровать его може тот, кто знает этот пароль, никаких ключей не требуется. Gpg добавляет расширение «*.gpg» к имени зашифрованного файла.
$ gpg -c file # Зашифровать файл по паролю $ gpg file.gpg # Расшифровать файл ( -o другой файл)
[announce]Чтобы было понятно и не забыть самому, что значат циферки в правах :)[/announce]
Итак, основы Unix, но я всегда забываю как формируются цифры прав доступа в Unix, поэтому и решил написать сюда об этом. чтобы в случае чего можно было подглядеть.
Вот примерная схема:
-r-w-x—r-w-x—r-w-x-
——- ——- ———
U G O
Легенда:
U — Владелец файла
G — Группа владельца файла
O — Все остальные
-r- — Разрешение на чтение
-w- -Разрешение на запись
-x- -Разрешение на использование
Теперь о том как формируются цифры:
Каждое разрешение представляет из себя ,если грубо, булевое значение т.е может быть равно 0 (выключено) или 1(включено)
Таким образом получаем двоичный код -111-111-111- что значит -rwx-rwx-rwx, а как мы знаем из курса информатики 111 в двоичной системе счисления есть 7 в восьмеричной, значит запись -111-111-111- в двоичной системе счисления будет равна -7-7-7- в восьмеричной. Кажется все логично и просто :)
Нембольшая таблица, чтобы было понятно наглядно.
Доступ | Двоичное число | Восьмеричное число |
---|---|---|
— | 000 | 0 |
—x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r— | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
Вот небольшая программка, которую я написал на js. Может кому-нибудь она поможет лучше понять принцип прав доступа в Unix
При написании статьи пользовался книгой — Маслякова В.Г, Linux на 100%(+DVD), СПб.:Питер,2009, 336c.
[announce]Настраиваем sudo в ARCHLinux..[/announce]
Программа sudo предназначина для запуска команд с привелегиями root пользователя:
например:
$ sudo halt
Для настройки рекомендуеться запустить команду visudo от ползователя root, которая запустит редактор vi с файлом для редактирования — /etc/sudoers
Немного о синтаксисе файла.
Чтобы разрешить пользователю выполнять все команды от root нужно ввести строку:
user ALL=(ALL) ALL
Если нужно дать возможность запускать на машине только несклько команд, то можно искользовать такой синтаксис:
user ALL=/usr/sbin/halt
Эта строка позволит запускать пользователю user команду halt. Для того, чтобы позволить пользователю запускать несколько команд от пользователя root нужно перечислить команды, включая абсолютный путь к команде, через запятую.
user ALL=/usr/sbin/halt, /bin/mount
Эта строка позволит запускать от полззователя root команды halt и mount
Итак, примерно получается такой синтаксис как я понял:
первое поле user — имя пользователя от которого будет запускаться команда sudo
второе поле ALL= — это имя машины на которой разрашено запускать каоманды через sudo
третье поле (ALL) — это пользователь от кого будет запущена команда через sudo, по-умолчанию root
четвертое поле — список команд с абсолютным путем к команде.
Еще пара любопытных опций.
Немного юмора от разработчиков sudo. Если в /etc/sudoers есть эта строка, то вместо стандартного сообщения о введенном неверно пароле будет выводиться шутливое предупреждение:
Defaults insults
Данная строка укажет на то что sudo будет хранить пароль 10мин.
Defaults:ALL timestamp_timeout=10
*Примечание: каждая запись занимает одну строку, поэтому некоторые записи могут быть большими, для переноса можно ипользовать символ \ тобишь как-то так:
user ALL=/usr/sbin/halt, \
/bin/mount
Это будет одна строка.
Источники:
$ man sudo
$ man sudoers
http://wiki.archlinux.org/index.php/Sudo_(Русский)
http://wiki.archlinux.org/index.php/Sudo
конечно же :)
Очень странный сайт с какими-то ошибками и неправильной кодировкой (сразу видно НАШ былокодерский! :) ) — http://www.infocity.kiev.ua/os/content/os299_2.phtml
[announce]Создание и прослушивание m3u в mplayer[/announce]
Сделать плейлист:
$ find / -type f -name «*.mp3» -print > my_music.m3u
Слушаем:
$ mplayer -playlist my_music.m3u
Рандомим список:
$ mplayer -shuffle — playlist my_music.m3u
Источник: http://surrender-zen-way.blogspot.com/2009/09/mplayer.html
Поднимаем Samba в FreeBSD 8.1
Итак, для того, чтобы подружить windows с FreeBSD поднимаем самбу
# cd /usr/ports/net/samba3 && make install clean
Далее добавляем в /etc/rc.conf строку — inetd_enable=»YES»
Запускаем —
# /etc/rc.d/inetd start
Открываем браузер и вводим в адресную строку: <domain_samba_server>:901 где <domain_samba_server> имя или ip машины на которой запустили самбу, например http://localhost:901 или http://127.0.0.1:901
После ввода пароля и логина можем управлять настройками самбы из браузера.
Проще как мне кажется отредактировать файл /usr/local/etc/smb.conf при помощи любимого текстового редактора ( конечно же vi :) )
После сохранения настроек запускаем Самбу —
/etc/rc.conf — сюда по традиции добавляем строки:
winbindd_enable="YES"
nmbd_enable="YES"
smbd_enable="YES"
И запускаем скрипт запуска самбы:
# /usr/local/etc/rc.d/samba start