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 的别名,如果不想使用这个别名,就可以: m ; 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

原文地址:https://www.cnblogs.com/java-oracle/p/6140224.html