Fork me on GitHub

Linux Day02

Day02


文件命令

cat

cat:concatenate,文件查看工具,可以同时查看多个文件,那么文件就会按顺序显示。

cat /etc/fstab
cat /etc/passwd
cat [选项列表] [文件列表]... 
	-n:给显示的文本行编号
	-E:显示行结束符$

tac

tac:文件逆序查看工具,可以同时查看多个文件,那么文件就会按顺序显示。

tac /etc/fstab
tac /etc/passwd
tac [选项列表] [文件列表]... 
	-n:给显示的文本行编号
	-E:显示行结束符$

head命令:查看文件的前n行

head [options] FILE
	-n \d
	-\d

	\d:表示数字

tail

tail命令:查看文件后n行

	
tail [options] FILE
	-n \d
	-\d
	-f:查看文件尾部内容不退出,跟随显示新增行;
	
	\d:表示数字

more

more命令:

more FILE
	特点:翻屏只文件尾部后自动退出。

less

less命令:

less FILE

echo

echo:回显

echo[OPTION]... [STRING]…
	-n:不进行换行,在回显后,不将命令提示符进行换行操作;
	-e:让转义符生效;
		\n:换行
		\t:横向制表符
		\v:纵向制表符
		\b:退格键
	STRING可以使用引号,单引号和双引号均可用;
	单引号:强引用,变量引用不执行替换
		~]# echo '$SHELL'
	双引号:弱引用,变量引用会被替换
		~]# echo "$SHELL"

注意:变量引用的正规符号:${name},name表示变量名字

重定向

IO重定向及管道
程序:指令+数据
程序:IO

  1. 可用于输入的设备:文件(键盘设备、文件系统上的常规文件、网卡等)
  2. 可用于输出的设备:文件(显示器、文件系统上的常规文件、网卡等)

程序的数据流有三种:

输入的数据流:<--标准输入(stdin),键盘;
输出的数据流:-->标准输出(stdout),显示器;
错误输出流:-->错误输出(stderr),显示器;

fd:file descriptor,文件描述符

标准输入:0
标准输入:1
错误输出:2

IO重定向:

  1. 输出重定向:>
    特性:覆盖输出

  2. 输出重定向:>>
    特性:追加输出

  3. 错误输出流重定向:2>,2>>

  4. 合并正常输出流和错误输出流:

    1. &>&>>
    2. COMMAND > /path/to/somefile 2>&1
    3. COMMAND >> /path/to/somefiel 2>&1
    4. 特出设备:/dev/null,任何数据都会被null丢弃。
  5. 输入重定向:<

设置环境变量

  1. set -C

    1. 禁止覆盖输出重定向至已存在的文件;
    2. 此时可使用强制覆盖输出:>|
    3. 仅对当前shell进程有效
  2. set +C
    关闭上述特性

Here Document

<<

cat << EOF
cat > /PATH/TO/SOMEFILE << EOF

注意:EOF是结束符,也是开始符,第一次出现表示开始,第二次出现表示结束。

cat > /PATH/TO/SOMEFILE
输入结束后按ctrl+d

ln

链接文件:访问同一个文件的不同路径;

硬链接

指向同一个inode的多个文件路径;

特性:

  1. 目录不支持硬链接;
  2. 硬链接不能跨文件系统;
  3. 创建硬链接会增加inode引用计数;ls -l的第二部分的数字。

创建:

ln src link_file

符号链接文件

指向一个文件路径的另一个文件路径;

特性:

  1. 符号链接与源文件是两个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数;
  2. 支持对目录创建符号链接,可以跨文件系统;
  3. 删除符号链接文件不影响源文件,但删除源文件,符号指定的路径即不存在,此时会变成无效链接;

注意:符号链接文件的大小是其指定的文件的路径字符串的字节数;

创建:

ln -s src link_file
	-v:verbose,显示过程

alias

  1. 获取所有可用别名的定义

    ~]# alias
    
  2. 定义别名

    ~]#alias NAME=' COMMAND'
    

    注意:仅对当前shell进程有效

  3. 撤销别名:

    ~]#unalias NAME
    

vi文本编辑器

文本编辑器:
文本:纯文本信息,ASCII text;Unicode,
文本编辑种类:
行编辑器:sed
全屏编辑器:nano,vi

