Linux&shell

概述:Linux&shell

[TOC]

1.文件系统目录结构

“一切皆为文件”

​ /dev 管理设备(cpu、disk、dvd、usb等)

​ /media 目录,linux自动识别设备,例如U盘、光驱,识别后的设备挂载到该目录

​ /bin 最常使用的命令(Binary) /usr/bin;/usr/local/bin

​ /sbin 系统管理员使用的系统管理程序(Super User) /usr/sbin;/usr/local/sbin

​ /home 存放普通用户主目录,每一个用户都有自己的目录,通常以用户名命令

​ /root 系统管理员/超级权限者的用户主目录

​ /lib 系统开机需要的动态连接共享库,类似于windows的dll文件,几乎所有应用程序都涉及该部分的共享库

​ /lost+found 该目录通常为空的,当系统非法关机后,会存放一些文件

​ /etc 所有系统管理所需要的的配置文件和子目录

​ /usr 用户大多数应用程序和文件,类似于windows的program file目录

​ /boot 存放启动linux的核心文件,包括连接文件和镜像文件

​ /proc 虚拟目录,系统内存的映射,获取系统信息

​ /srv 服务启动后所提取的数据(service)——不动

​ /sys linux2.6内核的变化,安装2.6内核新出现文件系统sysfs

​ /tmp 临时文件

​ /mnt 用户临时挂载别的文件系统,将外部存储挂载在/mnt,可以查看具体内容

​ /opt 主机额外安装软件的目录,例如按照oracle数据库可存放在该目录(安装包)

​ /usr/local 给主机额外安装软件的目录,通过编译源码方式安装的程序(/usr/local/mysql)

​ /var 存放不断扩充的或频繁修改的文件/目录以及日志文件

​ /selinux SELinux是一种安全子系统,可控制程序仅访问指定文件(security-enhanced linux)

2.远程连接

linux需要开启一个sshd服务(端口:22)

1
servie sshd start

查看服务是否开启

1
setup

3.vi/vim的使用

命令模式<==Esc==一般模式/正常==i或者a==>编辑模式

命令模式:

(1)保存并退出——:wq

(2)退出——:q

(3)设置/取消行号——:set nu 和 :set nonu

(4)跳到指定第n行——:set ;n;shitf+g

4.关机、重启、注销

1
2
3
4
5
6
7
8
shutdown
shutdown -h 立即关机
shutdown -h 1:1分钟后关机
shutdown -r now:立即重启
halt:关机
reboot:重启
syn:把内存数据同步到磁盘上
logout:注销(图形界面无效)

5.用户管理

创建用户

1
useradd 用户名

成功会自动创建与用户名相同的目录(在/home),也可以通过以下命令指定目录

1
useradd -d 指定目录 新用户

修改密码

1
passwd 用户名

删除用户

1
2
userdel 用户名:删除用户
userdel -r 用户名 :删除用户及目录

查看用户信息

1
id 用户名

切换用户

1
su -用户名

添加组

1
groupadd 组名

删除组

1
groupdel 组名

增加用户指定组

1
useradd -g 用户组 用户名

修改用户指定组

1
usermod -g 用户组 用户名

用户信息会存放在:/etc/passwd

1
用户名:x(密码):numb1(用户id):numb2(组id):/home/用户名(用户目录):/bin/bash(shell)

组配置文件会存放在:/etc/group

1
组名:x(口令):num(组id):[组内用户名]

口令和密码配置文件(加密):/etc/shadow

6.密码重置

(1)指定运行级别:

0:关机

1:单用户(找回丢失密码)

2:多用户状态(无网络服务)

3:多用户状态(有网络服务)

4:系统未使用(保留)

5:图形界面

6:系统重启

常用运行级别:3和5,修改默认运行级别

1
/etc/inittab的id:5:initdefault的级别数

或者命令

1
init [0123455]

(2)找回root密码

a.重启进入menu(Press any key to entre the menu)

b.输入‘e’ ,’e‘ to edit the commands befor booting

c.光标kernel / vmlinuz - 2.6输入’e’

d.添加1==>entre(’单用户级别’)

e.输入‘b’(boot)===>(‘以root登录单用户模式’)

7.帮助命令

1
2
help 命令
man 命令

8.文件目录命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ls :显示当前目录的文件及子目录
ls -a :显示当前目录所有文件及子目录(含隐藏,以.开头的文件)
ls -l :以列表形式显示
ls -h:显示大小
mkdir 目录名:创建目录
mkdir -p 创建多层目录
pwd:显示当前目录
rmdir:删除空目录
rm -rf 目录:删除非空目录
touch 文件名:创建文件
touch 文件名1 文件名2 ...:创建多个文件
cp 文件原目录路径 文件新目录路径:复制文件到指定目录
cp -r 原目录路径 新目录路径:递归复制目录 所有文件
mv 文件名:移动/重命名
cat 文件名:查看文件
cat -n:显示行号
cat -n 文件名 | more:cat打开并分页显示
space:下一页
Enter:下一行
q:离开
Ctrl+f:下一屏
Ctrl+b:上一屏
less:分屏查看文件内容,对大文件具有叫高效率

9.写入指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
指令 > 文件:写入
ls -l > a.txt :将ls -l的结果写入a.txt
cat /etc/profile > c.txt :将profile文件写入a.txt

指令 >> 文件:追加写入
ls -l >> b.txt :将ls -l的结果追加写入b.txt

echo "内容" > 文件:
echo "hello" >> c.txt:将字符串写入文件
echo "hello" >> c.txt:追加字符串写入文件

echo指令:
echo [选项] [输出内容]
echo $PATH:echo 输出环境变量
head指令:
head -n 5 文件:查看前5行数据(默认10行)
tail指令:
tail -n 5 文件:查看后5行数据
tail -f 文件:实时追踪文档更新
ln指令:
软链接(符号链接),类似于windows的快捷方式
ln -s [原文件/目录] [软连接名]
history:查看已执行历史命令
history n:查看最近n个命令

10.时间日期类

1
2
3
4
5
date:显示当前时间
date +%Y:当前年份
date +%m:当前月份
date +%d:当前具体日
date "+%Y-%m-%d %H:%M:%S":当前具体时间

