基础知识
Linux下的目录结构
/
Linux文件系统的入口,也是处于最高一级的目录
/bin
(binary二进制文件)基本系统所需要的命令。功能和/usr/bin类似,这个目录中的文件都是可执行的,普通用户都可以使用的命令、
/sbin(super bin)基本的系统维护命令,超级命令,只能由超级用户使用
/boot
引导分区,内核和加载内核所需要的文件。相当于Windows C盘
/dev
设备文件存储目录,比如终端、磁盘等
/etc
所有的系统配置文件
/home
普通用户家目录的默认存放目录,与用户名同名
/lib(lib64)
库文件和内核模块所存放的目录
/root
Linux超级权限用户root的家目录
/tmp
临时文件目录
/usr
存放用户使用系统命令和应用程序等信息,比如命令、帮助文件等。
/var
存放经常变动的数据,比如日志、邮件等。
三个时间属性
Linux系统文件有三个主要的时间属性,分别是 ctime(change time), atime(access time), mtime(modify time)。
atime:Access time,是在读取文件或者执行文件时更改,即文件最后一次被读取的时间。
mtime:Modified time,是在写入文件时随文件内容的更改而更改,是指文件内容最后一次被修改的时间。
ctime:Change time,是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,即文件状态最后一次被改变的时间。
1、修改是文本本身的内容发生了变化(mtime)
改变是文件的索引节点发生了改变(ctime)
2、如果修改了文件内容,则同时更新ctime和mtime
3、如果只改变了文件索引节点,比如修改权限,则只是改变了ctime
常用命令
ls(list)
默认是当前目录,列出当前目录下的所有内容
ls -a(短格式,查看所有文件,包括以.开头的文件)
ls –all(短格式)
ls -A (.和..不显示,其他跟-a相同,每个目录都有这两个文件)
ls install.log (显示install.log)
ls -l(以长格式显示文件信息)= ll
ls -all (长格式)
ls -ll (长格式)
ls -lh(human readabled,以人类能够读懂的方式显示)
ls -R (递归,当前目录及当前目录下的所有内容)
ls -t:按照修改时间排序,最新修改的文件在最前面
ls -r:反向排序
cd(changedirectory 切换目录)
cd / 切换到根目录
cd . 代表当前目录 .是当前的意思
cd .. 返回上一层(.代表参数) ..是上一级的意思
cd – 返回上一次所在的目录
pwd (print working dircetory) 打印当前路径
绝对路径(终点只有一个,绝对不会出错,从根开始走的都是绝对路径)
相对路径(不是从跟开始走的都是相对路径)
mkdir (make directory)创建一个目录
mkdir /test 建一个文件夹test
mkdir /lianxi/china/shandong/jinan -p (parent)如果父目录不存在把父目录一起建了。
mkdir /lianxi/china/{gansu/baiyin,shanxi/datong} -p {}表示同意等级
mkdir liu{1..100} ..代表循环的意思
rm(remove,只能删除空目录)
rm 可以把任何都删掉
rm -rf *(-r(递归)-f(不加提醒的强制删除) *通配符,尽量不用这个)
rm -rf ???(代表任意一个字符,把所有长度是三的都删掉,尽量不用)
rm -rf *.log (删除所有日志文件,尽量不用)
rm -dir 删除空文件夹
echo(回复) $(引用值)值1
往屏幕上输出值1
(())中可以添加运算。
echo $? 0代表上一条命令是否成功,0代表成功,任何非0都代表失败。
cp(copy)
cp
cp -a 完全复制,把文件夹都考进来。考软件用,保留关联关系。
cp -r 不附带文件其他的属性。
cp lmk /lianxi/sk 找不到后面的文件夹就是重命名。可以直接重命名,但是会拷贝一份。
mv(move)
mv anaconda.log ./log
重命名
mv wtmp lmk 在当前目录下重命名,直接重命名,不会出一份。
touch(触摸)和stat
新建一个空的文本文件
stat 文件/文件系统的详细信息显示
touch -ad(更改文件的ctime) 2018-03-23 00:00:00 文件名
du
统计文件大小。ctrl+c强行终止
du . 统计当前文件的大小
du -sh (-s查看当前文件夹)
du -ah –max-depth=1(虽大深度,只统计一层)
file
file 文件名 查看一个文件的类型
man
/S+回车,可以查出有S的命令 n(next,下一个)N(上一个)
q退出。
find(查找)
find 从哪找东西 根据什么去找 找什么
find / -name lmk
根据大小找出大小大于4k的来,-4k是小于,不写是等于,+是大于
find / -size -4k
根据什么用户去找
find / -user mysql
找一下更改时间在三分钟以内的
find / -mmin -3
根据类型
find / -type d(目录) f(普通文件)
根据权限查找
find / -perm(permission) 644
找出文件类型是目录的并且文件大小大于4k
find / -type -d -a(代表and) -size +4k
- -a 与
- -o 或
- -not 非
查找出类型是文件且文件大小大于4k,拷贝到/tmp文件夹去
-exec(execute) 执行 cp -r {}(代替之前找到的东西) /tmp/ \;(结束标志,其实是转译)
scp
分发
#指定了用户名,命令执行后需要再输入密码
scp -r local_folder remote_username@remote_ip:remote_folder
#没有指定用户名,命令执行后需要输入用户名和密码。
scp -r local_folder remote_ip:remote_folder
开关机命令
关机命令 init 0 、poweroff 、halt、 shotdown -h(halt,调用halt) now
重启命令 init 6、reboot、shutdown -r(调用reboot) now
文本编辑命令
cat
命令作用:一次显示一整个文件的内容,相当于windows下面记事本打开,但是不能去查看大的文本文件。
命令格式:cat [选项] 文件名
cat 1.txt > 2.txt
会新建一个2.txt
常用选项:
-n 或 –number 由 1 开始对所有输出的行数编号,输出行号
-b 或 –number-nonblank 和 -n 相似,只不过对于空白 行不编号
-s 或 –squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 –show-nonprinting
覆盖重定向:>
将内容重定向到文本文件中,但会覆盖原文件。
cat passwd>1.tst
追加重定向:>>
将内容重定向到文本文件中,但不会覆盖原文件。
把1.txt追加行号追加到2.txt中
cat -n 1.txt>>2.txt
把2.txt改成空文件
cat /dev/null>2.txt
eof:自定义终止符(end of file)写脚本的时候用
cat >>2.txt<<eof
123
2321
eof
可以不写eof什么都可以。
tac
命令作用:倒序的显示文件内容,让最新添加的东西在最上面。
命令格式:tac 文件名
head
命令作用:默认将每个指定文件的头10 行显示到标准输出。
命令格式:head [选项] 文件名….
-n 控制想查看的行数
-n 3 是只看3行
-n +3 是只看3行
-n -3 是去掉后三行
tail
命令作用:默认将每个指定文件的尾10 行
显示到标准输出上。
命令格式:tail [选项] 文件名
-n:number 根据指定的不同行数进行输出
tail -n 3 显示尾3行
tail -n -3 显示尾3行
tail -n +3 从第3行开始显示,一直到最后一行。
more
分屏显示
按回车走一行,按空格走一屏,按b向上返回一屏。
ctrl+back键删除
q退出
less
与more相似,翻页可以用pageup和pagedown。
vi
重要文件更改之前先备份。
vim是vi 的升级,vim有高亮效果。
vim有命令模式,可进入:
①插入模式:
i在光标前
a在光标后
o另起一行插入
s 把当前光标的字母删除进入插入模式。
esc退出
②末行模式shift +:
wq保存退出
q!强制不保存退出
wq!强制保存退出用于改一些只读文件时。
x=wq x!=wq!
w /tmp/1.txt 另存为。
set nu 显示行号。
set nonu 取消行号。
esc退出
③替换模式:R当前光标所在的位置替换成你想写的东西。
yy: 复制当前行整行的内容到剪贴板
5 yy 就是复制光标下5行
P: 将缓冲区中的内容粘贴到光标位置处之后
u:撤销之前的操作
dd: 快速删除光标所在行,同时进行剪切 n dd当前光标后删n行
d^或d0 : 删除光标到行首的所有字符
d$ 或d end: 删除光标到行末的所有字符
1+G(go) 或 gg 返回第一行,行间的快速跳转
G 返回最后一行
232 G 到232行
^ 或0快速到行首
end 或$ 快速到行尾
/ +查找名(从上往下找) n下一个N 上一个
?(从下往上找N下一个n 上一个
strings
强行查看乱码文件
wc
统计字符数
wc -l 统计行数
passwd |wc -l
free
查看磁盘使用情况
top
显示当前系统的状态,显示负载情况等。是实时刷新的命令。
kill 进程
ps -aux (显示所有用户信息)或ps -af
列出来看pid(进程号)ppid(父进程号)
kill -9(强杀) pid
-6(自杀)
bash 执行文件
软硬连接
链接在linux分为软链接和硬链接
连接到其他的文件的文件就是软链接
硬链接
查看分区和内核
fdisk -l 查看磁盘分区
uname -r 查看内核
用户、组、权限
用户
定义:
用户是能够获取系统资源的权限的集合,每个用户有自己的UID。
系统通过区分UID辨别是哪个用户。
更改文件添加用户
vi /etc/passwd
vi /etc/shadow
cd /home mkdir yonghuming
cd /etc/skel
cd /var/spool/mail
useradd
新建用户
root用户才能用
useradd 用户名
-u <uid>:指定用户id。
root 的uid永远是0
1-499的uid属于程序用户
500+是普通用户
useradd -u 888 lmk
除非指定uid不然它默认继续往上增加
-c 加上备注文字。备注文字会保存在passwd的备注栏位中;
-d <登入目录>:指定用户登入时的启始目录(家目录);
-e <有效期限>:指定帐号的有效期限;
-g <群组>:指定用户所属的群组;所属组用,隔开
-G<群组>:指定用户所属的附加群组;
-s 设置用哪个shell
su
切换用户及path
su lmk 使用上一个用户的环境变量
su – lmk 只用用户本身的环境变量
cd 到家目录,vi .bash_profile永久修改path
passwd文件
/etc/passwd 存用户信息的,冒号为分隔符
passwd有个备份文件,文件名是passwd
密码放在 /etc/shadow ,密码用SHA-512加密。文件中 *或!!表示用户没密码,后面的叫密码策略。
root:x(密码占位符,真实密码不存在这):0(UID,user id):0(GID,group id):root(描述信息):/root(家目录):/bin/bash(登录后使用的shell是什么)
echo $SHELL
cat /etc/shells 查看都有哪些shell
直接输入shell名可以切换,exit退出。
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
passwd命令
作用:给用户设置密码或加锁,root用户改密码不需要原密码,而且不需要密码复杂程度,可以给任何用户加密码。普通用户需要原来密码,而且还要复杂。
改密码就是passwd 用户名 回车
命令格式:passwd [选项] 用户名
-d: 清空密码,使之无需密码也可以登录。只是切换用户能登陆,远程连接还是不行。
-l: 锁定用户账户,对于root用户无用。两个感叹号。
-S:查看用户账户状态
-u:解锁用户账号,当要解锁用户密码为空时要将强制执行。
-f:强制执行,一般和-u连用
usermod
作用:更改用户信息
与useradd用法一样
命令格式:usermod [选项] 参数
-l:更改用户登录名称 usermod -l 新名 老名
-L:锁定账户
-U:解锁账户
-g 组名 用户名:更改用户所属组,是覆盖;
小写 是 覆盖 usermod -G 组名1[,组名2,……] 用户名:添加用户所属组; 大写 是添加 usermod -G 组名 用户名
没有密码时用-pU 强制解锁
userdel
userdel 用户名
-r 删除用户时连同用户的宿主目录一同删除
-f 强制删除,无论用户是否在使用用户名
组
定义:组是权限的容器,每个组有自己的GID,系统通过辨识GID辨别是哪个组。
先有组,后有用户。如果建立用户时不指定其所属组,那么会自动新建一个与用户名同名的组。
组的文件
/etc/group 组的信息
/etc/gshadow,一般不会设密码
groupadd
作用:用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
命令格式:groupadd [选项] 组名
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
groupmod
作用:用于更改组GID或名称。
命令格式:groupmod [选项] 组名
-g 设置欲使用的群组识别码。
-n 设置欲使用的群组名称。groupmod -n 新名 老名
groupdel
作用:用于删除群组
命令格式:groupdel [选项] 组名
查看用户的命令
id
用途:查询用户身份标识
格式:id [用户名]
finger
用途:查询用户帐号的详细信息,当前用户有哪些用户登录,Tty是本地登录,pts是远程连接。
格式:finger [用户名]
who、w
信息一个比一个详细。
users
查看当前系统有那些用户在登录
groups
用途:查询用户所属的组
权限
Linux的文件或目录被一个用户拥有时,这个用户称为这个文件的拥有者(属主)。
同时文件还被指定的用户组所拥有,这个组称为文件或目录的所属组(属组)。
访问权限规定3种访问文件或目录的方式:
读(r)read
写(w)write
可执行或查找(x)
-文本文件 rw-属主权力 r—属组权力 r -其他人权力- 属主是谁,属组是谁…
l表示连接文件
d 表示目录文件
-文本文件,二进制文件(cat),数据格式的文件
c字符设备文件
b块设备文件
s套接字(sockets):网络数据连接
p管道(FIFO,pipe)
chmod
权限添加
chmod命令用于更改文件对于某类用户的操作权限
ls -l 查看文件权限。
chmod [ugoa…][[+-=][rwx] FILE…
-R:对目前目录下的所有档案与子目录进行相同的权限变更(即以递归式的方式逐个变更,最好别用)
chmod u+x,o+x 1.txt

u 属主 g属组 o其他
chmod a=rw filename 把全部都改成rw
rwx可以分别用数字表示
r –> 4
w –> 2
x –> 1
chmod 766(必须一次写全) 文件名
文件的权限是644默认没有执行权限,目录的权限是755
cd代表了执行权限
umask
默认全部权限,用来设置限制新建文件权限的掩码,当新文件被创建时,其最初的权限由文件创建掩码决定777-umask。
umask 0000
/etc/bashrc 永久更改umask
chown
作用:改变某个文件或目录的拥有者和所属的组
格式:chown [选项]用户或组 文件名
chown root:root 1.txt 更改用户和组
chown :root 1.txt 只更改组
chgrp
改变文件或目录的所属组。
格式:chgrp [选项] 组名 文件名
chattr
设置权限,隐藏的
chattr +a passwd 文件不能删不能改append 只可以追加
用在日志文件或重要文件。
chattr -a passwd
lsattr 可以查看所有权限
chattr +i 写保护 无法插入东西
压缩
zip
zip all.zip 1.txt 2.txt 3.txt
只能解压出文件夹,里面的东西没有。
unzip
解压
unzip all.zip
同一个文件夹下不能有名字相同的文件。
文字压缩效率最好。
zcat 在不打开压缩包的情况下查看压缩包的内容
zcat 压缩包名
gzip,bzip2(与gzip一样)
压缩效果可能比zip效果好,这个指令压缩文件后,原文件不会保留。
压缩等级1-9,越高越好,但也越慢,默认是6
gunzip -9 文件名 解压 = gzip -d
tar
用途:制作归档文件、释放归档文件,覆盖文件之前不提醒,会直接覆盖。用相对路径。
格式:tar [选项]… 归档文件名 源文件或目录
tar [选项]… 归档文件名 [-C 目标目录]
-c:创建 .tar 格式的包文件
-x:解开.tar格式的包文件
-v:输出详细信息
-f: 表示使用归档文件
-t: 列表查看包内的文件
-p:保持原文件的原来属性
-P:保持原文件的绝对路径
-j : 调用bzip2压缩
tar -cz(j,J)vf all.tar (create gzip随便一个压缩方式 verbose输出详细信息 f表示使用归档文件)
-xf:解开.tar格式的包文件
-tvf: 在不打开tar包的情况下,列表查看包内的文件
tar -xf all.tar
tar -xf /lianxi/all.tar -C . 解压到当前文件夹
tar -p 保持文件的原有属性
tar -czvf passwd.tar -p /lianxi/passwd
vim 编辑器详解
Vim和Vi一样具有三种模式:命令模式(Command mode),插入模式(Insert mode)和底线命令模式(Last line mode)。
命令模式
刚刚启动Vim,便进入了命令模式。
进入命令模式
其他进入命令行模式:
- 输入
:命令; - 使用
/或?搜索命令; - 使用CTRL-R=快捷键输入表达式寄存器(expression register)。
常用命令
我们可以在屏幕底部的命令行中输入命令,或者使用以下快捷键遍历之前的命令历史,然后点击<Enter>键来执行命令。
- ↑或者Ctrl + p显示上一条命令
- ↓或者Ctrl + n显示下一条命令
- Ctrl + b移动到命令行开头
- Ctrl + e移动到命令行末尾
- Ctrl + ←或者Shift + ←向左移动一个单词
- Ctrl + →或者Shift + →向右移动一个单词
- Ctrl + w删除光标前的一个单词
- Ctrl + u删除光标前的所有字符
- :%s/<Ctrl-r><Ctrl-w>//g想要替换光标下的单词,那么只要输入:substitute命令,然后再点击Ctrl-r和Ctrl-w键,就可以将光标下的单词插入到命令行中,而不需要手工输入替换的文字了。
输入部分命令,比如输入:set,然再点击上下光标键,将自动对命令历史纪录进行过滤,仅显示以“set”开头的命令历史纪录。在输入/和?查找命令时,此特性同样有效。请注意,此时是大小写敏感的。
继续键入命令:set i之后,按下Tab或Ctrl+D键,将显示以“i”开头的set命令;继续按Tab键,则可以在这些命令列表间移动,按下回车键就可以执行该命令。
输入模式
在命令模式下按下i就进入了输入模式。
- 字符按键以及Shift组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
- q 不保存,直接退出
- q! 不保存,并强制退出
- e! 放弃所有修改,从上次保存文件开始再编辑
- w 保存文件,但不退出
- w! 强制保存,不退出
- wq或x 保存,并退出
- wq! 强制保存,并退出
shell脚本
基础知识
shell简介
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便远程远程程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
shell脚本编程如同其他编程语言的一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以运行了,而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)
脚本执行方式
- 作为可执行程序运行
- 作为解释器参数运行
脚本后台执行
在执行任务后面添加&符号
hadoop@nn1:~$ ./ssh_all.sh &
查看后台运行脚本
jobs -l
nohup 输出结果到日志
nohup ./ssh_all.sh &
# 文件默认输出到nohup.out文件中
nohup ./ssh_all.sh & >> demo.log 2>&1
# 这里指定文件输出,1表示标准输出 2表示标准错误输出, 两种都放到这个文件中
proc
查看某个进程的日志 可以到/proc文件夹下查看
变量
定义变量时,变量名不加”$”符号,变量名与等号之间不能有空格。
name='lmk'
变量名的命名须遵循如下规则:
- 命名只能使用英文字母、数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线”_”
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
除了显式地直接赋值,还可以用语句给变量赋值,如:
for file in 'ls /etc'
或
for file in $(ls /etc)
shell字符串
单引号
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。
单引号字符串中不能出现单独一个单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号
双引号里可以有变量
双引号里可以出现转义字符

dirname $0
这个命令只在脚本文件中才有作用,可以返回这个脚本文件放置的目录,这样就可以知道一些和脚本一起部署的文件位置。只要使用相对路径,就可以对文件进行定位。
“
学名叫“倒引号”, 如果被“倒引号”括起来, 表示里面需要执行的是命令。
比如 `dirname $0`, 就表示需要执行 dirname $0 这个命令
“”
被双引号括起来的内容, 里面 出现 $ (美元号: 表示取变量名) `(倒引号: 表示执行命令) \(转义号: 表示转义), 其余的才表示字符串。
’‘
被单引号括起来的内容, 里面所有的都表示串, 包括上面所说的 三个特殊字符。
#! /bin/bash
# 获取脚本当前位置。
cd `dirname $0`
# 输出脚本位置
echo `pwd`
工作中常用命令
查看端口占用,并找到相关进程
查看端口使用情况
netstat -tulnss -tuln
查看端口使用进程
- fuser -n tcp 端口号
- fuser -n udp 端口号