vi:visual interface,是类unix操作系统内置的文本编辑器。
vim:VI Improved,模式化的编辑器,是vi的增强版本

vi编辑器的使用

vim [options] [file ...]
	+#:打开文件后,直接让光标处于第#行的行首;
	+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;
	+:打开文件后,直接让光标处于尾行的行首

vi编辑器的三种模式

命令模式: 所有操作都是命令
编辑模式: 插入内容
底行模式: 保存/退出 (wq:保存退出 !:强制)

vim的输入模式

编辑模式:默认模式,
编辑模式------>输入模式:

i:insert,在光标所在处输入;
a:append,在光标所在处后方输入;
o:在光标所在处下方打开一个新行;
I:在光标所在行的行首输入;
A:在光标所在行的行尾输入;
O:在光标所在处的上方打开一个新行;

命令模式下的常用命令

字符移动

字符间跳转

j:下
k:上
h:左
l:右
#COMMAND:跳转由#指定的个数的字符;

单词间跳转

w:下一个单词的词首;
W:下一个单词的词首,但是忽略标点
e:当前或后一个单词的词尾;
E:当前或后一个单词的词尾,但是忽略标点
b:当前或前一个单词的词首;
B:当前或前一个单词的词首,但是忽略标点
#COMMAND:跳转由#指定的个数的单词;

行首行尾跳转

^:跳转至行首的第一个非空白字符;
0:跳转至行首;(tab键不算在内,)
$:跳转至行尾;

行间跳转

#G:跳转至由#指定的行;
1Ggg:第一行;
G:最后一行;