11.搜索查找类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
find [搜索范围] [选项]
find 目录 -name 文件名
eg:find /home -name a.txt
find 目录 -user 用户名
eg: find /home -user tom
查找整个系统中大于/小于/等于20M的文件:(或者k)
find 目录 -size +/-/20M
find 目录 -name *.txt:支持通配符

locate 快速定位文件路径,查找速度更快,管理员需定期更新locate时刻(保证准确性,需要提前建立locate数据库)
(1)新建locate数据库:updatedb
(2)locate hello.txt

grep指令和管道符号 |
grep过滤查找,管道费"|"表示将前一个命令的处理结果传递给后面的指令
grep [选项] 查找内容 源文件
常用选项:
-n 显示匹配行和行号;
-i 忽略字母大小写
eg.在hello.txt查找"yes"的所在行
cat hello.txt | grep -n yes 区分大小写
cat hello.txt | grep -ni yes 不区分大小写

10.压缩/解压缩指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
gzip /gunzip
gzip 压缩文件;gunzip 解压缩
gzip 文件:压缩至*.gz

zip/unzip
zip -r 递归压缩
unzip -d 目录 压缩文件:指定压缩目录

tar
tar -c 产生.tar打包文件
tar -v 显示详细信息
tar -f 指定压缩后的文件名
tar -z 打包压缩
-x 解包.tar文件
eg.压缩多个文件:tar -zcvf a.tar.gz a1.txt a2.txt
eg.将/home文件夹压缩到myhome.tar.gz:tar -zcvf myhome.tar.gz /home/
eg.将a.tar.gz解压至当前目录:tar -zxvf a.tar.gz
eg.将myhome.tar.gz解压到/opt/tmp2目录:tar -zxvf myhome.tar.gz -C /opt/tmp2(注意有-C的参数)

11.组管理和权限管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
查看文件所有者:ls -ahl

修改文件所有者:chown 用户名 文件名
修改目录下所有文件所有者:chown -R 用户名 目录

组的创建:groupadd 组名

修改文件所在组:chgrp 组名 文件名

修改文件所有者+所在组:chown 用户名:组名 文件名

修改用户所在组:usermod -g 组名 用户名
修改用户登录初始目录:usermod -d 目录名 用户名

-rw-r--r--. 1 tom police 6
第0位(-):-普通文件;d目录;l软连接;c字符设备(键盘/鼠标);b块文件(硬盘)
第1,2,3位(rw-):文件所有者权限r表读w表写
第4,5,6位(r--):文件所在组用户权限
第7,8,9位(r--):文件其他组用户权限
1若表示文件则是硬链接;目录则是子目录的数量(注意所有文件夹会多2个子目录树,分别为.和..)
6表示文件大小(字节数)目录则是4096
rwx:其中x表示可执行(文件),表示可进入该目录(目录),其中w表示可写,注意删除文件时,必须要对文件所在目录具备写权限

修改文件/目录权限:
u所有者;g所有组;o其他人;a所有人
chmod u=rwx,g=rx,o=x
chmod o+w
chmod a-x
规则:r=4;w=2;x=1
chmod u=rwx,g=rx,o=x
=chmod 751

12.任务调度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
crontab:进行定时任务的设置
任务调度:指系统在某个时间执行特定命令
任务调度分类:
1、系统工作:有些重要的工作重复执行
2、个别用户工作
常用选项
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务

样例:
设置任务调度文件:/etc/crontab
设置个人任务调度,(1)执行 crontab -e 命令
输入任务到调度文件,(2)执行 */1**** ls -l/etc/>tmp/to.txt
即每小时的每分钟执行 ls -l /etc/ > /tmp/to.txt 命令

占位符说明:
第1个"*":一小时中第几分钟(范围0-59)
第2个"*":一天中第几小时(范围0-23)
第3个"*":一月中第几天(范围1-31)
第4个"*":一年中第几月(范围1-12)
第5个"*":一周中的星期几(范围0-7)

*:表示任何时间,例如第1个"*"表示一小时每一个分钟都执行一次
,:表示不连续时间,例如 "0 8,12,16 * * * "表示第8个小时0分钟,12个小时0分钟...
-:表示连续时间,例如"0 5 * * 1-6"表示周一到周六的凌晨5点执行
*/n:表示每隔多久执行一次。例如"*/10 * * *"表示每隔10分钟执行一次

实例1:每隔一分钟,将当前日期信息追加到/tmp/mydate文件

(1)编写 /home/mytask1.sh

​ 文件内容:date >> /tmp/mydate

(2)赋予mytask1.sh执行权限(chmod 744 /home//mytask1.sh)

(3)crontab -e

(4)*/1 * * * * /home/mytask1.sh

实例2:每天凌晨2:00将mysql数据库test.db备份到mydb.bak

(1)编写/home/mytaks2.sh

​ 文件内容:/usr/local/mysql/bin/mysqldump -u 用户名 -p密码 testdb > /tmp/mydb.bak

(2)赋予mytask2.sh执行权限(chmod 744 /home//mytask2.sh)

(3)crontab -e

(4)0 2 * * * * /home/mytask2.sh

crond相关指令:

1
2
3
crontab -l 显示
crontab -r 终止所有任务调度
service crond restart [重启任务调度]

13.磁盘分区

(1)mbr分区:

a.最多支持4个主分区

b.系统仅能安装在主分区

c.扩展分区占1个主分区

d.mbr最大支持2TB,兼容性较好

(2)gtp分区

a.支持无限多个主分区(windows下仅支持128个分区)

b.最大支持18EB大容量(EB=1024PB,PB=1024TB)

c.window7 64后支持gtp

windows下的磁盘分区

主分区(primary partition)

扩展分区(extended partition):n个逻辑分区(logical)

linux分区

a.仅存在一个根目录(独立且唯一)

b.采用“载入”的处理方法,整个文件系统包含了一整套的文件和目录,将一个分区和目录联系,要载入的分区将它的存储空间在一个目录下获得

硬盘说明:

a.linux硬盘分IDE硬盘和SCSI硬盘,主流SCSI硬盘

b.对于IDE硬盘,驱动器标识符为“hdx”,其中”hd”表示分区所在设备的类型,指IDE硬盘,“x”为盘号(a为基础盘;b为基础从属盘;c为辅助硬盘;d为辅助从属盘,“”代表分区,前四个分区用数字1-4表示,是主分区或者扩展分区,5开始为逻辑分区,例如hda3表示第1个IDE硬盘上的第3个主分区或者扩展分区,hdb2表示为第2个IDE硬盘上的第2个主分区或者扩展分区)

c.对于SCSI硬盘标识为“sdx~”,SCSI硬盘使用“sd”表示分区所在设备的类型,其余与IDE硬盘表示一致。

查看系统分区和挂载情况

1
2
3
4
5
6
7
8
lsblk -f

分区情况(sda1,sda2...);
分区类型(ext4,swap...);
标识符(唯一的40位字符串);
挂载点(/boot,SWAP...)

lsblk 可直接查看磁盘大小

※ SWAP:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中。

挂载:在linux系统中增加一个新的硬盘,并挂载到/home/newdisk

步骤:

a.添加硬盘

b.分区

c.格式化

d.挂载

e.设置自动挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
添加硬盘:
1)虚拟机>设置>硬盘>SCSI>创建新的虚拟磁盘>分配2GB,拆分成多个文件
2)reboot
3)lsblk(老师不离开...)查看到新的sdb

