0
点赞
收藏
分享

微信扫一扫

命令基础与bash特性

witmy 2022-11-17 阅读 168

涉及命令:

目录管理:

ls、cd、pwd、mkdir、rmdir、tree

文件管理:

touch、stat、file、rm、cp、mv、nano

日期和时间:

date、clock、hwclock、cal  

查看文本:

cat、tac、more、less、head、tail

 其它:sort、uniq、wc、tr、history、命令别名(alias)、命令替换、文件名统配

装系统:

Linux ip=172. netmask=255.255.0.0 gateway=172. dns=172.  ka=http://172.(网卡确保桥接)


2_1_Linux操作系统及常用命令

shell:

GUI:Graphic User Interface

X-window:X指图形显示协议,C/S架构

 Gnome

 KDE

 Xface

Windows:2008之前桌面嵌在内核中

 

CLI:Command Line Interface

shell:bash、csh、ksh、zsh、tcsh

IDE:集成开发环境

库:windows:dll(Dynamic Link Library)文件  

  Linux:.so(shared object)


操作系统:内核+库+shell即可运行,最小可两三兆


装好系统后:


login:

用户名:计算机靠用户ID识别

 

认证机制:Authentication

授权:Authorization

审计:Audition(日志完成)


prompt:命令提示符

命令:


执行入口:

二进制文件开头标识:magic number(魔数),shebang

例如:#!/bin/bash

 

#command option... argument...


选项:

短选项

长选项

参数:(选项也可带)




目录:文件,路径映射

当前目录:working directory,current directory


路径:从指定起始点到目的地所经过的位置。完成层次化文件管理


绝对路径与相对路径


文件系统:filesystem


FHS:文件系统层级标准,必须要有一些一级子目录


文件名是不是文件本身的数据??存在哪里?


pwd:Printing Working directory显示当前目录

最顶级目录用 / 标识

ls:list,列出,列表

列出指定路径下的文件,默认显示当前目录下的文件 

-l 长格式,显示完整信息。  

  文件类型:

    -:普通文件(f)

    d: 目录文件

    b: 块设备文件(block)

   c: 字符设备文件(character)

   l:符号链接文件(symbolic link file)

    p: 命令管道文件(匹配)

    s: 套接字文件(socket)

   

  文件类型(一位)、文件权限(三位一组,三组)、文件被硬链接的次数、文件属主(owner)、文件属组(group)、文件大    小(size)、

  时间戳(timestamp):显示的是最近一次被修改的时间

     访问:access

     修改:modify,改变文件的内容

     改变:change,改变metadata,属性数据,元数据

     文件名

 

-h 单位换算,默认为k

-a 显示以.开头的隐藏文件

 .表示当前目录

 ..表示复目录

-A 显示已.开头的隐藏文件,但是不显示.和..

-d 显示目录自身属性

-i iNode,index node,显示索引节点号

-r 逆序显示(默认文件名正序排序)

-R 递归(recursive)显示

 

 

cd:change directory切换目录

不加任何参数:回到用户家目录(主目录home directory)

cd -username:进入指定用户的家目录

cd - :在当前目录和前一次坐在的目录之间来回切换

 

 

命令类型:

内置命令(shell内置):内部,内键

外部命令:在文件系统的某个路径下有一个与命令名称相应的课执行文件

 

环境变量:命令的内存空间

变量赋值

 NAME=Jerry

 

printenv 显示环境

 

PATH:使用冒号分隔的一堆路径.有次序

 

hash:查看缓存。O(1)

 

type:显示指定属于那种类型



date:时间管理

Linux:rtc:real time clock  

硬件始终:clock 或 hwclock 查看

系统时钟:date命令查看  

 

获得命令的使用帮助

内部命令:

 help COMMAND

外部命令:

 COMMAND --help 适用于部分命令

