10分钟学会Linux常用 bash 命令

Blacky63 等级 322 0 0

10分钟学会Linux常用 bash 命令

目录

  1. 基本操作
    1.1. 文件操作
    1.2. 文本操作
    1.3. 目录操作
    1.4. SSH, 系统信息 & 网络操作
  2. 基本 Shell 编程
    2.1. 变量
    2.2. 字符串替换
    2.3. 函数
    2.4. 条件
    2.5. 循环
  3. 技巧
  4. 调试

1. Basic Operations

a. export

显示所有的环境变量,如果你想获取某个变量的详细信息,使用 echo $VARIABLE_NAME.

export 

Example:

$ export
SHELL=/bin/zsh
AWS_HOME=/Users/adnanadnan/.aws
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LESS=-R

$ echo $SHELL
/usr/bin/zsh 

b. whereis

whereis使用系统自动构建的数据库来搜索可执行文件,源文件和手册页面。

whereis name 

Example:

$ whereis php
/usr/bin/php 

c. which

它在环境变量PATH指定的目录中搜索可执行文件。此命令将打印可执行文件的完整路径。

which program_name 

Example:

$ which php
/c/xampp/php/php 

d. clear

清除窗口上的内容。

1.1. File Operations

lstouchcatmoreheadtailmvcprmdiff
chmodgzipgunzipgzcatlprlpqlprm

a. ls

列出您的文件。ls有很多选项:-l列出“长格式”的文件,其中包含文件的确切大小,拥有该文件的人员,有权查看该文件,以及何时进行上次修改。-a列出所有文件,包括隐藏文件。有关此命令的更多信息,请检查此链接

ls option 

Example:

$ ls -al
rwxr-xr-x   33 adnan  staff    1122 Mar 27 18:44 .
drwxrwxrwx  60 adnan  staff    2040 Mar 21 15:06 ..
-rw-r--r--@  1 adnan  staff   14340 Mar 23 15:05 .DS_Store
-rw-r--r--   1 adnan  staff     157 Mar 25 18:08 .bumpversion.cfg
-rw-r--r--   1 adnan  staff    6515 Mar 25 18:08 .config.ini
-rw-r--r--   1 adnan  staff    5805 Mar 27 18:44 .config.override.ini
drwxr-xr-x  17 adnan  staff     578 Mar 27 23:36 .git
-rwxr-xr-x   1 adnan  staff    2702 Mar 25 18:08 .gitignore 

b. touch

创建或更新您的文件。

touch filename 

Example:

$ touch trick.md 

c. cat

它可以在UNIX或Linux下用于以下目的。

  • 在屏幕上显示文本文件
  • 复制文本文件
  • 合并文本文件
  • 创建新的文本文件
cat filename
cat file1 file2 
cat file1 file2 > newcombinedfile 

d. more

显示文件的第一部分(用空格移动并键入q以退出)。

more filename 

e. head

输出文件的前10行。

head filename 

f. tail

输出最后10行文件。用于-f在文件增长时输出附加数据。

tail filename 

g. mv

将文件从一个位置移动到另一个位置。

mv filename1 filename2 

filename1 文件的源路径,filename2 是目标路径。

h. cp

将文件从一个位置复制到另一个位置。

cp filename1 filename2 

filename1 文件的源路径,filename2 是目标路径。

i. rm

删除文件。在目录上使用此命令会给您显示一个错误: rm: directory: is a directory。 为了删除目录,你必须传递-rf去递归删除目录中的所有内容。

rm filename 

j. diff

比较文件,并列出他们的差异。

diff filename1 filename2 

k. chmod

让您更改文件的读取,写入和执行权限。

chmod -options filename 

l. gzip

压缩文件。

gzip filename 

m. gunzip

解压缩gzip压缩的文件。

gunzip filename 

n. gzcat

让你查看gzip压缩文件,而不需要gunzip它。

gzcat filename 

o. lpr

打印文件。

lpr filename 

p. lpq

查看打印机队列。

lpq 

Example:

$ lpq
Rank    Owner   Job     File(s)                         Total Size
active  adnanad 59      demo                            399360 bytes
1st     adnanad 60      (stdin)                         0 bytes 

q. lprm

从打印队列移除某些内容。

lprm jobnumber 

1.2. Text Operations

awkgrepwcsedsortuniqcutechofmt
trnlegrepfgrep

a. awk

awk是处理文本文件最有用的命令。它一行一行地在整个文件上运行。默认情况下,它使用空格分隔字段。awk命令最常用的语法是