分区:
4)fdisk /dev/sbd:创建和维护分区表的程序
command m >add add new partition n> primary partition p>partition number 1> write table to disk and exit w
5)lsblk -f检查发现sdb不具备标识符等

格式化:
6)mkfs -t ext4 /dev/sdb1:格式化

挂载:
7)mkdir /home/newdisk:创建
8)mount /dev/sdb1 /home/newdisk :挂载

设置自动挂载:
9)vim /etc/fstab
在UUID=...上一行添加一行:
/dev/sdb1 /home/newdisk ext4 defaults 0 0
mount -a
10)reboot

卸载:
umount /dev/sdb1 或者 umount /newdisk

磁盘整体使用情况:

1
df -lh

查询指定目录的磁盘占用情况:

1
du -h /目录

-s 指定目录占用大小汇总

-h 带计量单位

-a 含文件

–max-depth=1 子目录深度

-c 列出明细和增加汇总值

实例:查看/opt目录磁盘占用情况,子目录深度1

1
du -ach --max-depth=1 /opt

统计/home文件夹下文件个数:

1
ls -l /home | grep "^-" | wc -l

统计/home目录个数:

1
ls -l /home | grep "^d" | wc -l

统计/home文件夹下文件及子文件内的数量:

1
ls -lR /home | grep "^-" | wc -l

树状显示目录:

1
2
yum install tree(提示:ubuntu用apt-get)
tree

14.网络配置

linux网络配置原理图(含虚拟机)

目前采用是NAT模式

(1)查看虚拟网络编辑器\和修改ip地址(修改虚拟网卡)

1
VMware > 编辑 > 虚拟网络编辑器

(2)配置自动连接

1
2
3
linux界面>系统>首选项>网络连接> System eth0 > 自动连接
reboot
※ 该种方式为dhcp模式,即每次ip地址不保证相同

(3)指定固定ip地址

1
2
3
4
5
6
7
8
vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO="static"
IPADDR=192.168.1.80
GATEWAY="192.168.1.1"
NETMASK="255.255.255.0"
ONBOOT=yes//注意为yes

reboot

15.进程和服务

(1)linux每一个执行的程序/代码都是一进程(配ID)

(2)每一个进程对应一父进程,父进程可复制多个子进程,例如www服务器

(3)每一进程有2种方式存在(前台,后台)

(4)一般系统服务以后台进程存在,常驻系统中直至关机

查看进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ps -aux
-a:显示终端所有进程信息
-u:以用户格式显示信息
-x:显示后台进程运行的参数

ps -ef | more
查看PPID(父进程)
-e:显示所有进程
-f:全格式

USER:用户名
PID:进程id
%CPU:占用cpu
%MEM:占用内存
VSZ :使用虚拟内存(KB)
RSS :使用物理内存情况(KB)
TTY :使用的终端
STAT :状态(s休眠;r运行)
START :开始时间
TIME :总时间
COMMAND:命令行

查看sshd服务(远程登录服务)

1
ps -aux | grep sshd

终止进程

1
kill [选项] 进程号

终止多个gedit编辑器

1
killall gedit

强制终止

1
kill -9 pid

查看进程树

1
2
3
pstree
-p:显示pid
-u:显示所属用户

服务管理指令:

1
service 服务名 [start|stop|restart|reload|status]

查看防火墙状态:

1
2
3
4
5
6
service iptables status
※:Centos7及更新版使用systemctl
关闭/启动防火墙立即生效(windows通过telnet ip 端口,测试是否生效);
eg.telnet 192.168.1.80 22
该方式为临时生效,重启失效;
永久生效使用chkconfig

(Tip )windows的运行清除命令:cls

查看服务名:

1
2
方式1:使用setup->系统服务
方式2:ls /etc/init.d/

服务运行级别(runlevel):(7种)常用级别3和5

查看/修改级别:vi /etc/inittab

运行级别0:系统停机状态,系统默认不能为0,无法正常启动

运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录

运行级别2:多用户状态(无nfs),不支持网络

运行级别3:完全的多用户状态(有nfs),登录后进入控制台命令模式

运行级别4:系统未使用,保留

运行级别5:X11控制台,登录后进入GUI

运行级别6:系统正常关闭并重启,默认不能为6,无法正常启动

开机流程:

开机->BIOS->/boot->-init进程>-运行级别>-运行级别对应服务

服务管理——chkconfig指令:

1
2
3
4
5
6
7
8
9
10
11
查看服务各个运行级别的状态:
chkconfig --list | grep xxx

查看指定服务的运行状态:
chkconfig 服务名 --list

设置指定服务在运行级别5为不自动启动
chkconfig --level 5 服务名 on/off

当运行级别为5时,关闭防火墙
chkconfig --level 5 iptables off

动态监控进程:

1
2
3
4
top [选项]
-d:间隔时间刷新(秒数)
-i:使用top不显示闲置/僵尸进程
-p:指定进程ID

监视指定用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
top

返回信息:
XX:XX:XX当前时间
XX:XX(运行时间)
N user(当前N个用户登录)
load average(负载均衡):0.35
tasks:N(任务数)
zombie表示僵尸任务

输入k可终止进程;
默认3秒刷新;
输入q退出;
输入P按cpu使用排序;
输入M按内存使用率排序;
输入N按照PID排序;

