bash简介
基础操作
缩写规则就是:删掉元音字幕(A E I O U),保留前 2 到 3 个辅音字母

命令           全部写法        缩写
创建目录        make directory  mkdir
删除          remove          rm
移动/重命名      move            mv
复制          copy            cp
罗列          list            ls
改变目录    change directory    cd
cd ~/Desktop 进入桌面
mkdir demo-1 创建目录,这时你可以切到桌面,看到 demo-1 目录
rm -rf demo-1 删除目录
touch 1.txt 创建文件,如果你发现文件后缀不见了,请让该死的 Windows 显示文件后缀(不会请百度或者谷歌)
mv 1.txt 2.txt 这样我们就把 1.txt 移到 2.txt 了,也就是重命名
-----------------------------------------------------------------
操作      命令
进入目录    cd
显示当前目录  pwd
创建目录    mkdir 目录名
创建目录    mkdir -p 目录路径
我是谁         whoami
查看路径    ls 路径
查看路径    ls -a 路径
查看路径    ls -l 路径
查看路径    ls -al 路径
创建文件    echo '1' > 文件路径
强制创建文件  echo '1' >! 文件路径
追加文件内容  echo '1' >> 文件路径
创建文件    touch 文件名
改变文件更新时间    touch 文件名
复制文件    cp 源路径 目标路径
复制目录    cp -r 源路径 目标路径
移动节点    mv 源路径 目标路径
删除文件    rm 文件路径
强制删除文件  rm -f 文件路径
删除目录    rm -r 目录路径
强制删除目录  rm -rf 目录路径
查看目录结构  tree
建立软链接   ln -s 真实文件 链接
下载文件    curl -L https://www.baidu.com > baidu.html
拷贝网页    wget -p -H -e robots=off https://www.baidu.com
磁盘占用    df -kh
当前目录大小  du -sh .
各文件大小   du -h
↑ ↓ 上一命令 / 下一命令
!! 上一命令占位符
Tab 自动补全路径
Alt+. 上一命令的最后一个参数
&& 前面的执行成功了,再执行后面的
|| 前面的执行失败了,就执行后面的
; 前面执行完了,不管成功失败,就执行后面的
> 重定向
| 管道