awk '/search_pattern/ { action_to_take_if_pattern_matches; }' file_to_parse 

让我们采取以下文件 /etc/passwd。以下是此文件包含的示例数据:

root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync 

所以现在让我们从这个文件只获取用户名。 -F 指定在我们要基于哪个分隔字段。在我们的例子中 :{ print $1 } 意味着打印出第一个匹配字段。

awk -F':' '{ print $1 }' /etc/passwd 

运行上述命令后,您将获得以下输出。

root
daemon
bin
sys
sync 

有关如何使用awk的更多细节,请查看以下链接

b. grep

查找文件内的文本。您可以使用grep搜索与一个或多个正则表达式匹配的文本行,并仅输出匹配的行。

grep pattern filename 

Example:

$ grep admin /etc/passwd
_kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false
_kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false
_krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/false 

您还可以通过使用-i选项强制grep忽略单词大小写。-r可用于搜索指定目录下的所有文件,例如:

$ grep -r admin /etc/ 

-w 只搜索单词。有关grep详细信息,请查看以下链接

c. wc

告诉你一个文件中有多少行,多少单词和多少字符。

wc filename 

Example:

$ wc demo.txt
7459   15915  398400 demo.txt 

7459 是行数, 15915 是单词数, 398400 是字符数.

d. sed

用于过滤和转换文本的流编辑器。

example.txt

Hello This is a Test 1 2 3 4 

用连字符替换所有空格

sed 's/ /-/g' example.txt 
Hello-This-is-a-Test-1-2-3-4 

使用"d"替换所有的数字

sed 's/[0-9]/d/g' example.txt 
Hello This is a Test d d d d 

e. sort

排序文本文件的行

example.txt

f
b
c
g
a
e
d 

sort example.txt

sort example.txt 
a
b
c
d
e
f
g 

随机化一个排序的example.txt

sort example.txt | sort -R 
b
f
a
c
d
g
e 

f. uniq

报告或省略重复的行

example.txt

a
a
b
a
b
c
d
c 

只显示example.txt的唯一行(首先你需要排序,否则看不到重叠)

sort example.txt | uniq 
a
b
c
d 

显示每行的唯一项,并告诉我找到了多少个实例

sort example.txt | uniq -c 
 3 a
    2 b
    2 c
    1 d 

g. cut

从每行文件中删除部分。

example.txt

red riding hood went to the park to play 

显示第2,7和9栏的空格作为分隔符

cut -d " " -f2,7,9 example.txt 
riding park play 

h. echo

显示一行文字

显示 "Hello World"

echo Hello World 
Hello World 

用字母之间的换行显示 "Hello World"

echo -ne "Hello
World
" 
Hello
World 

i. fmt

简单的最佳文本格式化程序

example: example.txt (1 line)

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 

将example.txt的行输出为20个字符的宽度

cat example.txt | fmt -w 20 
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet. 

j. tr

翻译或删除字符

example.txt

Hello World Foo Bar Baz! 

把所有小写字母变成为大写

cat example.txt | tr 'a-z' 'A-Z' 
HELLO WORLD FOO BAR BAZ! 

把所有的空格变成换行符

cat example.txt | tr ' ' '
' 
Hello
World
Foo
Bar
Baz! 

k. nl

显示文件的行数

example.txt

Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet. 

带行号显示 example.txt

nl -s". " example.txt 
 1. Lorem ipsum
     2. dolor sit amet,
     3. consetetur
     4. sadipscing elitr,
     5. sed diam nonumy
     6. eirmod tempor
     7. invidunt ut labore
     8. et dolore magna
     9. aliquyam erat, sed
    10. diam voluptua. At
    11. vero eos et
    12. accusam et justo
    13. duo dolores et ea
    14. rebum. Stet clita
    15. kasd gubergren,
    16. no sea takimata
    17. sanctus est Lorem
    18. ipsum dolor sit
    19. amet. 

l. egrep

打印匹配模式的行 - 扩展表达式(别名为:'grep -E')

example.txt

Lorem ipsum
dolor sit amet, 
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet. 

在其中显示“Lorem”或“dolor”的行

egrep '(Lorem|dolor)' example.txt
or
grep -E '(Lorem|dolor)' example.txt 
Lorem ipsum
dolor sit amet,
et dolore magna
duo dolores et ea
sanctus est Lorem
ipsum dolor sit 

m. fgrep

