Linux基本原则
1.由目的单一的小程序组成:组合小程序组成负责任务:
2.一切皆文件。
3.尽量避免捕获用户接口;
4.配置文件保存为纯文本格式。
GUI接口:
Gnome :c(哥no)
KDE:c++
XFce:嵌入式
CLI接口:(bashshell)
命令提示符:prompt 表示可以立即输入命令
#:管理员的命令
$:普通用户
命令:shell --》内核,任何程序被执行必须有一个执行入口。
Linux 命令格式通常由三部分组成:
命令 选项 参数
1.命令本身(脚步或路径的名字) 2.选项(一定要有空格)(主要是修正命令的执行方式)
--长选项--(单词),(长选项通常不能组合)
短选项之分-(字母)(选项可以同时有多个)
3.参数:指定命令的作用对象
使用凭证:
虚拟终端:
startx& 可以开启图形界面
root,student,vistor
su (switch user )
#su -l 用户名 exit 表示退回原用户(完全切换)如果省l(半切换)
#passwd 修改当前用户密码,连输两次即可
GUI:Graphic User Interface
windows
X-window
Gnome
KDE
Xface
CLI:Command Line Interface
系统调用:Application Program Interface
interface GUI:
CLI:
shell
library:API
dll:Dynamic link library
so:shared object
Kernel:内核
cpu,硬盘,内存
Login :
用户名:用户ID
认证机制:Authentication
授权:Authorization
审计:Audition(日志)
命令:
magic number:魔数 (用来标记程序的执行过程)
例如在写脚本的时候:
shebang
!/bin/bash
list:ls
列表,列出
文件夹(实际上是目录,目录是一种路径映射)
路径主要是为了实现层次化管理(层次化结构可以很快的找到目标)
文件系统:file system
linux一般是倒树状结构
目录:working directory,currnet directory
FHS(文件系统层级目录标准)文件名,文件数据都放到哪里?
pwd:print working directory(显示当前目录)
ls
-l,长格式(显示有属性)(10个位,1个表示文件类型,)
b:块设备文件(block)
c:字符设备文件(character)
l:符号链接文件(symbolic link file)
p:命令管道(pipe)
S:套接字文件(socket)
文件权限:9位,每3位一组,每一组:rwx
文件硬链接的次数
文件的属主(owner)
文件的属组(group)
文件的大小(size),单位是字节
文件时间戳(timestamp),最后一次被修改的时间
访问:access
修改:modify(指修改文件内容)
改变:change,metadata,元数据
-h :人类可以识别的,做单位换算
-a:显示以.开头的隐藏文件
.当前目录
..表示父目录
——A表示当前目录
-d:显示目录自身属性
ls -ld /root
-i:显示文件的索引节点号码
index node,inode
-r:逆序显示
-R:递归(recursive)显示
cd:change directory
家目录,主目录,home directory cd(不带任何属性就回到家目录)
cd ~student(只有管理员才有这个权限)
cd - 在当前目录和前一次所在的目录之间来回切换
命令类型:
内置命令(shell内置)内部,内建
外部命令:在文件系统的某个路径下有一个与命令名称相应的可执行文件
type:显示指定属于哪个类型
环境变量:变量是命名的内存空间
变量赋值,给里面存数据
Name=Jerry
path linux是使用:隔开
hash 表示缓存命令
date :时间管理(晶体振荡器)
Linux:rtc
ntp 网络时间协议,linux开机有两个时钟:
硬件时钟:hwclock
系统时钟:date
如何获得命令的使用帮助:
内部命令:
help Command
外部命令:
Command --help
命令手册:manual
man Command
man命令输入q退出
whatis Command
查找在哪个章节
分章节:
1.用户命令章节一共有8个
2.系统调用
man 2 read
字符集不匹配用 # export LANG=en
3.库调用
4.特殊文件(设备文件都是特殊文件)
5.文件格式(配置文件的语法)
6.游戏相关()
7.杂项:Miscellaneous
8.管理命令(/sbin,/usr/sbin,/usr/local/sbin)
<>必须给出的内容,非可选的
... 可以出现多次
|:多选一
{}表示用来分组,没有特殊意义
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,包括每一个选项的意义
OPTIONS:说明每一个选项的意义
FIFLES:此命令相关的配置文件
SEE ALSO:另外参照
修改时间 date 0226101913.30
翻屏
向后翻一屏:SPACE
向前翻一屏:b
向后翻一行:ENTER
向前翻一行:k
找寻实例:
查找功能:
/KEYWORD:自前向后
?KEYWORD:自后向前
n 下一个
N: 前一个
退出使用q
date +%D 显示月日年 02/08/13
命令使用:
hwclock -s(读取硬件时间到系统)
hwclock -w(读取系统时间到硬件)
info 变成在线手册
练习: 使用date单独获取系统当前的年份、月份、日、小时、分钟、秒
cal :日历
1.echo是内部命令还是外部命令tupe echo(内部命令)
2.作用?
3、如何换行显示?
4、
file 命令以及用法:
windows:PE
Linux:ELF
文件系统:
rootfs:根文件系统
FHS:Linux
/boot:系统启动相关的文件,如内核。initred,以及grub(bootloader)
/dev 设备文件
块设备文件(block):随机访问,数据块
字符设备文件(character):线性访问,按字符为单位。
设备号:主设备号(major) 和设备号(minor)
/etc :配置文件
/home:用户的家目录,每一个用户的家目录默认为/home/USERNAME
/root:管理员的家目录
/lib :库文件
/lib/modules:内核模块文件
静态库 .a ,相当于一个链接文件,运行的是一个文件,直接编译过去
静态库, .dll,so(shared object),内存中只有一份
/media :挂载点目录,必须关联到当前系统的某一目录,移动设备
/mnt:挂载点目录,额外的临时文件系统
/opt:可选目录,第三方程序安装目录
/proc :没有任何内容,系统启动时是不空的,伪文件系统,内核映射文件
/sys:伪文件系统,跟硬件设备相关的属性映射文件
/tmp:临时文件
/var:可变化的文件
/bin:binary,可执行文件,用户命令
/sbin 管理命令
/usr :shared,read-only,全局共享只读文件
/usr/bin
/usr/sbin
/usr/lib
/usr/local:一般是第三方的软件
命名规则:
1.长度不能超过255个字符
2.不能使用/当文件名
3.严格区分大小写
绝对路径:由根开始
相对路径:相对于当前结点
文件管理
文件的创建和删除
touch 没有任何参数是创建文件
$ touch -at 01081010 hs_err_pid2874.log
touch a(主要是更新文件的时间戳的)
touch m(修改修改时间)
touch -m -t 201212121212 a
文件和目录是同名
#start
创建文件也可以使用文本编辑器去创建
目录管理
ls
cd
pwd
mkdir:创建空目录
-P:如果不存在,就创建父目录
mkdir -p /x/y/z
-v:表示会显示创建时的详细信息
mkdir -pv /mnt/test/{x/m,y}
{}表示命令行展开
命令行创建:
(a+d)(b+c)=ab+ac+bd+cd
mkdir -pv /mnt/test2/{a,d}{b.c}
tree:查看目录树
刪除空空目录:
rmdir /mnt/test2/
unicode
rm -i 提示删除
-f 强制删除
rm -rf 递归删除目录不用提示
nano 简单自由编辑器,可以填写一部分内容。
复制和移动文件
cp:copy
cp SRC DEST
一个文件到一个文件
多个文件到一个目录
目标如果是一个目录放到一个目录下,就是原文件
如果源是多文件就必须是个目录
mv:mvoe
移动文件
mv SRC DEST
注意不能用目录去覆盖一个非目录,例如:mv /tmp/hello/ /var/tmp/adbc
mv abc mn(如果路径一致,命名不同就是重命名)
mv -t DEST SRC
install 也可以用来创建目录例如
install -d /tmp/{install.1,install.2}
install -t DIRECTORY SRC ...
cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/
(这个是花括号展开命令)
运行程序
设备管理
软件管理
进程管理
网络管理
Gentoo 手动安装编译
LFS(Linux From Scratch)
目录管理:
ls、cd、pwd、mkdir、rmdir、tree
文件管理:
touch、stat、file、rm、cp、mv、nano
日期时间
date、clock、hwclock、cal
查看文本:
cat、tac、more、less、head、tail
cat:连接并显示
cat -n /etc/issue (自动显示行号)
cat ——E /etc/issue (显示末尾)
实现有效翻页:
shift+PgUp(往前翻一页)
shift+PgDn+(往后翻一页)
分屏显示命令:
more、less
more 向后翻
more+space 向后翻一页
more+B 向前翻一页
Enter 显示下一行
less 与more一样,k建向前翻一行
是不会退出的,如果退出按Q键
head:命令查看文件的前n行
tail:命令查看文件的后n行
-n 默认是10,可以指定显示多少行
例如:cp /etc/inittab /tmp
tail 查看文件尾部并不退出,显示追加内容
-f /tmp/inittab
Linux 以$表示结束
如果敲命令的时候,想起来需要执行其他命令,需要执行Ctrl+C,可以退出当前命令
文本处理:
cut、join、aed、awk
database:数据库
关系型数据库:
可以没有行,但不能没有列
cut -d (delimit 分隔符不指定的默认是空格):(表示以冒号作为分隔符)
-f 指定要显示的字段
-f 1,3 显示1和3的字段
-f 1-3 显示1到3的字段
文本排序命令:sort 默认以升序进行,不是按数值大小排序
-n 按数值大小排序
-r reverse,按着倒序排序
-t 字段分隔符
sort -t: -k3 /etc/passwd
-k 以哪个字段为关键字进行排序
-u unique (表示唯一独特的)(只要两个行不相邻,就不认为它是重复的,相邻并且内容完全重复的才是重复的行)
-f 表示排序时忽略字符大小写
unique -d sort.txt(只显示重复的行)
-D 显示重复的行有哪几个
-c 重复的行都显示出来,并显示重复了几次
文本统计类命令:wc word count
例如:wc /etc/fstab
-l 多少个行
-m 多少个字符
-w 多少个单词
-L 最长的一行包含多少个字符
tr 字符处理命令
tr 'ab' 'AB'
等待输入内容然后将ab 转成AB
一般情况下用输入重定向:
tr 'ab' 'AB' < /etc/passwd (表示将文件中的ab替换成AB)
tr -d 'ab' 删除a和b ,删除字符中的所有该字符
bash及其特性:
shell:外壳
GUI:Gome,KDE,XFce
CLI:sh,csh,ksh,bash
程序:进程,可以理解为程序的副本
允许可以一个用户登录多次,每个进程是不同的,在每个进程看来,当前主机上只存在内核和当前进程
进程是程序的副本,进程是程序执行实例
shell自身是外部命令,pwd是shell的自有命令
shell有子shell概念
pstree csh (打印shell关系)
bash:
1.命令历史
2.管道、重定向
3、命令别名
4.命令行编辑
5.命令行展开
6.文件名通配
7.支持使用变量
8.编程
命令行编辑:
命令光标跳转:Ctrl+A :命令行行首
Ctrl+E:命令行行尾
Ctrl+U:删除光标到命令行首的内容
Ctrl+K:删除光标到命令行尾的内容
Ctrl+左右箭头:前后删除个单词(终端不支持)
Ctrl+L:表示清屏
命令历史
过去曾经执行过的命令:
history
—c:清空命令历史
-d:删除第n行
history -d 500 3 (表示从500行往后3行删除)
-w :保存命令历史至历史文件中
环境变量:
Path:命令搜索路径
HISTORY:命令历史大小(默认1000)
命令历史的使用技巧:
!n (执行命令历史中的第n条命令)
!-n:执行命令历史 中的倒数第n条命令
!!执行上一条命令
!String 执行命令历史中最近一个以指定字符串开头的命令
!$ 引用上个命令的最后一个参数
按ESC松开,再按.
命令补全:按住tab,必须唯一,在命令搜索路径下查找
按两下,可以选择
路径补全,搜索我们给出的起始路径下的每个文件名,并试图补全。
命令别名:
alias CMDALTAS=COMMAND [options] arguments
alias cls=clear
如果想做到永久有效,需要设置到bashell的配置文件里面
unalias CMDALTAS
命令替换$(command),反引号command
把命令中某个子命令替换为其执行结果的过程
例如:echo “The current directory is $(pwd).”
用touch命令创建一个文件,这个文件以年月日命名,
file-2013-02-28-14-53-31.txt
touch ./file-$(date +%F-%H-%M-%S).txt
echo “Dir is pwd
”
bash支持的引号:
``:命令替换
“”:弱引用,可以实现变量替换
'':强引用,不完成变量替换
文件名通配:globbing
:任意长度的任意字符
?:匹配任意单个字符 ls ?y
[]:匹配任意范围内的单个字符[abc],[a-m]
[^]:匹配指定范围外的 任意字符
例如以字母开头,中间任意字符,以数字结尾,[a-zA-Z][0-9]
例如ls a(以a开头的任意文件)
以a开头以3结尾的文件 ls a3
文件名之间能不能使用空格,能,touch 'a b'
表示所有空白字符[[:space:]]
所有标点符号[:punct:]
小写字符集合 [:lower:]
大写字母[:upper:]
大小写字母[:alpha:]
数字[:digit:]
数字和大小写字母[:alnum:]
#man glob 7 可以获取列表
以字母开头,字母结尾,中间有空格
[[:alpha:]][[:space:]][[:alpha:]]
以字母开头,非字母结尾,中间有空格
[[:alpha:]][[:space:]]*[^[:alpha:]]
练习:
显示以a或m开头的文件
ls [am]*
显示所有文件中包含了数字的文件
ls [0-9]
ls [[:digit:]]
显示文件名中包含了非字母或数字的特殊字符的文件
ls [^[:alnum:]]*
++++++++++++++++++++++++++++++++++++
定义了用户或资源的访问能力叫权限
方便地向一类用户赋予权限,用户组就是一个权限的容器(方便地指派权限)
其他用户的访问权限,用户是获取资源的凭证
用户:标识符
用户组:标识符
文件:某个标识符所有
进程也是有属组,谁发起的就由谁操作
安全上下文(security context)
每个linux都有3位权限
权限:
r,w,x
文件:
r:可读,可以使用类似cat命令查看文件内容:
w:可写,可以编辑或删除此文件
x:可执行,excutable,可以在命令提示符下当作命令提交给内核运行
目录:
r:可以对此目录执行ls以列出内部的所有文件。
w:可以在此目录中创建文件。
X:可以使用cd切换到此目录。也可以使用ls-l内部文件的详细信息
一般不让文件有执行权限,目录一般有执行权限。
r--:只读 100
r-x:读和执行 101
---:无权限 000
0 000 ---:无权限
1 001 --x:执行
2 010 -w-:写
3 011 -wx:写和执行
4 100 r--:只读
5 101 r-x:读和执行
6 110 rw-:读和写
7 111 rwx:读写执行
用户:UID,/etc/passwd
组:GID,/etc/group
影子口令:
用户:/etc/shadow
组:/etc/gshadow
解析:名称解析
用户类别:
管理员:Id永远为0
普通用户:1-65535
系统用户1-499
一般用户 500-60000
用户组:
管理员组:
普通组:
系统组:
一般组:
用户组类别:
每一个用户都有它默认的组,这个组叫做基本组,如果默认组设置成其他的组,默认组不一定是私有组
创建用户没有属组的话,就会创建一个仅包含该用户的同名的属组,这个组叫做私有组
附加组,额外组
一个命令一定是一个可执行文件,因此任何文件都有它的访问身份(运行之前文件的访问身份),执行完后就是一个进程
这样它的访问权限就取决于该发起者的身份,这个就是安全上下文
man 5 passwd (就可以看到对密码文件的说明信息)
/etc/passwd
account:登录名
password:密码
UID:
GID:基本组id
comment:用户的注释信息
HOME DIR:家目录
SHELL:用户默认shell
/etc/shadow
account:登录名
encryted password:加密的密码
加密方法:
对称加密:加密解密使用同一个密码
公钥加密:每个密码都成对出现,一个私钥(securet key),一个公钥(public key),一般用于密钥交换
单向加密:也叫散列加密,可以用明文变成密文,主要用于提取数据特征码,单向加密
也叫指纹加密,一般用于数据校验
1.雪崩效应,只做一点的修改,就会导致与之前有很大的不同
2.定长输出:无论数据是多大,它得到的数据长度都是一样的
MD5:Message Digest:128位定长输出
SHA1:Secure Hash Algorithm 160位定长输出
3、
查看某个命令 which useradd
/usr/sbin/useradd
ls -l /usr/sbin/useradd==ls -l $(which useradd)
useradd USERNAME(它会添加默认属性)
查看用户是否添加 tail -1(数字1) /etc/password
file useradd (用于查看文件类型)
用户管理:
useradd,userdel,usermod,passwd,chsh,chfn,finger,id,change,metadata,元数据
组管理:
groupadd,groupdel,groupmod,gpasswd
权限管理:
chown,chgrp,chmod,umask
useradd
-u UID 用户尚未使用的id号必须大于等于500
-g GID (基本组)
useradd -g mygroup user2
user2:x:1001:504(组id号)::/home/user2:/bin/bash
-G GID,...(指定其附加组,附加组可以由多个用逗号隔开)
useradd -G mygroup user3
-c "COMMENT" 指定注释信息
-d /path/ to/somedirectory useradd -c "Tony Blare" -d /home/blare user4
-s
/etc/shells,指定了当前系统可用的安全shell
指定shell
用cat /etc/shells
-m -k (一些shell的配置文件),一般强行给该用户创建一个家目录
环境变量:
PATH:
HISTORY:
SHELL
查看当前shell echo $SHELL
-M 不给用户创建家目录
/etc/login.defs
删除用户
userdel:删除用户是不会删除家目录的,如果想删除家目录,
用 userdel -r user2
userdel [option] USERNAME
id:查看用户的账户信息
参数不添加,就是显示当前用户的信息
id user1
查看用户user1的信息
-u
-g
-G
-n一起使用显示组名
finger :查看用户账户信息
显示用户的完整信息,登录名,家目录
finger USERNAME
修改用户 的账户属性
usermod
-u 2002 UID
-g 改的基本组GID
——G 改的附加组GID,它会覆盖原有的附加组
-a G,就会在原来的基础上添加个附加组
-c 注释信息
-d -m,(就会将原来的信息用到新的家目录里面)指定家目录,主意如果原来它的家目录下有信息,指定新的家目录,那么原来的用户家目录下的信息就没有了
-s 改用户的shell
-l 修改用户登录名
-e 修改用户的过期时间
——L:锁定用户信息
-U:解锁用户信息
chsh:修改用户的默认shell
cdfn:修改用戶的注释信息
密码管理:
passwd [USERNAME]
--stdin
echo "redhat" | passwd -- stdin user3(表示从管道接收redhat给user3作为密码)
-l 锁定用户账户
-u 解锁用户账户
-d 删除用户密码
pwck 检查用户账户的完整性
组管理:groupadd
-g 指定GID
-r 添加为系统组
useradd -r apache(注意系统用户是不会给家目录的)
groupadd -r ngix
tail -1 /etc/group
为服务器安装服务软件时会创建系统组
groupmod
-g GID
-n GRPNAME 修改组名
groupdel
gpasswd 给组加密码 gpasswd mygroup
用户创建文件会属于他们的基本属组
本身如果属于这个组,就不需要密码
不属于这个组,后来又需要添加到这个组,就需要密码
newgrp 是登录属性 使用exit是可以退出的
练习:
1.创建一个用户mandriva,其ID为2002,基本组为distro(组ID为3003),附加组为linux;
#groupadd -g 3003 distro
#groupadd linux
#useradd -u 2002 mandriva -g distro -G linux mandriva
2.创建一个用户fedora,其全名为Fedora Community,默认shell为tcsh;
#useradd -c "Fedora Community" -s /bin/tcsh fedora
3.修改mandriva的ID为4004,基本组为linux,附加组为distro和fedora;
#usermod -u 4004 -g linux -G distro,feora mandriva
4.给fedora加密码,并设置密码最短有效期为2天,最长为50天。
#passwd -n 2 -x 50 fedora
5.将mandriva的默认shell改为/bin/bash;
#usermod -s /bin/bash mandriva
6.添加系统用户hbase,且不允许登录系统。
#useradd -r -s /sbin/nologin hbase
change
-d 最近一次修改时间
-E 过期时间
-I 非活动时间
-m 最短使用期限
-M 最长使用期限
-w 警告时间
权限管理:
r--:只读
w-:写
x:读和执行
三类用户:
U:属主
G:属组
O:其他用户
文件查找
特殊权限
chown:改变文件属主(只有管理员才有这个权限)
chown hadoop /tmp/abc
--reference=/path/to/somefile ,...改成与这个目录属组一样
chown --reference=/tmp/abc /tmp/tmp 是属组属主一块修改
#chgrp GRPNAME file,...切换属组
-R 递归修改
--reference=/path/to/somefile
#chmod 修改权限
修改三类用户的权限:
位数不够就补0
chmod 750 /tmp/abc
chmod 75 /tmp/abc
-R
--reference=/path/to/somefile file,...
修改某类用户和某些类用户的权限:
chomd u=rwx /tmp/abc
chmod g=rw /tmp/abc
chmod o=rx /tmp/abc
给出的就是有这个权限,没有给出的就是没有——
也可以组合指定两类用户的权限:
chmod g=r,o=r /tmp/abc
chmod g=rx,o= /tmp/abc
修改某类的用户某位权限
u,g,o,a
chmod 用户类别+|-MODE file,...
chomd u+x,g-x /tmp/abc
chomd a+x /tmp/
练习:
1.新建一个没有家目录的用户openstack:
#useradd -M openstack
2.复制/etc/skel为/home/openstack
#cp -r /etc/skel/ /home/openstack
3.改变/home/openstack及其内部的属主属组均为openstack
#chown -R openstack:openstack /home/openstack
4./home/openstack及其内部的文件,属组和其它用户没有任何访问权限
#chmod -R go=(这样属组和其它用户没有权限) /home/openstack
ls -l "which passwd"
-rws(属主权限是s)r-xr--x
练习:
手动添加用户hive,基本组hive(ID号都是5000),附加组为mygroup
1.nano /etc/group
到最后一行
hive:x:5000:
然后在mygroup这一行加入hive
mygroup:x:504:user3,hive
2.nano /etc/passwd
到最后一行
hive:x:5000:5000:Hive:/home/hive:bin/bash
3.nano /etc/shadow
到最后一行
hive:!!:15765:0:99999:7:::
每天秒数86400
使用bc作为计算器
4,提供家目录 cp -r /etc/skel/ /home/hive
5.chown -R(及其子文件) hive.hive /home/hive
6.让go没有任何权限
chmod -R go=/home/hive
这样su过去,但是不能登录
可以用算法生成个密码,openssl passwd -l salt '12345678'
nano /etc/shadow
hive:!!(把!!去除然后粘进去生成的密码):15765:0:99999:7:::
umask:遮罩码
创建目录:
777-umask
创建文件:
666-umask:文件不能有执行权限,如果有加1
站在用户登录的角度来说,SHELL的类型:
登录式shell:
正常通常某终端登录:
su -USERNAME
su -l USERNAME
非登录式SHELL:
su -USERNAME
图形终端下打开命令窗口:
自动执行的shell脚步
bash的配置文件:
全局配置
/etc/profile ,/etc/profile.d/*.sh,/etc/bashrc
个人配置
~/.bash_profile,~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚步
bashrc类的文件:
设定本地变量
定义命令别名
登录式shell如何读取配置文件:
/etc/profile -->/etc/profile.d/.sh -->/.bash_profile-->/.bashrc-->/etc/bashrc
非登录式shell 如何读取配置文件:
~/.bashrc-->/etc/bashrc -->/etc/profile.d/.sh
定义别名bashrc
nano .bashrc 最后加一行:alias cls='clear'
nano .bash_profile
PATH=$PATH:$HOME/bin
export PATH
echo "Hello,hive.Welcome to our system,it is'date'"
bash:脚步解释器
计算机的五大构件:
运算器,控制器:cpu
存储器:RAM
输入设备/输出设备
程序:指令和数据
运算器: 整个过程是由运算器完成的
控制器:指令
存储器:
地址总线:内存寻址
数据总线:传输数据
控制总线:控制指令
寄存器:cpu 暂时存储器
I/o:硬盘
程序
INPUT设备:
OUTPUT设备: