今天各种场合都有使用各种Linux发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,通常服务器使用LAMP(Linux + Apache + MySQL + PHP)或LNMP(Linux + Nginx+ MySQL + PHP)组合。
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
一般来说,用户的登录方式有三种:
- (1)命令行登录
- (2)ssh登录
- (3)图形界面登录
- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)
在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
chown [- R ] 属主名:属组名 文件名
[ root@www ~]# ls - l
- rw - r -- r -- 1 bin users 68495 Jun 25 08 : 53 install . log
[ root@www ~]# ls - l
- rw - r -- r -- 1 root root 68495 Jun 25 08 : 53 install . log
- ls: 列出目录
- cd:切换目录
- pwd:显示目前的目录
- mkdir:创建一个新的目录
- rmdir:删除一个空的目录
- cp: 复制文件或目录
- rm: 移除文件或目录
选项与参数:
- -a :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
将家目录下的所有文件列出来(含属性与隐藏档)
#使用绝对路径切换到w3cschool.cc目录 [ root@www ~]# cd / root / w3cschool . cc /
#使用相对路径切换到w3cschool.cc目录 [ root@www ~]# cd ./ w3cschool . cc /
# 表示回到自己的家目录,亦即是 /root 这个目录 [ root@www w3cschool . cc ]# cd ~
# 表示去到目前的上一级目录,亦即是 /root 的上一级目录的意思; [ root@www ~]# cd ..
范例:单纯显示出目前的工作目录: [ root@www ~]# pwd
/ root <== 显示出目录啦~
范例:显示出实际的工作目录,而非连结档本身的目录名而已 [ root@www ~]# cd / var / mail <==注意,/ var / mail 是一个连结档 [ root@www mail ]# pwd
/ var / mail <==列出目前的工作目录 [ root@www mail ]# pwd - P
/ var / spool / mail <==怎么回事?有没有加 - P 差很多~ [ root@www mail ]# ls - ld / var / mail
lrwxrwxrwx 1 root root 10 Sep 4 17 : 54 / var / mail -> spool / mail
# 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail # 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!
选项与参数:
- -m :配置文件的权限喔!直接配置,不需要看默认权限 (umask) 的脸色~
- -p :帮助你直接将所需要的目录(包含上一级目录)递回创建起来!
[ root@www tmp ]# mkdir test <==创建一名为 test 的新目录 [ root@www tmp ]# mkdir test1 / test2 / test3 / test4
mkdir : cannot create directory `test1/test2/test3/test4':
No such file or directory <== 没办法直接创建此目录啊!
[root@www tmp]# mkdir -p test1/test2/test3/test4
[ root@www tmp ]# ls - l
drwxr - xr - x 3 root root 4096 Jul 18 12 : 50 test
drwxr - xr - x 3 root root 4096 Jul 18 12 : 53 test1
drwx -- x -- x 2 root root 4096 Jul 18 12 : 54 test2
如果没有加上 -m 来强制配置属性,系统会使用默认属性。
选项与参数:
- -p :连同上一级『空的』目录也一起删除
删除 w3cschool.cc 目录
drwxr - xr - x 3 root root 4096 Jul 18 12 : 50 test
drwxr - xr - x 3 root root 4096 Jul 18 12 : 53 test1
drwx -- x -- x 2 root root 4096 Jul 18 12 : 54 test2
[ root@www tmp ]# rmdir test <==可直接删除掉,没问题 [ root@www tmp ]# rmdir test1 <==因为尚有内容,所以无法删除!
rmdir : `test1': Directory not empty
[root@www tmp]# rmdir -p test1/test2/test3/test4
[root@www tmp]# ls -l <==您看看,底下的输出中test与test1不见了!
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
利用 -p 这个选项,立刻就可以将 test1/test2/test3/test4 一次删除。
选项与参数:
-a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l:进行硬式连结(hard link)的连结档创建,而非复制文件本身;
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r:递回持续复制,用於目录的复制行为;(常用)
-s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
[ root@www ~]# cp - i ~ /.bashrc / tmp / bashrc
- -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
- -i :互动模式,在删除前会询问使用者是否动作
- -r :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!
选项与参数:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
[ root@www tmp ]# cp ~/. bashrc bashrc
[ root@www tmp ]# mkdir mvtest
[ root@www tmp ]# mv bashrc mvtest
将刚刚的目录名称更名为 mvtest2
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
- nl 显示的时候,顺道输出行号!
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- head 只看头几行
- tail 只看尾巴几行
选项与参数:
- -A :相当於 -vET 的整合选项,可列出一些特殊字符而不是空白而已;
- -b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
- -E :将结尾的断行字节 $ 显示出来;
- -n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
- -T :将 [tab] 按键以 ^I 显示出来;
- -v :列出一些看不出来的特殊字符
CentOS release 6.4 ( Final ) Kernel \r on an \m
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
每一列按照/etc/passwd
密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同,其中密码栏可以留做空白或输入x号。一个范例文件user.txt内容如下:
user002 :: 601 : 100 : user : /home/ user002 : /bin/ bash
user003 :: 602 : 100 : user : /home/ user003 : /bin/ bash
user004 :: 603 : 100 : user : /home/ user004 : /bin/ bash
user005 :: 604 : 100 : user : /home/ user005 : /bin/ bash
user006 :: 605 : 100 : user : /home/ user006 : /bin/ bash
/usr/sbin/newusers
,从刚创建的用户文件user.txt
中导入数据,创建用户
# newusers < user.txt
vipw
或 vi /etc/passwd
检查 /etc/passwd
文件是否已经出现这些用户的数据,并且用户的宿主目录是否已经创建
将 /etc/shadow
产生的 shadow
密码解码,然后回写到 /etc/passwd
中,并将/etc/shadow
的shadow
密码栏删掉。这是为了方便下一步的密码转换工作,即先取消 shadow password
功能。
user002 :密码
user003 :密码
user004 :密码
user005 :密码
user006 :密码
/usr/sbin/chpasswd
创建用户密码,chpasswd
会将经过 /usr/bin/passwd
命令编码过的密码写入 /etc/passwd
的密码栏。
执行命令 /usr/sbin/pwconv
将密码编码为 shadow password
,并将结果写入 /etc/shadow
。
Linux磁盘管理好坏管理直接关系到整个系统的性能问题。
Linux磁盘管理常用三个命令为df、du和fdisk。
- df:列出文件系统的整体磁盘使用量
- du:检查磁盘空间使用量
- fdisk:用于磁盘分区
df [-ahikHTm] [目录或文件名]
选项与参数:
- -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
- -k :以 KBytes 的容量显示各文件系统;
- -m :以 MBytes 的容量显示各文件系统;
- -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
- -H :以 M=1000K 取代 M=1024K 的进位方式;
- -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
- -i :不用硬盘容量,而以 inode 的数量来显示
将系统内所有的文件系统列出来!
Filesystem 1K - blocks Used Available Use % Mounted on
/ dev / hdc2 9920624 3823112 5585444 41 % / /dev/ hdc3 4956316 141376 4559108 4 % / home
/ dev / hdc1 101086 11126 84741 12 % / boot
tmpfs 371332 0 371332 0 % /dev/ shm
将容量结果以易读的容量格式显示出来
Filesystem Size Used Avail Use % Mounted on
/ dev / hdc2 9.5G 3.7G 5.4G 41 % / /dev/ hdc3 4.8G 139M 4.4G 4 % / home
/ dev / hdc1 99M 11M 83M 12 % / boot
tmpfs 363M 0 363M 0 % /dev/ shm
du [-ahskm] 文件或目录名称
选项与参数:
- -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
- -h :以人们较易读的容量格式 (G/M) 显示;
- -s :列出总量而已,而不列出每个各别的目录占用容量;
- -S :不包括子目录下的总计,与 -s 有点差别。
- -k :以 KBytes 列出容量显示;
- -m :以 MBytes 列出容量显示;
磁盘分割完毕后自然就是要进行文件系统的格式化,格式化的命令非常的简单,使用 mkfs
(make filesystem) 命令。
语法:
fsck(file system check)用来检查和维护不一致的文件系统。
若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查。
语法:
Linux 的磁盘挂载使用 mount
命令,卸载使用 umount
命令。
磁盘挂载语法:
Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为shell编写的脚本程序。
业界所说的shell通常都是指shell脚本,但读者朋友要知道,shell和shell script是两个不同的概念。
Linux的Shell种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用。同时,Bash也是大多数Linux系统默认的Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为#!/bin/bash。
这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:
/bin/sh test.sh /bin/php test.php
- 首个字符必须为字母(a-z,A-Z)。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
运行shell时,会同时存在三种变量:
- 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
echo $ {# string } #输出 4
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
读取数组元素值的一般格式是:
使用@符号可以获取数组中的所有元素,例如:
获取数组长度的方法与获取字符串长度的方法相同,例如:
length = $ {# array_name [@]} # 或者
length = $ {# array_name [*]} # 取得数组单个元素的长度
lengthn = $ {# array_name [ n ]}
$* 与 $@ 区别:
- 相同点:都是引用所有参数。
- 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)
if test - e ./ bash
then
echo '文件已存在!' else
echo '文件不存在!' fi
if test - e ./ notFile - o - e ./ bash
then
then
command1
command2
...
commandN
else
command
fi
then
command1
elif condition2
then
command2
else
commandN
fi
do
command1
command2
...
commandN
done
echo $int
let "int++" done
while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。
echo - n '输入你最喜欢的电影名: ' while read FILM
do
echo "是的!$FILM 是一部好电影" done
无限循环语法格式:
while :do command done
或者
command
done
echo '你输入的数字为:'
read aNum
case $aNum in
1 ) echo '你选择了 1'
;;
2 ) echo '你选择了 2'
;;
3 ) echo '你选择了 3'
;;
4 ) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;; esac
跳出循环
{
action ;
[ return int ;]
}
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值
demoFun (){
echo "这是我的第一个 shell 函数!" }
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
funWithReturn (){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $ (( $aNum + $anotherNum )) }
funWithReturn
echo "输入的两个数字之和为 $? !"
重定向一般通过在命令间插入特定的符号来实现。特别的,这些符号的语法如下所示: