Linux基础
前言: LINUX在之前仅仅了解一些皮毛知识,最近计划深入研究大数据,LINUX当然少不了,所以借此良机将LINUX也顺带添加进入学习的目录之中。为了知识的全面性,本文先恶补一下LINUX的基础,作为今后的学习查询。不在刻意深入学习,重点是HADOOP。
一、Linux Shell相关
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键。
Shell有两种执行命令的方式:
- 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。
- 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。
知识点(摘自网络):Shell执行脚本的4种方法 Shell常用技巧(1) Shell常用技巧(2) Shell常用技巧(3) 重定向 NFS配置
二、Linux命令相关
有关命令的资料太多,这里就给出一个在线命令查询足矣! linux互传文件 windows与linux之间互传文件。
下面列出当初学习Linux命令的笔记,不为别的,只为能够快速记忆,并需要后续的补充和维护。
1- 避免使用“.”;大小写区分, 命令格式: 命令 -选项 参数;
文件命令: pwd 获取当前文件位置;
touch:创建文件; 如果已经存在,就改变文件的访问时间atime等时间戳信息。 "cat > "创建文件,如果文件已经存在,则清空。命令执行之后需继续输入文件内容,回车、ctrl+d结束。
mkdir:创建文件夹
cp:复制文件(cp file1 files xdir);
cp -R :复制文件夹;
mv:移动文件/文件夹或者给当前文件重命名
rm:删除文件或者文件夹
cat:查看短文件的内容 cat > 创建文件 cat >> 追加文件内容(如果不存在则创建)。
more:分页查看文件(空格按页分页显示,回车按行分页显示,Q/q退出此浏览模式)
head:查看文件的前-X行; tail:查看文件的后-X行
ln:创建硬链接 ;ln -s:创建软链接
软链接类似与WIN中的快捷方式;
硬链接类似与拷贝(时间也相同),但是它是同步更新(每个文件必须有i节点;硬链接与源文件有相同的i节点);
硬链接不能跨文件系统(类似与在WIN下,不能把文件生成硬链接从C盘到D盘),软链接可以;
echo: 打印内容。“>”重定向。
示例:echo "hell" > a.txt 单行文本覆盖到文件。 echo "hell" >> a.txt 追加,不会覆盖原文件。
文件搜索: which显示命令所在文件的目录; whereis:显示命令所在文件的目录; 两者不同之处:WHICH 会显示出命令的别名;WHEREIS 会显示出命令帮助文档的位置;
find:搜索文件/目录;尽量不要在/目录查找!!! 命令格式: find [搜索路径][搜索关键字]
示例:find /etc/ -name init 在etc目录下查找名为init的文件或者目录;
find /etc/ -name init* 在etc目录下查以init开头的文件或者目录;?匹配单个字符;
find / -size +204800 在根目录下查找文件大于100M的文件;100M=102400K 1K=2个 数据块100M=204800块 find /home -user seasky 在home下查找属于seasky用户的文件;
c-change a-access m-modify change:表示文件属性被修改;modify:表示文件的内容被修改过; ctime atime mtime 以天为单位 cmin amin mmin以分钟为单位 -之内,+之外;
find /etc -ctime -1 在etc下查找24小时内修改属性的文件和目录; 连接: -a and -o or find /etc -size +163840 -a -size -204800 在etc下查找大于80M小于100M的文件;
find /etc -type -d -o -size -204800 在etc下查找是目录并且小于100M;
find ....-exec{}\; find ....-ok{}\ 会询问确认; 可以对查找到的文件进行处理,{}表示find查询的结果,\表示转译符;
转译符的另一种用法:rm 其实是修饰过的命令,是rm -i 的别名,如果不想使用这个别名,就可以:\rm ; find /etc -name inittab -exec ls -l {}\;
在etc目录下inittab文件并显示详细信息; 假如不小心创建了一个a b 这样的特殊文件,怎么删除呢 ? rm 'a b'; 还有一种万能的方法:1、查看文件的i节点:ls -i 2、find . -inum 89 -exec rm {} \;
locate:locate file ;查找与关键字有关的文件;很快,但是它有的找不到;因为它去查找的是文件系统的数据库; 这个命令通常配合updatedb使用;UNIX是没有这个命令的;
grpe:是在文件中搜索字符串然后整行输出; grep [指定字符串][源文件]
权限命令:chmod :chmod [u/g/o] [=/-/+] [x/r/w]
eg: chmod u+x a.txt 给文件a的所属者添加可执行权限 chmod 641 a.txt 将文件a的权限修改为所有者可读可写(4+2),所属组为可读(4),其他人可执行(1);
chown:改变文件的所有者;chown [用户][文件/文件夹]
chgrp:改变文件的所属组;同上;
umask :查看文件的权限,文件的权限掩码值; 例如:0022 0:特殊权限位; 777-022=755 755才是最终文件的权限; umask -S 比较直观;部分LINUX系统没有-S的选项;
LINUX缺省创建的文件不能授予X权限;即使默认的权限是755,但是正在创建出来的文件也是没有X权限的;
可以修改文件的默认创建的权限值;(不建议修改!!!) 默认是022即755;修改为750,命令加上750的掩码值(777-750=027)--> umask 027
2-使用命令的帮助 示例: ls --help显示命令选项信息; 示例: 查看配置文件的简介:apropos file 类似与man -k 示例: man ls ;
获得命令和配置文件的帮助文档(文档是按照more命令格式显示的);
man services 不能写 man /etc/services ;查看配置文件的帮助文档; 如果命令和配置文件名相同怎么办?man 5 passwd 表示查看配置文件的帮助;
在man 命令下 1 代表命令; 5 代表配置文件;在UNIUX和LINUX下都支持。
示例:info 在UNXIU下是没有的,跟man基本差不多,只是信息展现方式不同; 示例:whatis 获取命令的简单帮助信息; makewhatis :更新新安装软件的帮助文档,更新之后,whatis 和apropos就可以正常使用了;
示例:help cd 查看SHELL内置命令的帮助;如果使用man 加内置命令,显示的信息是告诉你有系统有那些内置命令;
3-文件权限:三种用户u g o r-read 4 w-write 2 x-execute 1 文件类型:d:目录 -:二进制 l:软链接 r 对文件的含义:可以查看文件内容;
对文件夹的含义:可列出目录内的内容; w 对文件的含义:可修改文件的内容; 对文件夹的含义:可在目录内创建/删除文件;
x 对文件的含义:可执行文件; 对文件夹的含义:可进入目录; 备注:普通用户删除一个文件,只有文件的W权限是没有用的,必须有所在目录的W权限才可以删除;
4-存储数据的最小单位: 数据块(默认大小512K)
5- 用户能修改密码是由于passwd这个命令文件有个特殊权限s:setuid;当一个可执行程序具有setuid权限,用户执行这个程序时,将以这个程序所有者的身份执行。
我们通常也可以使用chmod将s权限赋予某命令:
setUID=4 所有者 u setgid=2 所属组 g 粘着位=1 其他人 t
chmod u+s 或chmod 4755 chmod g+s或chmod 2755或chmod 6755 chmod o+t或chmod 1777
( 粘着位只能有效于目录,通常在777的目录上搞:每个用户可以在这个目录下创建文件,但是只能删除自己的文件)
查找SetUID程序:find / -perm -4000 -o -perm -2000 查找在根目录下有setUID或者setGID的文件 LINUX用户管理链接
6- 进程管理
前台进程:用户在进程完成之前不能执行另一个命令;
进程管理命令:who 和 w 都可以查看当前用户的登录信息,w 用户名:查看某个用户信息;w给出的信息更多:
JCPU,以终端代号来区分,该终端所有的进程执行时,所消耗的CPU时间会显示;
PCPU:CPU执行程序消耗的时间;
WHAT:用户正在执行的操作;
load average:显示系统在1、5、15分钟内的平均负载程度;
FROM :显示用户从哪里登录;“:0”显示用户从X Windows
IDLE:用户闲置的时间。
进程查看命令: ps 示例:ps -le or -aux:查看所有用户执行进程的详细信息 pstree 查看系统树状进程信息
-a:显示所有用户的进程
-u:显示用户名和启动时间
-x:显示没有控制终端的进程
-e:显示所有进程
-l:长格式显示
-w:宽行显示,可以使用多个w进行加宽显示
ps显示内容:PID,进程号 PPID,父进程的进程号 TTY,进程启动的终端 SATA,进程当前状态 NI,进程优先级
TIME,进程启动后占用CPU的时间 COMMAND/CMD,进程的命令 USER:用户名
%CPU:占用CPU时间和总时间的百分比 %MEM,占用内存与系统内存总量的百分比
top 进程状态显示和进程控制,每5秒自动刷新一次,常用选项:
d:指定刷新的时间间隔 c:显示整个命令行而不仅仅显示命令名
u:查看指定用户的进程 h or ?:获得帮助
k:终止执行中的进程 r:重新设置进程优先级
s:刷新时间的间隔的改变
w:将当前设置写入~/toprc文件中
关闭进程:kill 进程号 kill -9 进程号(强行关闭) kill -1 进程号(重启进程)
xkill 关闭图形程序 killall 关闭所有进程
查找服务进程号:pgrep 服务名称 关闭进程:pkill 进程名称
优先级命令:nice 指定程序的运行优先级:nice -n command renice 改变一个正在运行的进程优先级:renice n pid
优先级的范围 -20 ~ 19
nohup 使进程在用户退出登录后仍旧继续执行,nohup命令将执行后的数据信息和错误信息默认存储在nonohp.out文件中
nohup program &
进程的挂起和终止: 挂起:Ctrl + Z 终止:Ctrl + C
进程的恢复:恢复到前台继续运行 fg 恢复到后台继续运行 bg 查看被挂起的进程:jobs
7-计划任务
at:安排作业在某一时刻执行
示例: 在5分钟后,将motd文件内容广播出去;
另外,可使用ps -le | grep atd 命令检查作业是否成功。
基本用法:at [-f 文件名] 时间
at -d or atrm :删除队列中的任务
at -l or atq :查看队列中的任务
如果计划任务比较复杂,就使用脚本创建作业
示例:1 生成脚本文件at.script 2 使用at命令 at -f at.scipt 9:00 2/2/11
at的执行结果和配置文件:如果/etc/at.allow文件存在,那么只有在文件中的用户才可以使用at命令;
如果/etc/at.allow文件不存在,则检查/etc/at.deny文件是否存在,
如果/etc/at.deny存在,则在文件中的用户不能使用at命令
如果两个文件不存在,则只有超级用户可以使用at命令
如果两个文件存在且为空,则所有用户都可以使用at命令
batch:安排作业在系统负载不重(平均负载降到0.8一下)时执行,使用方法同at
cron;安排周期性作业
crontab命令格式作用;用于生成cron进程所需的crontab文件
crontab {-l | -r | -e} ; -l:显示当前的crontab; -r:删除当前的crontab; -e:使用编辑器编辑当前的crontab文件
-e编辑时的时间:将知道的具体时间加上,不知道的为* ;“,”分割不同时间
minnute hour day-ofomonth month-of-year day-of-week commands 【分钟、小时、天、月、星期、命令/脚本】
注意:这些选项不能为空;每个时间字段都可以指定多个值,使用“,”分割;命令使用绝对路径;用户必须用使用命令的权限;
示例: 55 12 * * 1-5 /usr/bin/wall < /etc/motd crontab文件an建立好之后可以在/var/spool/cron目录确认;
进程处理方式: standalone:独立运行 例如:apache ; xinetd:进程托管(互联网超级守护进程) atd、crond:计划任务
8-linux文件系统
文件系统构成
重要目录: /usr/bin、/bin:存放所有用户可以执行的命令 /tem:存放临时文件
/usr/sbin、 /sbin:存放只有root可以执行的命令 /etc:系统配置文件
/home:用户缺省宿主目录 /dev:存放设备文件 /var:包含经常发生变动的文件
/proc:虚拟文件系统,存放当前内存镜像 /usr: 存放所有命令、库、手册等
/lib:存放系统程序运行所需的共享库 /mnt:临时文件系统的安装点
/lost+found:存放一些系统出错的检查结果 /boot:内核文件及自举程序文件保存位置
在linux中安装文件习惯安装在/usr/local目录下;
常用命令:查看分区使用情况:df 查看文件、目录大小:du
监测修复文件系统:fsck、e2fsck(单用户模式) 判断文件类型:file
使用光驱:挂载光驱 #mount /dev/cdrom /mnt/cdrom
#df
#cd /mnt/cdrom
#ls /mnt/cdrom
卸载光驱: #umount /mnt/cdrom
#eject //弹出光驱
挂载的设备:c表示字符设备 b表示块设备
添加磁盘或分区:硬盘添加后,使用命令dmesg | grep sdX 检测硬盘是否添加成功;然后就
1 划分分区(fdisk) 2 创建文件系统(mkfs) 3 尝试挂载(mount) 4 写入配置文件(/etc/fstab)
参见示例
当SWAPFILE分区空间不足,可使用SWAPFILE实现:参考
1.# mkdir /var/swap
# chmod 700 /var/swap
2.# dd if=/dev/zero of=/var/swap/file.swp bs=1024 count=65536 // dd硬盘之间的互相拷贝; dd可创建指定大小的文件,使用zero伪设备;
3.# mkswap /var/swap/file.swp //将创建的64M空间作为swap来用
4.# vi /etc/fstab
/var/swap/file.swp swap swap defaults 0 0
5.free
6.swapon /var/swap/file.swp
7.free
磁盘配额 LVM讲解
9-网络配置
ifconfig 查看网络信息 ifconfig eth0 查看eth0网卡 ifconfig eth0 down 临时停用eth0网卡 ifconfig eth0 up 启用eth0网卡
ifconfig eth0 192.168.2.22 临时修改网卡IP
ifconfig eth0 192.168.2.22 netmask 255.255.255.0 临时修改IP和子网掩码
永久修改网卡信息:vim /etc/sysconfig/network-scripts/ifcfg-eth0 service network restart
hostname 查看当前用户名称 hostname zhangsan 修改用户名称(永久修改名称:vim /etc/sysconfig/network )
配置DNS信息vim :/etc/resolv.conf curl -v -L http://www.baidu.com 可以用来监测DNS是否设置好了 或者ping
使用nslookup 后跟域名 可以用来监测DNS是否通。使用exit退出
使用tracer(跟踪路由):后跟域名用来判断到达域名要经过多少个路由设备
三、vi相关
话不多说,一张图代表很多了。
在贴上VI学习的笔记
在命令模式下 1、插入命令 第一组:a 在光标后附加文本 ,A在本行行末插入文本; 第二组:i在光标前插入文本,I在本行开始插入文本; 第三组:o在光标下插入文本,O在光标上插入文本; 2、定位命令 h:左移一个字符; l:右移一个字符 j:下移一行; k:上移一行; $:移动至行首; 0:移动至行未; H:移动到屏幕上端;M:移动到屏幕中央;L:移动到屏幕下端; :set nu 设置行号; :setnonu 取消行号; gg:到第一行 G:到最后一行 nG 或者:n 到第N行 3、删除命令 x:删除光标所在处字符;nx:删除光标所在处后N个字符; dd:删除光标所在行 ndd:删除光标后N行 dG:删除光标所在行到末尾的内容; D:删除光标所在位置到行未的内容; :n1,n2d :删除指定行;例如:2,5d 4、复制/剪切命令 yy Y:复制当前行 nyy nY:复制当前行一下N行 dd:剪切当前行(删除) ndd:剪切当前行一下N行 P p:粘贴在当前行上或者行下; 5、替换和撤销命令 r:取代光标处字符;R:从光标所在处开始开始替换字符,按ESC停止; u:取消上一步操作; 6、搜索和替换命令 /string:向前搜索指定字符串;搜索时忽略大小写:set ic,在执行/string命令后,直接:set ic即可; n:搜索指定字符串下一个出现位置,大小写的搜索方向不同; :%s/old/new/g :全文替换指定字符串,g 或者c都可以C会有提示; :n1,n2s/old/new/g :在一定范围内替换指定字符串 7、其他命令 文件另存为: :w 空格 文件目录和文件名 在命令模式下执行命令 :! 命令 将其他文件内容追加当前的文档 :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd 可以将命令执行的结果导入到文档中(结合上两个命令):示例::r !date 将时间添加在文档的光标位置; 定义快捷键: :map 快捷键 触发的命令 unmap取消快捷键 编辑VI的配置文件:ROOT的宿主目录在root目录 用户在其home下名为用户名的目录;用~/.表示; 编辑这个宿主目录下文件 ~/.vimrc,将定义的快捷键写在这个文件即可;这样的快捷键是永久的。 示例:将的当前添加注释:map ^P I#<ESC> ctrl+v ctrl+v+p就可以打出^P; 替换:将ABO替换成SEASKY-ABO :ab ABO SEASKY-ABO 使用unab 取消替换;
管道命令——| command1 | command2 | command3
注:管道命令必须能够接受来自前一个命令的数据成为standard input继续处理。
四、LINUX软件包管理
Linux中的软件包主要分为RPM、YUM软件包及DEB软件包两类还有些可视化管理,其中Redhat Linux等系统使用RPM、YUM软件包,Ubuntu Linux等系统使用Deb软件包。
1、RPM软件包管理 RPM包命令参考 linux源码安装参考
首先,软件包的下载要注意硬件平台的差异。比如i386是WIN32位。
* 软件包的卸载,例如:rpm -e sudo ;假如卸载的软件包在系统中其他应用依赖,建议先卸载依赖的应用;这也是为什么引入YUM的软件包管理原因。
当然你也可以强行卸载(例如:rpm -e -nodeps sudo);
* 软件包的安装,例如: rpm -ivh sudo-1.7.2.p1-5.el5.i386.rpm ; i:install的意思 v:表示命令执行时显示详细信息 h:在安装时有个进度提示。
* 安装包的获取:1、LINUX安装光盘 2、网络下载的软件(使用 rpm -i 软件可直接安装)
安装LINUX光盘的软件,先要挂载光盘,需要一个挂载点就是空目录:
mkdir /mnt/cdrom //习惯都是搞在mnt目录下;
mount /dev/cdrom /mnt/cdrom //光盘通常放在dev目录下;
挂载之后,访问/mnt/cdrom相当于访问光盘的内容:
然后进入CENTOS目录,使用命令找到相应的安装包:如下图,然后安装,
最后使用rpm来查看安装包是否安装了:
下面显示系统中所有与samba系统有关的软件包:
安装时候使用自定义的安装选项:
1/ --excludedocs : 不安装文件包中的文档文件 2/ --prefix PATH :将软件安装到指定的PATH路径下;但是大部分的RPM包不允许改变路径; 3/ --test :只进行测试安装,并没有真正安装
安装时候的常见情况:
1/ 软件包已经被安装了 使用--replacepks覆盖
2/ 文件冲突 使用--replacefiles忽略
3/ 未解决的依赖关系 使用--nodeps强制安装,通常先将依赖包安装才是正道,但是依赖很多包怎么破:YUM
软件升级:
rpm -Uvh sudo-1.7.2.p1-5.el5.i386.rpm
2、 YUM软件包管理 帮助:yum -help man yum YUM命令参考
好处:解决包的依赖和升级方便,可是要联网
YUM安装常用选项:安装:yum install 直接软件名称即可。
检测升级:yum check-update
升级:yum update
软件包查询:yum list 查询的是yum源
软件包信息:yum info
卸载:yum remove
3、APT软件包管理
在虚拟中安装linux请选择VNT模式:然后进入linux给linux配置一个IP地址(一般为虚拟机默认的网段)。
如果本机是固定IP,则配置完成。
如果是动态IP,需要为VMnet8配置一个与虚拟同一网段的IP。如果有DNS以实际为准,没有就使用8.8.8.8