命令手册(内部外部都支持,内部很少使用):

 man [num] COMMAND

 

 whatis COMMAND 查看命令有哪几个章节

 分章节(默认按顺序显示,不是全都有全部章节):

  1.用户命令(/bin,/usr/bin,/usr/local/bin)

  2.系统调用

  3.库调用

  4.特殊文件(设备文件):没存储内容,设备访问入口

  5.文件格式:解释某个命令配置文件的语法

  6.游戏

  7.杂项(Miscellaneous)

  8.管理命令(/sbin,/usr/sbin,/usr/local/sbin)

   

 []:表示可选

 <>:表示必选

 ...:表示可出现多个

 |:表示多选一

 {}:分组

 

 man:

  NAME:命令名称及功能简要说明

  SYNOPSIS:语法说明,包括可用的选项

  DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义

  OPTIONS:说明每一个选项的意义

  FILES:此命令相关的配置文件

  BUGS:

  EXAMPLES:使用示例

  SEE ALSO:另外参照

   

 翻屏:

 向后翻一屏:SAPCE

 向前翻一屏:b

 向后翻一行:ENTER

 向前翻一行:k

 

 查找:

  /KEYWORD:向后

   n:下一个

   N:前一个

  ?KEYWORD:向前

   n:下一个

   N:前一个

 

 q:退出

 

在线文档:pgup和pgdn翻页

info COMMAND

 

文档:/usr/share/doc  

 

google


Apache,Hadoop:有官方文档



 NTP:网络时间服务器

 

 date 110314152020.30 修改系统时间

   月日小时分钟年份.秒

   

 date +%D 显示日期

 date +“This year is %Y" 显示年

 date +%H-%M 显示小时-分钟

 

 hwclock :默认显示硬件时间

   -r  读取时间(不加也是一样)

   -w  将系统时间同步到硬件

   -s  读取硬件时间到系统(改系统时间)

   

cal:calendar显示日历

cal 2020

cal 11 2020

 

练习:

1.echo是内部命令还是外部命令?  

type echo(默认打印换行)

2.其作用?

man echo或者help echo

echo  

 -e 启用\转义字符

 \t 制表符

 \v 纵向制表符

 \b 后退一格

 \n 换行

3.如何显示“The year is 2020.Today is 10.”为两行?

echo  -e “The year is 2020.\nToday is 10.”

 

 

上述三个问题应用于printf(默认不打印换行)

file命令及其用法


2_3_Linux根文件系统详解


可执行的可链接的二进制文件格式:

Windows:PE

Linux:ELF


文件系统:

rootfs:根文件系统


FHS:Linux文件系统层级标准,规定发行版应该创建那些目录


/boot :系统启动相关的文件,如内核、initrd(假硬盘),以及grub(BootLoader)

/dev :设备文件

  块设备:随机访问,数据块

  字符设备:线性访问,按字符为单位,,鼠标和显示器都属于此  

  设备号:设备文件无大小,对应位置显示主设备号(major)和次设备号(minor)

/etc : 配置文件,大部分是纯文本文件

/home :用户的家目录,每一个用户的家目录通常默认为/home/USERNAME

/root : 管理员的家目录。不阻止自杀,不建议用root用户

/lib : library库文件 :没有执行或者访问入口,只能被调用,不能直接运行

静态库:.a(linux)。库直接连接到程序中间,可直接移植

动态库: .dll(win), .so(shared object,linux)。库文件只需要在内存中加载一次,需要与库一起移植

/lib/modules : 内核模块文件

/media:挂载点目录,移动设备

/mnt:挂载点目录,额外的临时文件系统

/misc:杂项

/opt:可选目录。早期用于安装第三方安装目录。非常重要,调优

/proc:伪文件系统。内核映射文件。开机前为空,开机时有文件。

/sys:伪文件系统。关机状态下为空。跟硬件设备相关的属性映射文件,例如修改磁盘io调度队列

/tmp:临时文件,/var/tmp同。一个月没用自动清除。每个用户都可创建,但只能删自己的

/var:可变化的文件

/bin:可执行文件,用户命令.系统启动相关

/sbin:管理命令


/usr:shared,read-only

/usr/bin:系统正常运行相关

/usr/sbin

/usr/lib:不是共享库就必须放这里

 

/usr/local:

/usr/local/bin

/usr/local/sbin

/usr/local/lib

 

 

命名规则:

1.长度不超过255个字符