top -d 10:1每隔10秒刷新一次

监控网络状态

查看系统网络情况netstat:

1
2
3
netstat [选项]
-an:按一定顺序排序输出
-p:显示哪个进程在调用

16.RPM和YUM包

RPM:RedHat Package Manager(RedHat软件包管理工具)

查询已安装的rpm列表:

1
rpm -qa | grep xx

查看安装rpm软件信息:

1
rpm -qi xxx

查看rpm包的文件安装位置:

1
rpm -ql xxx

查看文件对应的安装包:

1
rpm -qf 目录

卸载rpm包:

1
2
3
rpm -e xxx(firefox)
// 可能卸载出现错误信息
// 强制删除:rpm -e --nodeps xxx

安装rpm包:

1
2
3
4
rpm -ivh rpm包路径
-i:install安装
-v:verbose提示
-h:hash进度条

安装firefox:

1
rpm -ivh xxx

yum:shell前端软件包管理器,基于rpm包管理,可从指定服务器下载rpm包并安装,可自动处理依赖性关系,并一次性下载所有依赖包。

查询yum服务器是否有需要安装的软件

1
yum list | grep xxx

安装yum包:

1
yum install xxx

17.JDK的安装和配置

(1)apache-tomcat;jdk;eclipse;mysql的tar.gz包

(2)解压tar.gz

1
tar -zxvf jdk.tar.gz

(3)配置环境

1
2
3
4
5
6
7
8
9
vim /etc/profile

JAVA_HOME=/opt/jdk1.7.0_79
PATH=/opt/jdk1.7.0_79/bin:$PATH(:$PATH表示和其他PATH连接一起)
export JAVA_HOME PATH(输出变量和生效)

注销用户,环境变量才可以生效
级别3===>logout
或者 sourece /etc/profile

(5)安装tomcat

a.解压到/opt

b.启动tomcat ./startup.sh

c.开放端口 vim /etc/sysconfig/iptables

在windows下测试访问:http://linuxip:8080

1
2
3
4
5
6
7
8
9
tar -zxvf ...

cd apache-tomcat-7.0/bin/
./startup.sh

service iptables status
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT(开放8080)
service iptables restart

(6)安装eclipse

a.解压到/opt

b.启动eclipse,配置jre和server

c.编写Helloworld

d.编写jsp和测试

1
2
tar -zxvf ...
进入目录 . eclipse

(7)安装mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
1.是否有按照mysql server
rpm -qa | grep mysql
若有:rpm -e --nodeps mysql_libs

2.按照编码代码需要的包
yum -y install make gcc-c++ cmake bison-devel ncurses-devel

3.解压
tar -zvxf mysql...tar.gz

4.编译安装[源码]
cd mysql
源码命令cmake -DCMAKE_INSTALL_PREFIX=/usr/....

5.编译并安装
make && make install

6.设置权限
查看用户及用户组
cat /etc/passws
cat /etc/group

添加用户及用户组
groupadd mysql
useradd -g mysql mysql

修改/usr/local/mysql权限
chown -R mysql:mysql/usr/local/mysql

7.初始化配置
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql--detadir=/usr/local/mysql/data --user=mysql

8.启动服务
先在/etc目录寻找,找不到则去$basedir/my.cnf
注:centos6.8在/etc会自动生成my.cnf需要修改其文件名,例如/etc/my.cnf.bak
修改文件名:mv /etc/my.cnf /etc/my.cnf.bak

9.启动mysql
添加服务,拷贝服务脚本在init.d目录,设置开机启动
cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
service mysql start --启动mysql

修改root密码
cd /usr/local/mysql/bin
./mysql -uroot(进入mysql)
mysql>SET PASSWORD = PASSWORD("root);

mysql>show databases;
mysql>create database maths;
mysql>use maths;
mysql>create table user(id int,name varchar(32));
mysql>insert into users values(100,'tom');
mysql>quit

在其他目录进入mysql:
在vim /etc/profile加入:
PATH=/opt/jdk1.7.0_79/bin:/usr/local/mysql/bin:$PATH

18.shell编程

shell是一个命令行解释器,为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序。

硬件->内核->shell命令行解释器->外层应用程序

shell快速入门:

a.脚本以#!bin/bash开头

b.脚本需要可执行权限

输出hello,world!

1
2
3
vi myShell.sh
#!bin/bash
echo "hello,world"
1
chmod 744 myShell.sh

(1)变量

变量分为:系统变量和用户自定义变量

系统变量:$HOME、$PWD、$SHELL、$USER

显示当前shell所有变量:set

注意定义变量值时不能添加空格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
A=100
echo "A=$A"#注意引用的时候需要带上$
unset A//删除变量定义
echo "A=$A"

readonly A=99#静态变量
# readonly静态变量不可以unset

执行命令-方式1:
A=`ls -la` 反引号,运行命令并返回变量A
echo $A

执行命令-方式2:(建议)
B=$(date)
echo $B

设置环境变量
(1)export 变量名=变量值(将shell变量输出为环境变量)
(2)source 配置文件(修改后的配置文件立即生效)
(3)echo $变量名(查询环境变量值)

快速入门:
1)在/etc/profile文件中定义TOMCAT_HOME环境变量
TOMCAT_HOME=/opt/tomcat
export TOMCAT_HOME
applied=$(source /etc/profile)
echo $applied
2)查看环境变量TOMCAT_HOME值
echo $TOMCAT_HOME

注意:在输出JAVA_HOME环境变量前,需要让其生效source /etc/profile

多行注释:
:<<!
xxxxxxxx
!

位置参数变量:

当我们执行shell时,希望获取命令的参数信息,例如:

1
./myshell.sh 100 200

基本语法:

$n(n为数字,$0表示命令本身,$1-9表示第1-9个参数,10以上参数要用括号${10})

$* 表示命令行中所有参数,$*把所有参数看作一个整体

$@ 表示命令行中所有参数,$@把每个参数区分对待

$# 表示命令行的所有参数个数

应用实例:编写一个shell脚本postionPara.sh,获取命令行各个参数信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pos.sh
#!/bin/bash
#获取各个参数
echo "$0,$1,$2"
echo "$*"
echo "$@"
echo "$#"

