Linux笔记
修改运行级别
临时切换运行级别:用init命令,例如进入级别3
[[email protected] ~]# init 3
永久切换,需要修改配置文件vi /etc/inittab 重启虚拟机后生效。
虚拟机导入
导入vmdk文件,只需要新建虚拟机,创建虚拟机硬盘的时候,选择已有虚拟机硬盘。
这个时候选择到之前的虚拟机硬盘VMDK文件,即可。
常用快捷键:
Ctrl+C:终止当前进程
Ctrl+Z:暂停当前进程并放置后台
常用命令:
whatis 获取解释,后面紧接需要解释的命令符,如下图
help 获取帮助,提示如何使用命令。
man 命令符 解释命令的具体含义
目录结构之一些重要的目录
Home(家)目录:/root,/home/{UserName}
普通用户可执行文件:/bin,/usr/bin,/usr/local/bin
系统管理员可执行文件:/sbin,/usr/sbin,/usr/local/sbin
配置文件目录:/etc
临时文件目录:/tmp
内核和启动文件:/boot
服务器数据:/var , /srv
系统信息:/proc,/sys
共享库:/lib,/usr/lib,/usr/local/lib
其它挂载点:/media,/mnt
注意:文件或目录名:<=255个字符、区分大小写、不能使用“/”
开关机
shutdown –h now 立马关机
shutdown –h 20:25系统会在今天20:25关机
shutdown –h +10十分钟后关机
shutdown –r now 系统立马重启
shutdown –r +10系统十分钟后重启
reboot 就是重启
halt 关闭系统,等同于shutdown –h now 和 poweroff
clear 清除屏幕
快捷键ctrl+L 清除屏幕
Linux运行级别
0:关机
1:单用户
2:无网络的多用户
3:命令行模式
4:未用
5:GUI(图形桌面模式)
6:重启
init 运行级别 切换运行级别。 此方法仅是临时修改,重启后失效。永久修改方式:如下图所示:
在图形桌面按下ctrl+alt+F2,可以进入命令行界面,按ctrl+alt+F7可以再切换回到桌面。
startx 进入图形模式。可通过点击桌面右上角的root→quit→log out退回到命令模式
su targetUserName 切换用户substitute user(管理员切用户不需要密码,用户切管理员需要输入自己的密码)
查看运行级别
1、who –r 显示当前运行级别以及系统当前时间
[[email protected] ~]# who -r
run-level 5 2016-12-31 15:24
2、runlevel :显示前一个(无则显示”N”)、当前运行级别
[[email protected] ~]# runlevel
N 5
网络配置
显示网络配置信息
ifconfig
绑定静态IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=“eth0”
BOOTPROTO=“static”
IPV6INIT=“yes”
NM_CONTROLLED=“yes”
ONBOOT=“yes”
IPADDR=192.168.157.130
NETMASK=255.255.255.0
GATEWAY=192.168.157.2
DNS1=192.168.157.2
TYPE=“Ethernet”
UUID=“9275843d-39ad-4b2f-8eb4-032f9565b3ab”
HWADDR=00:0C:29:59:28:96
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=“System eth0”
LAST_CONNECT=1536167030
配置详解:
DEVICE=“eth0”
网卡名称
NM_CONTROLLED=“yes”
network mamager的参数 ,是否可以由NNetwork Manager托管
HWADDR=
MAC地址
TYPE=Ethernet
类型
PREFIX=24
子网掩码24位
DEFROUTE=yes
就是default route,是否把这个eth设置为默认路由
ONBOOT=yes
设置为yes,开机自动启用网络连接
IPADDR=
IP地址
BOOTPROTO=none
设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务
NETMASK=255.255.255.0
子网掩码
DNS1=8.8.8.8
第一个dns服务器
BROADCAST
广播
UUID
唯一标识
TYPE=Ethernet
网络类型为:Ethernet
BRIDGE=
设置桥接网卡
GATEWAY=
设置网关
DNS2=8.8.4.4 #
第二个dns服务器
IPV6INIT=no
禁止IPV6
USERCTL=no
是否允许非root用户控制该设备,设置为no,只能用root用户更改
NAME=“System eth1”
这个就是个网络连接的名字
MASTER=bond1
指定主的名称
SLAVE
指定了该接口是一个接合界面的组件。
NETWORK
网络地址
ARPCHECK=yes
检测
PEERDNS
是否允许DHCP获得的DNS覆盖本地的DNS
PEERROUTES
是否从DHCP服务器获取用于定义接口的默认网关的信息的路由表条目
IPV6INIT
是否启用IPv6的接口。
IPV4_FAILURE_FATAL=yes
如果ipv4配置失败禁用设备
IPV6_FAILURE_FATAL=yes
如果ipv6配置失败禁用设备
磁盘操作
df -h 显示磁盘的相关信息 df=disk free
df (1p) - report free disk space
df (1) - report file system disk space usage
df:列出文件系统整体磁盘使用情况
a:列出所有文件系统
k:以KBytes的容量显示文件系统
m:以MBytes的容量显示文件系统
h:GBytes,MBytes,KBytes等格式自行显示
-i:以inode数量显示
du:文件系统的磁盘使用量或是目录使用量
a :列出所有的文件与目录容量
h :以人们较易读的容量格式(G/M)显示
s :列出总量而已,而不列出每个各别的目录占用容量
k :以 KBytes 列出容量显示
m :以 MBytes 列出容量显示
fdisk -l 列出分区表状况
lsblk 查看块设备
parted -l 显示分区情况
命令提示符详解
[[email protected] ~]# #/root
[[email protected] ~]$ #/home/mengxb
用户名@主机名 当前目录 #超级管理员权限 $普通权限
命令格式
命令 选项 参数 (三者之间要有空格,区分大小写)
command [-options] [args]
[args]:参数(多个参数之间用空格分隔)
文件管理
Linux文件简介
文件颜色的代表含义:
蓝色:目录
绿色:可执行文件
红色:压缩文件
蓝绿色:链接文件
白色:其他文件
黄色:设备文件,其中包括block,char,fifo.
根目录的简单介绍:
描述
/ 根目录
/bin 做为基础系统所需要的最基础的命令就是放在这里。比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令。
/boot Linux的内核及引导系统程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;启动装载文件存放位置,如kernels,initrd,grub。一般是一个独立的分区。
/dev 一些必要的设备,声卡、磁盘等。还有如 /dev/null. /dev/console /dev/zero /dev/full 等。
/etc 系统的配置文件存放地. 一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;
/etc/opt:/opt对应的配置文件
/etc/X11:Xwindows系统配置文件
/etc/xml:XML配置文件
……
/home 用户工作目录,和个人配置文件,如个人环境变量等,所有的账号分配一个工作目录。一般是一个独立的分区。
/lib 库文件存放地。bin和sbin需要的库文件。类似windows的DLL。
/media 可拆卸的媒介挂载点,如CD-ROMs、移动硬盘、U盘,系统默认会挂载到这里来。
/mnt 临时挂载文件系统。这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。
/opt 可选的应用程序包。
/proc 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。
/root Root用户的工作目录
/sbin 和bin类似,是一些可执行文件,不过不是所有用户都需要的,一般是系统管理所需要使用得到的。
/tmp 系统的临时文件,一般系统重启不会被保存。
/usr 包含了系统用户工具和程序。
/usr/bin:非必须的普通用户可执行命令
/usr/include:标准头文件
/usr/lib:/usr/bin/ 和 /usr/sbin/的库文件
/usr/sbin:非必须的可执行文件
/usr/src:内核源码
/usr/X11R6:X Window System, Version 11, Release 6.
/srv 该目录存放一些服务启动之后需要提取的数据
查看文件
ls [options] [file_or_dirs] 列出目录的内容,包括文件和子目录的名称list directory contents(需先用cd命令进入对应目录)
ls的选项和参数:
-a或–all 下所有文件和目录(包括隐藏的)。
-l 使用详细格式列表(ls -l可以简写为ll)
-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-ld 显示指定的目录或文件的详细信息
ll 命令查看文件详细列表
touch filename 创建空文件/修改文件(或目录)的时间戳
[[email protected] home]# cd /home/demo/
[[email protected] demo]# ls
abc xyz
[[email protected] demo]# touch hello
[[email protected] demo]# ls
abc hello xyz
[[email protected] demo]# cd abc
[[email protected] abc]# ll install.log
-rw-r–r--. 1 root root 41364 Jan 1 23:45 install.log
[[email protected] abc]# date
Sun Jan 1 23:59:55 PST 2017
[[email protected] abc]# touch install.log
[[email protected] abc]# ll install.log
-rw-r–r--. 1 root root 41364 Jan 2 00:00 install.log
rm –rf fileName -r递归删除 -f强制删除(需先切换到文件所在目录下)
rmdir directoryName 只能删除空目录
mv fileName targetDirectory 移动文件
mv oldName newName 重命名文件
参 数:
-b或–backup 若需覆盖文件,则覆盖前先行备份。
-f或–force 若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。
-i或–interactive 覆盖前先行询问用户。
-S<附加字尾>或
--suffix=<附加字尾> 与-b参数一并使用,可指定备份文件的所要附加的字尾。
-u或–update 在移动或更改文件名时,若目标文件已存在,且其文件日期比源文件新,则不覆盖目标文件。
-v或–verbose 执行时显示详细的信息。
-V=<方法>或
--version-control=<方法> 与-b参数一并使用,可指定备份的方法。
--help 显示帮助。
--version 显示版本信息。
rename keyName replaceName fileType批量修改文件名
rename 支持通配符:
? 可替代单个字符
- 可替代多个字符
[charset] 可替代charset集中的任意单个字符
如下例:touch file{1…100} 先批量创建文件(命名file1~file100)
正则表达式:
字母替换:
renmae “s/AA/aa/” * 把所有文件名中的AA替换成aa
修改文件后缀
rename “s//.html/.java/” * 把所有.html的文件改为.java文件。
批量添加文件后缀
rename “s/$//.txt/” * 把所有的文件名都以.txt结尾
批量删除文件
rename “s//.txt//” * 把所有以.txt结尾的文件名D的txt都删掉。
复制文件
cp (选项)directoryName targetDirectory 复制指定文件到目标目录
cp选项:
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
例:在命令前添加反斜杠“\”,可以实现——复制当前文件下的8000文件夹下redis.conf到8002文件夹,不跳出询问窗口“cp: overwrite `8001/redis.conf’? y”,无须输入“y”。
[[email protected] redis-3.2.11]# \cp 8000/redis.conf 8002/
在linux下拷贝的时候有时候会出现cp:omitting directory的错误 ,例如 cp:omitting directory “bbs” 说明bbs目录下面还有目录,不能直接拷贝
解决办法:递归拷贝 命令:cp -r bbs …/backup/bbs 解释:-r 这个options是递归的意思
目录操作
pwd 查看当前目录的绝对路径
mkdir directoryName 创建目录
mkdir参数:
-p创建新目录时,其父目录不存在时首先创建父目录
-m创建新目录的同时指定其权限
cd targetDirectory切换目录
用户管理
用户及UID
root用户:超级管理员,UID是0
系统用户:UID是1-499
自定义用户:UID从500开始
用户信息存储位置
账户信息存储于/etc/passwd
密码信息存储于/etc/shadow
创建用户的同时,默认还会为用户创建一个同名的组,组信息保存在/etc/group中
cat /etc/passwd查看所有的用户信息
cat /etc/passwd|grep 用户名 查看指定用户
cat /etc/group查看所有组信息
useradd [选项] userName 添加用户
参数说明[选项]:
-c comment 指定一段注释性描述
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号
id userName显示用户uid、gid、groups等信息
usermod [选项] userName 修改用户
passwd [选项] userName 新增/修改用户密码
可使用的选项:
• -l(lock) 锁定口令,即禁用账号。
• -u(unlock) 口令解锁。
• -d(HOME_DIR) 使账号无口令(删除密码)。(此命令仅管理员有效)
userdel userName 删除用户(但未删除home目录下对应名的文件夹)
userdel -r userName 删除用户及其所有文件夹
groupadd [选项] groupName 添加用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
添加用户组market,并指定标识号为8000
#groupadd –g 8000 market
将用户添加到附加组
#usermod –aG market tom (a:append G:附加组)
创建一个用户组与root用户组GID系统
groupadd –g 0 –o testroot
groupdel groupName 删除用户组
如果删除的用户组,已经被用户追加为附件组,对应的所有用户的该附件组会被撤销掉。
如果被删除的用户组,已经被用户指定为主组,则该用户组无法被删除。(可以理解为像Windows中文件被占用时不能被删除。)
groupmod [选项] groupName 修改用户组
newgrp root 这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组
cat查看文件(不具备编辑功能,而vim可以编辑)
[[email protected] ~]# cat /etc/passwd
gm❌802:0::/home/z:/bin/bash
tom❌803:803::/home/tom:/bin/bash
/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
lsattr 列出文件的隐藏属性。其语法格式为:
lsattr [ -RVadv ] [ files… ]
选项:
-R 递归显示目录下所有子目录和文件的属性
-V 显示lsattr程序的版本信息
-a 显示所有文件的属性信息,包括以.开头的文件
-d 显示目录的属性,而不是目录下的文件的属性
-v 显示文件的档案号码
权限管理
chmod 修改权限
例:修改用户winyar,用户组girl对upload文件夹内所有的文件和文件夹及子文件夹属性为可写可读可执行
chown -R 所有者用户名.组名 文件夹名称
chmod -R winyar.girl /upload
1.命令格式:
chown [选项]… [所有者][:[组]] 文件…
2.命令功能:
通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。
3.命令参数:
必要参数:
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-v 显示详细的处理信息
-deference 作用于符号链接的指向,而不是链接文件本身
权限对应的数字权限:
r = 4(读)
w = 2 (写)
x = 1 (执行)
如果你看到了一个文件的权限为:- rwx r-x r-- .txt
user group other
该文件的数字权限为:754,其含义为:用户拥有读、写、执行的权限,用户组拥有读、执行,其他人仅拥有读的权限。
-rw------- (600) 只有所有者才有读和写的权限
-rw-r–r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx–x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
修改文件可读写属性的方法
例如:把index.html 文件修改为可写可读可执行:
chmod 777 index.html
要修改目录下所有文件属性可写可读可执行:
chmod 777 .
把文件夹名称与后缀名用来代替就可以了。
比如:修改所有htm文件的属性:
chmod 777 .htm
修改文件夹属性的方法
把目录 /images/small 修改为可写可读可执行
chmod 777 /images/small
修改目录下所有的文件夹属性
chmod 777 *
把文件夹名称用来代替就可以了
要修改文件夹内所有的文件和文件夹及子文件夹属性为可写可读可执行
chmod -R 777 /upload
物理权限
chattr [ -RVf ] [ -v version ] [ mode ] files… 此命令可以用来锁定某个文件不能被修改。可以通过此命令来修改文件的物理属性从而提高系统的安全性。
注意:不能修改保护/ 、 /dev 、 /tmp 、 /var目录。
选项:
a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。
-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-v<版本编号>:设置文件或目录版本;
-V:显示指令执行过程;
+<属性>:开启文件或目录的该项属性;
-<属性>:关闭文件或目录的该项属性;
=<属性>:指定文件或目录的该项属性。
实例:
防止系统中的某个关键文件被修改
chattr +i /etc/fstab
将home目录下的文件和目录设置为不允许任何人修改
chattr -R +i /home
让某个文件只能追加内容,不能删除
chattr +a /root/install.log
mount 设备文件 挂载点 将设备挂载到某个目录
umount 设备文件或挂载点 取消挂载
免密操作
实现Xshell免密登录
1.生成**、公钥
2.发送公钥要本地127.0.0.1
[[email protected] ~]# ssh-****** 生成公钥/私钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 按两次Enter
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
d8:e0:0d:9f:bf:49:e8:a4:71:26:17:e4:61:1b:b0:fd [email protected]
The key’s randomart image is:
±-[ RSA 2048]----+
| . |
| + |
| + * |
| . @ * |
| o S E |
| + |
| o * o |
| X . o |
| . . o |
±----------------+
[[email protected] ~]# ll /root/.ssh/
total 16
-rw-------. 1 root root 816 Sep 6 10:43 authorized_keys
-rw-------. 1 root root 1675 Sep 6 11:12 id_rsa
-rw-r–r--. 1 root root 408 Sep 6 11:12 id_rsa.pub
-rw-r–r--. 1 root root 397 Sep 5 16:24 known_hosts
[[email protected] .ssh]# ssh-copy-id [email protected] 发送公钥到本机
The authenticity of host ‘127.0.0.1 (127.0.0.1)’ can’t be established.
RSA key fingerprint is 66:ba:84:4a:7c:ec:22:95:e3:c7:7e????????cf:aa:94:2d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘127.0.0.1’ (RSA) to the list of known hosts.
[email protected]’s password: 输入密码
Now try logging into the machine, with “ssh ‘[email protected]’”, and check in:
.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting
3.将公钥追加到”authorized_keys”文件(VMware Workstation无需登录,Xshell就直接连上了)
[[email protected] .ssh]# cat id_rsa.pub >> authorized_keys
实现远程免密登录
互发送公钥
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
远程操作
远程复制文件
scp 复制文件到远程服务器
1.命令格式:
scp [参数] [原路径] [目标路径]
2.命令功能:
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
3.命令参数:
-1 强制scp命令使用协议ssh1
-2 强制scp命令使用协议ssh2
-4 强制scp命令只使用IPv4寻址
-6 强制scp命令只使用IPv6寻址
-B 使用批处理模式(传输过程中不询问传输口令或短语)
-C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p 保留原文件的修改时间,访问时间和访问权限。
-q 不显示传输进度条。
-r 递归复制整个目录。
-v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file 从指定文件中读取传输时使用的**文件,此参数直接传递给ssh。
-l limit 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port 注意是大写的P, port是指定数据传输用到的端口号
-S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
4.使用实例:
scp命令的实际应用概述:
从本地服务器复制到远程服务器:
(1) 复制文件:
命令格式:
scp local_file [email protected]_ip:remote_folder
或者
scp local_file [email protected]_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
(2) 复制目录:
命令格式:
scp -r local_folder [email protected]_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
从远程服务器复制到本地服务器:
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
实例1:从远处复制文件到本地目录
命令:
scp [email protected]:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
实例1:从远处复制文件到本地目录
命令:
scp [email protected]:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
说明:
从192.168.120.204机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中
实例2:从远处复制到本地
命令:
[[email protected] software]# scp -r [email protected]:/home/software/apache-flume-1.6.0-bin ./
说明:
从192.168.120.204机器上的/opt/soft/中下载mongodb 目录到本地的/opt/soft/目录来。
实例3:上传本地文件到远程机器指定目录
命令:scp /opt/soft/nginx-0.5.38.tar.gz [email protected]:/opt/soft/scptest
说明:复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器192.168.120.204的opt/soft/scptest目录
实例4:上传本地目录到远程机器指定目录
命令:scp -r /opt/soft/mongodb [email protected]:/opt/soft/scptest
scp –r /home/demo [email protected]:/root 将本地的demo目录拷贝到hadoop01服务器/root目录下
远程登录
ssh 用户名@服务器IP 从本机中登录远程服务器(输入exit可退出远程登录)
如果访问重命名过的虚拟机?
1.修改host文件(互通的两台虚拟机都要改)
[[email protected] ~]# vim /etc/hosts
127.0.0.1 localhost
::1 localhost
192.168.157.130 hadoop01
192.168.157.131 hadoop02
192.168.157.132 hadoop03
2.生成**ssh-******
3.发送公钥到需要访问本机的服务器
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
4.远程访问
[[email protected] ~]# ssh [email protected]
5.退出远程连接(或用快捷键ctrl+D)
[[email protected] ~]# exit
sed命令
sed命令格式
sed [option] “[action]” [filename]
option:
h或—help 显示帮助。
n仅显示script处理后的结果。
V或—version 显示版本信息。
e :允许对输入数据应用多条sed命令进行编辑。
f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行,filename 内的 sed 动作。
s:字符串匹配/查找
i:编辑
d:删除
a:追加
c:替换
p:打印指定的输出行
sed “s/teduhadoop/hadoop/g” demo.txt
这里并不会改变源内容,只是将修改的内容输出至屏幕
参数说明:
s表示匹配/查找命令,
/teduhadoop/表示匹配teduhadoop
/hadoop/表示把匹配替换成hadoop
/g 表示一行上的替换所有的匹配
如果要写回文件可以使用重定向
sed “s/teduhadoop/hadoop/g” demo.txt > demo2.txt
如果想修改原文件内容使用参数-i (因为sed本身为逐行处理文件,所以这里会匹配文件中所有的行,都可以被修改。)
sed -i “s/teduhadoop/hadoop/g” demo.txt
只替换第三行
sed “3s/hello/hahaha/g” demo.txt
替换第1到第2行的文本。
sed “1,2s/hadoop/****/g” demo.txt
替换每一行的第一个l:
sed “s/l/L/1” demo.txt
这里是将每一行的第一个小写字母“l”换成大写的“L”
替换每一行的第二个l:
sed “s/l/L/2” demo.txt
这里是将每一行的第二个小写字母“l”换成大写的“L”。
替换第一行的第1个以及以后的o:
sed ‘1s/o/O/1g’ demo.txt
多个匹配
如果我们需要一次替换多个模式
第一种方式
sed “s/l/L/1;s/o/O/1g” demo.txt (1g和单写一个g没有区别)
第二种方式 (注:单引号和双引号无区别,都可以匹配)
sed -e ‘s/l/L/1’ -e ‘s/o/O/3g’ demo.txt
(-e 的方式容易混乱,建议新手使用第一种。-e的意思是以选项中指定的script来处理输入的文本文件。)
a动作和i动作
a动作就是append, i 动作就是insert,它们是用来
添加行的。
如: 使用n(数字) i 添加一行,在第一行添加
sed “1 i hi word” demo.txt
使用n(数字) a 追加一行, 在第2行后追加
sed ”2 a hi word" demo.txt
比较如下三种形式的区别:
[[email protected] software]# sed “1 a 31 Luthing” winyar.txt
29 winyar
31 Luthing
[[email protected] software]# cat winyar.txt
29 winyar
[[email protected] software]# sed “1 i 31 Luthing” winyar.txt
31 Luthing
29 winyar
[[email protected] software]# cat winyar.txt
29 winyar
[[email protected] software]# sed -i “1 a 31 Luthing” winyar.txt
[[email protected] software]# cat winyar.txt
29 winyar
31 Luthing
d动作删除匹配行 (注:删除整行)
sed “/hdfs/d” demo.txt
vim 编辑文件
编辑操作
进入输入模式命令
i插入命令 a附加命令 o打开命令 c修改命令
r取代命令 s替换命令 Esc退出命令
:q 退出编辑模式(没有改动的情况下)
:q 强制退出编辑模式
:w [filename] 保存文件,名为filename
:wq 保存退出
: command 临时切换到命令行模式下执行command命令。
光标的移动
向左移动光标:h
向下移动光标:j
向上移动光标:k
向右移动光标:l
翻页命令
Ctrl+F向前翻整页 Ctrl+U向前翻半页
Ctrl+B向后翻整页 Ctrl+D向后翻半页
行内快数跳转
^移动到本行行首
$移动到本行行尾
显示行号和取消行号(末行模式使用)
:set nu显示行号
:set nonu取消行号
在命令模式下,使用以下命令可以快速的在行间跳转
1G跳转到文件首行
G跳转到尾行
#G跳转到文件的#行
输入模式的操作
Home光标到行首
End 光标到行尾
Page Up和Page Down上下翻页
Delect删除光标位置的字符
删除操作(命令模式使用)
x删除光标处的单个字符
dd删除光标所在行
dw删除当前字符到单词尾包括空格的所有字符
#x例如3x删除光标处向右的三个字符
#dd例如3dd从当前行开始向下删除三行文本
撤销操作
u命令取消最近一次的操作,可以使用多次来恢复原有的操作
U取消所有操作
Ctrl+R可以恢复对使用u命令的操作
复制操作
yy命令复制当前整行的内容到vi缓冲区
yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词
y$复制光标所在位置到行尾内容到缓存区
y^复制光标所在位置到行首内容到缓存区
#yy例如:5yy就是复制5行
#yw例如:2yw就是复制两个单词
如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区。
查找和替换
vi的查找和替换功能主要在末行模式完成:
至上而下的查找
???? 要查找的字符串,其中/代表从光标所在位置起开始查找,例如: ???? work
至下而上的查找
:?要查找的字符串 例如: :? work
替换
????/old/new用new替换行中首次出现的old
: s/old/new/g 用new替换行中所有出现的old
:#,# s/old/new/g用new替换从第#行到第#行中出现的old
:%s/old/new/g用new替换整篇中出现的old
如果替换的范围较大时,在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:s/old/new/c 或s/old/new/gc
恢复文件
vi在编辑某一个文件时,会生成一个临时文件,这个文件以 . 开头并以 .swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,该文件不会删除,我们在下次编辑时可以选择一下命令处理:
O只读打开,不改变文件内容
E继续编辑文件,不恢复.swp文件保存的内容
R将恢复上次编辑以后未保存文件内容
Q退出vi
D删除.swp文件
或者使用vi -r 文件名来恢复未保存的内容
echo 写入内容,输出到指定文件(文件不存在时自动创建)
[[email protected] tmp]# echo ‘hello BigData’ > 1805.txt
wget下载远程单个文件
[[email protected] ~]# wget http://www.tedu.cn
使用wget -O下载并以不同的文件名保存
wget -O newname.new http://www.tedu.cn
使用wget --limit-rate限速下载(单位,byte/秒)
wget --limit-rate=300k http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
使用wget -c断点续传
wget -c http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.25.tar.bz2
使用wget -b后台下载
wget -b http://mirrors.hust.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
wget http://mirrors.hust.edu.cn/apache//httpd/mod_fcgid/mod_fcgid-2.3.9.tar.gz
使用wget -i下载多个文件
wget -i urlfile.txt
urlfile.txt内容为
http://www.tedu.cn
http://big.tedu.cn/index.html
进程查看命令
ps(process status) :将某个时间点的程序运作情况截取下来
ps (1p) - report process status
ps (1) - report a snapshot of the current processes
选项和参数
a :(all)(和输入终端(terminal) 关联的所有 process,通常与x一起使用,
列出完整信息。
x :后台进程,通常与 a 这个参数一起使用,可列出较完整信息
u :有效使用者 (effective user) 相关的 process
l:仅查看自己的bash相关的进程
-e 此参数的效果和指定"A"参数相同。
-f 显示UID,PPIP,C与STIME栏位。
ps -aux 观察系统所有的程序数据 (常用)
常用命令:显示与redis相关的所有进程。
[[email protected] redis-3.2.11]# ps -ef|grep redis
ps axjf 可以用类似于树状的形式显示
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19364 1536 ? Ss 18:18 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 18:18 0:00 [kthreadd]
root 1655 0.0 0.0 4064 548 tty2 Ss+ 18:18 0:00 /sbin/mingetty /dev/tty2
root 1657 0.0 0.0 4064 548 tty3 Ss+ 18:18 0:00 /sbin/mingetty /dev/tty3
root 1676 0.0 0.3 577708 3192 ? Sl 18:18 0:00 /usr/sbin/console-kit-daemon
各选项的含义
TTY :该 process 是在哪个终端机上面运作,若与终端机无关则显示 ?, 另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 (pts表示虚拟终端,例如pts/1 pts/2 等)
STAT:该进程目前的状态,状态显示与ps -l 的 S 旗标相同 (R/S/D/T/Z)
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际命令为何? 或理解为该进程是哪一个程序/命令启动的
STAT进程状态:
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
s 包含子进程
- 位于后台的进程组
top:动态观察进程的变化
ps是截取一个时间点的进程状态,而top则可以持续观察进程运行的状态
选项与参数:
-d :后面可以接秒数,就是整个程序画面更新的秒数。默认5秒;
-b :以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流 重导向来将批次的结果输出成为档案;
-n:(Number)与 -b 搭配,意义是需要进行几次 top 的输出结果;
-p :指定某些个 PID 来进行观察监测而已;
在 top 执行过程当中可以使用的按键指令:
? :显示在 top 当中可以输入的按键指令
P :以CPU的使用资源排序显示
M :以Memory的使用资源排序显示
N :以PID来排序
T :由该Process使用的CPU时间累积 (TIME+) 排序
k :给予某个PID后kill该进程(内核2.6后失效)
q :离开top软件的按键 。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7 root 20 0 0 0 0 S 0.5 0.0 0:01.85 events/0
1 root 20 0 19364 1536 1228 S 0.0 0.2 0:00.98 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
PID :每个process的ID; USER:该process所属的使用者; PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;
NI :Nice 的简写,与 Priority(优先级) 有关,也是越小越早被执行;
%CPU:CPU 的使用率%MEM:内存的使用率;
TIME+:CPU 使用时间的累加; COMMAND 进程名称
例:将top信息进行3次并输出到文件中
[[email protected] ~]# top -b -n 3 >> /tmp/top.txt
pstree 查看进程树
选项与参数:
-A :各程序树之间的连接以 ASCII 字符来连接;
-U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下 可能会有乱码; UTF-8
-p :并同时列出每个 process 的 PID;
-u :并同时列出每个 process 的所属账号名称(用于显示进程属于谁)。
系统进程树同时显示PID与user(root身份来执行,属于 root的程序不会显示用户名或着理解为当前用户执行的pstree,结果中不会显示当前用户)。
[[email protected] tmp]# pstree -Aup
查看端口
1、lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000
lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lwfs 22065 root 6u IPv4 4395053 0t0 TCP *:irdmi (LISTEN)
可以看到8000端口已经被轻量级文件系统转发服务lwfs占用
2、netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,netstat -tunlp |grep 8000
netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 4814/rpcbind
tcp 0 0 0.0.0.0:5908 0.0.0.0:* LISTEN 25492/qemu-kvm
tcp 0 0 0.0.0.0:6996 0.0.0.0:* LISTEN 22065/lwfs
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 38296/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 5278/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 5013/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 5962/master
tcp 0 0 0.0.0.0:8666 0.0.0.0:* LISTEN 44868/lwfs
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 22065/lwfs
netstat -tunlp | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 22065/lwfs
说明一下几个参数的含义:
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
Kill发送信号(并不只是杀进程)
–选项与参数:
-l :这个是 L 的小写,列出目前 kill 能够使用的信号 (signal) 有哪些? signal :向进程发送的信号,指示对它进行不同操作。用 man 7 signal 可知:
-15:以正常的程序方式终止一个进程
-9 :立刻强制终止一个进程 ( 不能强制结束系统级别的进程)
-2 :代表由键盘输入 [ctrl]-c 同样的动作;
-1 :对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程
kill -1 1859 重新加载并启动进程PID:1859(重启后PID发生变化)
强制中止以su启动的进程:
[[email protected] tmp]# killall -9 su
后台进程的终止:
方法一:
通过jobs命令查看job号(假设为num),然后执行kill %num
方法二:
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:
ctrl+c
free [-b|-k|-m|-g] [-t]:观察内存(memory)使用情况
选项与参数:
-b :直接输入 free 时,显示的单位是 bytes(默认,可不写)
-m (Mbytes)
-k (Kbytes)
-g (Gbytes)
-t :在输出的最终结果时,显示物理内存与 swap 的总量。
[[email protected] ~]# free
total used free shared buffers cached
Mem: 1004768 177312 827456 180 10424 52888
-/+ buffers/cache: 114000 890768
Swap: 2097148 0 2097148
free命令显示选项解析
Mem一行显示的是物理内存的量
Swap,虚拟内存的量
total是总量,used是已被使用的量,free则是剩余可用的量
shared,共享内存
buffers,将写磁盘的内容
cached,已写磁盘或者已从磁盘读出的内容 。
uname:查阅系统与核心相关信息
uname选项与参数:
-a :所有系统相关的信息,包括以下的数据都会被列出来;
-s :系统内核名称
-r :内核版本
-m :本系统的硬件名称,例如 i686或x86_64 等;
-p :CPU 的类型,与 -m 类似,是显示的是CPU的类型;
-i :硬件的平台(ix86)
[[email protected] ~]# uname -a
Linux localhost.localdomain 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[[email protected] ~]# uname -s
Linux
[[email protected] ~]# uname -r
2.6.32-573.el6.x86_64
[[email protected] ~]# uname -m
x86_64
[[email protected] ~]# uname -p
x86_64
[[email protected] ~]# uname -i
x86_64
uptime:观察系统启动时间与工作负载
[[email protected] ~]# uptime
19:52:52 up 1:34, 2 users, load average: 0.00, 0.00, 0.00
开机时间 使用时长 用户数 负载均衡:(对应时间段)1,5,15分钟
netstat :网络监控
netstat选项与参数:
-a :将目前系统上所有的已经连接、监听、Socket数据都列出来
-t :列出tcp网络包的信息
-u :列出udp网络包的信息
-n :以端口(port number)方式来显示(不以程序的服务名称)
-l :列出目前正在监听(listen)的服务;
-p :列出该网络服务的进程id(PID)
[[email protected] ~]# netstat -atp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ssh : LISTEN 1505/sshd
tcp 0 0 localhost:smtp : LISTEN 1584/master
tcp 0 0 192.168.157.128:ssh 192.168.157.1:59549 ESTABLISHED 1952/sshd
tcp 0 0 *:ssh : LISTEN 1505/sshd
tcp 0 0 localhost:smtp : LISTEN 1584/master
命令输出显示解析:
Proto :网络的封包协议,主要分为TCP与UDP封包;
Recv-Q:接收消息缓存区,远端进程发送而来,尚未被当前进程处理 的信息数,单位:字节;
Send-Q:发送消息缓存区,向远端进程发送,尚未被其接收的消息数 ,单位:字节;
Local Address: 本地地址和端口号(IP:port) ;
Foreign Address:本端网络地址(IP:port)进行通信的远程进程的网络地址(IP:port)(远程通信主机);
State :网络连接状态,主要有建立(ESTABLISED)及监听(LISTEN);
PID/Program name:显示 此服务的PID号码以及程序的命令名称
目前系统上已在监听的网络链接以及PID
vmstat :侦测系统资源变化, CPU/内存/磁盘输入输出状态
[[email protected] ~]# vmstat 1 4
procs -----------memory---------- —swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 826480 10840 53068 0 0 10 1 11 12 0 0 100 0 0
0 0 0 826432 10840 53068 0 0 0 0 17 12 0 0 100 0 0
0 0 0 826432 10840 53068 0 0 0 0 12 15 0 0 100 0 0
0 0 0 826432 10840 53068 0 0 0 0 18 17 0 1 99 0 0
vmstat命令选项显示解析
procs(进程字段 )
r :等待运行的进程数量;
b:不可被唤醒的进程数量
这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)
memory (内存字段)
swpd:虚拟内存被使用的容量;
free:未被使用的内存容量;
buff/cache:用于缓冲的内存;
swap(交换分区字段) (重点记忆下si和so)
si:每秒从交换分区写到内存的数据量大小,由磁盘->内存;
so:每秒写入交换分区的内存数据量大小,由内存->磁盘。
如果si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差
io(磁盘读写字段)
bi:从块设备读入数据的总量(读磁盘)(每秒kb);
bo:从块设备写入数据的总量(写磁盘)(每秒kb) 。
如果这部份的值越高,代表系统的I/O非常忙碌
system(系统字段 )
in:每秒被中断的进程次数;
cs:每秒钟进行的事件切换次数。
这两个数值越大,代表系统与接口设备的通信非常频繁
CPU (cpu字段)
us:(user)非内核态的(用户进程) CPU 使用情况;
sy:(system)内核态所使用(系统进程)的 CPU 情况;
id: (idle )闲置的CPU情况;
wa: (wait)等待I/O所耗费的CPU;
st:被虚拟机(virtual machine)所盗用的CPU(2.6.11 以后才支持)
防火墙的设置
service iptables start 防火墙的启动
service iptables status 查看防火墙的状态
service iptables stop 防火墙的关闭
service iptables restart 防火墙的的重启
Tip:以上状态的修改,在服务器重启后失效。
永久关闭:
chkconfig iptables off
永久开启:
chkconfig iptables on
cp file1 file2 & file1这个文件复制为file2,同时将这个拷贝进程放到后台执行。
Ctrl+z和&有什么区别?
Ctrl+z 将前台程序放置后台——状态为暂停。
在执行的命令后面追加 “&”——状态为后台运行。
如何终止一个后台进程?
方法一:先查PID,再用kill命令执行,记得按Enter键。如下图:
kill PID
方法二:
kill %NO
[[email protected] redis-3.2.11]# jobs
[1]- Running redis-server &
[2]+ Running redis-server 8000/redis.conf &
[[email protected] redis-3.2.11]# kill %1
[[email protected] redis-3.2.11]# jobs
[2]+ Running redis-server 8000/redis.conf &
top 查看进程状态
jobs 查看后台执行的命令
jobs选项和参数:
-l :除了列出 job number 与指令串之外,同时列出 PID 的号码;
-p:仅任务对应的显示进程号;
-n:显示任务状态的变化;
-r :仅列出正在后台 run 的任务;
-s :仅列出正在后台暂停 (stop) 的任务。
jobs命令执行的结果,+表示是一个当前的作业,减号表示是一个当前作业之后的一个作业。
fg jobnumber 将后台拿到前台执行
[[email protected] ~]# jobs -s
1+ Stopped vim install.log
[[email protected] ~]# fg 1
bg jobnumber 将后台任务变成执行状态
[[email protected] ~]# bg 1
[[email protected] ~]# jobs -l
[1]+ 2071 Stopped (tty output) vim install.log
发现任务号1仍然是Stopped的,原因是vim没有前端( tty output ),所以无法在后台running,但此时如果执行fg的话会优先打开1(vim install)
压缩文件
gzip 压缩文件
gzip选项与参数:
-c :将压缩的数据输出到标准输出(stdout)上
-d :解压缩
-t :可以用来检验一个压缩文件的一致性,看看文件有无错误
-v :可以显示出原文件/压缩文件的压缩比等信息
-(1,2,…,9):压缩等级,1最快,但是压缩比最差;9最慢,但是压缩比最好,默认是6。
-l :查看压缩文件的压缩比: gzip –l *.gz
压缩文件install.log输出到命名为newzip.gz的文件,显示压缩比信息。
[[email protected] tmp]# gzip -cv install.log >newzip.gz
bzip压缩文件
bzip2选项与参数如下:
-c :将压缩的过程产生的数据输出到标准输出(stdout)
-d :解压缩的参数
-k :保留源文件,而不会删除原始的文件
-f :强制压缩
-z :压缩的参数(有无均可)
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-(1,2,…,9) :与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快
tar 打包压缩和解压文件
tar选项与参数:
-c :建立打包文件,
-t :查看打包文件的内容含有哪些文件
-x :解打包或解压缩的功能,可以搭配-C(大写)在特定到特定目录解开
-j :通过bzip2的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2
-z :通过gzip的支持进行压缩/解压缩:此时文件最好为 *.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename:-f 后面跟处理后文件的全名称(路径+文件名+后缀名)
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个 选项
-p :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
–exclude=FILE:在压缩的过程中,不要将那些文件打包
注意 -c, -t, -x 不可同时出现在一串指令列中
rpm -ivh package_name 红帽安装管理 RedHat Package Manager
rpm选项与参数:
-i :install的意思,显示套件的相关信息
-h :显示指令执行过程。 (进度条)
-a 查询所有套件。
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+ 设置包装套件的完成阶段,并指定套件档的文件名称。
-c 只列出组态配置文件,本参数需配合"-l"参数使用。
-d 只列出文本文件,本参数需配合"-l"参数使用。
-e<套件档>或–erase<套件档> 删除指定的套件。
-f<文件>+ 查询拥有指定文件的套件。
-h或–hash 套件安装时列出标记。
-i<套件档>或–install<套件档> 安装指定的套件档。
-l 显示套件的文件列表。
-p<套件档>+ 查询指定的RPM套件档。
-q 使用询问模式,当遇到任何问题时,rpm指令会先询问用户。
-R 显示套件的关联性信息。
-s 显示文件状态,本参数需配合"-l"参数使用。
-U<套件档>或–upgrade<套件档> 升级指定的套件档。
-v 显示指令执行过程。
-vv 详细显示指令执行过程,便于排错。
-V :后面加软件名称,若该软件安装之后被改动过,会列出被修改过的 文件。
-Va :列出目前系统上面rpm安装的所有包中被修改过的文件。
-Vp :后面加的是rpm文件名,列出rpm包中的文件在当前系统中是否修改。
-Vf :列出某个文件(直接列出软件包安装之后的文件名)是否被改动过。
rpm -Uvh <package_name> 升级软件(不管有没有都安装最新版,如果软件未安装则会先安装)
rpm -Fvh <pacakge_name> (只有安装才更新)
rpm -q <pacakge_name> 查询指定软件是否有安装
查询可选参数:
-qa :列出所有的,已经安装在本机Linux系统上面的所有软件名称
-qi :列出该软件的详细信息
-ql :列出该软件所有的文件与目录所在完整文件名
-qc :列出该软件的所有配置文件
-qd :列出该软件的所有说明文件
-qR :列出和该软件有关的相依软件所含的文件
-qf :由后面接的文件名,找出该文件属于哪一个已安装的软件
案例1:查找所有系统已经安装的包,并只查看前3个 。
[[email protected] ~]# rpm -qa |head -n 3
案例2:查询lrzsz所包含的文件及目录。(lrzsz是lrzsz-0.12.21-15-mdv2011.0.x86_64.rpm安装后的文件名)
[[email protected] software]# rpm -ql lrzsz
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.xz
/usr/share/man/man1/sz.1.xz
案例3:列出jdk1.8.0_111的配置文件
[[email protected] software]# rpm -qc jdk1.8.0_111
/usr/java/jdk1.8.0_111/.java/.systemPrefs/.system.lock
/usr/java/jdk1.8.0_111/.java/.systemPrefs/.systemRootModFile
/usr/java/jdk1.8.0_111/.java/init.d/jexec
/usr/java/jdk1.8.0_111/jre/lib/charsets.pack
/usr/java/jdk1.8.0_111/jre/lib/deploy.pack
/usr/java/jdk1.8.0_111/jre/lib/ext/localedata.pack
/usr/java/jdk1.8.0_111/jre/lib/javaws.pack
/usr/java/jdk1.8.0_111/jre/lib/jsse.pack
/usr/java/jdk1.8.0_111/jre/lib/plugin.pack
/usr/java/jdk1.8.0_111/jre/lib/rt.pack
/usr/java/jdk1.8.0_111/lib/tools.pack
[[email protected] soft]#rz 弹出窗口,选择需要传输的文件,默认放到当前目录下(需要插件的支持lrzsz-0.12.21-15-mdv2011.0.x86_64.rpm)
yum 参数 通过分析RPM的标头资料后,根据各软件的相关性制作出属 性相依时的解决方案,然后可以自动处理软件的依赖问题,以解决软 件安装、移除、升级中遇到的繁琐操作的问题
search :查询某个软件名称或者是描述的关键字
list :列出目前yum所管理的所有的软件名称与版本,有点类似 rpm-qa
info :同上,格式不太一样,不过有点类似 rpm -qai 的执行结果
install :后面接要安装的软件
update :后面接要升级的软件,若要整个系统都升级,就直接update即可
remove:删除某个软件时,依赖于该软件并已经安装到系统中的 其它软件或者包,会被一并删除(rpm方式删除某个包时,如果依赖于该包的其它包之前也被安装到系统中,删除不会成功,需要先手动删除那些包. )
案例:查找jdk相关软件包
[[email protected] yum.repos.d]# yum search jdk
shell命令
变量读取
• 通过echo命令
命令格式 echo $variable或echo ${LOGNAME}
env观察环境变量
set(设置)环境变量
如何将普通的变量变为环境变量?
一:export 变量名=值
export JAVA_HOME =/etc/java1.8/
略~~~~
二:变量名1=值1
变量名2=值2
export 变量名1 变量名2
局部变量的设置规则
1、变量与变量内容以一个等号“=”连接(name=value)
[[email protected] ~]#name=tedu
2、等号两边不能直接接空格符;
3、变量名称只能是英文字母、数字、下划线,但开头不能是数字;
4、变量内容若有空格符可使用双引号或单引号将变量内容结合起来;
|-双引号中的特殊字符保有原本的特性:例如:[] #var=“lang is $LANG”,则#echo $var 的结果为 lang is en_US.UTF-8
|-单引号中的特殊字符仅为一般字符(纯文本)
例如:[] #var=‘lang is $LANG’,则#echo $var为lang is KaTeX parse error: Expected 'EOF', got '\”' at position 16: LANG
5、可用转义字符“\̲”̲将特殊符号(如、\、!等)变为一般字符;
6、变量内容由其他命令提供,使用KaTeX parse error: Expected 'EOF', got '#' at position 149: …[email protected] ~]#̲ cmd=`date +%F`…(date +%F) 推荐方式
[[email protected] ~]# echo $cmd
案例:比较单引号双引号
[[email protected] software]# a=192.168.1.1
[[email protected] software]# echo KaTeX parse error: Expected 'EOF', got '#' at position 40: …lhost software]#̲ a=192.168.1.1-a
[[email protected] software]# echo KaTeX parse error: Expected 'EOF', got '#' at position 52: …lhost software]#̲ b="192.168.1.1…a"
[[email protected] software]# echo KaTeX parse error: Expected 'EOF', got '#' at position 64: …lhost software]#̲ c='192.168.1.1…a’
[[email protected] software]# echo a
变量总结
1、全局变量:一般全大写,如环境变量
2、局部变量:
脚本函数中的局部变量通常使用local修饰:local I
表示i变量的有效范围在该函数内部有效。
数据重定向
标准输入(stdin):编号为0
标准输出(stdout):编号为1
标准错误输出(stderr):编号为2
查看命令执行结果(echo $?),例如上页ppt中提到的案例可以查看到0和2的结果。
返回结果是0代表脚本执行完成后正常退出。
1>:以覆盖的方法,将正确的数据输出到文件;
1>>:以累加的方法,将正确的数据输出到文件;
2>:以覆盖的方法,将错误输出的数据输出到文件;
2>>:以累加的方法,将错误输出的数据输出到文件;
[[email protected] ~]# ll 1>ls.log
[[email protected] ~]# cat ls.log
总用量 76
-rw-r–r--. 1 root root 21 9月 5 16:57 2.txt
-rw-------. 1 root root 1032 9月 1 10:49 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 9月 4 15:18 cdrom
drwxr-xr-x. 3 root root 4096 9月 6 14:29 haha
-rw-r–r--. 1 root root 763 9月 5 17:27 index.html
-rw-r–r--. 1 root root 47 9月 5 20:33 install.log
-rw-r–r--. 1 root root 6240 9月 1 10:47 install.log.syslog
-rw-r–r--. 1 root root 0 9月 7 08:57 ls.log
-rw-r–r--. 1 root root 9962 9月 4 14:32 netstat_a.log
-rw-r–r--. 1 root root 9962 9月 4 14:32 netstat_b.log
-rw-r–r--. 1 root root 15 9月 5 20:59 newfile
drwxr-xr-x. 2 root root 4096 9月 4 16:26 root
drwxr-xr-x. 4 root root 4096 9月 4 18:56 test
drwxr-xr-x. 2 root root 4096 9月 5 19:11 tmp
drwxr-xr-x. 2 root root 4096 9月 3 17:08 wget
命令执行判断
?有两种:与 && 或 ||
&&:
cmd1 && cmd2 若cmd1运行完毕且正确运行(?!=0),则cmd2不运行;
|| :
cmd1 || cmd2 若cmd1进行完毕且正确运行(?!=0),则开始运行cmd2;
亦即不管与还是或,运行正确回传值均为0,不同的是与的时候运行cmd2,而或的时候不运行cmd2;
若运行错误,则回传值均为非0,但与的时候不运行cmd2,而或的时候运行cmd2。
管道命令
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边 命令的输出就会作为管道符右边命令的输入。
连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推
find命令
find [path…] [-option] 在一个目录(及子目录)中搜索文件,可以指定一些匹配条件 ,如按文件名、文件类型、用户甚至是时间戳查找文件
find选项和参数:
name :按照文件名查找文件。
案例:查找根目录下任何扩展名为“.java”的文件
[[email protected] ~]# find / -name “*.java”
/usr/java/jdk1.8.0_111/.java
/etc/.java
path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
print:将匹配的文件输出到标准输出 (可以不写)
size:匹配文件大小。
例:find ./ -size 0 显示文件大小为零的文件
perm 按照文件权限来查找文件。
例: find . -perm 755 –print 在当前目录下查找文件权限位为755的 文件,即文件所有者可以读、写、执行,组与其他用户可以读、 执行的文件
user按照文件所有者来查找文件。
例: find ~ -user root –print 在KaTeX parse error: Expected 'EOF', got '' at position 23: …查找文件属主为root的文件 ̲
group 按照文件所属… 表示最后一位字符)
源文件内容:
cat demo2
192.168.1.1
192.168.1.3.4
192.168.1.7.8.9
192.168.1.4.5.6.7
完成:
1
4
7
9
[[email protected] sed]# sort demo2 | grep -o .$
1
4
7
9
cut命令
cut [-option] filename 剪切文件
[option]选项:
-b 字节
-c 字符
-f 提取第几列
-d 按指定分隔符分割列
案例1:排序并截取文件demo的第11个字符
[[email protected] sed]# sort demo | cut -b 11
1
3
4
5
案例2:截取demo文件第九个字节之前的内容
[[email protected] ~]# cut -b -9 /home/sed/demo
192.168.1
192.168.1
192.168.1
192.168.1
案例3:截取demo文件第九个字节之后的内容
[[email protected] ~]# cut -b 9- /home/sed/demo
1.1
1.3
1.5
1.4
案例4:以点为分隔符获取第一个字段
[[email protected] ~]# cut -d . -f 1 /home/sed/demo
192
192
192
192
history 显示全部历史
history 5 显示执行过的上5条命令
[[email protected] sed]# history 5
491 sort demo2 | grep .$
492 sort demo2 | grep -o .$
493 vim demo2
494 sort demo2 | grep -o .$
495 history 5
使用上下箭头键也可以查看上一条跟下一条命令。
!! 运行上一条命令
!88 运行第88条命令
!88 /test 运行第88条命令并在命令后面加上/test
!ls 运行上一个ls命令
!ls:s/CF/l 运行上一个ls命令,其中把CF替换成l
fc 编辑并运行上一个历史命令
fc 66 编辑并运行第66个历史命令
fc -e /usr/bin/vim 66 使用vim编辑第66个命令并运行
ctrl+r 搜索历史中的字符串
history –c 清空历史命令(慎用)
shell script
注意事项
1.命令的执行是从上而下、从左而右执行;
2.命令、选项与参数间的多个空格会被忽略;
3.空白行也被忽略掉,tab被视为空格;
4.如果读取一个Enter符号(CR),就尝试开始执行该行命令;
5.#后面内容为注释
执行脚本的三种方式
1、直接执行(shell.sh文件必须具备可读与可执行 (rx) 的权限):
绝对路径:运行/home/shell.sh 来执行指令
相对路径:cd到/home/ ,使用 ./shell.sh 执行
Tip: 如果想使用直接执行的方式,需要先为/home/shell.sh文件追加可执行的权限。
[[email protected] home]# chmod 755 shell.sh
2、source执行 source shell.sh
当我修改了/etc/profile文件,我想让它立刻生效,而不用重新登录;这时就想到用source命令,如:source /etc/profile
不推荐使用,注:exit 0 如果使用source 执行的话会导致脚本执行结束后退出用户登录
3、bash执行(推荐使用)
bash shell.sh
sh [-nvx] shell.sh
选项与参数:
-n :不执行script,仅查询语法的问题!!
-v :在执行script前,先将scripts的内容输出到屏幕上
-x :将使用到的script内容显示到屏幕上
脚本的书写
read -p “提示信息” 变量名
注意:引号和等号两边不能有空格。
#!/bin/bash
案例:两个数字相乘的交互式脚本
read -p “第一个数字:” num1
read -p “第二个数字:” num2
total=num1*KaTeX parse error: Expected 'EOF', got '\n' at position 17: …um2))
echo -e "\̲n̲两个数字的结果是:total"
exit 0
test判断命令
使用范例:test -e demo.txt
判断某个文件类型
-e 该文件是否存在? !!!
-f 该文件名是否存在且为文件(file)? !!!
-d 该文件名是否存在且为目录(directory)? !!!
-b 该文件是否存在且为一个 block device 装置?
-c 该文件是否存在且为一个 character device 装置?
-S 该文件是否存在且为一个 Socket 文件?
-p 该文件是否存在且为一个 FIFO (pipe) 文件?
-L 该文件是否存在且为一个链接文件?
判断文件权限
-r 检查该文件是否存在且具有可读的权限?
-w 检查该文件是否存在且具有可写的权限?
-x 检查该文件是否存在且具有可执行的权限?
-s 检查该文件是否存在且为非空文件?
-u 检查该文件名是否存在且具有SUID的属性?
-g 检查该文件名是否存在且具有SGID的属性?
判断字符串
test -z string 判断字符串是否为空?若string为空字符串,则为true
test -n string 判断字符串是否非空?若string为空字符串,则为false
test str1 = str2 或== 判断str1是否等于str2,若相等,则返回 true
test str1 != str2 判断str1是否不等于str2,若相等,则返回 false
两个文件之间比较
-nt 判断file1 是否比 file2 新
-ot 判断file1 是否比 file2 旧
-ef 判断两个文件是否为同一个文件
判断符号
[ ] 脚本范例 (注意[]中的内容要与它保持一个空格)
==和!=用于比较字符串;
整数比较只能使用-eq,-gt,-ge,-lt,-le这种形式
[ ]中的逻辑与和逻辑或使用-a 和-o 表示
&&、||、<和> 操作符如果出现在[ ]结构中的话,会报错。
#!/bin/bash
#this shell show user’s choice
read -p “Please input (Y/N):” yn
[ “yn” == “y” ]&&echo “choice Yes”&&exit 0
[ “yn” == “n” ]&&echo “choice No”&&exit 0
shell script参数
比如,ls -al install.log 其中-al就是shell脚本参数,那么我们自己写的脚本参数该如何使用呢
/path/to/scriptname arg1 arg2 arg3 arg4
$0 $1 $2 $3 $4
$0:代表脚本程序本身
$1,$2,…:代表后面第一个参数,第二个参数,等等
$# :代表后接的参数个数,以上边为例,这里显示为4;
$*(强调整体) //所有参数列表,代表"$1 $2 … $n",即当成一个整体输出,每一个变量参数之间以空格隔开。
[email protected](强调独立) //所有参数列表,代表"$1" “n” ,即每一个变量参数是独立的 。也是全部输出。[email protected]每一个参数都是独立的,所以在进行迭代时,也是单独输出的。
案例如下:
[[email protected] shell]# vim tedu.sh
#!/bin/bash
脚本script name:tedu.sh
for i in “$*”;do
echo @";do
echo $i
done
[[email protected] shell]# bash tedu.sh 1 2 3 4 命令后面紧接了4个参数1 2 3 4
1 2 3 4
1
2
3
4
多分支条件判断语句
if [ ] then…elif [ ] then… else…if
#!/bin/bash
#compare the size of the two numbers
read -p “please input two numbers:” a b
if [ $a -gt $b ]
then
echo “yes b”
exit 0
elif [ $a -eq $b ];then
echo “yes b”
exit 0
else
echo “yes b”
exit 0
fi
注意:
① 定义变量时, =号的两边不可以留空格
② if语句 [ 符号的两边都要留空格
③ 字符串比较, =两边要留空格
④ if 和then 在同一行要加英文格式的分号;
case结构条件句
case $变量名称 in “值1”)
程序段1
;;
“值2”)
程序段2
;;
*)
exit 1
;;
esac
案例:判断用户输入的是哪个数,1-9显示输入的数字,输入1的时候提示1,输入2 时候提示2,[3-9]的时候是提示输入的3-9中的数字,大于9显示please input number less nine !
#!/bin/bash
#case demo
read -p “please input a number:” num
case num"
;;
*)
echo “please input number less nine”
;;
esac
函数定义语句
function name() {
命令
}
或者:
(function)name() {
命令
}
案例;定义一个输出的函数,执行脚本时传递一个参数one/two/three,使用case判断语句调用函数Mon/Tue/Wed,并调用定义好的函数。
[[email protected] shell]# vim function.sh
#!/bin/bash
function print(){
echo “today is :$1”
}
case $1 in “one”)
print “Mon”
;;
“two”)
print “Tue”
;;
“three”)
print “Wed”
;;
*)
echo “you must input one/two/three”
exit 1
esac
[[email protected] shell]# sh function.sh two
today is :Tue
循环语句
while循环语句
while [ condition ] ;do
命令
done
或者
while [ condition ]
do
命令
done
案例:使用while循环,编写shell脚本,计算1+2+3+…+100的和并输出
[[email protected] shell]# vim while2.sh
#!/bin/bash
sum=0
i=1
while [ KaTeX parse error: Expected 'EOF', got '#' at position 14: i -le 100 ] #̲while和[之间要加一个空格…((i))
i=i+1)) #运算结果为变量赋值可以使用$(( … ))
done
echo "the result of ‘1+2+3+…+100’ is $sum"
until循环语句
until [ condition ];do
命令
done
或者
until [ condition ]
do
命令
done
与while循环相反,while循环是条件为”假”时结束,until循环条件为”真”时结束。
简单的说,while循环的条件满足才会执行,until循环的条件满足就会终止
for循环语句
for variable in scope do…done循环
案例1:直接列出变量列表所有元素。有三种实现方法
第一种:
#!/bin/sh
for num in 5 4 3 2 1 #=>需要空格隔开
do
echo $num
done
第二种:
[[email protected] shell]# echo {5…1}
第三种:
#!/bin/sh
for num in {5…1}
do
echo $num
done
案例2:获取当前目录下的文件名作为变量列表打印输出。
脚步如下:
#!/bin/sh
for ls in ls
// $(ls)
do
echo $ls
done
[[email protected] shell]# sh forls.sh
case.sh
forls.sh
for.sh
function.sh
fun.sh
ifelse.sh
if.sh
shell.sh
tedu.sh
while2.sh
while.sh
执行脚步参数
sh [-nvx] scripts.sh
选项与参数:
-n :不执行script,仅查询语法的问题!!
-v :在执行script前,先将scripts的内容输出到屏幕上
-x :将使用到的script内容显示到屏幕上
遇到问题可以查看日志文件找原因。
[[email protected] shell]# cat /var/log/messages