2.不能使用/当文件名

3.严格区分大小写


相对路径:

绝对路径:




文件管理

 

目录管理

ls:

cd:

pwd:

 

mkdir:创建空目录

 -p:路径有不存在的自动创建

 -v:详细信息

 例:mkdir -pv /mnt/test/{x/m,y}  

  mkdir -pv test2/{a,d}_{b,c}

 命令行展开:如上

 波浪线展开:~USERNAME,回家目录

 

rmdir:(remove directory)删除空目录

 -p:删除一线单传目录,直到那个目录不为空

 

tree:查看目录树


文件创建和删除:

touch:改变文件时间戳。文件不在时默认创建

 -c:不存在时不创建

 -a:改变访问时间(access time)

 -m:改变修改时间(modify)

 -t:指定到某个时间

 注:改变时间不能改,属性时间改什么都会变

 

stat:显示文件或文件系统的状态信息

 

创建文件,可使用文本编辑器

 文本编辑器:编辑纯asc码

 nano:

 

ASC(美国国家标准信息交换代码)二号码:


128个不同的字符:

二进制:

 2^6=0,63

 2^7=0,127

 000 0000 - 111 1111

计算机按字节存储  

如:0000 1001 :t

 

汉字,两个字节存一个:

2^16:65536个

 

0000 1001 0000 1110 :表示一个汉字还是

标准:GB18030,GBK,GB2312,Unicode(全球统一)

疑问:“卫”怎么显示在显示器上,还有字体的不同  

 


删除文件:rm  

 -i:交互式提示。管理员默认别名,提示。可用\rm 来取消

 -f:强行删除

 -r:递归删除


2_4 Linux文件管理命令详解


复制和移动文件

cp:copy

 cp SRC DEST

 cp file1 file2 file3 只有file3是目的

可复制一个文件到一个文件或目录

复制多个文件到目录:多个源时目的必须是目录

 

cp /etc/passwd /tmp/ 不更名

cp /etc/passwd /tmp/test 更名为test

 

源为目录,目标为存在文件时,替换也会出错。不能复制

 

-r或R:递归复制目录

-f:强制删除

-i:交互提示

-p:不改变属组,保留文件属性

-a:相当于 -dR --preserve = all归档复制,常用于复制

-P:链接复制保持链接。默认复制为文件

-d:保持链接本身

 

cp /etc/{passwd,innittb,rc.d/rc.sysinit} /tmp

 

 

mv:move

移动文件

mv SRC DEST  同cp,只能一个目的

mv /tmp/hello /var/tmp/abc 若abc存在是个文件时也不能覆盖。不能用目录覆盖文件。若abc是个目录,则放在abc下

移动目录时不需要-r

-i,-f  

-t:互换源和目标的位置  mv -t DEST SRC

 

 

install:复制文件并设置属性。源必须是文件,不能复制目录。

-d:DIRERECTORY 创建目录。如install -d /tmp/{install.1,install.2}

install SRC DEST :复制文件,但是会增加执行权限

 -m:可指定权限

install -t  DEST SRC... 互换源和目标位置,多个元复制到一个目录下

 

 



3_1 Linux文件管理类命令详解


作业2:

1.思考:ls命令是否可以显示某目录的整体大小,即包括其内部所有文件的整体大小?

2.通过帮助手册学习使用du命令:

-s

-h  

3.通过帮助手册,学习使用read命令:

变量:内存空间,有名称

变量赋值:

变量替换


作业3:

描述GPL,BSD,Apache三个开源协定的大体联系及区别。


都是自由软件

开源协定,版权描述


作业4:

1.如何获取Linux当前最新的内核版本号?

官网查询:www.kernel.org

2.列出你所了解的Linux发行版,并说明其跟Linux内核的关系。

Linux(内核),GNU(提供各种库和软件):GNU/Linux,源代码

 

发行版(多达上百种):RedHat,SUSE,Debian,三大最主流的发行版

 二次发行版:Fedora,RedHat(CentOS),SUSE(openSUSE),Debian(Ubuntu(Mint))

 原生的Debian限制最少,高手用的多

 