#输入
./pos.sh a1 b2 c3
#输出
echo "$0,$1,$2"====>./pos.sh ,a1, b2
echo "$*"===>a1 b2 c3
echo "$@"===>a1 b2 c3
echo "$#"===>3

预定义变量

事先定义的变量

基本语法:

$$ 当前进程号PID

$! 后台运行的最后一个进程号PID

$? 最后一次执行的命令返回状态,如果这个变量的值为0,则证明上一命令正确,该变量值非0,则证明上一命令执行不正确。

应用实例:在一个shell脚本中使用预定义变量

1
2
3
4
5
6
#!/bin/bash
echo "当前进程号=$$"
#后台方式运行myShell.sh(&表示后台方式运行)
./myShell.sh &
echo "最后的进程PID=$!"
echo "执行结果=$?"

(2)运算符

基本语法

a.“$((运算式))或$[运算式]”

※ (())有两层嵌套

b.expr m + n

※ 注意有空格

c.expr \ * , / , % 乘,除,取余

应用实例1:计算(2+3)×4

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
# 方式1
echo "$(((2+3)*4))"
# 注意:将$()里面放在一个括号内,多一个嵌套

# 方式2:推荐,简洁
echo "$[(2+3)*4]"

# 方式3:
TEMP=`expr 2 + 3`
RESULT=`expr $TEMP \* 4`
echo "RESULT"

应用实例2:求出命令行2个参数的和

1
2
3
4
5
#!/bin/bash
echo "$(($1+$2))"
# 注意:将$()里面放在一个括号内,多一个嵌套

echo "$[$1+$2]"

(3)条件判断

基本语法:

[ condition ]

注意:condition前后有空格

非空则返回true;可适用$?验证(0为true,>1为false)

判断语句:

(a)整数比较

1
2
3
4
5
6
7
8
9
= 字符串比较

-lt 小于 -le小于等于

-eq 等于 -ne 不等于

-gt 大于 -ge 大于等于

eg. [ 22 -eq 23 ]

(b)按文件权限判断

1
2
3
4
5
6
7
-r 有读权限

-w 有写权限

-x 可执行权限

eg. [ -w hello.sh ]

(c)文件类型判断

1
2
3
4
5
-f 文件存在且常规文件

-e 文件存在

-d 文件存在且为目录

(d)应用实例

案例1:”ok”是否等于”ok”

注:很多个地方有空

if空格[空格“ok”空格=空格“ok”空格]

1
2
3
4
5
#!/bin/bash
if [ "ok" = "ok" ]
then
echo "相等"
fi
1
chmod 744 judge.sh

案例2:23是否大于22

1
2
3
4
if [ 23 -gt 22 ]
then
echo "大于"
fi

案例3:/root/install.log文件是否存在

1
2
3
4
if [ -e /root/shell/aaa.txt ]
then
echo "存在"
fi

if和else判断

1
2
3
4
5
6
7
8
9
#!/bin/bash
aa=10
if [ $aa -ge 60 ]
then
echo "及格"
elif [ $aa -lt 60 ]
then
echo "不及格"
fi

case语句:

案例1:当命令行参数为1则输出周一;2则输出周二;其它则输出”other”

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
echo "Hello World !"
aa=1
case $aa in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
esac

(4)for和while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
#方式1
for i in "$*"
do
echo "the num is $i"
done
# 输出:the num is 10 20 30

#方式2
for i in "$@"
do
echo "the num is $i"
done
# 输出:
the num is 10
the num is 20
the num is 30

案例:输出1+2+…+100

1
2
3
4
5
6
7
8
#!/bin/bash
SUM=0
for((i=1;i<=100;i++))
do
SUM=$(($SUM+$i))
#或者SUM=$[$SUM+$i]
done
echo "sum=$SUM"

案例:从命令行输入一个数n,统计1+…+n的值?

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
SUM=0
i=0
n=100
while [ $i -le $n ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"

(5)读取控制台输入

基本语法

read [选项] (参数)

-p 指定读取值时的提示符

-t 指定读取值等待时间(秒),如果没有指定时间输入,就不再等待

应用实例1:读取控制台输入一个num值

1
2
read -p "输入一个数=" NUM1
echo "你输入的是$NUM"

应用实例2:读取控制台输入一个num值,在10秒内输入

1
2
read -t 10 -p "输入一个数=" NUM1
echo "你输入的是$NUM"

(6)函数

函数:系统函数和自定义函数

系统函数:

basename基本语法

功能:返回完整路径最后/的部分,常用于获取文件名

basename [pathname] [suffix]

basename [string] [suffix] 功能描述:basename命令会删除所有的前缀包括最后(’/‘)字符,将字符串显示出来

选项:suffix为后缀,若suffix指定,basename将pathname或string的suffix去掉

应用实例:返回/home/aaa/test.txt的”test.txt”部分

1
2
命令:basename /home/aaa/test.txt
输出:test.txt
1
2
命令:basename /home/aaa/test.txt .txt
输出:test

dirname基本语法

功能:返回完整路径最后的/前面部分

应用实例:返回/home/aaa/test.txt的/home/aaa

1
2
命令:dirname /home/aaa/test.txt
输出:/home/aaa

自定义函数:

基本语法

1
2
3
4
5
[ function ] function_name[()]
{
Action;
[return int;]
}

应用实例:计算输入两参数之和

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "$n1+$n2=$SUM"
}
read -p "输入第1个数" n1
read -p "输入第2个数" n2

#调用
getSum $n1 $n2

(7)综合案例

a.每天凌晨2:10备份数据库atguiguDB到/data/backup/db

b.备份开始和结束要求提示信息

c.备份后文件以备份时间为文件名,并打包成.tar.gz形式,例如:2018-03-12_230201.tar.gz

d.备份的同时,检查是否存在前10天的数据库文件,若有则删除

/usr/sbin/mysql_db_backup.sh文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
#备份路径及时间作为文件名
BACKUP=/data/backup/db
DATETIME=$(date +%Y_%m_%d_%H%M%S)
echo $DATETIME

#数据库主机、用户名、密码、数据库名
HOST=localhost
DB_USER=root
DB_PWD=123
DATABASE=atguiguDB

#备份路径,若不存在则创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"

#备份mysql数据库并压缩到指定文件
mysqldump -u$DB_USER -p$DB_PWD --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz

