Если вы системный администратор, вы в любой момент времени можете захотеть узнать кто залогинен на вашем Linux сервере. Несомневаюсь что вам известен способ, который позволяет вам узнать это, но знаете ли вы все их и используете самый удобный? В этой статье мы рассмотрим 4 возможных способа. 1. Получаем список пользователей и команды, используемые ими с помощью команды w Команда w используется для получения списка залогиненных пользователей и выполняемых ими команд. Вывод команды w содержит следующие колонки:[cut] Имя пользователя Номер tty Адрес, с которого произошло подключение Время подключения Время бездействия Время, затраченное всеми процессами в данном сеансе (JCPU) Время, потраченное текущим процессом (PCPU) Команда, выполняемая пользователем Дополнительно могут быть использованы следующие опции: -h игнорировать информацию заголовка -u отображать текущую загрузку -s Удалить из вывода JCPU, PCPU, и время подключения $ w 23:04:27 up 29 days, 7:51, 3 users, load average: 0.04, 0.06, 0.02 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ramesh pts/0 dev-db-server 22:57 8.00s 0.05s 0.01s sshd: ramesh [priv] jason pts/1 dev-db-server 23:01 2:53 0.01s 0.01s -bash john pts/2 dev-db-server 23:04 0.00s 0.00s 0.00s w $ w -h ramesh pts/0 dev-db-server 22:57 17:43 2.52s 0.01s sshd: ramesh [priv] jason pts/1 dev-db-server 23:01 20:28 0.01s 0.01s -bash john pts/2 dev-db-server 23:04 0.00s 0.03s 0.00s w -h $ w -u 23:22:06 up 29 days, 8:08, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ramesh pts/0 dev-db-server 22:57 17:47 2.52s 2.49s top jason pts/1 dev-db-server 23:01 20:32 0.01s 0.01s -bash john pts/2 dev-db-server 23:04 0.00s 0.03s 0.00s w -u $ w -s 23:22:10 up 29 days, 8:08, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM IDLE WHAT ramesh pts/0 dev-db-server 17:51 sshd: ramesh [priv] jason pts/1 dev-db-server 20:36 -bash john pts/2 dev-db-server 1.00s w -s 2. Получаем список пользователей с помощью команды who Команда who используется для получения списка пользователей, залогиненных в системе. В выводе находятся следующие колонки: имя пользователя, номер tty, дата и время, адрес подключения. $ who ramesh pts/0 2009-03-28 22:57 (dev-db-server) jason pts/1 2009-03-28 23:01 (dev-db-server) john pts/2 2009-03-28 23:04 (dev-db-server) Для получения отсортированного списка используем команду: $ who | cut -d’ ‘ -f1 | sort | uniq john jason ramesh 3. Узнаем под каким пользователем залогинены вы сами Команда whoami сообщит вам информацию о том, под какой учетной записью вы залогинены в системе. Полезно использовать с похмелья $ whoami john whoami дает такую же информацию, как и команда id -un $ id -un john 4. Смотрим историю подключений пользователя Команда last покажет вам историю подключений для определенного пользователя. Если в качестве аргумента не указан логин какого либо пользователя, отобразится история для всех пользователей. Данная информация берется из файла /var/log/wtmp. В выводе присутствуют следующие колонки: Имя пользователя Номер Tty Время и дата подключения Время отключения Общее время работы сеанса $ last jason jason pts/0 dev-db-server Fri Mar 27 22:57 still logged in jason pts/0 dev-db-server Fri Mar 27 22:09 - 22:54 (00:45) jason pts/0 dev-db-server Wed Mar 25 19:58 - 22:26 (02:28) jason pts/1 dev-db-server Mon Mar 16 20:10 - 21:44 (01:33) jason pts/0 192.168.201.11 Fri Mar 13 08:35 - 16:46 (08:11) jason pts/1 192.168.201.12 Thu Mar 12 09:03 - 09:19 (00:15) jason pts/0 dev-db-server Wed Mar 11 20:11 - 20:50 (00:39
для этого нужно просто вывести содержимое /etc/passwd :
cat /etc/passwdа если нужно только реальные юзеры исключая системные:
cat /etc/passwd | awk "/bash/{print}"
даже можно усовершенстовать предидущую команду для получения более простого списка:
cat /etc/passwd | awk "/bash/{print}" | cut -f1 -d :
для начала нужно все это поставить
cd /usr/ports/audio/musicpd && make config && make install clean
также не помешает mpc
cd /usr/ports/audio/mpc && make install clean
cd /usr/ports/audio/icecast2 && make install clean
Внимание!!!!
затем идет несколько недочетов допущеных криворукими портировщиками MPD на фрибсд
при установке musicpd создается конфиг /usr/local/etc/musicpd.sample
но mpc и musicpd используют старый добрый mpd.conf
по этому копируем cp musicpd.sample mpd.conf
и приводим в примерно такой вид
music_directory "/var/mpd/music"
playlist_directory "/var/mpd/.mpd/playlists"
db_file "/var/mpd/.mpd/database_new"
log_file "/var/mpd/.mpd/log"
pid_file "/var/mpd/.mpd/pid"
state_file "/var/mpd/.mpd/state"
sticker_file "/var/mpd/.mpd/sticker.sql"
user "mpd"
audio_output {
type "shout"
encoding "mp3" # optional
name "Radio"
host "localhost"
port "8000"
mount "/0"
password "hackme"
# quality "5.0"
bitrate "128"
format "44100:16:1"
protocol "icecast2" # optional
user "source" # optional
description "just unzip run enjoy" # optional
genre "industrial" # optional
public "Yes" # optional
timeout "2" # optional
mixer_type "software" # optional
}
bind_to_address "127.0.0.1"
затем конфигурируем icecast на ваш mountpoint
создаем ему повелителя, если сам не создался (icecast)
затем повелителю добавляем задание
crontab -e
@reboot /usr/local/bin/icecast -c /usr/local/etc/icecast.xml
ну и в /etc/rc.d
#for musicpd
musicpd_enable="YES"
ну и для удобства:
кому нибудь добавляем
@reboot /usr/local/bin/mpc play
cd /usr/ports/audio/musicpd && make config && make install clean
также не помешает mpc
cd /usr/ports/audio/mpc && make install clean
cd /usr/ports/audio/icecast2 && make install clean
Внимание!!!!
затем идет несколько недочетов допущеных криворукими портировщиками MPD на фрибсд
при установке musicpd создается конфиг /usr/local/etc/musicpd.sample
но mpc и musicpd используют старый добрый mpd.conf
по этому копируем cp musicpd.sample mpd.conf
и приводим в примерно такой вид
music_directory "/var/mpd/music"
playlist_directory "/var/mpd/.mpd/playlists"
db_file "/var/mpd/.mpd/database_new"
log_file "/var/mpd/.mpd/log"
pid_file "/var/mpd/.mpd/pid"
state_file "/var/mpd/.mpd/state"
sticker_file "/var/mpd/.mpd/sticker.sql"
user "mpd"
audio_output {
type "shout"
encoding "mp3" # optional
name "Radio"
host "localhost"
port "8000"
mount "/0"
password "hackme"
# quality "5.0"
bitrate "128"
format "44100:16:1"
protocol "icecast2" # optional
user "source" # optional
description "just unzip run enjoy" # optional
genre "industrial" # optional
public "Yes" # optional
timeout "2" # optional
mixer_type "software" # optional
}
bind_to_address "127.0.0.1"
затем конфигурируем icecast на ваш mountpoint
создаем ему повелителя, если сам не создался (icecast)
затем повелителю добавляем задание
crontab -e
@reboot /usr/local/bin/icecast -c /usr/local/etc/icecast.xml
ну и в /etc/rc.d
#for musicpd
musicpd_enable="YES"
ну и для удобства:
кому нибудь добавляем
@reboot /usr/local/bin/mpc play
$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' .
'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';
$cookie = '';
$login = 'qazqaz';
$password = 'qazqaz';
$ch = curl_init();
// true т.к. мы будем отправлять post запрос:
curl_setopt($ch, CURLOPT_POST, true);
// чтобы сайт думал, что мы - браузер:
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
// ответ сервера будем записывать в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// по редиректам будем переходить автоматически.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');
//Формирование запроса таким образом, я счел более наглядным
$post = array(
'act' => 'login',
'q' => '',
'al_frame' => '1',
'expire' => '',
'captcha_sid' => '',
'captcha_key' => '',
'from_host' => 'vkontakte.ru',
'email' => $login,
'pass' => $password
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$answer = curl_exec($ch);
/* В $answer нам приходит javascript, который и устанавливает куки
с названием: remixsid Нам нужно cпарсить эти 60 символов,
идентификатора сессии. с помощью них vkontakte поймет,
что мы авторизировались.*/
$sid = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60);
$cookie = 'remixsid=' . $sid;
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
// укажем страницу, с которой мы получим данные для проверки
curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/id107073034');
$answer = curl_exec($ch);
preg_match('!id="profile_current_info">((.*?))</div>!si',$answer,$data);
//print_r($data);
$pars=iconv('cp1251','utf-8',$data[1]);
//echo $pars;
$p = file_get_contents('/home/megido/l.dat');
if($p != $pars)
$f = @fopen('/home/qazqaz/l.dat','w+');
fwrite($f,$pars);
fclose($f);
//echo $answer;
curl_close($ch);
$cnt=100; // общее количество записей во всём выводе
$rpp=10; // кол-во записей на страницу
$rad=1; // сколько ссылок показывать рядом с номером текущей страницы (2 слева + 2 справа + активная страница = всего 5)
$link_sc='page_navigation.php'; // путь
if (isset($_GET['page']))
{
$page=$_GET['page']-1; // текущая страница
}
else
{
$page=0;
}
$links=$rad*2+1;
$pages=ceil($cnt/$rpp);
if ($page>0) { echo "First | Previous |"; }
$start=$page-$rad;
if ($start>$pages-$links) { $start=$pages-$links; }
if ($start<0) { $start=0; }
$end=$start+$links;
if ($end>$pages) { $end=$pages; }
for ($i=$start; $i<$end; $i++) {
echo " ";
if ($i==$page) {
echo "";
} else {
echo "";
}
// echo ($i*$rpp+1)."-";
// if ($i!=($pages-1)) { echo $i*$rpp+$rpp; } else { echo $cnt; }
echo ($i+1);
if ($i==$page) {
echo "";
} else {
echo "";
}
if ($i!=($end-1)) { echo " |"; }
}
if ($pages>$links&&$page<($pages-$rad-1)) { echo " ... ".($pages).""; }
if ($page<$pages-1) { echo " Next | Last"; }
для начала создадим скрипт
Пример:
* на блоггере она почему то ниже чем нужно
var d = document;
var offsetfromcursorY=15 // y offset of tooltip
var ie=d.all && !window.opera;
var ns6=d.getElementById && !d.all;
var tipobj,op;
function tooltip(el,txt) {
tipobj=d.getElementById('mess');
tipobj.innerHTML = txt;
op = 0.1;
tipobj.style.opacity = op;
tipobj.style.visibility="visible";
el.onmousemove=positiontip;
appear();
}
function hide_info(el) {
d.getElementById('mess').style.visibility='hidden';
el.onmousemove='';
}
function ietruebody(){
return (d.compatMode && d.compatMode!="BackCompat")? d.documentElement : d.body
}
function positiontip(e) {
var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
var winwidth=ie? ietruebody().clientWidth : window.innerWidth-20
var winheight=ie? ietruebody().clientHeight : window.innerHeight-20
var rightedge=ie? winwidth-event.clientX : winwidth-e.clientX;
var bottomedge=ie? winheight-event.clientY-offsetfromcursorY : winheight-e.clientY-offsetfromcursorY;
if (rightedge < tipobj.offsetWidth) tipobj.style.left=curX-tipobj.offsetWidth+"px";
else tipobj.style.left=curX+"px";
if (bottomedge < tipobj.offsetHeight) tipobj.style.top=curY-tipobj.offsetHeight-offsetfromcursorY+"px"
else tipobj.style.top=curY+offsetfromcursorY+"px";
}
function appear() {
if(op < 1) {
op += 0.1;
tipobj.style.opacity = op;
tipobj.style.filter = 'alpha(opacity='+op*100+')';
t = setTimeout('appear()', 30);
}
}
затем проинклюдим его и вставим в тело html div в каком будут отображатся подсказки
осталось толко заключить наш текст или картинку или еще чего
над этим текстом подсказка
над этим текстом подсказка
* на блоггере она почему то ниже чем нужно
для подсветки самое лучшее решение бедет скрипты гугла
для этого открывам редактирование шаблона
как показано на рисунке
(для каждой темы придется редактировать шаблон отдельно)
и добавляем после тега
следующий код:
ну и дополнив тег body добавив в него это:
для этого открывам редактирование шаблона
как показано на рисунке
(для каждой темы придется редактировать шаблон отдельно)
и добавляем после тега
следующий код:
ну и дополнив тег body добавив в него это:
на этом настройка заканчивается, для подсветки кода нужно просто заключить его в тегonload='prettyPrint()'
код
