Linux学习

Linux基础

文件管理

ls
ls -a 显示隐藏文件
ls -l 显示文件信息
ls -lh 文件大小方便读
ls- lsrt t按时间排序 r反向显示 s按文件大小排序

pwd
显示当前文件夹路径

cd - 回到上一目录

/ 根目录
~用户的home目录

cp 复制
cp 原文件名 要复制的文件名
cp -r 复制目录

mv移动
mv 原 新目录

rm 删除
rm -r 删除目录
rm -v 显示删除的文件
rm -f 强制删除

ln 硬链接和软链接
作用:为某一个文件或目录在另外一个位置建立一个同步的链接

硬链接(只能对文件使用)
两个目录指向同一个文件,删除任何一个,真正的文件都不会被删除,把硬链接都删除,文件才会删除
ln
修改其中一个,其他的也会修改

软链接
ln -s 源文件 目标文件
记录文件的路径
源文件名字改变或删除,软链接失效

ln -f

df =disk free查看磁盘空间
du=disk usage
默认显示全部的占用情况
du sh * 显示下一级目录

find 按照时间/类型/名称查找文件(可加其他命令)
基本形式
find path -option [ -print ] [ -exec -ok command ] {} \

参数

  • pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
  • -print: find命令将匹配的文件输出到标准输出。
  • -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。
  • -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

option

选项说明
-name filename#查找名为filename的文件
-perm#按执行权限来查找
-user username#按文件属主来查找
-group groupname#按组来查找
-mtime -n +n#按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n#按文件访问时间来查
-ctime -n +n#按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup#查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser#查无有效属主的文件,即文件的属主在/etc/passwd中不存在
-ctime -n +n#按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup#查无有效属组的文件,即文件的属组在/etc/groups中不存在
-newer f1 !f2#查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f#查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c]#查长度为n块[或n字节]的文件
-depth#使查找在进入子目录前先行查找完本目录
-fstype#查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount#查文件时不跨越文件系统mount点
-follow#如果遇到符号链接文件,就跟踪链接所指的文件
-cpio#对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune#忽略某个目录

find . -name "*.xml"
find 目录 -atime修改时间 +3 -type f(找修改时间在3天以前的文件)
whereis+ 命令查看可执行文件的路径
which

权限管理

  • Group / gid
  • User / uid
  • root

权限:文件拥有者+group用户+所有用户
三个比特位:r(read)+w(write)+x(execute)
r=4 w=2 x=1 (rwx=7 r-x=5 r–=4)

-rwxrw-r‐-1 root root 1213 Feb 2 09:39 abc

  • 第一个字符代表文件(-)、目录(d),链接(l)
  • 1表示链接的文件数

目录的权限
r (列出文件夹中的文件)
w (在文件夹中删除、添加或重命名文件(夹))
x (cd到文件夹)

改变权限
chmod改变文件或目录的权限
| chmod | u/g/o/a | +(add)/-(remove)/=(set) | r/w/x | 文件名或目录名

chmod 755 abc:赋予abc权限rwxr-xr-x
chmod u=rwx,g=rx,o=rx abc:同上u=用户权限,g=组权限,o=不同组其他用户权限
chmod u-x,g+w abc:给abc去除用户执行的权限,增加组写的权限
chmod a+r abc:给所有用户添加读的权限

chown改变所有者
chown mengmeng abc
chown mengmeng ./abc 改变目录的所有者
chown -R root ./abc 改变目录及其下级所有文件和目录的所有者
chgrp改变文件的用户组
chgrp root abc

usermod改变用户所在组
usermod -g 组名 用户名

suid sgid sticky

su = switch user

sudo -u 用户 命令

文本操作

cat输出文件
head 大文件输出
tail
tail -f 文件在不断写并显示出来
more/less shift +g ctrl+u ctrl+d

grep 查找文件中符合pattern的内容
grep [option] 'pattern' filename
options
-A : num, --after-context=num 打印每次匹配项后的num行
-B : num, --before-context=num 打印每次匹配项前的num行
-c : 计算匹配项出现的次数
-n : 输出行号
-v : 反向选择 显示没有匹配项的行
-H : 显示文件头
-i : 不敏感的匹配,忽略大小写
-o : 只输出匹配的内容(默认输出匹配内容的行)
–color : 高亮关键字

sort+ 文件名 按字典序排序
-m : 合并多个已排序的文件
-o output : 把输出打印到output文件中
-b :在比较行时忽略空白字符
-n :按数值大小排序
-r : 反向排序