#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME

#删除临时文件
rm -rf $BACKUP/$DATETIME

#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;

#提示
echo "备份完成"
1
2
3
将上述脚本设置定时执行
crontab -e
10 2 * * * /usr/sbin/mysql_db_backup.sh

※ 补充内容

(1)可采用sh或bash + 脚本相对路径或者绝对路径(不需要赋予脚本x权限)

1
2
3
sh myShell.sh
bash myShell.sh
./myShell.sh(赋予x权限后可执行)

(2)在a.txt中追加“I love you”

1
2
3
4
#!/bin/bash
cd /home
touch a.txt
echo "I love you" >> a.txt

(3)bash中变量的默认类型均为字符串,不可以直接数字运算

1
2
3
A=1+1
echo $A
1+1

(4)将变量提升为全局环境变量,可供其他shell程序使用

1
2
3
在外部B=haha
export B
可在其他shell中直接调用$B

19.Shell工具

(1)cut

在文件中负责剪切数据

1
2
3
cut [选项参数] filename
-f 列号,提取第几列
-d 分隔符,按照指定分割符分割列

示例文件 cut.txt

1
2
3
dong shen
guan zhen
lai lai

eg. 分割cut.txt第一列

1
2
3
4
5
6
7
cut -d " " -f 1 cut

# 输出
dong
guan
lai

eg.分割cut.txt第二、三列

1
2
3
4
5
6
cut -d " " -f 2,3 cut

# 输出
shen
zhen
lai

eg.找到以guan开头行的第二列

1
2
3
4
cat cut.txt | grep guan | cut -d " " -f 2

# 输出
zhen

eg.选择系统PATH变量值,第二个”:”开始的所有路径

1
echo $PATH | cut -d ":" -f 2-

eg.切割ifconfig后打印的IP地址

1
ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1

(2)sed

sed是一种流编辑器,每次处理一行内容,把当前处理的行存储在临时缓冲区,称为“模式空间”,使用sed命令处理缓冲区中的内容,处理完成后,将缓冲区的内容送往屏幕,不断重复直至文件末尾,文件内容不会改变,除非使用重定向存储输出。

1
2
sed [选项参数] 'command' filename
-e 直接在指令列模式上进行sed动作编辑

命令功能描述:

1
2
3
a 新增,a后可接字符串,在下一行出现
d 删除
s 查找并替换

案例应用:

sed.txt

1
2
3
4
5
6
dong shen
guan zhen
wo wo
lai lai

le le

将“boy girl”插入sed第二行并打印输出:

1
2
3
4
5
6
7
8
9
10
sed "2a boy girl" sed.txt

输出:
dong shen
guan zhen
boy girl
wo wo
lai lai

le le

删除sed.txt包含wo的行

1
2
3
4
5
6
7
8
sed "/wo/d" sed.txt

输出:
dong shen
guan zhen
lai lai

le le

将sed.txt文件的wo替换成ni

1
2
3
4
5
6
7
8
9
sed 's/wo/ni/g' sed.txt	#其中'g'表示global,全部替换

输出:
dong shen
guan zhen
ni ni
lai lai

le le

将sed.txt第二行删除并替换wo为ni

1
sed -e "2d" -e "s/wo/ni/g" sed.txt

(3)awk

文本分析工具,将文件逐行读入,以空格默认分隔符对每行切片,再分析处理

1
2
3
4
5
awk [选项参数] 'pattern1{action1} pattern2{action2} ...' filename
pattern 表示awk在数据中查找的内容,匹配模式
action 在找到匹配内容时所执行的一系列命令
-F 指定输入文件分隔符
-v 赋值一个用户定义变量

案例应用:

passwd文件

1
sudo cp /etc/passwd ./
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
jimmy:x:500:500:jimmyguo:/home/jimmy:/bin/bash

搜索passwd 文件以root关键字开头的所有行,输出该行第7列

1
awk -F: '/^root/ {print $7}' passwd

搜索passwd 文件以root关键字开头的所有行,输出该行第1,7列

1
awk -F: '/^root/ {print $1","$7}' passwd

在passwd 文件所有行前添加user,shell ,仅打印第1列和第7列,且在最后一行添加”heihei,xixi”

1
awk -F: 'BEGIN{print"user,shell"} {print $1","$7} END {print "heihei,xixi"}' passwd 

将passwd文件的用户id加1

1
awk -F: -v i=1 '{print $3+$i}' passwd 

awk内置变量

1
2
3
FILENAME 文件名
NR 已读记录数
NF 浏览记录的域的个数(切割后,列数)

案例应用:

(1)统计passwd 文件名,行号,每行列数

1
awk -F: '{print FILENAME ,NR ,NF}' passwd 

(2)切割IP

1
ifconfig eth0 | grep "inet addr" | awk -F:'{print $2}' | awk -F ' ' '{print $1}'

(4)sort

对文件排序并将结果输出

1
2
3
4
5
sort [选项参数]
-n 依照数值大小排序
-r 相反顺序排序
-t 设置排序时所用分隔字符
-k 指定排序列

sort.txt

1
2
3
4
5
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6

按照“:”分割后的第3列倒序

1
sort -t : -nrk 3 sort.txt
1
2
3
4
5
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6

(5)综合案例

a.查询空行的行号

1
awk '/^${print NR}' sed.txt

b.计算第2列和并输出

1
2
3
张三 40
李四 50
王五 60
1
cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'

c.Shell检查一个文件是否存在

1
2
3
4
5
6
7
#!/bin/bash
if [ -f file.txt]
then
echo "文件存在"
else
echo "文件不存在"
fi

d.对数字排序并求和

1
2
3
4
5
6
7
cat test.txt
9
7
8
2
5
1
1
sort -n test.txt | awk '{a+=$0;print$0}END{print "SUM="a}'

e.shell脚本查找/home所有文本包含”shen”的文件名称

1
grep -r "shen" /home | cut -d ":" -f l

20.Ubuntu

系统通常自带Python

(1)设置root密码

a.输入sudo passwd,输入一般用户密码后设置root密码

b.设定root密码成功后,输入su命令,并输入刚才设定的root密码,可切换成root,提示符$表示一般用户,提示符#表示root用户
c.输入exit后返回一般用户

(2)安装vim等工具

1
apt install vim

