Это не работает потому что iconv
сначала создает выходной файл (так как файл уже существует, он усекает его), затем начинает читать его входной файл (который теперь пуст). Большинство программ ведет себя этот путь.
Создайте новый, временный файл для вывода, затем переместите его в место.
for file in *.php
do
iconv -f cp1251 -t utf8 -o "$file.new" "$file" &&
mv -f "$file.new" "$file"
done
Если Ваша платформа iconv
не имеет -o
, можно использовать перенаправление оболочки для того же эффекта.
for file in *.php
do
iconv -f cp1251 -t utf8 "$file" >"$file.new" &&
mv -f "$file.new" "$file"
done
Colin Watson sponge
утилита (включенный в moreutils Joey Hess) автоматизирует это:
for file in *.php
do
iconv -f cp1251 -t utf8 "$file" | sponge "$file"
done
Этот ответ применяется не только к iconv
но к любой программе фильтра. Несколько особых случаев стоит упомянуть:
-p
имейте a -i
опция заменить файлы на месте.grep
, tr
, sed 's/long input text/shorter text/'
), и Вам нравится жить опасно, можно хотеть действительно изменить файл на месте (другие решения, упомянутые здесь, создают новый выходной файл и перемещают его в место в конце, таким образом, исходные данные неизменны, если команда прервана по какой-либо причине).От ps
страница справочника:
- e Выбор все процессы. Идентичный-A.
Таким образом, ps -e
отобразит все процессы. Общие опции для "дают мне, все" ps -ely
или ps aux
, последним является BSD-стиль. Часто, люди затем передают этот вывод по каналу к grep
искать процесс, как в ответе xenoterracide. Чтобы постараться не также видеть grep
самостоятельно в выводе, Вы будете часто видеть что-то как:
ps -ef | grep [f]oo
где нечто является именем процесса, Вы ищете.
Однако, если Вы ищете конкретный процесс, я рекомендую использовать pgrep
управляйте, доступно ли это. Я полагаю, что это доступно на Сервере Ubuntu. Используя pgrep
средства Вы избегаете упомянутого выше состояния состязания. Это также обеспечивает некоторые другие функции, которые все больше требовали бы сложный grep
обман для тиражирования. Синтаксис прост:
pgrep foo
где нечто является процессом, для которого Вы смотрите. По умолчанию это просто произведет идентификатор Процесса (PID) процесса, если это найдет тот. Посмотрите man pgrep
для других выходных опций. Я нашел следующую страницу очень полезной:
Вы попробовали ps aux | grep postgres
? это действительно должно обнаружиться, если пост-ГРЭС работает. Если это не делает..., как Вы знаете, что пост-ГРЭС работает?
(примечание: это - распространенное заблуждение, которое это, это ps -aux
но это не корректно),
ps aux
работавший лучше, это показало приблизительно 70 процессов, в то время как ps
показал только два. Я знаю, что PostgreSQL работал, так как я видел, что он был запущен на, загружаются, и он был остановлен на завершении работы.
– Jonas
21.10.2010, 03:20
pgrep
для этого, которое обладает преимуществом никогда ловли Вашего ps aux | grep postgres
сама команда в списке процессов и выводе его
– Michael Mrozek♦
21.10.2010, 08:09
Ответ, включая эффективную фильтрацию вывода вместе с автоматической функцией bash
ps -elf | head -n 1; ps -elf | grep -i search_term | grep -v grep | grep -v "ps -elf"
Замените search_term
выше любым термином, который вы хотите найти, чтобы найти 0 или более процессов, например term
.
Пример использования:
ps -elf | head -n 1; ps -elf | grep -i term | grep -v grep | grep -v "ps -elf"
Выход:
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S user 14919 1394 0 80 0 - 217553 poll_s 04:14 ? 00:00:12 /usr/lib/gnome-terminal/gnome-terminal-server
Автоматизировать
В корне вашего домашнего каталога, если у вас еще нет файла псевдонимов.bash _, введите следующее:
touch.bash_aliases
Затем добавьте функцию для выполнения команд в конец файла псевдонимов.bash _:
echo 'pself() { ps -elf | head -n 1; ps -elf | grep -i "$1" | grep -v grep | grep -v "ps -elf"; }' >>.bash_aliases
Пример использования (сначала откройте новое окно терминала):
pself term
Выход:
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S user 14919 1394 0 80 0 - 217553 poll_s 04:14 ? 00:00:12 /usr/lib/gnome-terminal/gnome-terminal-server
(Проверено выше на Ubuntu 18.04 ).
Статья, объясняющая все это подробно:здесь
ps
не зная флаги. Я просто бросаюaux
в нем всегда; я понятия не имею, чем на самом деле управляют отдельные флаги – Michael Mrozek♦ 21.10.2010, 08:07