1、linux系统初使用

linux有图形终端和字符终端,关于linux学习以字符终端为主,即命令行操作:

[root@centos7 ~]#runlevel    查看当前工作模式

N 3    //3为字符终端,5为图形终端

[root@centos7 ~]#init3 //切换至字符终端

[root@centos7 ~]#init5 //切换至图形终端

[root@centos7 ~]#startx //只是启动图形,不是模式切换,[Ctrl]+c关闭图形

虚拟终端:[Ctrl]+[Alt]+F1~F6

图形终端:[Ctrl]+[Alt]+F7

切换终端:chvt 1~6,命令切换和按键切换一样

查看在线:who命令

查看当前的终端设备:tty命令

显示当前用户身份:whoami或who am i命令

显示谁在登录并做什么事:w命令

2、shell程序(bash shell)

shell是一种高级程序设计语言,也被称为linux的命令解释器:它提供了用户与内核进行交互操作的一种接口,接收用户输入的命令并把它送入内核去执行。

3、内部命令(集成在shell)和外部命令

enable命令       列出所有内部命令

enable -n cmd  禁用内部命令cmd

enable -n          查看所有禁用的内部命令

enable cmd            启用该cmd内部命令

type cmd                显示是内部命令还是外部命令:内部命令没路径,外部命令有路径

[root@centos7 ~]#enable

enable .

enable :