其中apt是Advanced Packaging Tool的简称,是一款安装包管理工具,可用apt用于软件安装、删除、清理等。

相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sudo apt-get update 更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包

sudo apt-cache search package 搜索软件包
sudo apt-cache show package 获取软件包相关信息
sudo apt-get install package --reinstall重新安装

sudo apt-get -f install 修复安装
sudo apt-get remove package --purge 删除包(包括配置文件)
sudo apt-get build-dep package 安装相关的编译环境

sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-cache depends package 了解依赖包
sudo apt-cache rdepends package 查看依赖包
sudo apt-get source package 下载包源代码

更新Ubuntu软件下载地址(使用清华软件仓库镜像)

https://mirrors.tuna.tsinghua.edu.cn/

(1)备份Ubuntu默认源地址

1
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

(2)将sources.list清空

1
echo '' > sources.list

(3)将Ubuntu清华镜像使用帮助复制到sources.list

(4)更新源

1
sudo apt-get update

(3)SSH安装和启动

SSH为Secure Shell缩写,较为可靠,为远程登录会话以及资料拷贝。

Ubuntu没有自带SSH

1
2
sudo apt-get install openssh-server
service sshd restart//会监听端口22

=常见命令=

基础命令

  1. 超级用户:root
  2. 打开终端 ctrl+alt+t
  3. 查看硬件信息:lshw
  4. 查看cpu信息:lscpu
  5. 查看usb信息:lsusb
  6. 查看系统名(系统全部信息):uname [-a]
  7. 查看系统的架构 x86 表示32位 x86_64表示64位:arch
  8. 添加用户:adduser 用户名
  9. 设置密码:passwd 用户名
  10. 修改当前用户密码:passwd
  11. 切换用户:su(switch user)
  12. 进入用户目录(home):cd ~
  13. 删除用户:userdel 用户名
  14. 日期:date
  15. 更改时间:date -s ‘MMDDhhmmYYYY.ss’
  16. 查看文件路径:whereis 文件名
  17. 复制date:cp /bin/date ./work/mydate
  18. 查看环境变量:echo $PATH(:分隔)
  19. 加入新的环境变量:export PATH=$PATH:/home/user/work
  20. 文件名以.开头表示隐藏文件
  21. 查看文件目录:ls -l
  22. 查看隐藏文件:ls -la
  23. 查看命令:man ls
  24. 删除文件/目录:rm
  25. 删除空目录:rmdir
  26. 修改文件权限:chmod 744 my_date
  27. 创建文件:touch filea
  28. 查看文件内容(二进制):vi
  29. 查看文件内容(文本):cat
  30. 查看文件类型(例如是否为可执行文件scripte;text;executable):file 文件名
  31. ls显示首字母表示文件类型:-表示文件;d表示目录,rwx×3分别为user、group、other
  32. 将文件a和文件b打包成mytar.tar:tar cf mytar.tar filea fileb(c表示create;f表示file,打包对文件大小不压缩)
  33. 查看tar文件:tar tvf mytar.tar (t表示tar包具体文件和目录内容;v表示冗余详细信息;f表示file)
  34. 压缩tar文件:tar cjf mycompress.tar.bz2 filea fileb(j表示bz2压缩工具)
  35. 解压tar文件:tar xf mytar.tar -C mytar(x表示解压;C表示category解压目录)
  36. 比较文件目录:diff -r mycompress mytar (r表示recurrent)
  37. 对文件追加字符:echo “aaa” >> mycompress/mydate
  38. 查找指定文件名的路径:find /usr -name “time.c”(/usr为目录,-name参数,time.c表示文件名,*ime.c表示多个字符或者?表示单个字符模糊查找)
  39. 限制查找文件的类型:find . -type f -name “aaa”(f表示file文件;d表示directory目录)
  40. 限制查找用户的文件:find / -user username
  41. find高级应用:find /usr/src -name “*.c” -exec wc -l {} ;(其中exec后面表示linux的命令并以;结尾,因此要加入转义字符\;wc -l表示统计一个文件的行数;{}表示一次匹配的结果)
  42. find高级应用(复制):find /usr/src/ -name “*.c” -exec cp {} src/ ;
  43. find高级应用(统计数量):find /usr/src -name “*.c” >> count(将结果追加到count文件)
  44. 查找一个文件大小超过5M的文件:find . -type f -size +5M
  45. 统计数量而不产生文件方法:find /usr/src -name “*.c” >> count ; wc -l count ; rm count(一次执行多个命令)
  46. 显示行数:wc -l count(可查看数量)
  47. 统计字数:wc 命令 - c 统计字节数 - l 统计行数 - w
  48. 统计字数(基于管道):find /usr/src -name “*.c” | wc -l(左侧命令为右侧命令输入)
  49. vi显示行号:set number (或set nu)
  50. vi隐藏行号:set nonumber
  51. vi跳转第一行1G;末行GG;n行nG
  52. vi跳转行末尾$(shift+4)行首^(shift+6)
  53. vi删除一行dd
  54. vi撤销u
  55. vi选中操作v
  56. vi删除全文1G dG
  57. vi复制一行yy;粘贴p;选中复制v y
  58. vi剪切 x
  59. vi搜索 /main(使用n进入下一个)或 ?main
  60. vi自动缩进:光标到达某行输入100表示以下100行,按下==即自动缩进
  61. vi代码补全:ctrl+p
  62. 查看主机名:hostname
  63. 修改主机名:vi /etc/sysconfig/network(重启生效)
  64. 修改主机名:vi /etc/hosts (添加本机IP和名称)
  65. 关闭防火墙(centos7以下):service iptables stop
  66. 关闭防火墙(centos7以上):systemctl stop firewalld.service
  67. 查看用户的登陆日志:last
  68. 给所有登录再本机的用户发消息:wall
  69. 给当前联机的用户发消息:write
  70. 查看每个用户最后的登陆时间:lastlog
  71. 显示当前目录:pwd
  72. 创建组:groupadd groupname
  73. 修改文件组群:chgrp group file
  74. 修改文件所有人:chown user file
  75. 实时查看文件:tailf
  76. 查看进程:jps
  77. 生成500个1M的文件:dd if=/dev/zero of=test.txt bs=1M count=5000
  78. time dd if …. 查看上一命令花费时间
  79. RPM安装/更新/卸载:rpm -ivh 、rpm -Uvh、rpm -e
  80. YUM安装/更新/卸载:yum install 、yum update、yum remove
  81. 显示全部定时任务:crontab -l
  82. 编辑定时任务:crontab -e
  83. 使用nohup提交作业并立即执行,同时重定向输出文件,末尾&表示立即执行:nohup command > myout.file 2>&1 &
  84. 获取当前年月日:today=’date +%Y-%m-%d’
  85. 获取明天日期:date -d next-day +%Y%m%d
  86. 获取昨天日期:date -d last-day +%Y%m%d
  87. 获取昨天日期:date -d “+%Y%m%d
  88. 获取上周年月日:date -d “7 days ago” + %Y%m%d
  89. 查看最近1000行日志:tail -1000 xx.out
  90. 动态实时查看后端日志:tail -f
  91. 查看某个端口是否被占用:netstat -anp | grep 8080
  92. 查看当前所有已经使用的端口情况:netstat -nultp
  93. 显示进程pid:ps -ef| grep java
  94. 查看服务器内存使用情况:free -m
  95. 查看所有状态:ps -aux | grep java
  96. 杀死进程:kill -9 pid
  97. 创建链接文件:ln
  98. 启动tomcat:cd /java/tomcat/bin ./startup.sh ./shutdown.sh(注意./为当前目录,../上层目录)
  99. 查看当前进程: ps;执行退出: exit查看当前路径: pwd
  100. 软链接: ln -s slink source;硬链接: ln link source
  101. 硬链接:通过文件系统的inode来产生新档名,而不是产生新档案。
  102. 软链接:看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。
  103. 终端是 /dev/tty文件夹;黑洞文件是/dev/null
  104. 查看后台任务:job -l
  105. 磁盘空间 df -h
  106. 查看文件的类型:file 文件名/目录名
  107. 立即关机:poweroff
  108. 取消关机:Shutdown -c
  109. 取消关机:pkill shutdown
  110. 5分钟之后自动关机:shutdown -h +5
  111. 重启:reboot
  112. 重启:shutdown -r now
  113. 查看端口是否打开:lsof -i : 端口号