编译:将源代码转换成对用平台的二进制

RedHat:通用格式编译好

安装使用方便,但是在老为了兼容在32位老CPU上编译,不能利用现有CPU的各种特性

有些发行版提供针对性的优化:Gentoo(软件要下载源代码,自己编译),LFS(Linux from scratch,从零开始构建Linux,严格说不是发行版,是一本三百多页的书。第一遍,最快两天)

 

学习三境界:

1.王国维:昨夜西风凋敝树,独上西楼,望尽天涯路;衣带渐宽终不悔,为伊消得人憔悴;蓦然回首,那人却在灯火阑珊处

2.浅尝辄止,变换目标;学了很多东西(一到两年),超过很多人,业余专家;专家,坐冷板凳,几年如一日





运行程序

设备管理

软件管理  

进程管理

网络管理


目录管理:

ls、cd、pwd、mkdir、rmdir、tree

 

文件管理:

touch、stat、file、rm、cp、mv、nano

 

日期和时间:

date、clock、hwclock、cal  

 

查看文本:

cat、tac、more、less、head、tail

 

cat:连接并显示

cat file1 file2 ...可接多个文件

-n:显示行号

-E:显示行结束符($)  Windows行结束符:$加回车符

-T:显示制表符(^I)

-v:显示非打印字符

-A:显示所有字符

 

所有打印,翻页:shift+PgUp/PgDn,但是缓存有限,可能只会显示部分内容


Ctrl+c:取消执行


tac:从尾行到首行


分屏显示:more,less

more:向后翻,到尾部自动退出。为到尾部时可往前翻

 翻页和man一样

 

less:更常用。跟man一样。。按q退出

 

head:查看前n行

tail:查看后n行

都支持-n:显示行数,默认显示十行

tail -f:查看文件尾部,不退出,等待显示追加至此文件的新内容

 


文本处理:

cut(剪切)、join(连接)、sed(功能相当强大,很难),awk(更难,一个命令就是一种语言)

三大利器:sed、awk、grep

 

database:数据库

关系型数据库:

表:二维表(可没行,但是没有列)

 

文本文件也可以保存,用分隔符隔开。如Tom:23:male:2003/5/6  

 检索速度慢很多


cut:

-d:指定字段分隔符,默认时空格

-f:指定要显示的字段

 -f1,3:第一和三个字段

 -f1-3:第一至第三个字段

 

用man了解join怎么使用



3_2 bash特性详解


文本排序:sort 默认根据ASC码的顺序顺序排序,不按照数值大小按照从左至右一个字符一个字符排

与cut一样,只影响显示,不影响原文件

-n:按数值大小排序

-r:逆序(降序)

-t:指定字段分隔符

-k:以哪个字段为关键字进行排序  

 例:sort -t : -k 3 /etc/passwd

-u: 排序后相同的行只显示一次

-f: 排序时忽略字符大小写


uniq :报告重复的行。相同且相邻的行为重复的行

-d: 只显示一次重复的行

-D: 显示重复的所有行

-c:显示某一行重复的次数

 

文本统计:wc(word count)

行数 单词数 字节数

-l:只显示行数

-w:只显示单词数

-c或-m:只显示字节数或者字符数

-L:最长的一行包含了多少个字符

 

字符处理命令:tr 转换或删除字符

tr [option]... SET1 [SET2]

 例:tr 'ab' 'AB'   逐个字符比较,a和b换成A和B

  tr 'a-z' 'A-Z' 全部转换为大写

 -d:删除出现在字符集中的所有字符

  tr -d 'ab' 删除所有a和b

   


bash及其特性:

shell:外壳。自身也是可执行程序

 GUI: Gnome,KDE,Xfce

 CLI:sh(bsh),csh(支持编程,接近c语言,比bsh支持功能更多),ksh,bash(包含csh、ksh),tcsh,zsh


可以多shell登录,互不影响

进程:在每个进程看来,当前主机上只存在内核和当前进程

进程是程序的副本,进程是程序执行的实例

 

用户工作环境:

bash:

#:root

$:普通用户

 