enable [

enable alias

......

[root@centos7 ~]#enable -n cd

[root@centos7 ~]#enable -n

enable -n cd

[root@centos7 ~]#enable cd

[root@centos7 ~]#type pwd

pwd 是 shell 内嵌

[root@centos7 ~]#type pstree

pstree 是 /usr/bin/pstree

4、PATH变量

[root@centos7 ~]#echo $PATH //echo显示变量后续介绍echo详细用法

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

优先级从左到右搜索,可以移动外部命令的位置,改变搜索优先级(哈希hash会记录外部命令的位置

[root@centos7 ~]#hash    //可以看到hash记录的外部命令的缓存信息

命中命令

1/usr/bin/pstree

1/usr/bin/who

1/usr/bin/ls

[root@centos7 ~]#hash -d ls    //清除ls的hash缓存

[root@centos7 ~]#hash

命中命令

1/usr/bin/pstree

1/usr/bin/who

[root@centos7 ~]#hash -r    //清除hash所有缓存

[root@centos7 ~]#hash

hash: 哈希表为空

hash的更多参数选项:

hash                     //默认列出当前hash缓存

hash -d cmd         //清除cmd缓存

hash -r            //清除所有hash缓存

hash -t cmd    //打印缓存中cmd的路径

hash -p path cmd   //将命令全路径path起别名为cmd

hash -l            //显示hash缓存,可作为输出使用

5、命令格式:

COMMAND [OPTIONS…] [ARGUMENTS…]

命令 选项 参数(命令的作用对象)

多个选项以及参数和命令之间使用空白字符分隔

取消和结束命令执行:Ctrl+c,Ctrl+d

多个命令可以用;分开

一个命令可以用分成多行

6、命令别名:

1>显示当前 shell 进程所有可用的命令别名

[root@centos7 ~]#alias

alias cp=‘cp -i‘

alias egrep=‘egrep --color=auto‘

......

2>定义别名 NAME,其相当于执行命令 VALUE

# alias NAME=’VALUE’

撤销别名:# unalias [-a] NAME1 NAME2... -a 撤销所有别名

3>在命令行中定义的别名,仅对当前 shell 进程有效

如果想永久有效,要定义在配置文件中:

仅对当前用户:~/.bashrc

对所有用户有效:/etc/bashrc

exit 退出生效;. 或 souce 后跟更改的配置文件使之不退出生效

4>如果别名同原命令同名,要使用原命令可以使用:

ALIASNAME、”ALIASNAME”、’ALIASNAME’或 command ALIASNAME

7、简单命令

1>关机:halt,poweroff

2>重启:reboot

选项:

-f:强制,不调用 shutdown

-p:切断电源

3>关机或重启:shutdown [OPTION]… TIME [MESSAGE]

选项:

-r:reboot

-h:halt

-c:cancel

TIME 无指定,默认相当于+1

Now:立刻,相当于+0

+m:相对时间表示法,几分钟之后(例如:+3)

hh:mm:绝对时间表示,指明具体时间

4>wall “广播内容”  //发广播,当前这台机器上所有用户可见

5>用户登录信息查看命令:

whoami  //显示当前登录有效用户

who  //系统当前所有的登陆会话

w  //系统当前所有的登陆会话及所做的操作

6>screen 命令:

screen -S [SESSION]  //创建新screen会话

screen -ls  //显示当前所有screen会话

screen -x [SESSION]  //加入screen会话

exit  //退出并关闭screen会话

[Ctrl]+a,[Ctrl]+d  //剥离当前会话

screen -r [SESSION]  //恢复某 screen 会话

7>echo 命令

功能:显示字符

语法:echo [-neE] [字符串]

说明:echo 会将输入的字符串送往标准输出。输出的字符串以空白字符隔开,并在最后加上换行号。

选项:

-E //(默认)不支持解释功能

-n //不自动换行

-e //启用字符的解释功能

a 发出警告声

退格键

插入 tab

……

显示变量:echo “$VAR_NAME”

8>命令行、括号扩展:

单引号’ ’     //引号之内只当做字符处理

双引号” ”    //引号之内识别变量,不识别命令

反向单引号` `  //引号之内识别变量,识别命令

` `或$()用于一个命令调用另一个命令的输出

括号扩展:

打印重复字符串的简化形式

[yang@centos7 ~]$echo file{1,2,3}

file1 file2 file3

[yang@centos7 ~]$echo {1..9}

1 2 3 4 5 6 7 8 9

9>bc 计算器:

ibase=16  //输入:16进制数,输出:10进制数

61

97

obase=16  //输入:10进制数,输出:16进制数

97

61

10、编辑/etc/motd 文件,编辑登陆后提示信息;编辑/etc/issue 文件,编辑登录前提示信息

11、[Tab]键之命令补全、文件路径补全

12、查看历史命令:history

# echo $HISTSIZE  //HISTSIZE 变量保存的是历史命令的条数

# vim /etc/profile  //更改系统保存历史命令的条数

# ![条数]  //执行历史中那条命令

[Ctrl]+r //搜索历史命令,[Ctrl]+g 退出

……

历史命令先保存在内存中,退出时再将数据写入磁盘文件(.bash_history)

13、文件通配符

*

匹配 0 个或多个字符

?

匹配任意单个字符

~

当前用户家目录

~yang

用户 yang 的家目录

~+

当前工作目录

~-

前一个工作目录

[0-9]、[a-z]、[A-Z]

匹配范围内的内容

[yang]

匹配列表中的任意一个字符

[^yang]

匹配列表中所有字符以外的字符

[[:upper:]]

所有大写字母

[[:lower:]]

所有小写字母

[[:alpha:]]

所有字母

[[:digit:]]

所有数字

[[:alnum:]]

所有的字母和数字

[[:blank:]]

水平空白字符

[[:space:]]

所有空白字符

[[:punct:]]

所有标点符号

[[:print:]]

可打印字符

[[:cntrl:]]

控制(非打印)字符

[[:graph:]]

图形字符

[[:xdigit:]]

十六进制字符

14>其他简单命令:

echo $RANDOM  //生成随机数(0-32767)

openssl rand -base64 n  //生成n位的随机字符数

last  //显示成功登陆信息

netstat -nt  //显示远程主机连接的次数

cd  //切换目录(cd -:回退到上次目录,存放在$OLDPWD 变量里)

ls -a -A -R(递归) -l(显示长属性) -ld(目录和符号链接信息不加 d 显示子目

录文件长属性) -1(按字母顺序每行显示) -S(按大小倒序排序) -r(取反) -t(按时间

排序) ls -d */(只显示当前文件夹的目录)

atime:访问时间;mtime:修改时间(正常看到的);ctime:状态时间(属性、属组更改时间改变)

stat [file_name]  //同时查看文件三个时间信息

touch  //文件不存在创建空文件;刷新已存在文件的时间

-a 仅改变 atime 和 ctime

-m 仅改变 mtime 和 ctime

-t [[CC]YY]MMDDhhmm[.ss] 指定 atime 和 mtime 的时间戳(年月日小时分秒)

-c 如果不存在,则不创建

cp [选项]... [-T] 源文件 目标文件

cp [选项]... 源文件... 目录

cp [选项]... -t 目录 源文件...

cp -r 源目录 目标目录  //-r 复制目录

cp –r 源目录 目标目录  //cp:使用真cp不使用别名

cp -f  //目标文件存在,先删除后复制

cp -p  //保留所有者属性

cp -a  //递归;保留链接(相当于-d);保留所有属性(备份手段)

cp -av  //备份+显示信息

cp –backup=numbered 原文件 目标文件  //不用担心覆盖,会备份

备份:

cp file{,.bak}  //{ }的使用

想批量备份文件,在每个文件后都加上一个.bak 后缀,cp 命令做不到。可以先复制成两份,再使用 rename 更改其中一份的文件名

rename "conf" "conf.bak" file*  //搜索file*,使用conf.bak替换conf

mv:移动文件、更改文件名

-i 交互式(默认)

-f 强制

rm:删除

-r 递归

-f 强制删除

可以用 mv 代替 rm:rm=’mv -t /tmp’

tree [dir]  //显示特定目录的目录树结构

tree -L 1 [dir]  //显示特定目录下一层目录树结构

-d  //只显示目录不显示文件

-P  //pattern:只显示由 pattern 匹配到的路径

mkdir:创建目录

-p:递归创建

-v:显示详细信息

-m MODE:创建目录时直接指定权限

rmdir:删除空目录

-p:递归删除父空目录

-v:显示详细信息

rm -r:递归删除目录树

shred 文件 //安全删除文件

-z 最后一次用 0 覆盖;-v 看过程;-u 覆盖后删除;-n 6 覆盖 6 次

15>索引节点

inode(index node)表中包含文件系统所有文件列表

一个节点(索引节点)是在一个表项,包含有关文件的信息(元数据),包括:

文件类型,权限,UID,GID

链接数(指向这个文件路径名称个数)

该文件的大小和不同的时间戳

指向磁盘上文件的数据块指针

有关文件的其他数据

ls -i  //查看节点编号,节点编号:用来唯一标识每个文件的唯一性(同一分区唯一)

df -i  //查看节点数,每个分区有固定的文件节点数,满了就相当于磁盘满了

目录:

文件引用一个是 indoe 号

人是通过文件名来引导引用一个文件

一个目录是目录下的文件名和文件 indoe 号之间的映射

rm 命令:链接数递减,从而释放的 indoe 号可以被用,把数据块放到空闲列表中数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

所以可以使用 shred 安全删除(覆盖删除)

16>软硬链接

节点编号每个文件一个(可以使用 ln 创建硬链接实现一个节点编号对应对个文件名)

硬链接的本质:一个节点多个名字(平等关系)同一分区、针对于文件

目录创建(链接数默认为 2:.当前目录和目录名;在目录里在创建一个目录..上一级目录新加一个名,链接数变为 3)

软链接的本质:快捷方式;软链接的大小和路径有关和原文件大小无关

ln -s [旧文件名] [新文件名]

软链接不能写相对当前路径,相对的是软链接的路径

软硬链接的区别:

本质:

硬链接:同一个文件多个名字

软链接:一个文件对应快捷方式,是不同文件

表现:

链接数

跨分区

是否支持目录

与原始文件的关系

删除

大小

部署软件使用软链接实现版本切换

17>确定文件内容

文件可以包含多种类型的数据,检查文件的类型,然后确定适当的打开命令或应用程序使用

file [option]:

-b 列出文件辨识结果时,不显示文件名称

-f filelist 列出文件 filelist 中文件名的文件类型

-F 使用指定分隔符号替换输出文件名后默认的“ :”分隔符

-L 查看对应软链接对应文件的文件类型

8、获取多层次的帮助

1>Whatis 或 man -f  //显示命令的简短描述,使用数据库,刚安装后不可立即使用(需使用 makewhatis | mandb 制作数据库)

2>command –help

man and info

/usr/share/doc/

3>网站搜索

4>man 帮助:

查看 man 手册页:man [章节] keyword

列出所有帮助:man -a keyword

搜索 man 手册:man -k ketword 列出所有匹配的页面

man 章节:

1:用户命令;2:系统调用;3:C 库调用;4:设备文件及特殊文件;5:配置文件格式;6:游戏;7:杂项;8:管理类命令;9:LINUX 内核 API

[root@centos7 ~]#whatis rm

rm (1p) - remove directory entries

rm (1) - remove files or directories

[root@centos7 ~]#man 1 rm //查看帮助信息

man 手册放在/usr/share/man;man 命令的配置文件:/etc/man.config | man db.conf

内部命令:help 命令  //使用help获取内部命令帮助信息

外部命令:man 命令、--help  //使用man或--help获取外部命令帮助信息