uniq输出或者忽略文件中的重复行 (默认折叠连续重复的行,非连续的不会)
基本形式
uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
option

  • -c或–count 在每列旁边显示该行重复出现的次数。
  • -d或–repeated 仅显示重复出现的行列。
  • -f<栏位>或–skip-fields=<栏位> 忽略比较指定的栏位。
  • -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
  • -u或–unique 仅显示出一次的行列。
  • -w<字符位置>或–check-chars=<字符位置> 指定要比较的字符。
  • –help 显示帮助。
  • –version 显示版本信息。
  • [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
  • [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

sort xxx | uniq -c

wc统计
-l 行数
-w 单词数
-c 字节数 不能与-m同时使用
-m 字符数 如果前面有-c就会被取消,如果没有多个字节表示的字符,等同于-c

cut文件内容查看
语法
cut(选项)(参数)
option

  • -b:仅显示行中指定直接范围的内容;
  • -c:仅显示行中指定范围的字符;
  • -d:指定字段的分隔符,默认的字段分隔符为“TAB”;
  • -f:显示指定字段的内容;
  • -n:与“-b”选项连用,不分割多字节字符;
  • –complement:补足被选择的字节、字符或字段;
  • –out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;

gawk 引用网址

基本形式

gawk [ POSIX or GNU style options ] -f program-file [ -- ] file ...
gawk [ POSIX or GNU style options ] [ -- ] program-text file ...

option

选项描述
-F fs指定描绘一行中数据字段的文件分隔符 gawk -F: '{print $1}'/etc/passwd
-f file指定读取程序的文件名
-v var=value定义gawk程序中使用的变量和默认值
-mf N指定数据文件中要处理的字段的最大数目
-mr N指定数据文件中的最大记录大小
-W keyword指定gawk的兼容模式或警告级别

gawk将下面的变量分配给在文本行中检测到的每个数据字段:

  • $0表示整行文本
  • $1表示文本行中的第一个数据字段
  • $2表示文本行中的第二个数据字段
  • $n表示文本行中的第n个数据字段
gawk 'BEGIN {print "Hello World!"} {print$0} END {print "byebye"}'

BEGIN关键字是在处理任何数据之前应用的命令,即执行该gawk命令行时首先会去执行BEGIN所指定的命令,这里是print “HelloWorld!”,接下去{print $0}是我们输入的数据,输入之后回车会立刻显示相应的内容,也就是我们输入的内容,直到按ctrl-D,然后该gawk命令接结束了,但是结束之后还要之END后的结尾命令{print “byebye”}。这样整个过程就结束了。

vim

dd删除一行
u撤销
/+文本 查找对应的文本 n下一个匹配 N上一个匹配

打包与压缩

tar
gzip
z gzip压缩
c 做压缩
v输出信息
f 文件已存在会覆盖

t 打开打包文件,不解压
x 解压

zcat / zgrep /zmore /zless

http请求与传输

curl

命令解释
-X指定request的method
-H设置请求的header
-d指定post请求的消息体
-b指定请求的cookie
-c输出响应的set-cookie内容到文件
-i输出response的header信息

wget
下载文件

网络常用工具命令

ping
ping -c 3 -W 1 -q www.baidu.com
ping三次 超时时间1秒 静默输出
ping

hostip解析到地址或地址解析到ip
nc网络发包工具
nc -t -v 127.0.0.1 8888 tcp
nc -u -v 127.0.0.1 8888 udp
nc -l -v 127.0.0.1 8888 监听端口

telnet

netstat查看网络连接和端口

tcpdump 网络抓包工具

远程命令

ssh 安全远程登录
scp

进程与系统

ps -ef查看进程信息

标识说明
UID进程启动用户的id
PID进程id
PPID启动该进程的进程id
Ccpu占用率
STIMEstart time
CMD启用命令
TIME占用的CPU时间

ps -lf pid查看指定进程的线程信息

标识说明
LWP线程号
NLWP线程数
STAT线程状态

free系统内存使用情况(mac 没有)
free -m/-g/-h 显示单位

top查看cpu使用率,内存信息,进程情况

kill发送信号给进程
kill -9 pid 强制杀死进程
kill -l 查看信号的编码

shell脚本编程

数组
array_name=(value0 value1 value2) //定义数组
value1=${array_name[1]} //读取数组,下标不能是字符串
array_name[*] 
array_name[@] //获取所有元素
${#array_name[*]} //数组长度
传递参数

$n n为一个数字,0为执行的文件名,1,2,3…之后是参数
特殊字符
$# 传递到脚本的参数个数
$* 所有的参数的字符串组合("$1 … $n")
$@ 使用时加引号,并在引号中返回每一个参数(“ 1 &quot; . . . &quot; 1&quot; ... &quot; 1"..."n”)

运算符

shell运算符

关系运算符只能比较数字
if中括号前后要有空格
逻辑运算符判断要加中括号
文件测试运算符
-r 可读
-w 可写
-x 可执行
-f 是否是普通文件
-d 是否是目录
-s 是否为空 空false
-e 是否存在

统计文件中空行数
思路:
1) 空行通过正则表达式来实现:^$
2) 统计数量
a) grep -c
b) awk

