接下来我们开始学习shell相关的知识,那么shell是什么??怎么操作呢?开始今天的学习吧。
一.shell相关常识
1.了解什么是shell?
linux中shell就是linux内核的一个外层保护工具,负责完成用户与内核之间的交互。
shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。
2.用户 shell 和linux之间的关系
3.常见的几种shell版本
bourne shell,(sh)
c shell(csh)
korn shell(ksh)
bourne again shell //目前主要用这个,sh发展而来
4.shell命令之前的文件和目录的一些指令我们接触过了,还有一些装逼用的命令
sudo shutdown -h now //立即关机
sudo shutdown -r now //立即重启
sudo reboot now //立即重启
sudo shutdown -h +45 “that is all,game over” //定时关机
whomi //用户名
hostname //主机名
pwd //当前目录
二.shell命令格式
1.例:
linux@ububtu:~$
用户名,主机名:~(我们的家目录为我们根目录下home目录下的某个用户的目录 /home/linux,)$为用户权限(普通用户),超级用户会变为#。
2.通常一个shell包括命令名称,选项,参数。
3.shell命令格式
指令严格区分大小写。
一条命令的三要素之间用空格隔开
多个命令一行书写,用分号(;)将指令隔开(ls -l;cd ..)
一条指令不能写完在行尾用反斜杠(\)标明该行未结束.
三.shell命令行操作
补全命令与文件名(tab )
查询历史命令(方向键,history显示最近的指令)
history 默认记录500条
echo $HISTSIZE //查看当前容量
shell将历史命令保存在环境变量HISTSIZE中
可通过HISTSIZE=100修改历史命令容量(修改的为临时的)
想要永久修改需要修改配置文件 ~/.bashrc,这时修改的为永久的。
四.shell中的特殊字符(提高效率)
1.shell中的通配符(shell脚本中运用较多)
例:ls file* ls file? ls file_[ax] 等
2.shell中的管道
管道可以把一系列命令连接起来,意味着第一个命令的输出将作为第二个命令的输入等
使用管道可以巧妙的将一些命令联合使用
ls /usr/bin | wc -w //得到/usr/bin目录下文件的个数
3.输入输出重定向
重定向是改变命令或程序默认的标准输入输出,重定义到新目标。
例:本来终端打印,改到保存到文档里。
>file //如果file中有内容,先清空再保存,新建模式
ls >file ……cat file//查看下保存内容的文件
>>file 追加模式(内容添加到文件内容后)
<file 输入源
cat <file //将file中的文件打印了一下
2> 或&> //标准出错
ls hello 2>file //将报错信息保存到file
ls -l filew.text wrong.txt >right.text 2>wrong.tet//打印的正确信息和错误信息分别保存在不同文件
4.命令置换
将一个命令的输出作为另一个命令的参数
ls `pwd‘//查看当前目录文件(pwd的结果作为ls的参数,也可以写为ls $(pwd))
例如:
查看当前时间
echo “today is data” //结果:today is data
echo “today is `data`”;//today is mon feb 22 ……..
五.shell基本系统维护命令
1.man //获取联机帮助
man ls //查看ls使用,:q退出帮助界面
帮助信息包含以下内容
NAME:命令名称
SYNOPSIS:命令的语法格式
DESCRIPTION:命令的一般描述以及用途
OPTIONS:描述命令所有的参数或选项
SEE ALSO:列出联机版主页中与该命令直接相关或者相近命令
BUGS:问题及缺陷
EXAMPLES:普通用法示例
AUTHORS:联机帮助页以及命令的作者
2.passwd
sudo passwd //修改密码
3.su //临时改变用户身份,exit命令切换回来
su //不加用户名默认切换到超级用户
4.echo 显示一段文字,起提示作用
echo “hello” //打印出hello
echo -n “hello” //打印完不换行
例:
A=3
echo $A //终端打印3
5.
data 用于显示和设置系统日期和时间
sudo data -s 5:30:40 //修改时间
6.clear 清屏(或者使用ctrl+L)
7.df 查看磁盘空间使用情况
-a 显示所有文件系统的使用情况
-T显示文件格式类型
-h 大小按兆字节显示
-k 大小按千字节为单位显示
例:
从以下命令的执行结果可以看到,这台计算机只有一块硬盘(/dev/sda1),文件格式类型为Ext3,已经使用36%的存储空间。
linux@ubuntu:~$ df –T
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda1 ext3 7850996 2664868 4787316 36% /
8.
du 列出目录和文件所使用的磁盘块数,每块512字节
-a 列出空闲文件数
-h 列出磁盘使用情况
-s 列出总的空闲空间(kb)
六.Linux用户管理
1.用户管理相关文件
/etc/passwd 文件是系统能够识别的用户清单, 用户登陆时,系统查询这个文件,确定用户的UID并验证用户口令( 1)登陆名 2)经过加密的口令 3)UID 4)默认的GID 5)个人信息 6)主目录 7)登陆shell)
用户属性(用户名 口令 用户ID 用户主目录 用户shell)
/etc/group 包含了UNIX组的名称和每个组中成员列表
每一行代表一个组(组名 加密口令 GID号 成员列表)
sudo adduser newuser //添加newuser为新用户
/etc/adduser.conf 配置文件
/etc/skel目录被/usr/sbin/useradd使用
这个目录存有新用户常用的一些配置(环境变量,Vim配置等)
2.用户管理相关命令
su linux //切换到linux用户下
exit //回到之前用户
sudo passwd linux //为liux修改新密码
修改用户属性
sudo usermod -d /home/test -m -l test linux 修改用户名为test和家目录
删除用户
sudo deluser -remove-home test //删除test用户
添加用户组
sudo addgroup group
删除用户组
sudo delgroup group
七.进程管理相关指令
1.进程概念
程序的一次执行就是一个进程
使用命令查看进程
(1).ps 显示进程的动态
ps -elf
ps aux
以上两种都是显示进程动态,只是显示遵循的标准不一样
进程的状态标志
(D:不可中断的静止 R:正在执行中 S:阻塞状态 T:暂停执行
z:僵尸,资源未释放 <:高优先级进程 N:低优先级进程 L:有内存分页分配并锁在内存中)
(2).top 实时监测进程(q退出)
(3).pstree //树形方式演示进程信息,查看进程间关系
(4).cd /proc/ (进程相关信息存储的位置,实质)
(5).
kill [-signel] PID //终止进程(发送杀死信号终止进程)
kill -9 PID //发信号杀死
kill -L //查看kill支持的信号
八.文件系统的类型和结构
1.文件系统:用于组织和管理计算机存储设备上的大量文件,并提供用户交互接口
linux支持的文件系统格式
磁盘文件系统:硬盘,DVD,磁盘等(常见文件格式FAT FAT32 NTFS,EXT3,)
网络文件系统:网络远程访问的文件系统(格式:NFS,Samba)
虚拟文件系统:不驻留在磁盘上的文件系统
文件系统类型:Ext4 linux上常用的文件格式
sata硬盘的设备名称 /dev/sda
IDE硬盘设备名称是 “/dev/hda”
/dev/hab_1 表示第二个IDE硬盘的第一个分区
cat /proc/partitions //查看硬盘设备具体信息
交换分区:将内存中的内容写入硬盘,或从硬盘中读出,称为内存交换
2.linux 文件系统结构:
树形分层结构
windows下,目录结构属于分区
linux下,分区属于目录结构(分区挂载在目录下)
linux中将所有设备都视为文件来处理(一切皆文件)
文件分层结构标准(FHS)
绝对路径和相对路径
绝对路径:文件在文件系统中的准确位置(pwd查看)
相对路径:相对于用户当前位置的一个文件
九.文件系统相关命令
- file命令 //判定一个文件的类型
flie 1.c file destop/
mkdir dir
mkdir -p dir1/dir2/dir3 (创建多层目录)
rmdir -p dir1/dir2/dir3(删除多层目录,但是各层目录要为空)
rm -r dir1 //同样可以删除目录,不要求各层目录为空
- ln命令
两种类型的链接:(动态库经常用到链接)
硬链接:利用linux为每个文件分配的物理编号(备份)-inode建立链接,不能跨越文件系统。
软链接(类似快捷方式):文件路径名建立链接(绝对路径),增加可移植性
ln 1.c copy_link //建立硬链接,内容相同,源文件改名字,链接无影响,删除再重建文件,链接失效(inode已经改变)
inode节点:磁盘—》进行分区—》分区为单位建立文件系统—》每个文件给一个唯一的inode编号
注:硬链接和cp不是一回事(cp后会占用新的内存,新的inode,可跨越文件系统拷贝,硬链接实际是增加了原来文件的count(链接数))
ln -s 1.c test_link //建立软链接,内容相同,源文件改名字,链接失效,删除在重新创建源文件,链接有效。
- 文档的归档和压缩
gzip gunzip
gzip test.c //压缩为.gz的压缩包
gunzip test.gz //解压文件
bzip2 test.c //压缩为.bz2压缩包
bunzip2 test.c.bz2 解压文件
zip file.zip test.c
unzip file.zip
- tar 命令(归档和压缩功能)
例:tar -czf d1.tar.gz d1
解压:tar -xvzf d1.tar.gz 等
tar –cf myExamples.tar myExamples
十.linux网络配置
无论命令行还是图形界面,最后都是通过修改网络配置文件配置网络
如: /etc/interfaces , /etc/hosts, /etc/resolv.conf
配置IP地址:
静态IP,动态IP
ifconfg //查看IP
ifconfig eth1 //只看eth1网卡的相关信息
sudo ifconfig eth0 192.168.1.129 netmask 255.255.255.0 //配置IP和掩码(临时生效)
sudo dhclient //动态获取IP(电脑寻找 DHCP房东,多个房东给你分配一个房子(IP),电脑觉得A房东的不错确认要租这间,A房东和电脑确认签协议)
无论是配置静态IP还是动态IP想永久生效,就要修改配置文件
1./etc/network/interfaces (静态直接读取配置文件参数,动态就通过DHCP获取网络配置)
例:简要说明
配置文件中动态配置
auto eth0
iface eth0 inet dhcp
静态获取IP配置
auto eth0
iface eth0 inet static
address 192.168.0.129
netmask 255.255.255.0
gateway 192.168.0.1
2.DNS服务器的指定
/etc/resolv.conf 文件中替换相应的服务器地址
nameserver 192.168.0.1
3.sudo vi /etc/rc.local
echo “nameserver 192.168.0.1”>> /etc/resolv.conf (将DNS服务重定向到DNS文件,使每次都写这个服务器)
修改完后
sudo /etc/init.d/networking restart //使刚才的修改生效
但是我执行完这条指令没有返回ok,重启后IP配置成功了,但是没有外网。
最后使用图形界面配置的静态IP,但是为什么图形界面好用。(按说都是操作文件,不应该啊)
ping 命令
判断网络是否通畅(ctrl+C打断)
nslookup //根据域名获取对方主机IP地址
nslookup www.baidu.com