shell,子shell:在shell里运行shel进入子shell,可用pstree查看。用exit层级退出。父子不一定有关系



bash特性:

1、命令历史、命令补全

2、管道、重定向

3、命令别名

4、命令行编辑

5、命令行展开

6、文件名通配

7、变量

8、编程


特性详解:

1.命令行编辑

光标跳转:

 Ctrl+a:跳到命令行首

 Ctrl+e:跳到命令行尾

 Ctrl+u:删除光标至命令行首的内容

 Ctrl+k:删除光标至命令行尾的内容

 Ctrl+左右箭头:跳一个单词(远程终端不可用)

 Ctrl+l:清屏

 

2.命令历史:

可上下箭头翻转

history:查看命令历史

 -c:清空命令历史

 -d OFFSET [n]:删除指定位置的命令

  -d 500:删除第五百个

  -d 510 3:从510开始,删除三个

 -w:保存命令历史至历史文件中。(正常退出也会保存)

.bash.history:命令历史保存文件。默认保存1000条

 

 

环境变量

PATH:命令搜索路径

HISTSIZE:命令历史缓冲区大小。默认1000。echo $HISTSIZE 查看

 

 

命令历史的使用技巧:

!n:执行命令历史中第几条命令

!-n:执行命令历史中倒数第几条命令

!!:执行上一条命令

!string:执行命令历史中最后一个以指定字符串开头的命令

!$:引用上一个命令的最后一个参数

按下Esc松开后按.:同!$

按住Alt加.:同!$(远程终端不可用)

 

命令补全:在path环境变量下搜索命令

Tab键按一下补全唯一以此开头的命令。按两下,显示所有以此开头的命令


路径补全:搜索我们给出的起始路径下的每个文件名,并试图补全

 Tab键按一下补全唯一以此开头的命令。按两下,显示所有以此开头的命令

 


命令别名:

alias CMDALIAS=COMMAND [options] [arguments] 有空格时需用单引号 alias CMDALIAS='COMMAND [options] [arguments]'

 比如清屏clear,但是用习惯win上cls,即可用alias cls=clear

在shell中定义的别名仅在当前的shell生命周期中有效:别名的有效范围仅为当前shell进程

想要永久有效需在配置文件中定义

alias:不带选项,显示所有别名

unalias CMDALIAS:撤销命令别名。如:unalias cls

想用命令本身,用\

 


命令替换:$(COMMAND)把命令中某个子命令替换为其执行结果的过程

如打印当前目录:echo "The current directory is /root" 但是切换目录后,还是显示这个

 可以用echo "The current directory is $(pwd)"

如创建带时间的文件file-2021-07-02-23-00-30.txt

 可以用 touch ./file-$(data +%F-%H-%M-%S).

用反引号(波浪线按键那个引号)也可实现相同功能:`COMMAND`   如 echo "The current directory is `pwd`"


bash支持的引号:

` `:命令替换

"":弱引用,可以实现变量替换

' ':强引用,不完成变量替换



文件名通配,globbing:

*:匹配任意长度的任意字符

?:匹配任意单个字符

[]:匹配指定范围内的任意单个字符。如:[abc],[a-m],[A-Z],[0-9],[a-zA-Z]

[^]:匹配指定范围内的任意单个字符。如:[^0-9]

 空格可以作为文件名一部分,需用单引号引起来。 如touch 'a b'  但是touch a b 会创建a和b两个文件

[[:单词:]] 表示某一类字符的集合。[:单词:]表示某一类字符

 [:space:]:空白字符

 [:punct:]:标点符号

 [:lower:]:小写字母

 [:upper:]:大写字母

 [:alpha:]:大小写字母

 [:digit:]:数字

 [:alnum:]:数字和大小写字母

 更多的可用 man 7 glob 查看

 也支持取反。比如:[^[:alpha:]]表示非字母

 

例:显示所有以数字结尾且文件名中不包含空白文件:

 不可用 ls *[^[:space:]]*[0-9] 正则表达式不能解决

 

 显示文件名中包含了非字母或数字的特殊符号的文件:

 可用 ls *[^[:alnum:]]* 

举报

相关推荐

0 条评论