linux哲学思想:
1.一切皆文件。
把几乎所有资源,包括硬件设备都组织为文件格式。
2.由众多单一目的的小程序组成:一个小程序完成一个功能,而且要做好。
组合小程序完成复杂功能。
3.尽量避免与用户交互。
目标:实现脚本编程,以自动完成某些功能。
4.使用纯文本文件保存配置文件。
目标:一款实用的文本编辑器即能完成系统配置工作。
linux发行版:
1.slackware
suse
2.debian
ubuntu
3.redhat
rhel:每18个月更新一次
centos:兼容商业版的rhel
fedora: 每6个月更新一次
此外,linux还有其他分支:
ArchLinux,Gentoo,LFS等
Linux开源协议:
常见的开源协议:
GPL:开源,不能闭源。用户修改代码后也要遵循相同的协议。
APACHE:用户修改代码后可以闭源,但是在代码中要放置版权说明。
BSD:用户修改代码后可以闭源,但衍生的软件广告不能以你的名字进行促销。
linux终端:用户与主机交互,必然用到的设备
物理终端:设备文件路径:/dev/console
虚拟终端:附加在物理终端之上,以软件方式虚拟实现的终端,默认会启动6个虚拟终端。
图形终端:附加在物理终端之上的,以软件方式虚拟实现的终端,但额外会提供桌面环境。
切换方式:ctrl+alt+F#:[1-6]
设备文件路径:/dev/tty#
模拟终端:图形界面下打开的命令行接口,基于ssh协议或telnet协议远程连接的
设备文件路径:/dev/pts/#
查看当前终端:tty
shell相关知识:
命令提示符:
管理员:#
普通用户:$
显示当前shell:
# echo $SHELL
显示当前系统使用的所有shell:
# cat /etc/shells
命令:
输入命令,回车:提请shell程序找到命令所对应的可执行程序或代码,由其分析后提交给内核分配资源并运行起来,表现为一个或多个进程。
在shell中可执行的命令有两类:
内建命令:由shell自带,而且通过某命令形式提供
外部命令:在当前系统的某文件系统路径下有可执行程序文件,可用which、whereis来查看。
查看命令是内建命令还是外部命令:
# type COMMAND
linux命令查看帮助文档:
内部命令:# help COMMAND
外部命令:
1. # COMMAND --help
或 # COMMAND -h
2.使用手册(manual)
# man COMMAND
3.信息页
# info COMMAND
4. 程序自身的帮助文档
README
INSTALL
Changelog
5.程序官方文档
man COMMAND:
手册页:/usr/share/man, man命令的配置文件:/etc/man.config
man1:用户命令
man2:库调用
man3:C库的调用
man4:设备及特殊文件
man5:配置文件格式
man6:游戏
man7:杂项
man8:管理类命令
man命令的操作方法:
向文件尾部翻屏:space,^V,^F,^f
向文件首部翻屏:b,^B
向文件尾部翻半屏:d,^D
向文件首部翻半屏:u,^U
向文件尾部翻一行:ENTER, ^N, e, ^E, j, ^J
向文件首部翻一行:y, ^Y, ^P, k, ^K
退出: q
跳转至第#行: #
回到文件首部: 1G
翻至文件尾部: G
文本搜索:
/KEYWORD: 以KEYWORK指定的字符串为关键字,从当前位置向文件尾部搜索,不区分字符大小写
n: 下一个
N:上一个
? KEYWORK: 以KEYWORD指定的字符串为关键字,从当前位置向文件首部搜索,不区分字符大小写
n: 下一个
N: 上一个
基本命令:
date命令:
date [OPTIONS] +[FORMAT]
FORMAT:格式符号
%D,%F,%TA等
date [MMDDhhmm[[CC]YY].ss]:设置时间
MM:月份
DD:几号
hh:小时
mm:分钟
YY:两位年份
CCYY:四位年份
.ss:秒钟
hwclock:显示硬件时钟(root用户可用)
-s,--hctosys:设置系统时间为硬件时间
-w, --systohc:设置硬件时间为系统时间
cal:日历
ping命令:
-c count:发送数据包数,默认为4
-w timeout:和-c一起使用,指定超时间隔
-a:将地址解析为计算机名
-i size:发送size大小的数据量的数据包,默认为32个
系统管理类命令:
关机:halt,poweroff,shutdown,init 0
重启:reboot,shutdown, init 6
reboot:
-f:强制重启
-P:切断电源
shutdown [OPTIONS] [TIME]:
OPTIONS:
-r: reboot
-h: halt
-c: cancel
TIME:
now:立刻
+m:相对时间表示法,从命令提交多久之后,例如+5
hh:mm:绝对时间表示法,指明具体时间
查看跟用户登录相关的信息:
who:系统当前所有的登录会话
w:系统当前所有的登录会话及所做的操作
whoami:显示当前登录的有效用户
linux的文件系统:根文件系统,rootfs,遵循的协议是FHS(Filesystem Heirache Standard)
/boot: 引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放在此目录
/bin: 供所有用户使用的基本命令,不能关联至独立分区,OS启动即会用到的程序
/sbin: 管理类的基本命令,不能关联至独立分区,OS启动即会用到的程序
/lib:基本共享库文件,以及内核模块
/lib64:专用于x86_64系统上的辅助共享库文件存放位置
/etc: 配置文件目录(纯文本文件)
/home/USERNAME:普通用户家目录
/root:管理员的家目录
/media:便携式移动设备挂载点,比如cdrom,usb
/mnt: 临时文件存储位置
/usr: universal shared readonly data
bin
sbin
lib
lib64
include: 程序的头文件(head files)
share: 结构化独立的数据,例如doc,man等
local:第三方应用程序的安装位置
bin,sbin,lib,lib64,etc,share
/var: variable data files
cache:应用程序缓存数据目录
lib:应用程序状态信息数据
local:专用于为/usr/local下的应用程序存储可变数据
lock:锁文件
log:日志目录及文件
opt:专用于为/opt下的应用程序存储可变数据
run:运行中的进程相关的数据,通常用于存储进程的pid文件
spool:应用程序数据池
tmp: 保存系统两次重启中间产生的临时数据
/proc: 用于输出内核与进程信息相关的虚拟文件系统
/sys: 用于输出当前系统上硬件设备相关信息的虚拟文件系统
/selinux:security enhanced linux,selinux相关的安全策略等信息的存储位置
目录管理类命令:cd,pwd,ls,mkdir,rmdir,tree
cd:
cd或cd ~:回到当前用户的主目录
cd ~USERNAME:切换到指定用户的主目录
cd -:在当前目录和上一个目录之间来回切换
pwd:显示当前目录
相关环境变量:
PWD:保存了当前目录路径
OLDPWD:上一次所在目录路径
ls [OPTIONS]... [DIR]...
-a,--all:显示所有文件,包括隐藏文件
-l:长格式
-h,--human-readable:单位换算
-d:显示目录自身的相关属性,通常与-l一起使用
-r, --reverse:逆序显示
-R,--recursive:递归
mkdir:
-p:父目录不存在时不报错,且可自动创建所需的父目录
-v:显示详细信息
-m MODE:创建目录时直接指定权限
rmdir:删除空目录
tree:
-d:只显示目录
-L level:指定显示的层级数据
-P pattern:只显示由指定pattern匹配到的路径
文件查看命令:
stat,file,cat,tac,echo,which,whatis,more,less,tail,head
stat:文件元数据查看
# stat FILE
file:文件类型查看
# file FILE
cat :
-n:对显示出的每一行进行编号
-E:显示行结束符
cat heredoc:
cat << EOF
内容
EOF
echo:回显命令
-n:不自动换行
-e:支持使用转义符
:换行
:制表符
which:显示命令对应的程序文件路径
which [OPTION] COMMAND
--skip-alias:禁止显示别名
whatis:
使用mkwhatis命令可将当前系统上所有的帮助手册与之对应的关键字创建为一个数据库
more:
-d:显示翻页及退出提示
head:
-c #:指定获取前#个字符
-n #:指定获取前#行
-#
tail:用法和head类似
-f:追踪显示文件新追加的内容
文件管理类命令:
touch,mktemp,install,cp,mv,rm
touch:文件的时间戳管理工具
-a:access time,访问时间,简写为atime
-m:modify time,修改时间,简写为mtime
修改时间要和-t一起使用:
-t:stamp,格式为[[CC]YY]MMDDhhmm[.ss]
-c:如果文件不存在,则不创建
mktemp:
mktemp [OPTION]... [TEMPLATE]
TEMPLATE:filename.XXX
XXX至少要出现三个
OPTION:
-d:创建临时文件目录
--tmpdir:/PATH/TO/SOMEDIR:指明临时文件目录位置
install命令:复制文件
选项:
-m MODE:
-o OWNER
-g GROUP
cp: 复制命令
CP [OPTION]... [-T] SOURCE DEST
CP [OPTION]... SOURCE... DIRECTORY
CP [OPTION]... -t DIRECTORY SOURCE...
cp SRC DEST
SRC是文件:
如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
如果目录存在:
如果DEST是文件:将SRC的内容覆盖至DEST中,此时建议为cp命令使用-i选项
如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
cp SRC... DEST
SRC... 多个文件
DEST必须存在,且为目录,其他情形均为出错
cp SRC DEST
SRC是目录
则使用选项: -r
如果DEST不存在:
则创建指定目录,复制SRC目录中所有文件至DEST中
如果DEST存在:
如果DEST是文件:报错
如果DEST是目录:直接复制
常用选项:
-r,-R: 递归复制目录及内部的所有内容
-i: 交互式
-a: 归档,相当于-dR --preserv=all
-d: --no-dereference --preserv=links
--preserv=[ATTRA_LIST] 保持某一项属性
mode: 权限
ownership: 属主属组
timestamp
links
xattr
context
all
-p: --preserv=mode,ownership,timestamp 保持权限,属主属组,时间戳
-P, --no-dereference: 不跟踪符号链接的源文件
-v: --verbose
-f: --force
mv: move,移动文件
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
常用选项:
-i:交互式
-f: 强制
rm:remove,删除
-i:交互式
-f: 强制删除
-r: 递归
文本处理工具: wc, cut, sort, uniq
wc命令
-l: line
-w: words
-c: characters
cut命令:
-d: DELIMITER,指明分隔符
-f FIELDS
#: 第#个字段
#,#[,#]: 离散的多个字段
#-#:连续的多个字段
--output-delimiter=STRING:指明输出时的分隔符
sort命令:
-f: 忽略字母大小写
-r: 逆序显示
-t DELIMITER: 字段分隔符
-k #:以指定字段为标准排序
-n: 以数值大小进行排序
-u: uniq,排序后去重
uniq命令:
Note: 连续且完全相同方为重复
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
字符处理命令 :
tr --转换或删除字符
tr [OPTION]... SET1 [SET2]
-d : 删除出现在字符集中的所有字符
# tr AB ab 大写字母替换为小写字母
# tr -d AB 删除输入的字符中AB
练习:以冒号分隔,取出/etc/passwd文件的第6至第10行的各自的第1个字段,并将这些信息按第三个字段的数值大小排序
# head -10 /etc/passwd | tail -5 | sort -t: -k3 -n | cut -d: -f1