关于shell
hell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
以下是几种shell版本,bash是默认的:
sh(全称 Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。
Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。
bash(全称 Bourne Again Shell): LinuxOS 默认的,它是 Bourne Shell 的扩展。
与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。
csh(全称 C Shell): 是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
Tcsh: 是 Linux 提供的 C Shell 的一个扩展版本。
Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。
ksh (全称 Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
pdksh: 是 Linux 系统提供的 ksh 的扩展。
pdksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。

Bash如何解析命令
1.按行读取命令

2.处理引用问题
双引号内的字符将失去其原有意义,除了KaTeX parse error: Undefined control sequence: \。 at position 5: , "和\̲。̲ 单引号内的字符将失去…, "和\。

3.将输入的一行字符串按照 ; 分割成多个命令。

4.处理特殊字符
{…}, <(…), < …, <<< …, … | …等特殊字符会被按照特殊的执行次序处理。
重定向符号会被从命令行中移除,所以在执行命令时… > log, 2>&1这些命令都是不会提交给内核处理命令的进程的。
其他符号会被其对应的结果表达所替代,如{…}命令:

$ echo {a..c}
a b c

5.变量替换
将带 $ 符号的变量 $parameter替换成变量内容, 术语叫Parameter Expansion.

$ echo $PWD
/z/ros

6.将命令行分割成被执行命令和参数
分割的原则是任何空白(空格、Tab)都将作为分隔符将一整条命令分割成一个一个的词。分割后结果的第一个词作为命令,其他词作为参数。如果命令词中包含空白,需要用引号括起来。

$ My Command /foo/bar   ## This will execute the command named 'My' because it is the first word.
$ "My Command" /foo/bar ## This will execute the command named 'My Command' because the space inside the quotes has lost its special meaning allowing it to split words.

Tips: 在从Windows或MacOS将文件复制到Linux时,有些文件的文件名可能包含Linux不支持的特殊字符,如空格,#等,如文件名file 1127.txt在Windows下是合法的,但是在Linux不合法,删除这个文件的命令:

$ rm file 1127.txt // not work
$ rm "file 1127.txt"  // work

7.执行命令
a. 如果命令是 function or builtin,该命令将会被接收命令的同一个Bash process处理。
b. 否则 (像是 hadoop fs 等命令), Bash 将会 fork off,创造一个新的Bash子进程,将解析好的命令传递给它,并等待它返回结果。一般情况下,子进程将会继承父进程的标准流。

bash命令的使用
bash的工作特性之命令执行状态返回值和命令展开所涉及的内容及其示例演出
!脚本执行与调试
1、绝对路径执行,要求文件有执行权限
2、以sh命令执行,不要求文件有执行权限
3、加空格或source命令执行,脚本将在当前shell中执行
4、检查脚本语法
bash -v test.sh
5、跟踪脚本执行
bash -x test.sh
!环境脚本执行规则
用户登录:/etc/profile、/.bash_profile、/.bash_login、~/.profile
用户注销:~/.bash_logout
执行新shell: /etc/bash.bashrc、~/.bashrc
执行script(使用#!/bin/bash):如指定BASH_ENV的值,则执行其指定的启动文件
执行script(使用#!/bin/sh):不调用任何环境脚本

!基本语法
1、脚本程序以#!/bin/bash 开始。以告之系统脚本以何种shell执行。
2、以#开头的行被视为注解,执行时自动忽略。
3、每行不得多于255个字节,可在行末加上反斜杠的方式拆分单行内容到多行中。
例如:

test1=abcdefg\
hij\
klmnopd\
rstuvwxyz
4、多命令以分号分隔时,命令从左至右依次执行。例如: whoami;w
5、多命令以&&分隔时,命令从左至右按前面命令执行成功后再执行下个命令的原则依次执行。例如:make && make install
6、多命令以||分隔时,命令从左至右按前面命令执行失败后再执行下个命令的原则依次执行。
7、多个命令以分号分隔放置()中,则会启用子shell并执行。例如:(mkdir testdir;cd testdir;touch testfile)
8、多个命令以分号分隔放置{}中,则会在当前shell中执行。需要注意的是命令和{}必须有空格间隔,并且最后一条命令也必须加分号。例如:{ mkdir testdir;cd testdir;touch testfile; }
9、被反引号`括起来的命令或$(命令),shell将直接引用执行结果。
例如:
test=date
test=$(date)
10、可以将算术运算式以$[ 算术运算式 ]的形式进行求值。注意算术运算式和[]必须有空格分隔,此方法只支持整型运算。例如:test=$[ 32 * 17 ]
11、使用$((运算式))的形式也可以进行算术运算求值,并且可以进行布尔运算。例如:test=$(( 32 * 17 ))
12、使用let 运算式也能进行算术运算,算术式各元素间不得有空格,否则应将算术式用引号括起来。例如:let ++test
13、任何命令执行后均会返回一个取值范围在0~255之间的整型返回码。主要值含义如下:0:正常结束1:通用执行错误2:误用shell命令126:命令不可执行127:命令未找到128:无效退出参数130:被ctrl-c强行中止255:退出状态码越界
shell script默认返回最后一条命令的返回码。可以使用exit退出script执行并返回指定的返回码。例如:exit 15
通过$?这个系统变量可以获取上一条命令的返回码。
例如:
syncecho $?

14、通过getopts命令获取命令行选项。
语法为:getopts 选项行 选项变量。
选项行由各选项的单一字符组成,如某选项字符需要参数,则在选项字符后加冒号。调用时此选项后无参数的话系统会提示错误,如不希望出现提示则应在选项行最前面加上冒号。系统会将参数存入OPTARG变量。
例如:

#!/bin/bash
while getopts :a:bc opt
do
case $opt in
a)
echo "选项a,后跟参数:$OPTARG";;
b)
echo "选项b";;
c)
echo "选项c";;
*)
;;
esac
done

15、利用mktemp建立临时文件
语法为:mktemp 选项 临时文件模板
如果建立成功返回0。
临时文件模板格式形式如:/tmp/test.XXXXXX或/usr/ttt/tttt.XXXXXX,文件名末6个字符必须为XXXXXX.生成成功后会由系统代替为随机6个字符。
选项-q 不产生错误信息。
选项-p 指定建立临时文件的父级目录,父级目录必须已存在。例如:mktemp -p /usr/tmp tf.XXXXXX
选项-t 按环境变量TMPDIR变量中指定的父级目录建立临时文件,如变量未定义,则父级目录为/tmp
选项-d 建立的是临时目录。
直接执行mktemp,会在/tmp目录下建立tmp.XXXXXX形式的临时文件,文件名末6个字符为随机字符。可使用下面方式获取生成的文件名。
tmpfile=$(mktemp)

16.cat命令
创建两个文件’1.txt’:写入1\n2\n3\n,‘2.txt’:写入one\ntwo\nthree\n

cat 1.txt 2.txt输出:   123onetwpthree
------------------------------------------------
cat -n 1.txt 或者是cat -b 1.txt
# 对文件中各行进行编号后输出
输出:1    12  23  3
------------------------------------------------
cat -n 1.txt>2.txt
# 对文件1.txt进行编号后覆盖2.txt中的内容
cat 2.txt
输出:1    one2    two3    three
------------------------------------------------
cat -n .txt>>1.txt
# 与上面的内容相识,只是将2.txt中的内存追加到1.txt中
输出:1231 one2    two3    three

17.touch命令

# 翻译为触摸,当目录下没有该文件时,创建文件;当有该文件时,运行之后,文件的最近修改时间改变为当前时间
touch aa.txt
touch aa.txt18.花括号拓展{}
```bash
echo a{b,c,d}e
abe ace ade
# 当花括号扩展和通配符一起使用时,花括号扩展首先被解析,然后正常解析通配符。
ls *.{jpg,jpeg,png}
echo *.{jpg,jp{e,}g,png}
echo {1..20..3}1 4 7 10 13 16 19
# 当花括号扩展和变量扩展一起使用时,变量扩展解析于花括号扩展之后。有时有必要使用内置的eval函数
a=1;b=20
echo {$a..$b..3}{1..20..3}
#上面解析顺序不对,无法得到想要的结果
#val命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。
#第一次扫描进行了变量替换,第二次扫描执行了该字符串中所包含的命令
eval echo {$a..$b..3}1 4 7 10 13 16 19
# 与Bourne shell不同的是bash不用另外生成进程即能进行整数运算。bash使用((...))命令和$[...]变量语法来达到这个目的
var=55
echo "var*var=$(($var*$var))"19.进程管理
Bash有两种执行命令的模式:批处理模式、并发模式。 要以批处理模式执行命令(即按照顺序),必须用;分隔
```bash
command1 ; command2

在这个例子中,当command1执行完毕,即执行command2 要并发执行两个命令,它们必须用&分隔

command1 & command2

在这种情况下,command1 在后台执行(通过&),从而立即将控制返回到shell,以执行command2

总结:一般命令在前台执行(fg),执行完毕后,控制返回给用户。在命令后面加上&,它会在后台执行(bg),并将特殊的环境变量$!设置为该任务的进程id。这时shell可以并发执行其他命令。按Ctrl+z可以挂起前台运行的程序挂起的程序可以用fg恢复到前台,或者用bg恢复到后台后台程序试图写入数据到终端设备时(与写入标准输出不同)可能被阻塞。shell可以等待一个后台任务执行完成,只需使用wait命令,加上进程ID或者任务序号;也可以等待所有的后台任务,只需使用不加参数的wait

bash脚本命令

 #!/bin/bash
echo "Hello World !"

#!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

1、作为可执行程序运行:
将上面的代码保存为 test.sh,并 cd 到相应目录:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
或者
sh ./test.sh
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2.作为解释器参数:
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

  /bin/sh test.sh  /bin/php test.php

常用bash命令
a)查看文件大小,内存大小,cpu信息,硬盘空间等等。

du -sh *     #查看当前文件夹大小
du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
#附送:
du -sk filename 查看指定文件大小  1、cpu查看  1)cpu个数:#cat /proc/cpuinfo | grep "physical id" | uniq | wc -l  2)cpu核数:#cat /proc/cpuinfo | grep "cpu cores" | uniq  3)cpu型号:#cat /proc/cpuinfo | grep 'model name' |uniq  2、内存查看:#cat /proc/meminfo | grep MemTotal  3、硬盘查看: #fdisk -l | grep Disk  uname -a # 查看内核/操作系统/CPU信息的linux系统信息  head -n l /etc/issue # 查看操作系统版本  cat /proc/cpuinfo # 查看CPU信息  hostname # 查看计算机名的linux系统信息命令  lspci -tv # 列出所有PCI设备   lsusb -tv # 列出所有USB设备的linux系统信息命令  lsmod # 列出加载的内核模块   env # 查看环境变量资源  free -m # 查看内存使用量和交换区使用量   df -h # 查看各分区使用情况  du -sh # 查看指定目录的大小   grep MemTotal /proc/meminfo # 查看内存总量  grep MemFree /proc/meminfo # 查看空闲内存量   uptime # 查看系统运行时间、用户数、负载  cat /proc/loadavg # 查看系统负载磁盘和分区   mount | column -t # 查看挂接的分区状态  fdisk -l # 查看所有分区   swapon -s # 查看所有交换分区  hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)   dmesg | grep IDE # 查看启动时IDE设备检测状况网络  ifconfig # 查看所有网络接口的属性   iptables -L # 查看防火墙设置  route -n # 查看路由表   netstat -lntp # 查看所有监听端口  netstat -antp # 查看所有已经建立的连接   netstat -s # 查看网络统计信息进程  ps -ef # 查看所有进程   top # 实时显示进程状态用户  w # 查看活动用户   id # 查看指定用户信息  last # 查看用户登录日志   cut -d: -f1 /etc/passwd # 查看系统所有用户  cut -d: -f1 /etc/group # 查看系统所有组   crontab -l # 查看当前用户的计划任务服务  chkconfig –list # 列出所有系统服务   chkconfig –list | grep on # 列出所有启动的系统服务程序  rpm -qa # 查看所有安装的软件包   cat /proc/cpuinfo :查看CPU相关参数的linux系统命令  cat /proc/partitions :查看linux硬盘和分区信息的系统信息命令   cat /proc/meminfo :查看linux系统内存信息的linux系统命令  cat /proc/version :查看版本,类似uname -r   cat /proc/ioports :查看设备io端口  cat /proc/interrupts :查看中断   cat /proc/pci :查看pci设备的信息  cat /proc/swaps :查看所有swap分区的信息

Linux bash命令入门相关推荐

  1. linux bash命令_Ultimate Linux命令行指南-Full Bash教程

    linux bash命令 Welcome to our ultimate guide to the Linux Command Line. This tutorial will show you so ...

  2. linux bash命令_Linux命令-您应该知道的基本Bash命令行技巧

    linux bash命令 Linux has a ton of commands, but most people only use a fraction of them. Here are some ...

  3. linux打开python3_Python3 执行Linux Bash命令的方法

    和之前C++执行Linux Bash命令的方法 一样,Python依然支持system调用和popen()函数来执行linux bash命令. 方法一:system调用 #仅仅在一个子终端运行系统命令 ...

  4. Linux Bash命令关于程序调试详解

    转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...

  5. Linux bash命令

    查看当前用户 whoami 查看当前路径 pwd ~ 用户的家目录, /root  /home/yangxinxin 主机名 hostname PS1变量控制 PS1='[\u@\h \W]\$ ' ...

  6. linux bash安装教程,linux bash命令怎么用?win10 linux bash命令使用教程

    linux bash命令怎么用?微软在win10一周年更新预览版中加入了ubuntu bash命令支持,但是很多用户并不知道怎么使用.今天U大侠小编就针对这个问题给大家介绍下win10系统linux ...

  7. Python3 执行Linux Bash命令

    和之前C++执行Linux Bash命令 一样,Python依然支持system调用和popen()函数来执行linux bash命令. 方法一:system调用 #仅仅在一个子终端运行系统命令,而不 ...

  8. 在Windows中运行Linux bash命令的几种方法

    如果你正在课程中正在学习 shell 脚本,那么需要使用 Linux 命令来练习命令和脚本. 你的学校实验室可能安装了 Linux,但是你自己没有安装了 Linux 的笔记本电脑,而是像其他人一样的 ...

  9. Linux 基础命令入门 文件压缩

    Linux 基础命令入门 文件压缩 一般 tar-zcvf压缩文件分两个步骤: 第一步骤,把要压缩的文件整成一个包 testtar.txt.tar 第二步骤,把打成包的文件压缩,testtar.txt ...

最新文章

  1. 企业架构研究总结(39)——TOGAF架构能力框架之架构委员会和架构合规性
  2. 2021年中国工业互联网安全大赛核能行业赛道writeup之Webshell密码
  3. 推荐《淘宝的可伸缩高性能互联网架构 》
  4. 数字语音信号处理学习笔记——语音信号的短时时域分析(1)
  5. autoscan、aclocal、automake和autoconf区别
  6. Zabbix实战-简易教程--订阅类
  7. java 锯齿_Java2D图形抗锯齿
  8. SAP案例教程SD销售后台配置
  9. h5网页ios中滑动字体变大
  10. 三、Solr管理控制台(二)
  11. win10时间不准_安卓机时间突然变慢10分钟?移动发布回应
  12. 手机投屏到电脑教程,高清、高帧率、无延时投屏
  13. 喜马拉雅FM抓包之旅
  14. 锐龙r9 5900hx相当于英特尔的什么 r9 5900hx属于什么档次
  15. [Echarts可视化] 一.入门篇之简单绘制中国地图和贵州地区
  16. 这 30 款 IDEA 宝贝插件 yyds
  17. 我只记得别人给了我什么,不记得别人没给我什么?
  18. livecd linux 原理,将现有Ubuntu系统做成LiveCD
  19. 单招报计算机要考什么,单招考试一般都考什么内容
  20. 聪明如我,一眼就看穿了快递小哥的分堆算法

热门文章

  1. B、BL、BX、BLX 和 BXJ
  2. 简单模拟struts框架,了解strusts的框架实现机制
  3. 大数据主要所学技术(简介)
  4. shell脚本:exit和return
  5. one-hot编码例子介绍
  6. 递归_青蛙跳台阶(进阶版)
  7. 推荐 2 个 Spring Boot 工作流项目,轻松搞定工作流!
  8. csp2015-03
  9. 命令行玩斗地主,摸鱼再也不怕老板了!
  10. 一种可以穿透还原卡和还原软件的代码一种可以穿透还原卡和还原软件的代码