Командная строка Linux — это то, к чему разработчики прикасаются ежедневно. Однако есть много маленьких хитростей. Я сделаю резюме здесь (долгосрочное обновление).
Как утка в воде между тропами
Черная технология 1: Настройка корневого каталога
Если вы часто используете каталог в качестве корневого каталога, вы можете указать корневой каталог cd через CDPATH.
Например, я часто/etc
каталог, чтобы настроить соответствующие файлы. Например, я хочу перейти из своего домашнего каталога в/etc/nginx/
каталог, общий метод:
cd /etc/nginx/
Есть ли способ быть ленивым? Конечно, мы можем.bashrc
(если вы зш, в.zshrc
ниже) присоединяйтесьexport CDPATH=/etc
Теперь вы хотите открыть/etc/nginx/
каталог, просто введите:
cd nginx
Ленивый необходимый.
Конечно, вы можете ввести несколько корневых путей, с каждым путем в длинный:
разделены.
export CDPATH=.:~:/etc:/var:
Черная технология 2: Переключение между двумя путями
Когда нам часто нужно переключаться между двумя путями под терминалом. В это время мы можем использоватьcd -
, «неоднократно прыгать» между двумя путями.
Например: первый путь/etc/nginx/
, второй путь~/project/
Мы в первую очередьcd /etc/nginx/
вниз, затем сноваcd ~/project/
. Впоследствии, когда нам нужно перейти на другой путь просто нужноcd -
может быть достигнут.
Черная технология 3: доступ к пути через стек
Если процесс доступа к пути похож на структуру данных наподобие стека, то мы можем использоватьpushd
решать.
Процесс реализации:
- Перейдите в соответствующий каталог, например
/tmp/push1
- использовать
pushd
команда push в стек каталогов - Под другими путями используйте
popd
команда, перейдите в верхний каталог стека.
пример:
существует/tmp/
созданный в каталогеpush1
,push2
,push3
Три каталога, требование состоит в том, чтобы поместить три каталога в стек каталогов соответственно, а затем перейти к соответствующему каталогу соответственно. Весь процесс будет показан ниже:
# pcdack @ pcdack-sword in /tmp/push1 [18:58:01]
$ pwd
/tmp/push1
# pcdack @ pcdack-sword in /tmp/push1 [18:58:15]
$ pushd .
/tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push1 [18:58:22]
$ cd /tmp/push2
# pcdack @ pcdack-sword in /tmp/push2 [18:58:31]
$ pushd .
/tmp/push2 /tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push2 [18:58:37]
$ cd /tmp/push3
# pcdack @ pcdack-sword in /tmp/push3 [19:00:23]
$ pushd .
/tmp/push3 /tmp/push2 /tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push3 [19:00:28]
$ popd
/tmp/push2 /tmp/push1 /tmp ~
# pcdack @ pcdack-sword in /tmp/push2 [19:00:37]
$ popd
/tmp/push1 /tmp ~
Весь процесс очень прост, я думаю, каждый сможет его понять.
сценарий:
Конечно, мы можем совместить навигацию и работу со стеком, мы можем написать следующий код для.bashrc
или.zshrc
вниз, чтобы осознать.
function pushcd(){
cd "$@" && eval pushd .;
}
Затем нажмите на стек и переключите пути с помощью одной команды для решения.
Black Technology 4: «Элегантное» переключение родительского каталога
Если мы находимся в особенно глубоком каталоге, например:/dev/bus/usb/001
. Итак, как нам перейти на/dev/bus/
Под каталогом? Общая практика таковаcd ../..
, Есть только два уровня каталогов, которые кажутся приемлемыми, но если в один прекрасный день необходимо вернуться к пяти уровням каталогов. Тогда общее письмо не будет элегантным. Итак, здесь, чтобы представить черную технологию. использоватьalias
решить проблему. в нашем.bashrc
или.zshrc
Введите следующее:
alias ..="cd .."
alias ..2="cd ../.."
alias ..3="cd ../../.."
alias ..4="cd ../../../.."
alias ..5="cd ../../../../.."
Затем мы возвращаемся на два уровня назад, и каталог становится..2
, элегантный, счастливый, красивый.
Возможны, конечно, и другие представления: например:cd1
,cd2
...
Black Technology 5: Комбинация mkdir и cd
В повседневной разработке нам часто нужно создать папку и перейти в этот каталог. Однако ради тоу и лан. Мы можем объединить две команды вместе. Создать новую командуmkdircd
. Добавьте следующий код в.bashrc
или.zshrc
Вниз:
function mkdircd(){
mkdir -p "$@" && eval cd "\"\$$#\"";
}
Вот и все.
Итак, вы такой буфер обмена
Мы часто используем системный буфер обмена в терминале. Например, скопируйте вывод команды в буфер обмена, затем вставьте его в браузер или в другое место и т. д. Во-первых, нам нужна программа под названиемxsel
. Он доступен в управлении пакетами в основных дистрибутивах, например в Archpacman -S xsel
и он готов к установке.
использовать
1. Вывести команду в буфер обмена, например, я хочуls
Скопируйте результат в буфер обмена, затем введите следующую команду:
ls | xsel -i -b
Чтобы было удобнее звонить, мы можем.zshrc
или.bashrc
Заполните следующий код:
alias to_clipboard="sel -i -b"
Итак, пример только что становится:
ls | to_clipboard
Конечно, мы также можем интегрировать команду для просмотра содержимого буфера обмена, в.zshrc
или.bashrc
добавлять:
alias clipboard="xsel -b -o"
когда мы набираем в терминалеclipboard
, будет выведено содержимое буфера обмена.
Сжатые файлы работают свободно
Черная технология 1: универсальная команда декомпрессии
В Linux существует множество типов форматов сжатия, например, обычно используются.tar.gz
,zip
,tar.bz2
и Т. Д. Команда распаковки «вонючая и длинная», поэтому можем ли мы распаковать все сжатые файлы одной командой? Конечно можно, просто нужно добавить следующий скрипт в.zshrc
или.bashrc
, вы можете сделать все это с помощью одной команды:
Примечание. Команды unrar и unzip должны быть предварительно установлены на вашем компьютере.
ex ()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via ex()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
Черная технология 2: Начальная буква «Z»
Иногда нам нужно напрямую просмотреть содержимое сжатого пакета, не распаковывая сжатый пакет, тогда мы можем использоватьz
команда префикса. Всего в этой серии:
- zgrep
- zcat
- zless
- zmore
- здифф Эти команды на самом деле аналогичны функциям без «z», но объекты у них другие. Команда «z» используется исключительно для сжатых файлов. пример:
#我先创建几个文本文件
echo "this first line">first
gzip first
# 我们通过调用z命令来查看内容
zcat first.gz
# 当然同理我们可以通过zless,zmore来查看
# zgrep需要查找的字符用\-i参数指定,比如我想查找带有`line`字眼的内容:
zgrep -i line first.gz
# zdiff用来对比两个归档文件的不同,与diff类似
# 我们首先创建一个新的文本
echo "this second line">second
gzip second
# 然后进行对比
zdiff first.gz second.gz
Команда "Мудрость" Grep
Черная технология: заставить grep иметь логику И, ИЛИ, НЕ
grep — инструмент текстового поиска, который мы часто используем. Так как же сделать так, чтобы наш grep имел И, ИЛИ, НЕ критерии поиска? Прежде чем вводить использование, давайте покажем данные, которые мы хотим обработать (файл сотрудника)
100 张三 CEO 薪水 100k
101 李四 android工程师 薪水 10k
102 王五 IOS工程师 薪水 10k
103 刘六 Web工程师 薪水 20k
104 冯七 大数据工程师 薪水 25k
и
grep не имеет прямой команды «и», нам нужно использовать регулярные выражения для моделирования и управления
grep -E "字符1.*字符2" filename
grep -E "字符1.*字符2|字符2.*字符1" filename
Мы хотим соответствовать двум условиям: фамилия Чжан и генеральный директор. Итак, команда, которую мы ввели:
grep -E "张.*CEO" employee
или
Мы ищем людей по имени Ли и Чжан в документе: метод 1:
grep '字符1\|字符2' filename
grep '张\|李' employee
Способ 2:
grep -E '字符1|字符2' employee
grep -E '张|李' employee
Нет
удалить всех людей с фамилией Li
grep -v '字符1' employee
grep -v '李' employee
назад в машине времени
Черная технология 1: ГибкостьCtrl+R
В ходе ежедневной разработки мы часто сталкиваемся с большим количеством однотипных и повторяющихся команд, которые необходимо вводить. Итак, можем ли мы найти ранее введенную команду по нескольким буквам? Конечно, есть способ, т.Ctrl+R
горячая клавиша.
Вот пример, чтобы показать, как использоватьCtrl+R
.
Во-первых, используйтеhistory | tail -4
Давайте посмотрим на последние четыре записи истории, которые мы будем использовать:
1476 cd document
1477 ls
1478 service httpd stop
1479 cd /dev/cpu/
Сценарий 1: Повторение исторических команд
Если я хочу повторно выполнитьcd document
команда, то мне нужно нажать на клавиатуруCtrl+R
ключ, затем введитеcd
Вы можете видеть, что командная строка автоматическиcd document
После заполнения терминала. В это время просто нажмите Enter, затем вы можете воспроизвести команду.
# 按Ctrl+R键,然后,输入cd
$bck-i-search:cd
# 下面为命令行自动补全的命令
$cd document
Сценарий 2: изменение параметров на основе исторических команд
Этот шаг аналогичен сценарию 1. Когда мы найдем команду, которую нужно изменить, нажмите левую или правую кнопку, чтобы выйти из режима поиска, перейдите к параметру, который нужно изменить, и используйтеCtrl+w
Удалите весь параметр и измените его. Ниже поясняю на примере. Этот пример1478 service httpd stop
изstop
параметр изменен наstart
.
# 按Ctrl+R
$bck-i-search:service
# 找到相应的命令,然后按左,右导航键,退出搜索模式
$ service httpd stop
# 然后我们按Ctrl-e到我们需要修改的stop参数后
$ service httpd stop
# 使用Ctrl+w删除参数
$ service httpd
# 补成我们需要的参数
$ service httpd start
Черная технология 2: История Чего вы не знали
заставить историю показывать временные метки
пройти черезexport HISTTIMEFORMAT='%F %T
Вы можете сделать временную метку отображения истории. Конечно, вы можете записать это предложение в свой.bashrc
Внутри он становится глобальной конфигурацией. Покажем эффект ниже.
export HISTTIMEFORMAT='%F %T '
history | more
...
11 2018-04-19 12:54:15 zip STM32+HTTP/
12 2018-04-19 12:54:15 zip STM32+HTTP.zip STM32+HTTP/
13 2018-04-19 12:54:15 ;s
14 2018-04-19 12:54:15 man zip
15 2018-04-19 12:54:15 zip -r STMHTTP STM32+HTTP/
16 2018-04-19 12:54:15 ls
17 2018-04-19 12:54:15 mnt_entertain
18 2018-04-19 12:54:15 cd_entertainment
...
Примечание не поддерживается
zsh
,zsh
Соответствующая командаHIS_STAMPS=dd-mm-yyyy
!Вернуться в машину времени
Шаги по использованию!:
- пройти через
history
Найдите порядковый номер команды, котораяhistory
Команда выводит предыдущее число. - Передайте полученное число перед !, а затем нажмите Enter. Команда после соответствующего серийного номера будет завершена в приглашении терминала.
пример:
$history | head
10 2018-04-19 12:54:15 ls
11 2018-04-19 12:54:15 zip STM32+HTTP/
12 2018-04-19 12:54:15 zip STM32+HTTP.zip STM32+HTTP/
13 2018-04-19 12:54:15 ;s
14 2018-04-19 12:54:15 man zip
15 2018-04-19 12:54:15 zip -r STMHTTP STM32+HTTP/
16 2018-04-19 12:54:15 ls
17 2018-04-19 12:54:15 mnt_entertain
18 2018-04-19 12:54:15 cd_entertainment
19 2018-04-19 12:54:15 ls
# 如果我想重复第17号命令,在终端提示符输入!17然后按回车
$!17
$mnt_entertain
Удалить повторяющиеся команды из истории
export HISTCONTROL=ignoredups
команда удалитьПосле заказаПовторяющиеся команды в записи истории. Это предложение кажется немного запутанным, поэтому я приведу пример для иллюстрации:
$export HISTCONTROL=ignoredups
$pwd
$pwd
$pwd
$history | tail -3
...
1111 pwd
...
Как показано в приведенном выше примере, мы ввели 3 команды pwd, и, наконец, в нашей истории осталась только одна команда pwd.
Передайте аргументы исторической команды в качестве аргументов новой команде
Сценарий 1: Когда две команды находятся рядом
Название очень запутанное. Вот пример непосредственно (обратите внимание, что # после # является моим объяснением следующих команд):# 这里我们使用cp命令来复制一个名为text的文件
$cp text text.bak
# 我们想通过vim来编辑text.bak,只需要输入vim !^
$vim !^
#下面这条命令是当我们输入完上一条命令后,回车自动填充的内容
$ vim text.bak
# 我们想通过vim来编辑text,只需要输入vim !!:$
$vim !!:$
#下面这条命令是当我们输入完上一条命令后,回车自动填充的内容
$ vim text
Если несколько параметров
Здесь мы предполагаем следующую командуcommand1 arg1 arg2 arg3 arg4
, нам надоcommand2
используется вcommand1
один вarg2
параметр, то как мы можем получить его элегантным способомarg2
параметр? мы можем пройти!!:2
Способ получить, так же, если, нам нужноarg3
параметры, то вы можете передать!!:3
,И так далее.
$command1 arg1 arg2 arg3 arg4
$command2 !!:2
#下面这条命令是当我们输入完上一条命令后,回车自动填充的内容
$command2 arg2
$command2 !!:3
#下面这条命令是当我们输入完上一条命令后,回车自动填充的内容
$command2 arg3
Сценарий 2: когда две команды не являются соседними
Если две команды не являются соседними, конечно, есть способ. Поясним это непосредственно на примере.
$history|tail -3
...
command1 arg1 arg2 arg3 arg4
...
#我们的命令command2需要参数arg2
$command2 !command1:2
#下面这条命令是当我们输入完上一条命令后,回车自动填充的内容
#command2 arg2
wget мощный инструмент загрузки
Черная технология 1: ограничение скорости загрузки
Ограничение скорости загрузки в основном используется в средах с несколькими задачами. Потому что нам часто нужно делать какие-то другие вещи во время загрузки. Например, просмотр веб-страниц. но,wget
Команда по умолчанию включает загрузку на полной скорости, но в данный момент это может повлиять на другие наши задачи. Следовательно, необходимо позволитьwget
помедленнее.wget
пройти через--limit-rate
Например, для ограничения скорости:
# 使用wget下载。并且,限制速度不超过200k。
wget --limit-rate=200k http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz
Черная технология 2: фоновая загрузка:
Позитивные (кай) часто (че) фоновые загрузки.
wget -b http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz
Черная технология 3: имитация запросов браузера
Некоторые ссылки для загрузки должны быть загружены через браузер. Мы можем установить некоторые настройки, чтобы разрешитьwget
запрос на загрузку, как обычно делает браузер:
# URL-TO-DOWNLOAD是下载链接
wget --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0" URL-TO-DOWNLOAD
Черная технология 4: проверьте, можно ли скачать ссылку для скачивания
Иногда нам нужно знать, можно ли скачать ссылку, а затем делать выводы в различных ситуациях.
wget --spider http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz
Если происходит что-то вроде следующего (удаленный файл показан в конце позже), то доказательство можно скачать:
打开 Spider 模式。检查是否存在远程文件。
--2018-04-20 22:51:42-- http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.86/bin/apache-tomcat-7.0.86-fulldocs.tar.gz
正在解析主机 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
正在连接 mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:5162656 (4.9M) [application/octet-stream]
存在远程文件
Black Technology 5: выход из загрузки, если размер файла превышает определенный
Если загруженный файл превышает 5 МБ, загрузка автоматически прекратится.
wget -Q5m 下载链接
список файлов "эволюция"
Черная технология 1: Отображение файлов от большого к меньшему (от маленького к большому) в зависимости от размера файла
Отсортировать текущую папку от самой большой к самой маленькой
find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n -r
Мы можем использовать приведенную выше командуalias
напишите наш.bashrc
и.zshrc
, по имениls_big
:
alias ls_big="find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n -r"
Отсортировать текущую папку от меньшего к большему
find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n
Как и выше, мы можем написать в файле конфигурации
alias ls_small="find . -maxdepth 1 -type f -exec ls -s {} \; | sort -n"
Черная техника 2: отображать файлы в соответствии с их временными метками
Для этого требования нам нужно использовать толькоls -lt
Команда может прийти, конечно, если вы хотите вывести в обратном порядкеls -ltr
Black Technology 3: просмотр всех скрытых файлов и папок текущего файла
документ
find . -maxdepth 1 -type f -name ".*"
Мы можем написать в файл конфигурации:
alias ls_file_hide="find .-maxdepth -type f -name ".*""
папка
find . -maxdepth 1 -type d -name ".*"
Так же:
alias ls_file_hide="find .-maxdepth -type d -name ".*""