打印匹配模式到的行 - FIXED模式匹配(别名为:'grep -F')
example.txt

Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
foo (Lorem|dolor) 
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet. 

在example.txt中找到具体的字符串'(Lorem | doloar)'

fgrep '(Lorem|dolor)' example.txt
or
grep -F '(Lorem|dolor)' example.txt 
foo (Lorem|dolor) 

1.3. Directory Operations

mkdircdpwd

a. mkdir

生成一个新的目录。

mkdir dirname 

b. cd

执行这个,从一个目录转移到另外一个目录。

$ cd 

将你移动到主目录。此命令接受可选的dirname,将你移动到该目录。

cd dirname 

c. pwd

告诉你你目前所在的目录。

pwd 

1.4. SSH, System Info & Network Operations

sshwhoamipasswdquotadatecaluptimewfingeruname
mandfdulastpskillkillalltopbgfg
pingwhoisdigwgetscp

a. ssh

ssh (SSH client) 是一个用来在登录到远程机器并执行的命令的程序。

ssh user@host 

此命令还接受-p可用于连接到特定端口的选项。

ssh -p port user@host 

b. whoami

返回当前登录用户名。

c. passwd

允许当前登录的用户更改其密码。

d. quota

显示您的磁盘配额。

quota -v 

e. date

显示当前日期和时间。

f. cal

显示月份的日历。

g. uptime

显示当前的正常运行时间。

h. w

显示谁在线

i. finger

Displays information about user.

finger username 

j. uname

显示内核信息。

uname -a 

k. man

显示指定命令的手册。

man command 

l. df

显示磁盘使用情况。

m. du

显示文件名中文件和目录的磁盘使用情况(du -s只给出一个总数)。

du filename 

n. last

列出您最后登录的指定用户。

last yourUsername 

o. ps

列出您的进程。

ps -u yourusername 

p. kill

使用您所提供的ID杀死(结束)进程。

kill PID 

q. killall

用名称杀死所有进程。

killall processname 

r. top

显示当前活动的进程。

s. bg

列出停止的或后台工作的Job; 恢复在后台停止的Job。

t. fg

前台化最近的Job。
Brings the most recent job in the foreground.

u. ping

Pings主机并输出结果。

ping host 

v. whois

获取域的whois信息。

whois domain 

w. dig

获取域的DNS信息。

dig domain 

x. wget

下载文件。

wget file 

y. scp

在本地主机和远程主机之间或两台远程主机之间传输文件。

从本地主机复制到远程主机

scp source_file user@host:directory/target_file 

从远程主机复制到本地主机

scp user@host:directory/source_file target_file
scp -r user@host:directory/source_folder farget_folder 

此命令还接受-P选项可用于连接到特定的端口。

scp -P port user@host:directory/source_file target_file 

2. Basic Shell Programming

在bash中你将编写第一行脚本文件,被叫做shebang。任何脚本中的这一行来确定脚本的执行能力,如独立的可执行文件,而不是在终端中预先键入sh,bash,python,php等。

#!/bin/bash 

2.1. Variables

在bash中创建变量与其他语言类似。没有数据类型。bash中的变量可以包含数字,字符,字符串等。您无需声明变量,只需为其引用分配一个值即可创建它。

Example:

str="hello world" 

上面的一行创建一个变量str并给它赋值“hello world”。通过$放在变量名的开头来检索变量的值。

Example:

echo $str   # hello world 

像其他语言一样,bash也有数组。数组是包含多个值的变量。数组的大小没有最大限制。bash中的数组为零。第一个元素被索引为元素0.在bash中创建数组有几种方法。以下给出了哪些。

Examples:

array[0] = val
array[1] = val
array[2] = val
array=([2]=val [0]=val [1]=val)
array(val val val) 

要在特定索引处显示值,请使用以下语法:

${array[i]}     # where i is the index 

如果没有提供索引,则假定为数组元素0。要了解数组中有多少值,请使用以下语法:

