Черная технология командной строки Linux (LTS)

задняя часть Linux Командная строка регулярное выражение

Командная строка 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решать. Процесс реализации:

  1. Перейдите в соответствующий каталог, например/tmp/push1
  2. использоватьpushdкоманда push в стек каталогов
  3. Под другими путями используйте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команда префикса. Всего в этой серии:

  1. zgrep
  2. zcat
  3. zless
  4. zmore
  5. здифф Эти команды на самом деле аналогичны функциям без «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

!Вернуться в машину времени

Шаги по использованию!:

  1. пройти черезhistoryНайдите порядковый номер команды, котораяhistoryКоманда выводит предыдущее число.
  2. Передайте полученное число перед !, а затем нажмите 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 ".*""