首次登录与使用帮助
-
Linux的基本原则
- 由目的单一的小程序组成;组合小程序完成复杂任务;
- 一切皆文件;
- 尽量避免捕获用户接口;
- 配置文件保存为纯文本格式;
-
x window与命令行
默认情况下提供6个终端来让用户登录,使用ctrl+alt+F(16)来切换即可.分别命名为tty1tty6.
还有一种自然是图形界面,称之为x-window.如果已经安装过x-window系统那么运行stratx
命令后使用ctrl+alt+F7即可启动.当然这个在inittab文件里是可以自行修改的.像我的是ctrl+alr+F1才是图形界面,并且是默认的.
-
登录
输入密码登录后,出现类似root@fredal tmp]#
的提示,最左边的代表当前用户是root.@后面的指的是主机名fredal
,接着代表当前目录为tmp
.#
代表当前用户是管理员,而$
代表当前用户是普通用户.运行su fredal
切换用户到普通用户fredal,那么:[fredal@fredal tmp]$
.
使用su
命令切换用户,使用exit
退出.
-
命令格式与热键
命令格式如下分为命令,选项与参数.
[root@fredal ~]$ command [-options] parameter1 parameter2 ...
例如ls -l /root
,选项分为短选项-
与长选项--
,不同的选项可以合在一起,例如ls -al /root
.参数指的是命令的作用对象,像这儿指的是/root目录下.
如果需要补全可以使用按两次tab键,可以用于命令补全,同样也可用于文件补全.
ctrl-c键用于中止程序.ctrl-d相当于输入结束或者exit
.
-
使用帮助
我们的命令分为内部命令与外部命令.
可以用whatis 参数
来区分,例如help是一个内部命令,那么
[fredal@fredal tmp]$ whatis help
help (1) - bash built-in commands, see bash(1)
看到有built-in
字样,说明是内部命令,否则是外部命令.
如果是内部命令,可以使用help 参数
来获取帮助,没错,可以help help
.得到关于help命令自身的使用帮助.
外部命令使用man 参数
来获取帮助.
输入man 7 man
得到
这样的帮助是分章节的(上图是第七章),每一章如下
- 用户命令(/bin, /usr/bin, /usr/local/bin)
- 系统调用
- 库用户
- 特殊文件(设备文件)
- 文件格式(配置文件的语法)
- 游戏
- 杂项(Miscellaneous)
- 管理命令(/sbin, /usr/sbin, /usr/local/sbin)
默认是有哪个章节就显示最前的那章.同样可以用whatis 参数
来查看命令有哪些章节的说明.而我们要想显示那一章节就用man 章节数 参数
即可
关于man使用帮助的一些说明:
符号:
<>:必选
[]:可选
...:可以出现多次
|:多选一
{}:分组
关键字:
NAME:命令名称及功能简要说明
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS:说明每一个选项的意义
FILES:此命令相关的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外参照
翻屏:
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
查找:
/KEYWORD: 向后查找
n: 下一个
N:前一个
?KEYWORD:向前查找
n: 下一个
N:前一个
另外使用q退出.
除了man命令,还可以使用info命令来获得帮助,大概是对man的一个补充吧,就是info 参数
,不赘述了.
-
基础命令
-
type
type 参数
查看命令的类型及一些信息.
-
date与clock
看上去没啥区别,不过前者指的是系统时间,后者指的是硬件时间.他们自身的修改不会影响到对方.
可以用自己喜欢的格式显示,例如
date +%Y/+%m/+%d
,就显示
2016/3/13
.同样修改时间例如
date 1210161730
是修改成2030年12月10日16:17:00.可以看到格式是月日时分年.
clock操作类似.如果想让硬件时间同步到系统时间,使用
hwclock -s
,反之使用
hwclock -w
.
-
cal
显示日历的命令,cal
显示当前月,cal 年份
显示某一年的年历.cal 月份 年份
显示某年某月的月历.
-
bc
一个简单的计算器,值得注意的是除法运算和java一样1/3变成0.如果要保留小数使用scale=小数位
.使用quit
退出
-
nano
一个简单的文本编辑器,使用nano 文件名
即可新建文件,进入到以下界面.使用ctrl+O保存,ctrl+x离开
-
sync
sync
进行数据的写入操作,会使内存中尚未更新的数据写入到硬盘中.
-
开关机
惯例上使用shutdown
即可,同时poweroff
关机,reboot
重启,比如
shutdown -h now
poweroff -f
更多参数参考man page.
-
切换执行等级
常用的几个等级
1. level 0: 关机
2. level 3: 命令行模式
3. level 5: 图形界面模式
4. level 6: 重启
那么显然`init 0`可以执行关机.
-
忘记密码
passwd
命令,输入两次新密码即可.
文件与目录配置
-
文件属性
我们用ls -al
命令来查看文件,出现如下格式.
从左到右基本上可以划分为七列,意义如下:
- 文件的类型吧及权限
- 表示有多少文件名链接到此节点
- 表示这个文件或目录的"所有者帐号"
- 表示这个文件的所属用户组
- 文件的容量大小,默认为B
- 文件的创建日期或者是最近的修改日期
- 文件名
说说第一列,也就是类型权限.共有10个字符,第一个字符代表文件的类型:
-:普通文件 (f)
d: 目录文件
b: 块设备文件,可供存储的接口设备 (block)
c: 字符设备文件,串行端口设备 (character)
l: 符号链接文件(symbolic link file)
p: 命令管道文件(pipe)
s: 套接字文件(socket)
后面九位,每三个一组,均为"rwx"的三个参数的组合.[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute),如果都没有权限就是[-].
- 第一组为"文件所有者的权限"
- 第二组为"同用户组的权限"
- 第三组为"其他非本用户组"的权限
说说第六列,也就是时间戳.基本上记录以下三类:
访问时间:access
修改时间:modify,文件内容发生了改变
改变时间:change,metadata,元数据(本身的属性改变)
-
目录配置标准FHS
文件层次标准(FHS,Filesystem Hierarchy Standard)统一解决碎片化问题.
按照文件系统使用频繁与否可分为四类
根目录:是整个系统最重要的一个目录,所有的目录都由根目录衍生出来,同时也与开机,还原,系统修复等操作有关.
在根目录查看所有文件可以看到
FHS定义出根目录/应该有以下子目录才好
/bin:放置的是单用户模式下还能被操作的命令,上图中是一个链接文件.
/boot:放置开机会使用到的文件,包括linux内核文件以及配置文件等
/dev: 任何设备与接口文件都是存在这个目录中
/etc: 系统的主要配置文件都在这,一般普通用户可以查阅但只有root用户才能修改
/home: 这是系统默认的用户主文件夹,比如说我这个里面会有
fredal
的目录在,但是root用户是不在这儿的.带上
~
选项,表示当前用户的主文件夹.
/lib:放置开机会用到的函数库,以及/bin与/sbin下命令调用的函数库.
/media:媒体的意思,放置的是可删除的设备,包括软盘,光盘...
/mnt:挂载设备的目录
/opt:给第三方软件放置的目录
/root:系统管理员得到主文件夹,和/home是不同的.
/sbin:管理命令,与/bin用户命令不同,包括开机,修复,还原系统等命令
/srv:"service"的缩写,一些网络服务启动之后,所需要取用的数据目录
/tmp:临时文件
当然还有一些目录也是需要了解的
/lost+found:在文件系统发生错误时,将一些丢失的片段放置到这个目录下
/proc:虚拟文件系统,放置的数据都在内存中,如系统的内核,进程,外部设备的状态,网络状态等.
/sys:也是虚拟文件系统,跟硬件设备相关的属性映射文件
接下来需要了解 /usr了,(UNIX SoftWare Resource)缩写,也就是操作系统软件资源,而不是什么用户的目录.所有的系统默认的软件都会放置在这,类似于windows中"C:\windows".与/下很多重复目录的区别在于是否与开机相关
/usr/bin:用户可使用的命令,和/bin区别在于是否与开机相关
/usr/sbin:非系统正常运行所需要的系统命令,如网络服务的服务命令
/usr/lib:各种应用软件的函数库,目标文件
/usr/local:系统管理员在本机自行安装的软件,建议放到此目录.这里面也有/bin,/sbin,/lib
/usr/src:源码
接下来将 /var.定义为可变的文件,包括缓存,登录文件以及某些软件运行产生的文件.
/var/cache:缓存文件
/var/lib:程序本身执行的过程中需要使用的库
/var/tmp:也是临时文件
我们的目录树如下:
-
路径
文件的路径:就是文件存放的地方,通过它系统就可以找到该文件。
绝对路径:路径的写法一定是由根目录“/”写起的。例如:/usr/local/mysql
。
相对路径:路径的写法不是由根目录“/”写起的。例如例如 ./home/dmtsai
或 ../../home/dmtsai/
等等
. :代表当前的目录,也可以使用 ./ 來表示;
.. :代表上一层目录,也可以 ../ 來代表。
-:代表前一次目录,按多次相当于来回轮换
~:当前用户的主文件夹
文件与目录管理
-
cd(切换目录)
就是一个切换命令的操作,加上~
或者啥都不加表示回到主目录.-
表示与前一层来回切换,cd ..
表示回到上一层,cd /var/spool
这种属于绝对路径写法,cd ../bin
属于相对路径写法
-
pwd(显示目录)
用于打印当前目录,有参数-P
表示显示出真实的路径(而不是链接)
我们知道/bin是一个链接目录.链接到/usr/bin中,所以加了参数会有区别
-
mkdir(创建新目录)
主要参数:
-m:用于指定要创建的目录的权限。(不常用)
-p:创建一大串级联目录,并且当创建一个已经存在的目录时不会报错
如果目录已经存在,报错.创建不存在的级联目录时需要加上参数.另外不指定权限会默认为drwxr-xr-x
我们在创建目录的时候,可以使用
{}
进行辅助,例如在创建多个目录的时候,或者交叉目录的时候.
[root@fredal tmp]# mkdir -p hello/black/{one,two/guess}
创建了多个目录.
[root@fredal tmp]# mkdir -p hello/test/{a,b}_{c,d}
这行命令会创建a_c,a_d,b_c,b_d四个目录
-
install
只说-d
参数,同样有创建目录的效果
-
rmdir(删除目录)
删除空的目录,-p
参数可以删除一连串的单源空目录,自底向上的.
-
环境变量$PATH
为什么可以在某些地方不加地址就可以直接那个命令呢,就是环境变量的原因,可以查看路径设置的详细
-
ls(查看文件与目录)
ls可能是最常用的指令之一.
主要参数:
-l:长格式(包含文件的属性与权限等数据)
-h:做单位转换(KB,GB)
-a: 显示以隐藏文件
-A: 显示隐藏文件但不包括.和..
-d: 显示目录自身属性
-i: 列出index node, inode
-r: 逆序显示
-R: 递归(recursive)显示,连同子目录文件
-F: 根据文件目录等信息给与附加数据结构(*代表可执行文件,/代表目录,=代表socket文件,|代表FIFO文件)
--color=never :不要颜色;
--color=always :显示颜色
--color=auto :自动决定颜色显示
--full-time :以完整時間模式 (包含年、月、日、時、分) 輸出
-
touch
一般来说我们用文本编辑器创建新文件,但这个也可以.描述为若之前对应文件不存在,创建一个新文件;若存在,则修改这个文件的最后修改期限(时间戳)
主要参数:
-a:只更改存取时间
-c:不建立任何文件
-d:<时间日期>:使用指定的日期时间
-m:只更改变动时间
-r:<参考文件或目录>:把指定的文件或者目录的日期时间,统统设置成为参考文件或目录的日期时间。:
-t:<时间日期>:使用指定的日期时间
-
cp(复制文件或目录)
cp
使用形如cp SRC DEST
.还是有许多要注意的地方.例如如果目标已经存在且是目录,那么会放到该目录下.如果目标已经存在且是文件,会覆盖.如果复制多个文件那么目标必须为目录,如果目标是目录那么必须是存在的等等,如果源文件是目录必须加上-r等等.
主要参数:
-r:递归处理,将指定目录下的文件和子目录一起复制
-i:覆盖现有的文件之前先询问用户
-f: 强制复制
-p: 连同文件的属性一起复制过去
-a:归档复制,常用于备份
-d: 复制链接文件本身而非源文件
另外要注意,复制的文件是谁创建的就是谁的用户组,如果要保留用户组的话需要使用
-a
.而如果源文件是链接文件的话默认复制源文件的,如果复制链接文件本身需要使用
-d
-
rm(删除文件或目录)
主要参数:
-f:强制删除文件或目录。
-i:删除既有文件或目录之前先询问用户。
-r:递归处理,将指定目录下的所有文件及子目录一并处理。等同于rmdir。
-v:显示指令的执行过程
注意在root用户中,rm相当于rm-i.使用\rm
来使用rm
-
mv(移动文件与目录,重命名)
同样要考虑目标文件或目录是否存在等等
主要参数:
-b:若需覆盖文件,覆盖前先备份。
-f:若目标文件和现有的文件或目录重复,则直接覆盖现有的文件或目录。
-i:覆盖现有的文件之前先询问用户。
-v:显示指令执行的过程
-u: 若目标文件存在,比较哪个更新
-
stat与file(查看属性,类型)
stat用于查看文件各种属性状态,而file用于查看文件类型(包括目录)
文件内容查阅
有部分内容涉及到管道命令,但是更多的管道命令之后还会细说.
-
cat(查看文件内容)
cat有连接的意思,除了查看单个文件内容,还可以查看多个文件拼接的内容,用空格隔开即可
主要参数:
-n:由1开始对所有输出的行数进行编号。
-b:和-n相似,但是对于空白的行不进行编号。
-s:当遇到有连续的两行以上的空白行时,代换为一行的空白行。
-E:结尾用断行符号$表示出来
-
tac(反向显示)
就是cat的倒序显示,先显示最后一行.
-
more和less(分屏显示)
当显示内容过多时候我们需要分屏显示.
more /etc/man.config
可以分屏显示文件,空格键下一屏,b键上一屏,Enter键下一行,q表示离开,/KEY表示向下查询.基本与man使用类似,但是却没有上一行的操作.
相对来说less
命令更好用一些,less /etc/man.config
就是分屏查看,操作与man
操作几乎一致.
-
head(取出前几行)
不加参数的话,默认取出前十行.参数-n 数字
表示取出前多少行
另外
head -n -100
的话表示,后面一百行不打印,只打印前面的.
-
tail(取出后几行)
不加参数同样默认后十行,-n
可以指定取出尾部多少行.
类似的如果
tail -n +100
,表示前面一百行不打印,只打印后面的,相当于取多少行后的所有.
参数
-f
非常有用,相当于持续检测后面的内容.比如
tail -f test.txt
后,在另一个终端尾部添加test.txt的内容,当前终端会实时显示.
-
cut(选取)
这个与之后几个也是涉及到管道命令,这里先有个基础的认识.
选取命令就是将一段数据进行分析,然后选出我们想要的,当然这个过程是不会改变数据的内容的,只是显示内容改变
主要参数:
-d:后面接分割字符,与-f一起使用
-f:表示取出第几段的意思
-c:以字符的固定单位取出固定字符
看到passwd文件都是以:为分隔符的一串,那么如果要取出每行的第一段就应该使用
cut -d: -f1 /etc/passwd
.
如果要去出第一段到第三段就使用
cut -d: -f1-3 /etc/passwd
那如果没有分隔符,而只想根据第几个字符来分割,比如只想取出前面三个字符,或者12个字符以后的所有字符怎么办?
可以使用
cut -c -3 /etc/passwd
,
cut -c 12- /etc/passwd
-
sort(排序显示)
排序是默认根据ASCII表顺序的
主要参数:
-f:忽略大小写的差异,A
和a
认为一样.
-b:忽略最前面的空格符部分
-n:使用数字的排序方式
-r:反向排序
-u:表示重复的行仅出现一行
-t:分隔符
-k:表示以哪个区间的字段进行排序
接下来我们对passwd的第三个字段进行排序
-
uniq(去除重复显示)
要注意的是和sort -u
不同,这儿只有相邻并且重复才会被认为是重复
主要参数:
-d:显示重复的行
-D:显示所有重复的行
-c:进行重复的计数
-
wc(计数)
想要知道有多少行,多少字,多少字符.可以使用这个命令
主要参数:
-l:仅输出多少行
-w:仅输出多少字
-m:仅输出多少字符
-
tr(操作字符)
tr可以删除一段信息当中的文字,或者进行替换.当然这个只是在显示上做得改动,不会真的删除或替换.
主要参数:
-d:删除这个字符串
-s:替换掉重复字符
-
join(合并文件操作)
处理两个文件间的数据,把相同数据的一行加在一起.
主要参数:
-t::分隔符
-i:忽略大小写的差别
-1:表示第一个文件要用哪个字段来分析
-2:表示第二个文件用哪个字段分析
我们建立两个文件,第一个以姓名,性别,年份,班级来建立字段.第二个以姓名,年份,身高体重来建立字段.
那么如果是默认的,就是会以空格符分割数据,并且对比第一个字段的数.这里join -t: a.txt b.txt
就会对比两个文件的名字字段并合并显示.我们看到年份字段也是两个文件共有的,第一个文件中第三段和第二个文件中第二段是年份,那么join -t: -1 3 a.txt -2 2 b.txt
可以按年份进行合并,但是注意到我们文件中有两个相同年份2015,所以会出现交叉