第2天【OS Linux发行版介绍、Linux系统基础使用入门、Linux命令帮助、Linux基础命令】
回顾:计算机的基础知识
程序运行模式:
用户空间:user space, us
内核空间:system space
POS:Portable Operating System
POSIX
API:编程接口
运行程序格式:Window EXE,dll(dynamic link library)
Linux ELF,So (shared object)
程序:指令+数据
指令:只读
数据:读写
程序:算法+数据结构
库调用:系统调用:允许被调用的程序
malloc() free()
编程语言:
汇编语言:微码编程:底层系统及与芯片有关,系统中某些与硬件相关的特有代码,驱动程序开发等
高级语言:C,C++ 系统级调用驱动程序
高级应用:java,python,php 应用程序
Linux的发行版本:
1.slackware:suse
sle
opensuse
2.debian: ubuntu
mint
3.redhat: rhel: redhat enterprise linux(每18个月发行一次)
fedora:每6个月发行一个新版本
centos:兼容rhel的格式
GNU:GPLv2,GPLv3,LGPL(lesser)
linux time line 1970年1月1日
4.Archlinux:需要自学,现在比较流行
5.Gentoo
6.LFS:Linux Form Scratch 一本书教你怎么编译Linux
7.Android: Kernel+busybox+Java虚拟机
问题:
1.CentOS和Linux是什么关系?CentOS和RHEL是什么关系?
2.各种开源协议的具体细节?
如:GPL LGPL Apache BSD
程序包管理器:
rpm:RHEL Fedora SuSE CentOS
dpkg(dpt):Debian Ubuntu
linux的哲学思想:
1.一切皆文件:把几乎所有资源,包括硬件设备都组织为文件格式
2.有众多单一目的小程序组成,一个程序只实现一个功能,而且要做好,组合小程序完成复杂任务
自由使用,自由学习和修改,自由分发,自由创建衍生物
3.尽量避免跟用户交互
目标:实现脚本编程,以自动完成某些功能
4.使用纯文本文件保存配置信息
目标:一款实用的文本编辑器技能完成系统配置工作
如何获取CentOS的发行版:
mirrors.aliyun.com
mirrors.sohu.com
mirrors.163.com
#startx
终端:用户与主机交互必然用到的设备
物理终端:直接介入本季的显示器和键盘设备:console
虚拟终端:附加在物理终端上的以软件方式虚拟实现的终端,CentOS默认启动6个虚拟终端
命令:#ctrl+Alt+[1-6]
图形终端:附加在物理终端之上的以软件方式虚拟实现的终端,但额外会提供桌面环境:设备文件路径:/dev/tty#
模拟终端:图形界面下打开的命令行接口,设备文件:/dev/pts/#[0,oo)
查看当前的终端设备:tty
[root@study ~]# tty
/dev/pts/0
[root@study ~]#
交互式接口:启动终端后,在终端设备附加一个交互式应用程序
GUI:
X protocol, window manager, desktop
Desktop:
GNOME (C, gtk)
KDE (C++, qt)
XFCE (轻量级桌面)
CLI:
shell程序:
sh (bourn)
csh
tcsh
ksh (korn)
bash (bourn again shell), GPL
zsh
显示当前使用的shell:#echo ${SHELL}
[root@study ~]# echo $SHELL
/bin/bash
[root@study ~]#
显示当前系统使用的所有shell:
# cat /etc/shells
[root@study ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@study ~]#
命令提示符:prompt
[root@localhost ~]#
#ehco $PS1
[root@study ~]# echo $PS1
[\u@\h \W]\$
[root@study ~]#
prompt:
管理员: # 如:[root@study ~]#
普通用户:$ 如:[dmtsai@study root]$
命令:
输入命令,回车:
提请shell程序找到键入命令所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行起来;
表现为一个或多个进程;
在shell中可执行的命令有两类:
内建命令:由shell自带的,而且通过某命令形式提供;
外部命令:在当前系统的某文件系统路径下有对应的可执行程序文件;
which,whereis,whatis
[dmtsai@study root]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
[dmtsai@study root]$ whatis ls
ls (1) - list directory contents
ls (1p) - list directory contents
[dmtsai@study root]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
区别内部或外部命令:
# type COMMAND
[dmtsai@study root]$ type whatis
whatis is hashed (/usr/bin/whatis)
运行命令:
命令格式:
COMMAND [OPTIONS...] [ARGUMENTS...]
选项:用于启用或关闭命令的某个或某些功能;
短选项:-c, 例如:-l, -h
多个短选项可命令使用,例如-l -h, 可写作-lh;
长选项:--word,例如:--long, --human-readable
参数:命令的作用对象
向命令提供数据;
注意:
1、多选项,以及多参数和命令之间都应该使用空白字符分隔
2、取消命令执行:Ctrl+c
文件系统:
C:\Program files\office11\word\word.exe
/etc/sysconfig/network-scripts/ifcfg-eth0
文件有两类数据:
元数据:metadata(引索内容)
数据: data (内容)
1、文件名严格区分字符大小写;file1, File1, FILE1是不同的文件;
2、文件名可使用除/以外的任意字符,不建议使用特殊字符;
/: 根目录,路径分隔符;
3、文件名长度最长不能超过255个字符;
4、所以.开头的文件,均为隐藏文件;
路径:
绝对路径:从根目录起始的路径;
相对路径:对当前位置起始的路径;
当前位置的表示方式:
(1) ./: ./sysconfig/network-scripts
(2) 省略上述符号: sysconfig/network-scripts
..:表示当前目录的上一级目录
当前目录:current directory, 也称作working directory;
命令pwd: printing working directory
[dmtsai@study root]$ pwd
/root
LSB: Linux Standard Base
命令总结:ls, cd, type, tty, cat, which, whereis, whatis, pwd, echo
命令:
(1) 文件系统相关:
目录管理
文件管理
文件查看
文件编辑
(2) 系统管理相关:
Linux命令帮助的获取
外部命令:都有一个可执行程序,位于文件系统某目录下;
which, whereis
shell程序搜寻可执行程序文件的路径定义在PATH环境变量中;
# echo $PATH
[dmtsai@study root]$ echo $PATH
/usr/lib64/qt-.3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/python3/bin/:/root/bin:/usr/local/python3/bin/:/usr/local/python3/bin/
注意:自左至右
格式:COMMAND [OPTIONS...] [ARGUMENTS...]
内部命令:
# help COMMAND
外部命令:
(1) # COMMAND --help
# COMMAND -h
(2) 使用手册(manual)
# man COMMAND
(3) 信息页
# info COMMAND
(4) 程序自身的帮助文档
README
INSTALL
ChangeLog
(5) 程序官方文档
官方站点:Documentation
(6) 发行版的官方文档
(7) Google
内部命令帮助:
# help COMMAND
[dmtsai@study root]$ help hash
hash命令:
shell搜寻到的外部命令的路径结果会缓存至kv(key-value)存储中;
[dmtsai@study root]$ hash
hits command
2 /usr/bin/whatis
1 /usr/bin/mount
1 /usr/bin/whereis
1 /usr/bin/man
[dmtsai@study root]$ hash -d mount
[dmtsai@study root]$ hash
hits command
2 /usr/bin/whatis
1 /usr/bin/whereis
1 /usr/bin/man
[dmtsai@study root]$ hash -r
[dmtsai@study root]$ hash
hash: hash table empty
history命令:
作用是什么?相关的环境变量是什么?有用的选项?
管理命令历史;
登录shell时,会读取命令历史文件中记录下的命令:~/.bash_history
登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中;
history:
-a: 追加本次会话新执行的命令历史列表至历史文件中;
-d: 删除历史中指定的命令;
-c: 清空命令历史;
[dmtsai@study root]$ history
1 mkdir /media/cdrom
2 su -root
3 su root
4 cd /etc
5 cat fstab
6 echo "/dev/cdrom /media/cdrom iso9660 defaults 0 0" >> /etc/fstab
7 su root
8 poweroff
9 su root
10 startx
.........
快捷操作:
!#: 调用历史中第#条命令;
!string:调用历史中最近一个以string开头的命令;
!!: 上一条命令
外部命令帮助获取:
(2) man COMMAND
手册页:/usr/share/man
man1 ... man8
man1: 用户命令
man2: 系统调用
man3: C库调用
man4: 设备文件及特殊文件
man5: 配置文件格式
man6: 游戏
man7: 杂项
man8: 管理类的命令
注意:有些关键在不止一个章节中存在帮助手册;
要查看指定章节中的手册:man # COMMAND
man命令的配置文件:/etc/man.config
MANPATH /PATH/TO/SOMEWHERE: 指明新的手册文件搜索位置
# man -M /PATH/TO/SOMEWHERE COMMAND: 到指定位置下搜索COMMAND命令的手册页并显示之;
帮助手册中的段落说明:
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
EXAMPLES
AUTHOR
REPORTING BUGS
SEE ALSO
SYNOPSIS:
[]:可选内容
<>: 必选内容
a|b:二选一
...: 同一内容可出现多次
man命令的操作方法:
Space, ^V, ^f, ^F: 向文件尾翻屏;
b, ^B: 向文件首部翻屏;
d, ^D: 向文件尾部翻半屏;
u, ^U: 向文件首部翻半屏;
RETURN, ^N, e, ^E or j or ^J: 向文件尾部翻一行;
y or ^Y or ^P or k or ^K:向文件首部翻一行;
q: 退出;
#:跳转至第#行;
1G: 回到文件首部
G:翻至文件尾部
文本搜索:
/KEYWORD:
以KEYWORD指定的字符串为关键字,从当前位置向文件尾部搜索;不区分字符大小写;
n: 下一个
N:上一个
?KEYWORD:
以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索;不区分字符大小写;
n: 跟搜索命令同方向,下一个
N:跟搜索命令反方向,上一个
练习:date命令
显示今天为周几?
设定当前系统时间?
显示今天的日期,形如:08/15/15?
显示当前的时间,形如: 16:01:21?
(3) info
info COMMAND
(4) 程序自身的帮助文档
/usr/share/doc/COMMAND-VERSION
(5) 程序官方文档
(6) 发行版的官方文档
http://www.redhat.com/docs
(7) Google:
filetype:pdf
site:opensatck.com
(8) slideshare
http://www.slideshare.net/
基础命令:
date:
date [OPTION]... [+FORMAT]:显示
FORMAT: 格式符号
%a:缩写的星期
%A:星期
%D:00/00/00 格式日/月/年时间
%F:0000-00-00 格式的年-月-日时间
%T:00:00:00 格式小时:分钟:秒时间
%H:00 小时24小时制
[root@study ~]# date +%a
Sat
[root@study ~]# date +%A
Saturday
[root@study ~]# date +%D
04/14/18
[root@study ~]# date +%F
2018-04-14
[root@study ~]# date +%T
16:32:35
[root@study ~]# date +%H
16
date [MMDDhhmm[[CC]YY][.ss]]:设置
MM: 月分
DD:几号
hh: 小时
mm: 分钟
YY: 两位年份
CCYY: 四位年份
.ss: 秒钟
Linux的两种时钟:
系统时钟:由Linux内核通过CPU的工作频率进行的计时;可有date命令显示
硬件时钟:由主板所带的时钟计时,可有clock和hwclock命令显示
hwclock(clock): 显示硬件时钟
-s, --hctosys
-w, --systohc
[root@study ~]# clock
Sat 14 Apr 2018 03:07:03 PM BST -0.990771 seconds
[root@study ~]# hwclock
Sat 14 Apr 2018 03:07:16 PM BST -0.209477 seconds
[root@study ~]#
cal:日历
目录相关的命令:
当前目录或工作目录
主目录,家目录:HOME
root: /root
普通用户:/home/USERNAME
/home/tom
~:用户的主目录
cd:
cd 或 cd ~: 回当前用户的主目录
cd ~USERNAME: 切换至指定用户的主目录
cd -: 在上一个目录和当前目录之间来回切换
.
..
相关的环境变量:
PWD:保存了当前目录路径;
OLDPWD:上一次所在目录路径;
pwd: 显示当前目录,相当于echo $PWD
ls: list
显示指定路径下的文件列表;
ls [OPTION]... [DIR]...
-a, --all: 显示所有文件,包括隐藏文件;
-A, --alomost-all,显示不包括. ,.. 文件夹
-l: 长格式
-rw-r--r-- 1 root root 44800 Aug 14 14:32 install.log
-rw-r--r--:
最左侧的第一位:文件类型
-普通文件类型,
d目录文件类型,
l链接文件类型,
b块文件类型,
c字符文件类型,
p管道文件类型那个,
s套接字文件类型
后面的9位:访问权限,perm
数字:文件被硬链接的次数;
左root: 文件的owner
右root: 文件的group
44800:文件的size
Aug 14 14:32 : 文件的最近一次被修改的时间
install.log: 文件名
-h, --human-readable:单位换算
-d: 显示目录自身的相关属性;通常要与-l一起使用;
-r, --reverse: 逆序显示
-R, --recursive: 递归
stat /PATH/TO/SOMEFILE:获取指定文件的元数据
文件查看命令:cat, tac
cat [OPTION]... [FILE]...
-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-T --show-tabs:显示制表符
在直接使用cat命令的时候,ctrl+删除键才能删除输入的文字,ctrl+c终止
tac:是逆序读取文件
文件内容类型查看命令:file
file /PATH/TO/SOMEWHERE
回显命令:echo
-n: 禁止自动添加换行符号;
-e: 允许使用转义符;
\n: 换行
\t: 制表符
echo "$VAR_NAME": 变量会替换,双引号表弱引用
echo '$VAR_NAME': 变量不会替换,强引用
which:显示命令对应的程序文件路径
which [OPTION] COMMAND
--skip-alias:禁止显示别名
whatis:
使用mkwhatis命令可将当前系统上所有的帮助手册及与之对应的关键字创建为一个数据库;
系统管理类命令:
关机:
halt, poweroff, shutdown, init 0
重启:
reboot, shutdown, init 6
跟用户登录相关:
who, whoami, w
浙公网安备 33010602011771号