Linux软件包管理:

dpkg 管理工具,软件包名以.deb后缀。

比如安装tree命令的安装包,先将tree.deb传到Linux系统中,再使用命令。

sudo dpkg -i tree_1.5.3-1_i386.deb 安装软件

sudo dpkg -r tree 卸载软件

APT高级软件工具,适合系统能够连接互联网,以tree为例。

sudo apt-get install tree 安装tree

sudo apt-get remove tree 卸载tree

sudo apt-get update 更新软件

sudo apt-get upgrade

系统目录

  1. cd / : 进入根目录
  2. bin:可执行的二进制文件,通常放的是系统自带的文件
  3. dev:Device,设备,通常系统的硬件被抽象成一个文件存放在dev中
  4. initrd.img:开机启动时的图片
  5. lost+found:异常关机时存放错误信息的文件
  6. opt:Options,存放开发者自己开发并安装的软件
  7. run:系统运行时需要的文件
  8. srv:存放服务启动后需要访问的文件数据
  9. usr:存放与用户直接相关的文件目录
  10. boot:启动配置文件,启动时需要的核心文件
  11. etc:配置文件(系统中各种所需要的配置文件)
  12. lib、lib64:库,系统内置的库文件,自己安装的各种软件的动态或静态的链接,windows中的dll很相似。
  13. media:媒体,存放是系统外接设备,如U盘,硬盘
  14. proc:系统文件
  15. sbin:系统管理员特用的二进制文件(root用户)
  16. sys:系统文件
  17. var:存放日志信息(启动日志,软件日志)
  18. cdrom:挂载入口
  19. home:家,每个用户都会在home目录下有一个自己的文件夹,这个文件夹的名称与用户名一致
  20. mnt:挂载点,临时安装的挂载
  21. root:超级管理员的目录
  22. snap:全新的管理软件包的方式
  23. tmp:临时文件

网络命令:

  1. hostname

hostname 没有选项,显示主机名字

hostname –d 显示机器所属域名

hostname –f 显示完整的主机名和域名

hostname –i 显示当前机器的 ip 地址

  1. ping 确认网络连接是畅通的&查看连接的速度信息。

  2. ifconfig:显示当前网络设备配置

  3. iwconfig:查看设置基本的 Wi-Fi 网络信息

  4. nslookup:ip->hostname;hostname->ip

  5. traceroute:查看数据包在提交到远程系统或网站时候所经过的路由器的 IP 地址、跳数和响应时间。

  6. telnet:连接目标主机

telnet hostname port – 使用指定的端口 telnet 主机名,测试主机是否在线或者网络是否正常。

  1. ethtool

ethtool 允许你查看和更改网卡的许多设置(不包括 Wi-Fi 网卡)。你可以管理许多高级设置,包括 tx/rx、校验及网络唤醒功能。下面是一些你可能感兴趣的基本命令:

ethtool -i 显示一个特定网卡的驱动信息,检查软件兼容性时尤其有用

ethtool -p 启动一个适配器的指定行为,比如让适配器的 LED 灯闪烁,以帮助你在多个适配器或接口中标识接口名称

ethtool -s 显示网络统计信息

ethtool speed <10|100|1000> 设置适配器的连接速度,单位是 Mbps

  1. netstat

发现主机连接,你可以使用”netstat -g”查询该主机订阅的所有多播组(网络)

netstat -nap | grep port 将会显示使用该端口的应用程序的进程 id

netstat -a or netstat –all 将会显示包括 TCP 和 UDP 的所有连接

netstat –tcp or netstat –t 将会显示 TCP 连接

netstat –udp or netstat –u 将会显示 UDP 连接

netstat -g 将会显示该主机订阅的所有多播网络。

电脑B连接电脑A的虚拟机

※ 以centos6.5为例(具体命令在不同版本有所不同)

(1)虚拟机配置为桥接模式

(2)vi /etc/sysconfig/network-scripts/ifcfg-eth0

配置为静态IP:

BOOTPROTO=”static”

IPADDR=192.168.1.80(电脑A的ip为192.168.1.42,于是我配置为192.168.1.80,将其配在同一网段)

GATEWAY=”192.168.1.1”

NETMASK=”255.255.255.0”