句间跳转

):下一句
(:上一句

逐句移动,句子结束标识.

段间跳转

}:下一段
{:上一段

逐段移动,段落标识空行

默认一个tab键8个字符。右下角的第一个数字表示第几个字符,第二个数字表示绝对字符。

翻屏操作

Ctrl+f:向文件尾翻一屏
Ctrl+b:向文件首部翻一屏
Ctrl+d:向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
enter:按行向后翻

命令模式下的编辑命令

字符编辑命令:

x:删除光标所在处的字符;
#x:删除光标所在处起始的#个字符;
xp:交换光标所在处的字符于其后面的字符的位置;

替换命令:(replace)

r:替换光标所在处的字符,
rCHAR

删除命令:

d:删除命令,可结合光标跳转字符,实现范围删除;

d$:删除当前字符至行尾的所有字符;
d^:删除当前字符至行首的所有字符;
dw:删除至下个单词的词首之间的内容;
de:删除至下个单词的词尾之间的内容;
db:删除至上个单词的词首之间的内容
#COMMAND
dd:删除光标所在处的行;
#dd:删除光标所在处的行起始的共#行;

另外的一些用法

di'
di"
di(或dib
di[
di{或diB
di
#分别删除这些配对标点符号中的文本内容

粘贴命令:(p,put,paste)

p:缓冲区的内容如果是整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
P:缓冲区的内容如果是整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;

复制命令:(yank,y)

y:复制,工作行为相似于d命令

y$
y^
y0
ye
yw
yb
#COMMAND
yy:复制一整行
#yy:复制#行

用法和dd一样

另外的一些用法

yi'
yi"
yi(
yi[
yi{
yi
#分别复制这些配对标点符号中的文本内容

改变命令(change,c)

编辑模式----->输入模式;实现删除操作;

c$
c^
c0

ce
cb
cw
#COMMAND
cc:删除光标所在的行,并转换为输出模式;
#cc:

另外的一些用法

ci'
ci"
ci(
ci[
ci{
ci
#分别更改这些配对标点符号中的文本内容

可视化模式

v:按字符选定;
V:按行选定;
结合编辑命令使用:d,c,y

vi'
vi"
vi(
vi[
vi{
vi
#分别选中这些配对标点符号中的文本内容

撤销(undo)操作:

u:撤销此前的操作
#u:撤销此前的#个操作

撤销此前的撤销:
Ctrl+r

重复执行前一个编辑操作;

关闭文件

ZZ:保存并推出;
:q:退出;文件没有执行过编辑操作;
:q!:强制退出,不保存此前的编辑操作;
:wq:保存并退出;
:x:保存并退出;
:w /PATH/TO/SOMEFILE:另存为

vim的底行模式

地址定界:

:start_pos[,end_pos]
	#:特定的第#行,例如5即第5行,
	.:当前行;
	$:最后一行;
	#,#:指定行范围,左侧为起始行,右侧为结束行;
	#,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量,例如:3,+7表示从第三行到第10行。
	%:表示全文;
	/pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行;/pattern/,$:
	/part1/,/part2/:从光标所在处起始,第一次有part1匹配到的行开始,至第一次有part2匹配到的行结束之间的所有行;

可同编辑命令一同使用,实现编辑操作:
d,y,c
w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
r /PATH/TO/SOMEFILE:将指定的文件中的文本读取并插入至指定位置;

查找

/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配的所有字符串;
?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配的所有字符串;
	n:下一个,与命令方向相同
	N:上一个,与命令方向相反

查找并替换

s:末行模式的命令;使用格式:
s/查找的内容/替换为的内容/修饰符

要查找的内容:可使用正则表达式

替换为的内容:不能使用正则表达式,但是可以引用;
如果“要查找的内容”部分在模式中使用分组符号;在“替换为的内容”中使用后向引用(正则表达式的知识);
直接引用查找模式匹配到的全部文本,要使用&符号;

修饰符:

  1. i:查找时,忽略大小写
  2. g:全部替换,意味着一行中如果匹配到多次,则均替换;

可把分隔符替换为其他非常用字符:

  1. s@@@
  2. s###

完整格式为:

:start_pos[,end_pos] s@/pattern/@@修饰符

底行模式命令

  1. 行号
    显示: set number,简写为set nu
    取消显示:set nonumberset nonu

  2. 括号匹配高亮,默认
    匹配:set showmatchset sm
    取消:set nosm

  3. 自动缩进
    启用:set ai
    禁用:set noai

  4. 高亮搜索,默认启用
    启用:set hlsearch
    禁用:set nohlsearch

  5. 语法高亮,默认启动
    启用:syntax on
    禁用:syntax off

  6. 忽略字符大小写
    启用:set ic
    禁用:set noic

  7. 获取帮助:
    :help
    :help subject

  8. 设置tab缩进为4个字符;
    :set tabstop=4:设置tab缩进为4个字符,默认为8个字符。

vim自带的练习教程,vimtutor

网络管理

查看和修改网络接口

ifconfig命令(临时修改,重启后失效)

ifconfig [INTERFACE]
	-a:显示所有接口,包括Inactive状态的接口;
	
ifconfig interface [aftype] options | adress ……
	#ifconfig IFACE IP/MASK [up|down]
	#ifconfig IFACE IP netmask NETMASK
	# IFACE:接口名称

options:
	[-]promisc:允许或禁止接口置于混杂模式。 如果选用,则接口可以接收网络上的所有分组。
	注意:立即送往内核中的TCP/IP协议栈,并生效;

测试网络连通性

ping命令

host

host 域名
DNS查询

netstat

显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组。

显示路由

netstat -rn
-r:显示内核路由表
-n:数字格式

显示网络连接:

netstat  [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n]       [--extend|-e[--extend|-e]][--program|-p]
	-t:TCP协议的相关连接;连接均有其状态;FSM(finate state machine);
	-u:UDP协议的相关连接
	-w:raw socket相关的连接
	-l:处于监听状态的连接
	-a:所有状态
	-n:以数字格式显示IP和port
	-e:扩展格式
	-p:显示相关的进程及PID

常用组合:-tan-uan-tnl-unl-tunlp

传输层协议:

  1. tcp:面向连接的协议;通信开始之前,要建立一个虚链路;
  2. udp:无连接的协议;直接发送数据报文;

显示接口的统计数据:

netstat {--interfaces|-i} [iface]  [--all|-a]  [--extend|-e[--extend|-e]]  [--verbose|-v] [--program|-p] [--numeric|-n] 

所有接口:netstat -i
指定接口:netstat -I<iface>

虚拟机和宿主机之间通讯方式

桥接模式

将宿主机的网卡和虚拟机的虚拟网卡通过虚拟网桥连接。

NAT模式

虚拟网卡vmnet8和虚拟交换机vmnet8建立连接;
物理网卡和虚拟交换机vmnet8通过NAT设备实现连接。

仅主机模式

修改IP地址

GUI的方式

修改完成以后,需要重启网络服务
service network restart

命令行配置模式

  1. step
  2. system-config-network
  3. nmtui(仅Centos7)

编辑复选框,只能使用空格,编辑完成后保存并退出,会将配置直接写入到配置文件中,不需要重启;

修改配置文件

ifcfg-IFACE配置文件参数:

DEVICE:此配置文件对应的设备的名称;要与ifcfg-IFACE中的IFACE保持一致;
ONBOOT:在系统引导过程中,是否激活此接口;
UUID:此设备的唯一标识;
IPV6INIT:是否初始化IPv6协议栈;
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp,bootp,static,none;
TYPE:接口类型,常见的有Ethernet,Bridge;
DNS1:第一DNS服务器指向;
DNS2:备用DNS服务器指向;
DOMAIN:DNS搜索域;
IPADDR:IP地址
NETMASK:子网掩码;Centos 7支持使用PREFIX以长度方式指明子网掩码;
GATEWAY:默认网关;
USERCTL:是否允许普通用户控制此设备;
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的DNS服务器指向覆盖本地手动指定的dns服务器指向;yes:允许, no:不允许,默认为允许;
HWADDR:设备的MAC地址;
	

NM_CONTROLLED:是否使用NetworkManager服务来控制接口;

主机名称

查看主机名称: hostname
修改主机名称(临时): hostname 主机名称
永久修改: vim /etc/sysconfig/network(重启 reboot 后生效)

主机映射(ip/域名映射)

Linux: vim /etc/hosts
windows:C:\Windows\System32\drivers\etc\hosts

防火墙

控制网络”出入”行为的文件:/etc/sysconfig/iptables

  1. 常见命令

    1. service iptables start/stop/restart/status:打开/关闭/重启/查看防火墙
    2. service –status-all:查看所有后台服务
    3. chkconfig iptables on/off:开机自启/关闭
  2. 添加和删除规则

    1. 删除规则:iptables -D INPUT -p tcp --dport 22 -j DROP
    2. 加入一条INPUT规则开放80端口:iptables -I INPUT -p tcp --dport 80 -j ACCEPT

更详细的请参考 iptables的使用

系统启动级别

查看系统启动级别

  1. runlevel
  2. cat /etc/inittab

#  启动级别可以修改 一共7个启动级别

#   0 - halt (Do NOT set initdefault to this) 									# 关机
#   1 - Single user mode                     								 	# 单用户模式
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)	# 多用户模式,但是没有网络
#   3 - Full multiuser mode														# 多用户模式
#   4 - unused																	# 没有定义
#   5 - X11																		# 图形界面
#   6 - reboot (Do NOT set initdefault to this)									# 重启
# 
id:5:initdefault:

修改系统启动级别

vim /etc/inittab
修改为3

用户和组

用户

在linux中,用户分为两大类:管理员用户和普通用户,其中普通用户有分为系统用户和登录用户;
系统用户:为了能够让那些后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从来不用登陆系统。
登录用户:就是我们一般使用登录linux的用户。

用户标识:user id,UID
通常使用16bits二进制数字表示(0-65535)
管理员的用户标识:0
普通用户:1-65535
系统用户:1-499(Centos6)、1-999(Centos7)
登录用户:500-60000(Centos6)、1000-60000(Centos7)

​linux通过名称解析库“/etc/passwd”文件解析用户名与用户ID之间的对应关系。

用户分类

  1. 管理员root 具有使用系统所有权限的用户,其UID 为0
  2. 系统用户 保障系统运行的用户,一般不提供密码登录系统,其UID为1-499之间
  3. 普通用户 即一般用户,其使用系统的权限受限,其UID为500-60000之间.

查看用户

/etc/passwd:用户信息库
name:password:UID:GID:GECOS:directory:shell

root: 用户名称
x: 密码的占位符 (/etc/shadow)
0: uid
0: 组id
root: 描述(备注)信息
/root: 家目录
/bin/bash: shell类型

用户操作

useradd命令

创建用户

useradd [选项] 登录名 
    -u,–uid UID:指定UID,默认是上一个用户的UID+1 
    -g,–gid GID:指定基本组ID,此组得事先存在; 
    -G,–groups GROUP1[,GROUP2,……[,GROUPSN]]:指明用户所属的附加组,多个组之间用逗号分隔。 
    -c,–comment COMMENT:指明注释信息 
    -d,–home HOME_DIR:以指定路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件。 
    -s,–shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中; 
    -r,–system:创建系统用户 
    -M:不为用户创建主目录 
    -f,–incative INACTIVE:在密码过期后,账户被彻底禁用之前的天数,0表示立即禁用,-1表示禁用该功能。 
# 注意:创建用户时的诸多默认设定配置文件为/etc/login.defs

useradd -D:显示创建用户的默认选项配置; 
useradd -D 选项:修改默认选项的值; 
# 修改的结果保存于/etc/default/useradd文件中;可以直接修改此文件来实现。

usermod命令

修改用户属性

usermod [选项] 登录名 
    -u,–uid UID:修改用户的ID为此处指定的新UID; 
    -g,–group GROUP:修改用户所属的基本组;此组得事先存在; 
    -G, –groupsGROUP1[,GROUP2,…[,GROUPN]]]:修改用户所属的附加组,原来的附加组会被覆盖; 
    -a, –append:与-G一同使用,用于用户追加新的附加组; 
    -c,–comment COMMENT:修改注释信息; 
    -d,–home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置; 
    -m,–move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录; 
    -l,–login NEW_LOGING:修改用户名; 
    -s, –shell SHELL:修改用户的默认shell; 
    -L,–lock:锁定用户密码;即在用户原来的密码字符串之前添加一个”!”; 
    -U,–unlock:解锁用户密码,

userdel命令

删除用户

userdel [选项] 登录名 
    -r:删除用户时一并删除其家目录和用户邮箱;

id命令

显示用户的真实和有效的UID和GID

id [OPTION]… [USERNAME] 
    -u:仅显示有效的UID; 
    -g:仅显示用户的基本组的ID; 
    -G:仅显示用户所属的所有组的ID; 
    -n:显示名字而非ID;一般与g一起使用:-ng

su命令

switch user

登录式切换:会通过重新读取目标用户的配置文件来重新初始化 
su - USERNAME 
su -l USERNAME

非登录式切换:不会读取目标用户的配置文件进行初始化 
su USERNAME

注意:管理员可无密码切换至其它任何用户;其它用户在切换用户时必须输入密码。

-c “COMMAND”:仅以指定用户的身份运行此处指定的命令 
例如:su - USERNAME -c “whoami”

passwd命令

  1. passwd:修改用户自己的密码;
  2. passwd USERNAME:修改指定用户的密码,但仅root有此权限;
passwd  [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays]
[-S] [--stdin] [username]

	-l,-u:锁定和解锁用户;
	-d:清除用户密码;
	-e DATE:过期期限,日期;
	-i DAYS:非活动期限,时间范围;
	-n DAYS:密码的最短使用期限;
	-x DAYS:密码的最长使用期限;
	-w DAYS:警告期限;
	--stdin:
		echo "PASSWORD" | passwd --stdin USERNAME

用户组

用户组分类

  1. 管理员组、普通用户组(系统用户组,登录用户组)
  2. 用户的基本组、用户附加组
  3. 私有组、公共组

用户组标识:group id,GID
通常使用16bits二进制数字表示(0-65535)
管理员的用户组标识:0
普通用户组:1-65535
系统用户组:1-499(Centos6)、1-999(Centos7)
登录用户组:500-60000(Centos6)、1000-60000(Centos7)

linux通过名称解析库“/etc/group”文件解析用户名与用户ID之间的对应关系。

查看用户组

/etc/group:组的信息库
group_name:passwd:GID:user_list

root:组名称
x:组密码的占位符
0:组id
user_list:该组用户的成员;以此组为附加组的用户的用户列表

用户在登录linux系统时,会对比password与之前保存在“/etc/shadow”、“/etc/gshadow”文件中的密码是否一致。

用户组操作

groupadd命令

添加组

groupadd [选项] group_name 
    -g GID:指定GID,默认是上一个组的GID+1 
    -r:创建系统组;

groupmod命令

修改组属性

groupmod [选项] GROUP 
    -g GID:修改GID 
    -n new_name:修改组名

groupadd命令

删除组

groupdel [选项] GROUP

gpasswd命令

gpasswd [选项] group
    -a USERNAME:向组中添加用户,作为附加组
    -d USERNAME:从组中删除用户
posted @ 2018-10-29 23:22  耳_东  阅读(105)  评论(0)    收藏  举报