- 帮助命令
man command
command --help
Info command
Ctrl+R 查看历史输入过的命令 ,方向键的上下键也可以查看历史的命令
Ctrl+C ctrl+z 终止或退出当前操作
Tab键的作用
- 安装XManager
下载后安装在Serisi Number里面输入百度一个序列号然后下一步选择Custom自定义安装
点击xshell点击新建连接,name随意,协议选择ssh,Host输入要连接的ip,端口22,
点击connection下的第一项输入用户和密码,在终端选项下底部选择编码utf-8点击ok完成连接。首次连接
要选择接受并保存key
- 系统级别命令
2.1 查看当前Linux系统信息
uname -a 显示系统及版本的所有信息
uname -r 显示内核版本
uname -m 显示计算机是多少位系统
cat /proc/version Linux查看当前操作系统版本信息
cat /etc/issue 或 cat /etc/rehat-release Linux查看版本当前操作系统发行版本信息
2.2查看系统小版本
cat/etc/redhat-release
2.3查看当前主机名
hostname 修改主机名 方式一:hostname [要修改的值] 这种方式只是临时性的改
方式二:修改 /etc/sysconfig/network 文件中的HOSTNAME的值,这种是永久性修改主机名
2.4查看第一个网卡信息
ifconfig eth0
2.5查看和设置系统时间
date
date -s "2019-12-12 20:20:20"
2.6查看进程
ps -ef
ps -ef | grep java 查看与java有关的进程
2.7显示当前在运行的进程包括对cpu内存使用量
top -s 按q退出
2.8管道 |
cmd1 | cmd2 将cmd1输出结果交给cmd2命令来执行
2.9 grep 过滤
grep sshd /var/log/boot.log // 过滤/var/log/boot.log 文件下的sshd文件
# grep //输出包含指定字符串的行
-i //忽略大小写
-r //递归
-v //取反
--color //突出显示查找字符串
2.10 重新启动Linux操作系统
reboot
init 6
为什么是6 可以查看/etc/inittab文件
默认是5这个运行级别来启动系统(默认运行级别不要设置成0 4 6)
修改默认级别后要重启
service network restart 将网卡重新加载
0级别就是关机
1级别是单用户模式
2级别是多用户模式,但是文件不能共享
3级别是多用户模式,文件能共享(常用)3是命令行模式 5是图形化界面模式
shutdown -r now 表示立即重启
2.11关闭Linux操作系统
shutdown -h now 表示立即关机
shutdown -h 1 表示1分钟后关机
init 0
halt 该命令等价于关机
eg:不管是关机还是重启建议都先执行sync命令,防止数据丢失
sync 把内存数据同步到磁盘上
2.12图形和命令行转换
vi /etc/inittab
init 3 命令行模式
init 5 图形化模式
2.13显示守护进程目录树
Pstree或pstree -p (显示pid)
2.14显示所有正在运行的进程
ps -aux
ps -ef
2.15显示所有正在运行的java进程
jps
2.16结束正在运行的指定进程
kill -9 pid
2.17linux不进入系统更改root密码(进入单用户模式 root不需要密码就可登陆,然后修改root密码)
启动系统时在引导时输入回车进入下一个界面输入e然后选择第二个(编辑内核)
1.在grub选项菜单按e进入编辑模式
2.编辑kernel那行,输入“ 1”(空格1),然后按enter键
3.按b重启
4.进入后执行下列命令
root@#passwd root(配置root的密码)
Enter new unit passwd:输入新的密码
root@#init6
- 磁盘操作
3.1显示系统的磁盘空间用量
df -h //显示磁盘分区信息
mkfs.ext4 /dev/sdb1 //格式化硬盘分区/dev/sdb1
fdisk -l //查看磁盘分区
fdisk /dev/sdb //查看磁盘分区/dev/sdb
du -h -s 目录 //查目录使用大小
3.2挂载(硬盘的挂载)
mount -t vfat /dev/sdb1 /media/umnt //挂载 将/media/umnt目录挂载到 /dev/sdb1分区下
mount -o remount rw / //重新挂载,或者将根目录以读写方式重新加载
umount /media/umnt //卸载
3.3文件系统修复
fsck -y /dev/sda1 (修复的可以是分区可以是目录 , 最好在单用户模式下使用)
//linux文件格式
ext4 ext3 ext2 vfat(fat32)
//window文件格式
fat32 ntfs
- 用户组用户
4.1账户
超级账户: root uid=0
普通账户 uid>=500
系统账户 uid=1~499
/etc/passwd //保存账户的信息
/etc/shadow //保存账户密码信息
/root //root用户家目录
/home/xxx //普通用户xxx的家目录
4.2添加和删除用户 useradd
#useradd/创建用户
-u 指定uid
-d 制定宿主目录
-s 指定使用shell
-e 指定用户过期时间
-g 指定基本组
-G 指定附加组
#useradd openlab //添加用户openlab
#gpasswd -a openlab gropenlab //将用户openlab添加到gropenlab组中
#gpasswd -d openlab gropenlab //将用户openlab从gropenlab组中删除
#echo "123456" | passwd--stdin feige //不通过交互信息,直接该用户密码
#userdel //删除用户 不删除用户文件
#userdel -r //连主目录一起删除
#id openlab //显示用户信息
vipw 查看用户
4.3创建用户组
groupadd manager
vigr 查看组
groups manager 查看用户在哪些组中
4.4创建用户时附加到组中
useradd -G manager tom //创建tom用户添加到manager组中
useradd -G manager tom2
4.5更改密码方式1
passwd tom
4.6更改密码方式2
echo "root" | passwd --stdin root
4.7删除指定的账号
userdel tom2
4.8锁定账户tom2禁止其登陆
usermod -L tom2
4.9切换当前用户账户为admin
su - admin
4.10显示当前登陆用户账户
whoami
4.11查看系统文件判断添加用户组添加用户操作是否正确
cat /etc/passwd 或者使用vipw
cat /etc/group 或者使用vigr
- 文件操作
cd 进入操作
5.1创建文件和目录(指定目录和不指定目录的区别)
mkdir /tmp/test01 //创建空文件夹
mkdir -p /data1/hadoop/hdfs/name //递归创建文件夹
touch /tmp/test01/file.txt //创建空文件夹
vi file.log //创建空文件并进入编辑模式
echo '123'>> file //创建file并输入123到该文件夹
5.2文本编辑器
vim/vi/nano file
:q //退出
:w //保存
:wq //保存退出
:q! //强制退出 不保存
5.3文件内容查看
cat -n //查看内容时显示行号
cat /etc/redhat-release //不显示行号
cat -n /etc/passwd //查看内容时显示行号
tail 文件名 //默认查看文件尾10行
head 文件名 //默认查看文件头十行
-n //查看文件头几行、
tail -f //动态监控文件数据
more //百分比查看,不能回滚看
less //可以回滚查看
5.4 复制文件
cp /tmp/file.txt /opt // 把/tmp/file.txt文件复制到/opt下
5.5复制目录
cp -r ./admin ./test //把当前目录下的admin目录复制到当前目录下的test目录
5.6移动、剪切、重命名文件或目录
mv /opt/test01 /tmp // 把/opt/test01 剪切到/tmp下
mv /opt/file.txt /tmp/file2.txt // 把/opt/file.txt剪切到/tmp/file2.txt 并重命名为file2.txt
rename : 批量命名
5.7重定向和追加 > >>
> 先清空文件内容,后写入新的内容
# ls -l /root > /tmp/file1.txt
>> 追加新的内容 旧的内容不会消除
# ls -l /root >> /tmp/file1.txt
5.8屏幕打印 echo
echo "Hello World" //打印到屏幕
echo "Hello World" /data1/my.cnf //打印到文件
echo "Hello World" >> /data0/my.cnf //打印追加到文件
5.9删除
rm //删除
rm -r //删除目录
rm -f //强制删除
rm -rf //常用命令 不可恢复
- 打包压缩、查找
6.1打包tar原理
-z 压缩
-c 打包
-x 解包
-f 必须要
-C 指定解包位置
-v 输出信息
/usr/bin/zip
/usr/bin/unzip
/bin/gzip
/bin/gunzip
6..2打包tar命令(tar命令平常就代替了gz命令)
//将一个文件打包
# tar -cvf folder.tar file1.txt
//将多个文件打成一个包
# tar -cvf folder.tar file1.txt file2.txt
# tar -cvf file.tar *.jpg
//解包到当前目录
# tar -xvf folder.tar
//解包到指定目录
# tar -xvf folder.tar -C /home/sss
//将多个文件夹打包并压缩
# tar -zvf file.tar.gz folder1 folder2
//将文件解包并解压缩
# tar -zxvf file.tar.gz
6.3使用tar备份指定目录/data0/内容包括子目录中内容备份至/data3/data0.tar.gz
# tar -zcvf /data3/data0.tar.gz /data0
6.4恢复tar文件中的内容/data3/data0.tar.gz 至 /data2
# tar -zxvf /data3/data0.tar.gz -C /data2
6.5 which cmd 查找cmd命令所在路径 whereis
6.6 locate文件查找 - 效率很快 (用的是数据库)
#locate httpd.conf //查找文件所在
# updatedb //更新数据库 使之生效
6.7 find 文件查找 - 效率很慢
# find / -name httpd.conf
find 路径 条件
6.8 给shell命令起别名
vim /etc/bashrc
在文件最后一行添加
alias cls = 'clear'
保存退出后输入#source /etc/bashrc生效
Linux别名设置和取消(暂时性,终端或者服务器关闭即失效)
查看命令别名:alias
设置命令别名 : alias 别名=’命令‘
取消命令别名 : unalias 别名
Linux别名设置和取消(永久生效):
办法就是将别名的设置加入~/.bashrc文件,然后重新载入下文件就可以了
source ~/.bashrc
- 特殊符号的含义
cd ~ //进入当前用户家目录
cd - //回退到上一次所在位置
cd ../ //返回上一层目录
cd ./ //当前目录
- 关闭防火墙
//临时关闭
service iptables status/start/stop/restart
//永久关闭
chkconfig iptables --list //查看不同运行级别默认防火墙状态
chkconfig iptables off/on //永久关闭/开启
- 网卡状态启动停止重启
service network status/start/stop/restart
- sudoer的配置
普通用户想要使用root权限
root用户执行 visudo -f /etc/sudoers
在此处下面添加 普通用户名 ALL=(ALL) ALL
在此处下面添加 普通用户名 ALL=(ALL) ALL
此处修改为了免密操作
修改完毕后切换到普通用户 执行命令 sudo+原先无法执行的命令 就修改完毕了。
- 查看进程
ps -aux
ps -ef
- 自启动
chkconfig 服务名 on
- 查看端口
netstat -anp
lsof -i
- 负载
w
uptime
- 内存查看
top
free
- 磁盘查看
df
- 在默认的情况下,WC将计算指定文件的行数,字数,以及字节数使用的命令为:
wc 文件名
- 同步文件
xsync
Expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh登录,ftp登录等都符合交互的定义。下文我们首先提出一个问题,然后介绍基础知四个命令,最后提出解决方法。
Expect中最关键的四个命令是send,expect,spawn,interact。
send:用于向进程发送字符串 expect:从进程接收字符串 spawn:启动新的进程 interact:允许用户交互
1. send命令
send命令接收一个字符串参数,并将该参数发送到进程。
expect1.1> send "hello world\n" hello world
2. expect命令
(1)基础知识
expect命令和send命令正好相反,expect通常是用来等待一个进程的反馈。expect可以接收一个字符串参数,也可以接收正则表达式参数。和上文的send命令结合,现在我们可以看一个最简单的交互式的例子:
expect "hi\n" send "hello there!\n"
这两行代码的意思是:从标准输入中等到hi和换行键后,向标准输出输出hello there。
tips: $expect_out(buffer)存储了所有对expect的输入,<$expect_out(0,string)>存储了匹配到expect参数的输入。
比如如下程序:
expect "hi\n" send "you typed <$expect_out(buffer)>" send "but I only expected <$expect_out(0,string)>"
当在标准输入中输入
test hi
是,运行结果如下
you typed: test hi I only expect: hi
(2)模式-动作
expect最常用的语法是来自tcl语言的模式-动作。这种语法极其灵活,下面我们就各种语法分别说明。
单一分支模式语法:
expect "hi" {send "You said hi"}
匹配到hi后,会输出"you said hi"
多分支模式语法:
expect "hi" { send "You said hi\n" } \ "hello" { send "Hello yourself\n" } \ "bye" { send "That was unexpected\n" }
匹配到hi,hello,bye任意一个字符串时,执行相应的输出。等同于如下写法:
expect { "hi" { send "You said hi\n"} "hello" { send "Hello yourself\n"} "bye" { send "That was unexpected\n"} }
3. spawn命令
上文的所有demo都是和标准输入输出进行交互,但是我们跟希望他可以和某一个进程进行交互。spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的。结合上文的send和expect命令我们可以看一下更复杂的程序段了。
set timeout -1 spawn ftp ftp.test.com //打开新的进程,该进程用户连接远程ftp服务器 expect "Name" //进程返回Name时 send "user\r" //向进程输入anonymous\r expect "Password:" //进程返回Password:时 send "123456\r" //向进程输入don@libes.com\r expect "ftp> " //进程返回ftp>时 send "binary\r" //向进程输入binary\r expect "ftp> " //进程返回ftp>时 send "get test.tar.gz\r" //向进程输入get test.tar.gz\r
这段代码的作用是登录到ftp服务器ftp ftp.uu.net上,并以二进制的方式下载服务器上的文件test.tar.gz。程序中有详细的注释。
4.interact
到现在为止,我们已经可以结合spawn、expect、send自动化的完成很多任务了。但是,如何让人在适当的时候干预这个过程了。比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令。interact可以达到这些目的。下面的demo在自动登录ftp后,允许用户交互。
spawn ftp ftp.test.com expect "Name" send "user\r" expect "Password:" send "123456\r" interact
解决方法
上文中提到:
如何从机器A上ssh到机器B上,然后执行机器B上的命令?如何使之自动化完成?
下面一段脚本实现了从机器A登录到机器B,然后执行机器B上的pwd命令,并停留在B机器上,等待用户交互。具体含义请参考上文。
#!/home/tools/bin/64/expect -f set timeout -1 spawn ssh $BUser@$BHost expect "*password:" { send "$password\r" } expect "$*" { send "pwd\r" } interact