Linux笔记
自己整理出来的 就当是个纪念
Linux
Linux 的系统启动
1.内核的引导:开启电源,bios自检,按照bios设置的启动设备启动 在读/boot里内核文件
2.运行int : 读取配置 /etc/inittab 守护进程 启动时根据"运行级别",确定要运行哪些程序。
3.系统初始化 :执行rc启动脚本 激活交换分区,检查磁盘,加载硬件模块
4.建立终端 : 启动登录界面
5.用户登录系统 : 命令行 ssh 图形界面
Linux系统有7个运行级别(runlevel):
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
Linux关机
正确的关机流程为:sync > shutdown > reboot > halt
关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档。
Sync 将数据由内存同步到硬盘
Shutdown -h (10 , now , 20:25 , +10 , ) reboot halt 关机
Shutdown -r ( now , +10) 重启
目录结构与作用
/Bin 存放常用命令
/Home 存放普通用户的主目录
/root 存放超级权限者的用户主目录
/lib 系统开机所需要最基本 动态链接的共享库
/etc 系统管理的配置文件
/usr 应用程序和文件 类似与windows下的program files目录
/boot 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
/media linux系统会自动识别一些设备linux会把识别的设备挂载到这个目录下
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂
载在/mnt/上,然后进入该目录就可以查看里的内容了。 d:/myshare
/opt 这是给主机额外安装软件所摆放的目录。
/usr/local 安装软件所安装的目录。一般是通过编译源码方式安装的程序
/var 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。
包括各种日志文件
Linux 忘记密码解决方法
重启linux系统
三秒内按回车
然后输入e
在 第二行最后边输入 single / single
最后按"b"启动,启动后就进入了单用户模式了
更密码的命令为 passwd
Linux文件基本属性
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
第一个字母:
[ d ]则是目录 为[ - ]则是文件;
[ l ]则表示为链接文档(link file);
[ b ]装置文件里面的可供储存的接口设备若是
[ c ]则表示为串行端口设备,例如键盘、鼠标
1.Chgrp 改变文件属组
语法: chgrp [-R] 属组名 文件名
-R 递归改变 所有文件
2.chown:更改文件属主,也可以同时更改文件属组
语法:chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名
3.chmod:更改文件9个属性
chmod 777 .bashrc
chmod u=rwx,g=rx,o=r 文件名
Linux 文件与目录管理
绝对路径:
路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd ../man 这就是相对路径的写法啦!
ls: 列出目录 -a全部 -d 目录本身 -l 文件属性权限
cd:切换目录 绝对 相对 ~ 家目录 ..上级目录
pwd:显示目前的目录 -P :显示出确实的路径 不是快捷方式
mkdir:创建新的目录 -m 配置文件的权限喔!直接配置-p 直接将所需要的目录递归创建
mkdir -p test1/test2/test3/test4 mkdir -m 711 test2
rmdir:删除一个空的目录 -p :连同上一级『空的』目录也一起删除
cp: 复制文件或目录 -i 如果目标存在 先询问 -r 目录复制 -p连同属性复制
cp ~/.bashrc /tmp/bashrc
rm: 移除文件或目录
-f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
-i :互动模式,在删除前会询问使用者是否动作
-r :递归删除啊!最常用在目录的删除了!这是非常危险的选项!!!
rm -i bashrc
mv (移动文件与目录,或修改名称)
-f -i 与rm相同 -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
mv mvtest mvtest2
Linux 文件内容查看
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl 显示的时候,顺道输出行号!
more 一页一页的显示文件内容 空格翻页 Enter 向下翻一行 /字串 查找 q离开 b回翻页
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
空白键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字串 :向下搜寻『字串』的功能;
?字串 :向上搜寻『字串』的功能;
n :重复前一个搜寻 (与 / 或 ? 有关!)
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
head 只看头几行 -n +数字
tail 只看尾巴几行 -n +数字
Linux连接概念
硬连接
硬连接指通过索引节点来进行连接。 磁盘分区中的文件 分配一个索引节点号 在linux中可以有多个文件之相统一索引节点 ,当其中一个文件被删除时不影响他文件使用 ,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
软连接
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于 Windows 的快捷方式。
Linux系统用户账号的管理
新用户创建
Useradd useradd 选项 用户名
选项:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户删除
userdel -r sam -r,它的作用是把用户的主目录一起删除。
修改账号
Usermod -l 新用户名 与useradd选项相同
密码
Passwd
为用户指定新口令时
Passwd -d sam
Linux系统用户组的管理
增加新用户组
Groupadd -g -o 新用户组的标识号 用户组
删除用户组
Groupdel 用户组
修改用户组
Groupmod -g-o (-n 新名字) 用户组
Linux 磁盘管理
df:列出文件系统的整体磁盘使用量
df [选项] 目录或者文件
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
du:检查磁盘空间使用量
fdisk:用于磁盘分区 fdisk -l 装置名称
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
磁盘格式化
Mkfs [-t] 装置文件名
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)
磁盘检查
fsck [-t 文件系统] [-ACay] 装置名称
磁盘挂载与删除
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点
mount /dev/hdc6 /mnt/hdc6
umount [-fn] 装置文件名或挂载点 删除
选项与参数:-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
-n :不升级 /etc/mtab 情况下卸除。
卸载/dev/hdc6
[root@www ~]# umount /dev/hdc6
vi/vim
基本上 vi/vim 共分为三种模式,
命令模式(Command mode),
输入模式(Insert mode)和
底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按ESC键可随时退出底线命令模式。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
:n1,n2s/word1/word2/g | n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则:『:100,200s/vbird/VBIRD/g』。(常用) |
:1,$s/word1/word2/g | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) |
:1,$s/word1/word2/gc | 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用) |
linux yum 命令
yum [options] [command] [package ...]
options:可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
command:要进行的操作。
package操作的对象。
yum常用命令
1.列出所有可更新的软件清单命令:yum check-update
2.更新所有软件命令:yum update
3.仅安装指定的软件命令:yum install <package_name>
4.仅更新指定的软件命令:yum update <package_name>
5.列出所有可安裝的软件清单命令:yum list
6.删除软件包命令:yum remove <package_name>
7.查找软件包 命令:yum search <keyword>
8.清除缓存命令:
yum clean packages: 清除缓存目录下的软件包
yum clean headers: 清除缓存目录下的 headers
yum clean oldheaders: 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers
Shell 教程
#!/bin/bash
echo "Hello World !"
脚本运行两种方法
1.Chmod +x ./test.sh 是脚本具有执行权限
./test.sh 执行脚本
- 直接运行解释器
/bin/sh test.sh
变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="runoob.com"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
有效的 Shell 变量名示例如下:
RUNOOB
LD_LIBRARY_PATH
_var
var2
使用变量
只要在变量面前加一个 $
your_name="qinjx"
echo $your_name
echo ${your_name}
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
Shell字符串
单引号‘ ’
任何字符都原样输出
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成 对出现,作为字符串拼接使用。
双引号 ” ” 的优点:
双引号里可以有变量
双引号里可以出现转义字符
String 1:4
Shell数组
array_name=(value0 value1 value2 value3)
Shell注释
#--------------------------------------------
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
Shell传递参数
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
为脚本设置可执行权限,并执行脚本,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh 1 2 3Shell 传递参数实例!执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
$* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
Shell 数组
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由0开始。
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 ... valuen)
实例
my_array=(A B "C" D)
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
流程控制
if conditionthen
command1
command2
...
commandNelse
Commandfi
for var in item1 item2 ... itemNdo
command1
command2
...
commandNdone
#!/bin/bash
int=1while(( $int<=5 ))do
echo $int
let "int++"done
until 循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
until 语法格式:
until conditiondo
commanddone
Case
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNumcase $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;esac
Shell函数
demoFun(){
echo "这是我的第一个 shell 函数!"}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
输入重定向
实例
接着以上实例,我们需要统计 users 文件的行数,执行以下命令:
$ wc -l users
2 users
也可以将输入重定向到 users 文件:
$ wc -l < users
2
Shell定时脚本
利用crontab来定时执行任务大致有如下三步:
- 编写shell脚本 [
#! /bin/sh
给脚本能执行的权限
]
- 利用crontab加入到定时任务队列[
首先到:/var/spool/cron 为定时任务程序文件的路径。
安装crontab:
yum install crontabs
说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
参 数:
-e 编辑该用户的计时器设置。
-l 列出该用户的计时器设置。
-r 删除该用户的计时器设置。
-u<用户名称> 指定要设定计时器的用户名称。
crontab 格式:
基本格式 :
分钟 小时 日 月 星期 命令
* * * * * *
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列 表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
0 */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
]
- 查看作业完成情况[
sh脚本文件:test.sh
#! /bin/sh
su - oracle << EOF
sqlplus test/test@test @"test.sql"
sql脚本文件:test.sql
insert into test_tb values (sysdate);
crontab文件:
0,15,30,45 * * * * /apps/bin/test.sh
]