${#array[@]} 

Bash也支持三元条件。下面是一些例子。

${varname:-word}    # 如果varname存在且不为null,则返回其值; 否则返回word
${varname:=word}    # 如果varname存在且不为null,则返回其值;否则设置它,然后返回其值
${varname:+word}    # 如果varname存在并且不为null,返回word; 否则返回null 
${varname:offset:length}    # 执行子字符串扩展。它返回$ varname的子字符串,从offset开始,最多为length的字符 

2.2 String Substitution

检查一些关于如何操作字符串的语法

${variable#pattern}         # if the pattern matches the beginning of the variable's value, delete the shortest part that matches and return the rest
${variable##pattern}        # if the pattern matches the beginning of the variable's value, delete the longest part that matches and return the rest
${variable%pattern}         # if the pattern matches the end of the variable's value, delete the shortest part that matches and return the rest
${variable%%pattern}        # if the pattern matches the end of the variable's value, delete the longest part that matches and return the rest
${variable/pattern/string}  # the longest match to pattern in variable is replaced by string. Only the first match is replaced
${variable//pattern/string} # the longest match to pattern in variable is replaced by string. All matches are replaced
${#varname}     # returns the length of the value of the variable as a character string 

2.3. Functions

几乎与任何编程语言一样,您可以使用函数以更逻辑的方式对代码段进行分组,或者实践递归的神圣艺术。声明函数只是编写函数my_func {my_code}的问题。调用一个函数就像调用另一个程序一样,你只需要写上它的名字。

functname() {
    shell commands
} 

Example:

#!/bin/bash
function hello {
   echo world!
}
hello

function say {
    echo $1
}
say "hello world!" 

当您运行上述示例时,该hello函数将输出“world!”。上述两个功能hellosay是相同的。主要区别是功能say。此功能打印其接收到的第一个参数。函数内的参数以与给脚本的参数相同的方式进行处理。

2.4. Conditionals

bash中的条件语句与其他编程语言相似。条件有许多形式,如最基本的形式是if表达式then语句,其中语句只有在表达式为真时执行。

if [expression]; then
    will execute only if expression is true
else
    will execute if expression is false
fi 

有时,如果条件变得混乱,所以你可以使用相同的条件case statements

case expression in
    pattern1 )
        statements ;;
    pattern2 )
        statements ;;
    ...
esac 

Expression Examples:

statement1 && statement2  # 两边的条件都为true
statement1 || statement2  # 其中一边为true

str1=str2       # str1 匹配 str2
str1!=str2      # str1 不匹配 str2
str1<str2       # str1 是否小于 str2
str1>str2       # str1 是否大于 str2
-n str1         # str1 不为空(长度大于 0)
-z str1         # str1 为空(长度为 0)

-a file         # 文件存在 
-d file         # 文件存在,是一个目录 
-e file         # 文件存在; 相同的-a 
-f file         # 文件存在,是一个常规文件(即不是目录或其他特殊类型的文件) 
-r file         # 你有读权限 
-r file         # 文件存在,不为空 
-w file         # 你有写权限 
-x file         # 你有文件的执行权限

file1 -nt file2     # file1 is newer than file2
file1 -ot file2     # file1 is older than file2

-lt     # 小于 
-le     # 小于或等于 
-eq     # 等于
-ge     # 大于或等于 
-gt     # 大于
-ne     # 不等于 

2.5. Loops

bash 中有三种不同类型的循环。 for, whileuntil.

for 语法:

for x := 1 to 10 do
begin
  statements
end

for name [in list]
do
  statements that can use $name
done

for (( initialisation ; ending condition ; update ))
do
  statements...
done 

while 语法:

while condition; do
  statements
done 

until 语法:

until condition; do
  statements
done 

3. Tricks

设置一个别名

bash_profile 可以通过运行后面的命令打开。 nano ~/.bash_profile

alias dockerlogin='ssh www-data@adnan.local -p2222' # add your alias in .bash_profile

快速去特定的目录

nano ~/.bashrc

export hotellogs="/workspace/hotel-api/storage/logs"

source ~/.bashrc
cd hotellogs

4. Debugging

您可以通过传递不同的选项来轻松地调试bash脚本bash。例如-n,不会运行命令并仅检查语法错误。-vecho命令在运行它们之前。-x命令行处理后的echo命令。

bash -n scriptname
bash -v scriptname
bash -x scriptname 
收藏
评论区

相关推荐

GitHub 上的优质 Linux 开源项目,真滴牛逼!
作者:JackTian 来源:公众号「杰哥的IT之旅」 ID:Jake_Internet 作为一名互联网人,提起 Linux 大家都不陌生,尤其是日常跟 Linux 操作系统打交道最多的,最熟悉不过了。互联网上关于 Linux 相关的教程和资料也非常的多,但是当你从中筛选出真正对自己有帮助的资料是需要花费很大精力与时间的。 GitHub 是我非常喜欢的一
写给 Linux 初学者的一封信
大家好,我是肖邦。 这篇文章是写给 Linux 初学者的,我会分享一些作为初学者应该知道的一些东西,这些内容都是本人从事 Linux 开发工作多年的心得体会,相信会对初学者有所帮助。如果你是 Linux 老鸟,那可能就不需要再往下看了 linux(https://imghelloworld.osscnbeijing.aliyuncs.com
shell脚本语言实现简单的图书管理系统
/bin/bash author:zhanghongjun version:1.0 date:2011年 12月 14日 星期三 21:18:18 CST function information { echo "" echo "国家图书馆管理系统(5.4版本)" ech
MySQL报错SELECT list is not in GROUP BY clause and contains nonaggre的问题
报错现象 执行SQL报错如下: bash SELECT student.s_no,student.s_name,SUM(result.mark) FROM student,result WHERE student.s_noresult.s_no GROUP BY student.s_no 1055 Expression 2 of SELECT lis
Jenkins安装部署
(https://blog.csdn.net/cc_park/article/details/113917687?utm_mediumdistribute.pc_relevant.nonetaskblogbaidujs_title0&spm1001.2101.3001.4242)Linux系统安装 虚拟机部署参考虚拟机部署Linux(h
Deepin LNMP环境搭建
LNMPlnmp 是一个常见的web开发的环境,尤其对于 phper 来说,基本是必须要使用的一套环境。但是在 Linux 下的安装和配置并不是那么容易,所以近些年涌现了不少的一键安装方案,比如 lnmp、宝塔等。基本满足了日常的使用,但是如果不自己动手打通每个软件直接的配置与关联,我们就无法深入的去理解各个软件之间是如何协作
Ubuntu系统 使用与开发 常见异常与解决办法
1.误删除Ubuntu家目录下系统自带文件夹如Desktop、Downloads等在开发过程中,不小心在终端中把当前用户的Desktop、Downloads、Music等文件夹删除。解决措施:通过修改 ~/.config/userdirs.dirs 中的XDG_DESKTOP_DIR来重新指定系统文件夹:bash This fi
10分钟学会Linux常用 bash 命令
bash logo(https://imghelloworld.osscnbeijing.aliyuncs.com/0e9141bf0242ce028fb2cab03d74ba4e.png) 目录 1. 基本操作(bas
分享一个适用于 Windows 桌面程序自更新的 Bat 批处理
可用于 Windows PC 桌面端软件更新并重启自行替换 $ORIGIN_FILE$ 为需删除的旧文件名称,$DOWNLOAD_FILE$ 为下载的新文件名称。$NEW_FILE$ 为需要重命名的下载文件名称。bash@echo offfor /l %%a in (1,1,10) do ( for /f %%c in ('del /
源码解读Linux等待队列
从源码角度来解读Linux等待队列机制,了解休眠与唤醒的运转原理kernel/include/linux/wait.hkernel/kernel/sched/wait.ckernel/include/linux/sched.hkernel/kernel/sched/core.c 一、概述Linux内核的等待队列是非常重要的数据结构,在内核驱动中广为使用,它是
windows中 redis server 双击闪退
错误重现bash 进入redis安装目录执行以下命令redisserver.exe redis.windows.conf报错: [19572] 01 May 21:13:17.815 Creating Server TCP listening socket :6379: listen: Unknown error 解决方法:修改 redis.windows
Linux shell(1)
1. 免交互处理在免交互输出处理中可以使用重定向将输出内容输入到黑洞文件/dev/null中。[root@localhost ] echo password | passwd stdin user & /dev/null使用重定向输入将/root/testmail中的内容以Test mail为右键名发送给root@localhost: [root@local
Linux shell(2)
1.变量以固定名称存放的可能变化的值,可以提高脚本的适应能力,方便脚本执行中重复使用某个值。定义/赋值变量格式为:变量名变量值注意事项:若指定变量已存在,则相当于重新给变量赋值;等号两边无空格;变量名区分大小写;变量名不能以数字开头,不使用关键字和特殊字符。[root@localhost ] X1 //定义变量
Supervisor 开始
Supervisor 是 Linux/Unix 操作系统上的进程管理工具。本文介绍了于 Ubuntu 18 上如何使用 Supervisor 开机启动、保活守护自己的服务进程。 安装建议系统方式安装,可开机启动。bashsudo apt install supervisor ySystemd 查看服务状态:bash$ sudo systemctl statu
linux
Linux

热门文章

47 张图带你 MySQL 进阶!

最新文章

47 张图带你 MySQL 进阶!