Просмотрите fstat и lsof из портов/ пакетов .
$ su - root -c \
"PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.8/packages/amd64 pkg_add -r lsof"
lsof-4.88: ok
fstat
: # Start a process (nc) that listens on port 8080
$ nc -l 8080 & bg
[1] 17454
[1] nc -l 8080
# Get the process listening on port 8080:
$ fstat | grep :8080
cmihai nc 17454 3* internet stream tcp 0x0 *:8080
Мы можем создать функцию для получения pid, например:
$ portpid() { fstat | grep ":$1" | awk '{print $3}' ;}
$ portpid 8080
17454
Тогда мы можем убить процесс, прослушивающий порт 8080, как это:
$ kill $(portpid 8080)
[1] + Terminated nc -l 8080
-121--128451-
Вы можете закольцевать его:
echo here is a pat and a tern and a pattern |
sed -e'1{H;x;s/\(.\).*/\1pattern\1replace/;x;}' \
-eG -e'/\(.*\)\(.*\n\)\(\n\1\)\n/!{P;d;}' \
-e's//\3\2/;t-' \
-e:- -e's/\(\n\)\(.\)\(.*\n\)\(.\)/\4\1\3/;t-' \
-e's/\n//;P;d'
here is a pat and a tern and a replace
Это делает заменяющий символ, проходя слева направо. Он сдвигает первый разделитель справа от заменяемого символа для каждой подстановки. Вы можете видеть, что я имею в виду, если воткнуть команду l
ook непосредственно перед циклом t
ested подмены после -e: -
:
here is a pat and a tern and a \npattern\nreplace$
here is a pat and a tern and a r\nattern\neplace$
here is a pat and a tern and a re\nttern\nplace$
here is a pat and a tern and a rep\ntern\nlace$
here is a pat and a tern and a repl\nern\nace$
here is a pat and a tern and a repla\nrn\nce$
here is a pat and a tern and a replac\nn\ne$
here is a pat and a tern and a replace\n\n$
here is a pat and a tern and a replace
Если вы действительно ищете своего рода перевод вещи, вы можете сделать это тоже. Я написал это ранее в качестве ответа на другой вопрос:
Это выглядит выполнимо - вы просто должны как бы сдвиг в/сдвиг:
эхо может cccc ccccccclayii sed глины игнорировать\ каждая вещь cclayii, кроме соответствующего слова\ - cclayiicclayii | sed -e 'y//\n/'\ -eh -e/\( cclayii\)\1 */&/g; x; s///g; s/^//'\ -ex -e//./; s/\( [^] * *\)\{ 2\}/\1/g; s/^//'\ -e 'y/clayk/kieio/; G; t $' -e: $\ -e '/^\n/{ s///; y/\n/\n/;} '\ -et -e 's/^ *\( [^] *\)\(. *\n [^] *\)/\2\1/; t $'
может ли ccccc cccccckkieiii sed глина игнорировать каждую kkieiii вещь, но соответствующее слово - kkieiiikkieiii
... это непросто, хотя.
Эта петля тоже немного, но не так много.
Как и в случае наиболее сложных проблем, способ проще, если вы используете два
sed
s:echo может cccc ccccccclayii sed clay игнорировать\ каждая вещь cclayii, кроме соответствующего слова\ - cclayiicclayii | sed -e 's/\( cclayii\)\1 */\n &\n/g; G; s/^//' | sed -e '/^/! y/clayk/kieio/;/./{ H; d;} '\ -e 'x; s/\n\{ 0,1\}//g'
может ccccc cccccckkieiii sed глина игнорировать каждую kkieiii вещь, но соответствующее слово - kkieiiikkieiii
С BSD sed
вы хотите использовать литеральную новую строку вместо n
в \n
побегов в правой подстановке для первого sed
там.
-121--289170-
Это произошло со мной, когда у меня был файл конфигурации VirtureHost в пользовательском каталоге/etc/httpd/sites-enabled, который был поверх
Прослушивание 80
Происходит так, что, прослушивая этот порт на httpd.conf, он конфликтует, что приводит к этой ошибке.
Удаление нескольких записей на Listen 80
и наличие только одной записи на httpd.conf позволяет решить эту проблему.
При создании виртуальных хостов, прослушивающих порты, а не домены, я всегда включаю их в верхнюю часть виртуального хоста.conf-файл Прослушайте номер 12345
, соответствующий соответствующему порту.
Обычно systemd
службы имеют только ограниченный набор переменных окружения, и вещи в связанных файлах /etc/profile
, /etc/profile.d
иbashrc
-не установлены.
Чтобы добавить переменные окружения для службы systemd
, у вас есть разные возможности.
В приведенных ниже примерах предполагается, что roscore
находится в /opt/ros/kinetic/bin/roscore
, поскольку systemd
службы должны иметь двоичный файл или сценарий, настроенный с полным путем.
Одна из возможностей — использовать опцию Environment
в службе systemd
. Простая служба systemd
выглядит следующим образом.
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
Environment="One=1" "Three=3"
Environment="Two=2"
Environment="Four=4"
ExecStart=/opt/ros/kinetic/bin/roscore
[Install]
WantedBy=multi-user.target
Вы также можете поместить все переменные среды в файл, который можно прочитать с помощью опции EnvironmentFile
в службе systemd
.
[root@localhost ~]# cat /etc/systemd/system/ros.env
One=1
Three=3
Two=2
Four=4
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
EnvironmentFile=/etc/systemd/systemd/ros.env
ExecStart=/opt/ros/kinetic/bin/roscore
[Install]
WantedBy=multi-user.target
Другим вариантом может быть создание сценария-оболочки для вашего двоичного файла ros
и вызов этого сценария-оболочки из службы systemd
. Скрипт должен быть исполняемым. Чтобы убедиться в этом, запустите
chmod 755 /opt/ros/kinetic/bin/roscore.startup
после создания этого файла.
[root@localhost ~]# cat /opt/ros/kinetic/bin/roscore.startup
#!/bin/bash
source /opt/ros/kinetic/setup.bash
roscore
[root@localhost ~]# cat /etc/systemd/system/ros.service
[Unit]
Description=ROS Kinetic
After=sshd.service
[Service]
Type=simple
ExecStart=/opt/ros/kinetic/bin/roscore.startup
[Install]
WantedBy=multi-user.target
Обратите внимание, что вам нужно запустить systemctl daemon-reload
после того, как вы отредактировали файл службы, чтобы сделать изменения активными. Чтобы включить службу при загрузке системы, вам нужно ввести systemctl enable ros
.
Я не знаком с двоичным файлом roscore
, и может потребоваться изменить Type=
с simple
(, который используется по умолчанию и обычно не требуется )на forking
в первых двух примерах.
Для обычного входа в систему вы можете скопировать или создать символическую ссылку /opt/ros/kinetic/setup.bash
на /etc/profile.d/ros.sh
, которая должна быть получена при обычном входе в систему.
вы можете попробовать это
[Unit]
Description=Run command with source /opt/ros/kinetic/setup.bash
[Service]
Type=simple
ExecStart=/bin/bash -c 'source /opt/ros/kinetic/setup.bash && /opt/ros/kinetic/bin/roscore'
[Install]
WantedBy=multi-user.target