涉及命令:
目录管理:
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
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:]]*