解答:

方法1:
grep -c “^$” /etc/services
方法2:
grep “^$” /etc/services |wc -l
方法3:
awk “/^$/” /etc/services |wc -l
方法4:
awk ‘/^$/{i++}END{print i}’ /etc/services

shell流程控制

if

if [ $a == $b ] 
then
	echo "a等于b"
elif [ $a -gt $b ]
then
	echo "a大于b"
else
	echo "a小于b"
fi

for

for loop in 1 2 3 4 5
do
	echo $loop
done

while

while [[ $i -gt 5]]
do
 	echo $i
 	((i--))
done

until
case(case\esac)

echo "enter:"
read aNum
case $aNum in
	1) echo '1'
	;;
	2) echo '2'
	;;
	3) echo '3'
	;;
	*) echo 'default'
	;;
esac

break/continue

shell函数

[ function ] funname [()]
{
action;
[return int;]
}

noreturn(){
    echo 'noreturn'
}

returnfun(){
    echo "enter:"
    read a
    return $(($a));
}
returnfun
echo "enter $? "

paramFun(){
    echo "enter $1 "
    echo "enter $2 "
    echo "enter $# 个参数"
}

paramFun 1 2 3
一些命令

xargs
多行合成一行
alias设置命令的别名

alias name=‘command line’
unalias解除命名

crontab 安装、卸载或列出定时任务的命令
crontab -e 编辑crontab文件
crontab文件

rsync

iostat
vmstat

磁盘报警,如何找到/home下占用磁盘空间大的文件
#查找当前目录占用空间最大的文件夹
du -ah --max-depth=1
#查找文件夹占用空间最大文件
ls -lhsrS
查看日志文件中所有异常和异常栈,统计异常出现次数,查看某异常首次出现的时间
#
grep "Exception" error.log | sort | uniq -c | sort -n -k1
grep -A 10 “java.lang.IllegalArgumentException”
grep -B 1 "java.lang.IllegalArgumentException" error.log | head -n 2
把远程服务器的文件copy到自己的电脑上
python -m SimpleHTTPServer 8888
curl http://servername:8888/error.log

server: nc -l 8888 < filename
local: nc server  8888 > filename
把本机文件copy到远程服务器上
server:nc -l 8888 > filename
local:nc server  8888 < filename
删除了文件,但磁盘占用空间未释放,如何排查

有可能是仍有进程在读写该文件

lsof | grep deleted
echo “” > error.log
切换jdk的版本,创建软连接
mkdir jdk8
ln -s jdk8 jdk
修改文件夹的拥有者和组
chown  tomcat:tomcat ./works -R
端口号被占用,查看被什么进程占用
sudo netstat -nptl | grep 8888
ps -aux | grep pid
在多台服务器上寻找某个文件
for i in {1..3};
do 
ssh l-qfcm.fresh.dev.cn0 "grep /home/q/appcode/logs/info.log";
done;

atnodes ‘grep /home/q/appcode/logs/info.log’ l-dev[1-3].f.cn1.qunar.com

终端快捷键

  • 搜索历史命令

ctrl+r

  • 光标移动

Ctrl+a 移动到当前行的开头
Ctrl+e 移动到当前行的结尾
ctrl+左箭头/右箭头:左一个单词,右移一个单词

  • 删除or剪切

Ctrl+w:剪切光标所在处之前的一个词(以空格、标点等为分隔符)
Ctrl+u 剪切命令行中光标所在处之前的所有字符(不包括自身)
Ctrl+k 剪切命令行中光标所在处之后的所有字符(包括自身)
Ctrl+& 恢复快捷键删除的内容

  • 粘贴

ctrl+y

  • 清屏

ctrl+l

Vim编辑器

常用操作
  • 跳转
    • 文件开头 gg
    • 末尾G
    • ctrl+u 上翻半页
    • ctrl+d 下翻半页
    • b e 单词头,单词尾
    • w 下一单词
  • 修改
    • 复制 y+范围
    • 赋值当前行 yy
    • 剪贴字符 x
    • 剪贴当前行 dd
    • 粘贴 p P
    • 修改某单词 c+iw
    • 向下增加一行并插入 o
    • 向上增加一行并插入 O
  • 查找替换
    • 查找 /someword 下一个n 上一个N
    • 替换 1,$(表示1到最后一行) s/原内容/替换的内容/g
  • 执行外部命令
    • : ! ls ~
    • : w ! sudo tee %
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值