一、. 目录和文件操作
- mkdir 创建目录:mkdir [选项] 目录名
- -m:--mode,设定权限(类似于chmod)
- -p:--parents,若上级目录不存在则递归创建
- -v:--verbose,创建当前新目录或者文件的时候显示日志信息
mkdir Folder1 #创建一个空目录
mkdir -p ../pic/Folder2 #若../pic不存在,将会创建
mkdir -m 777 Folder3 #创建一个权限为777的目录
mkdir -v Folder4 #创建新目录之后打印日志
- ls 打印目录清单:ls [选项][目录]
- -a:列出目录下的所有文件,包括以.开头的隐藏文件
- -c:-clt根据ctime(文件最后修改时间)排序,-cl根据名称排序
- -l:除了文件名之外,还将文件的权限、所有者、文件大小等信息列出来
- -t:以文件的修改顺序排序
- -u:-ult显示访问时间,而且依据访问时间排序,-ul根据名称排序
- -v:依据版本进行排序
- -x:逐行列出项目,而不是逐栏列出
- -X:根据扩展名进行排序
- -1:每行只列出一个文件
- -F:显示的子目录在名字后加“/”,显示的可执行文件的名字后加“*”
ls -lR /home/lkj/Desktop #递归列出所有的文件和目录以及子目录的详细情况
ls -l pre* #列出当前目录中所有以pre开头的文件
ls F ./src | grep /$ #列出当前目录下src文件夹里的子目录(先让子目录特征显示,然后用正则表达筛选)
ls -AF #列出所有文档,可以清晰分辨子目录和可执行文件
- cd 切换:cd 目录名
cd / #进入系统根目录
cd .. #进入上一级目录
cd ../ #进入上一级目录
cd ~ #进入当前用户的主目录
cd /ect/tmp/yourfolder #进入绝对路径的目录
cd - #返回进入此目录之前所在的目录
cd !$ #把上个命令的参数作为cd参数使用
- pwd 查看当前工作目录的完整路径:pwd [选项]
pwd #一般不使用参数
pwd -P #如果目录是链接,显示出实际路径,而非链接路径,若当前路径被删除了,pwd仍然是原路径
- rm 删除:rm [选项] 文件
- -f:--force 忽略不存在的文件,强行删除,不给出提示
- -i:--interactive 交互式的删除,每个子文件都问用户要不要删
- -r,-R:--recursive 递归的删除子目录
- -v:--verbose 详细显示进行的步骤
rm -i test.txt #逐一进行删除,输入y后删除,也是默认的删除方式
rm -f test.txt #强行删除,并且不给任何提示
rm -i *.txt #删除所有的txt文档,删前逐一提问
rm -r test/ #递归删除test文件夹里所有的文件和子文件夹
rm -rf test/ #递归并且强行删除文件夹和子文件夹
rm -- -f #删除以-f开头的文件
- rmdir 删除空目录(删除前必须是空的,可以代替rm -r dir更安全):rmdir [选项] 目录
- -p:递归删除目录,当子目录删除后其父目录为空时,也一同被删除
- -v:--verbose 显示执行的详细执行过程
rmdir testNotEmpty #删除非空目录会失败
rmdir -p testdir/ #当子目录被删除后使得testdir这个目录也一并成为空目录的话,就顺便一起删除
- mv 移动,move的缩写,可以移动文件或者改名:mv [选项] 原文件或者目录 目标文件或目录
- -b:若要覆盖文件,则覆盖前先进行备份
- -f:--force强行覆盖文件而不会询问
- -i:若目标文件已经存在,就会询问是否覆盖
- -t:--targe --directory,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后
mv test.txt test1.txt #文件改名
mv test1.txt folder1 #文件移动到目录里
mv test1.txt test2.txt test3.txt folder1 #多个文件移动到一个目录里
mv -t folder1/ test1.txt test2.txt test3.txt #多个文件移动到一个目录里
mv folder1 folder2 #目录改名
mv test1.txt -b test2.txt #文件被覆盖前做简单的备份。
#说明:-b不接受参数,mv会去读取环境变量VERSION_CONTROL来作为备份策略。--backup该选项指定如果目标文件存在时的动作,共有四种备份策略:
#1.CONTROL=none或off : 不备份。
#2.CONTROL=numbered或t:数字编号的备份
#3.CONTROL=existing或nil:如果存在以数字编号的备份,则继续编号备份m+1...n:
#执行mv操作前已存在以数字编号的文件log2.txt.~1~,那么再次执行将产生log2.txt~2~,以次类推。如果之前没有以数字编号的文件,则使用下面讲到的简单备份。
#4.CONTROL=simple或never:使用简单备份:在被覆盖前进行了简单备份,简单备份只能有一份,再次被覆盖时,简单备份也会被覆盖。
- cp 复制:cp [选项]… 源… 目录
- -i ,--interactive 覆盖前询问(使前面的-n选项失效)
- -n ,--no-clobber 不要覆盖已存在的文件(使前面的-i选项失效)
- -R,-r,--recursive 复制目录及目录内的所有项目
cp file.txt test5 #在没有带-a参数时,两个文件的时间是不一样的,在带来-a参数时,两个文件的时间是一致的
cp –a test3 test5 #复制整个目录
cp –s file.txt file_link.txt #新建一个软链接文件log_link.log,实际上可以说建立的是一个【快捷方式】
- touch 新建文件或者是修改文件的时间戳(不常用):touch [选项] 文件
- -a 或--time = atime--time =access或--time=use 只更改存取时间
- -c 或--no-create 不建立任何文档
- -d 使用指定的日期时间,而非现在的时间
- -m 或--time=mtime或--time=modify 只更改变动时间
- -r 把指定文档或目录的日期时间,统统设成和参考文档和目录的日期时间相同
- -t 使用指定的日期,而非现在的时间
touch file.txt #创建不存在的文件
touch –r file.txt file1.txt #更新file.txt的时间和file1.txt时间戳相同
touch –t 201801251357.50 file.txt #设定file.txt文件的时间戳
# [[CC]YY]MMDDhhmm[.SS] 由于系统的限制,早于1970年1月1日的时间是错误的
-
cat 显示文件内容(或者几个文件连接起来显示,或者从标准输入中读取内容并显示):cat [选项][文件]
- ①一次显示整个文件:cat filename
- ②从键盘创建一个文件:cat>filename只能创建新文件,不能编辑已有文件
- ③将几个文件合并为一个文件:cat file1 file2>file
-
more 逐页阅读:more命令功能类似cat,cat命令是整个文件的内容从上到下显示在屏幕上,more会一起一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字串的功能,more命令从前向后读取文件,因此在启动时就加载整个文件。
- 常用操作命令:
Enter #向下n行,需要定义,默认为1行
Ctrl+F、空格键 #向下滚动一屏
Ctrl+B #返回上一屏
= #输出当前行的行号
:f #输出文件名和当前行的行号
V #调用vi编辑器
q #退出more
- tail:tail命令从指定点开始将文件写到标准输出流,使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail –f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。(经常用来在查看服务器上的日志文件)
- -f:循环读取
- -q:不显示处理信息
- -v:系那是详细的处理信息
- -c<数目>:显示的字节数
- -n<行数>:显示行数
tail –n 5 log2018.log #显示文件最后5行的内容
tail -f test.log #循环查看文件内容
tail –n +5 log2014.log #从第5行开始显示文件
二、重定向、管道
重定向
- 重定向标准输出
使用>
可以将本来出现在屏幕的标准输出信息重定向到一个文件中。
用>>
可以在实现重定向时不覆盖原有内容,而是在文件末尾追加内容. - 重定向标准错误到文件
shell中,默认用数字0,1,2分别代表标准输入、标准输出、标准错误 - 屏蔽不想看到的信息
Linux中的特殊文件/dev/null,可以接受输入信息但是什么都不做,屏蔽命令输出消息可以用ls /usr/ > /dev/null
- cat可以接受一组文件,然后通过重定向将他们重新组合到一个文件中
cat file1 file2 > file
ls -l /usr/tmp >dir #重定向
ls -l /usr/tmp >>dir #追加重定向
ls /usr/tmp 2>err.file #错误输出到err.file
ls /usr/tmp >output.file 2>&1 #错误和输出重定向到output
ls /usr/tmp 2>&1 >output.file #错误到标准输出,其他输到output
wc </etc/passwd
# 标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示
管道
- 将一个程序的标准输出写到一个文件中去,再将这个文件作为另一个程序的输入。管道要解决的就是不需要临时文件就能将两条命令结合在一起。如:
ls /usr/bin | wc -w
-
|
操作符可以将一个命令的输出作为另一个命令的输入,实现复杂的功能
[root@test]#cat ls
aaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaaaaaaaa
[root@test]#cat ls |sort|uniq #通过uniq命令来排除重复的行,sort可以将文本行排序
aaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbb
- 对uniq加上
-d
查看重复的行
[root@test]#cat ls |sort|uniq -d
aaaaaaaaaaaaaaaaaaaaaaaa
- 管道可以套管道
[root@test]#ls /bin /usr/bin/ | sort | uniq | wc #wc命令可以统计文本的行数、单词书和字节数。
[root@test]#find cn/ -name "*.php" |xargs cat|wc -l #仅仅想要统计行数,加上-l。wc命令常用来统计代码的行数。
[root@test]#ls /bin /usr/bin/ | sort | uniq | grep zip #grep命令用来查找匹配的模式,并且打印包含该模式的行,找出包含字符串zip的文件名
[root@test]#ls /bin/ | head -n 5 #head和tail命令也常常用于组成管道命令。head可以查看文件或者文本的前面部分。tail查看文件或者文本的末尾部分。二者都可以接收-n选项,表示显示的行数。
[root@test]#tail -f /var/log/messages #tail还有一个重要的用处,就是实时显示某些程序的日志文件。tail能接受一个选项-f,实时显示出新添加到文件末尾的行数。这样一旦有新的行追加到日志文件的末尾,就会被实时显示在后面。
三、linux运维常用命令
-
linux启动过程
开启电源 --> BIOS开机自检 --> 引导程序lilo或grub --> 内核的引导(kernel boot)--> 执行init(rc.sysinit、rc)--> mingetty(建立终端) --> Shell -
网卡绑定多ip
# ifconfig eth0:1 192.168.1.99 netmask 255.255.255.0
- 设置DNS、网关
# echo "nameserver 202.16.53.68" >> /ect/resolv.conf
# route add default gw 192.168.1.1
- 弹出、收回光驱
# eject
# eject -t
- 用date查询昨天的日期
# date --date=yesterday
- 用grep查询file1里面空行的所在行号,
# grep ^$ file1
- 查询file1以abc结尾的行
# grep abc$ file1
# sed -n '1,3p' file1
# head -3 file1
- 清空文件(cat)
# true > 1.txt
# echo "" > 1.txt
# > 1.txt
# cat /dev/null > 1.txt
# find /data -type d -empty -exec rm -rf {} ;
- linux下批量删除空文件(大小等于0的文件)的方法(xargs )
# find /data -type f -size 0c -exec rm -rf {} ;
# find /data -type f -size 0c| xargs rm -f
- 删除五天前的文件
#find /data -mtime +5 -type f -exec rm -rf {} ;
# cat 1.txt 3.txt | sort | uniq
# echo `ssh $IP cat /etc/sysconfig/network | awk -F = '/hostname/ {print $2}'`
- 实时监控网卡流量(安装iftop)
# /usr/local/iftop/sbin/iftop -i eth1 -n
- 查看系统版本
# lsb_release -a
#pkill -kill -t pts/1
- tar增理备份、还原
# tar -g king -zcvf kerry_full.tar.gz kerry
# tar -g king -zcvf kerry_diff_1.tar.gz kerry
# tar -g king -zcvf kerry_diff_2.tar.gz kerry
# tar -zxvf kerry_full.tar.gz
# tar -zxvf kerry_diff_1.tar.gz
# tar -zxvf kerry_diff_2.tar.gz
- 将本地80端口的请求转发到8080端口,当前主机外网IP为202.96.85.46
-A PREROUTING -d 202.96.85.46 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.9.10:8080
# crontab -e
0 6-12/2 * 11 * /usr/bin/httpd.sh
# netstat -tnlp | grep 8080
lsof -i:8080
- 在Shell环境下,如何查看远程Linux系统运行了多少时间?(uptime)
# ssh user@被监控主机ip "uptime"
每5秒刷新一次,最右侧有CPU的占用率的数据
# vmstat 5
然后按Shift+P,按照进程处理器占用率排序
# top
- 用free查看内存使用情况的命令
用free命令查看内存使用情况
# free -m
top 然后按Shift+M, 按照进程内存占用率排序
# top
- 查看磁盘i/o (iostat)
用iostat查看磁盘/dev/sdc3的磁盘i/o情况,每两秒刷新一次
# iostat -d -x /dev/sdc3 2
- 修复文件系统 fsck
# fsck –yt ext3 /
-t 指定文件系统
-y 对发现的问题自动回答[yes](http://man.linuxde.net/yes "yes命令")
- read 命令5秒后自动退出
# read -t 5
- grep -E -P 是什么意思(perl)
-E, --extended-regexp 采用扩展正规表达式。
-P, --perl-regexp 采用perl正规表达式
- vi编辑器(涉及到修改,添加,查找)
i 光标前插入
I 光标行首插入
a 光标后插入
A 光标行尾插入
o 光标所在行下插入一行,行首插入
O 光标所在行上插入一行,行首插入
G 移至最后一行行首
nG 移至第n行行首
n+ 下移n行,行首
n- 上移n行,行首
:/str/ 从当前往右移动到有str的地方
:?str? 从当前往左移动到有str的地方
:s/str1/str2/ 将找到的第一个str1替换为str2
:s/str2/str2/g 将当前行找到的所有str1替换为str2
:n1,n2s/str1/str2/g 将从n1行至n2行找到的所有的str1替换为str2
:1,.s/str1/str2/g 将从第1行至当前行的所有str1替换为str2
:.,$s/str1/str2/g 将从当前行至最后一行的所有str1替换为str2
- linux服务器之间相互复制文件( scp)
copy 本地文件1.sh到远程192.168.9.10服务器的/data/目录下
# scp /etc/1.sh king@192.168.9.10:/data/
copy远程192.168.9.10服务器/data/2.sh文件到本地/data/目录
# scp king@192.168.9.10:/data/2.sh /data/</pre>
- 使用sed命令把test.txt文件的第23行的TEST换成TSET.
# sed -i '23s/TEST/TSET/' test.txt
# sed -i '23 s/TEST/TSET/' test.txt
# export HISTTIMEFORMAT="%F %T "
namp -ps 192.168.0.1
- 如何查看网络连接
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
- 如何查看当前系统使用了那些库文件
# ldconfig -v
- 如何查看网卡的驱动版本
# ethtool -i eth0
# tcpdump tcp port 80 host 192.168.0.1
- 如何看其它用户的邮件列表
# mial -u king
- 对大文件进行切割 split
按每个文件1000行来分割
# split -l 1000 httperr8007.log httperr
按照每个文件5m来分割
# split -b 5m httperr8007.log httperr
- 合并文件
取出两个文件的并集(重复的行只保留一份)
# cat file1 file2 | sort | uniq
取出两个文件的交集(只留下同时存在于两个文件中的文件)
# cat file1 file2 | sort | uniq -d
删除交集,留下其他的行
# cat file1 file2 | sort | uniq –u
- 打印文本模式下运行的服务 chkconfig
# chkconfig --list|awk '$5~/on/{print $1,$5}'
- 删除0字节文件
# find -type f -size 0 -exec rm -rf {} ;
- 查看进程,按内存从大到小排列
# ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
- 查看http的并发请求数及其TCP连接状态
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# ifconfig eth0|sed -n '2p'|awk '{print $2}'|cut -c 6-30
perl实现获取IP地址:
# ifconfig -a | perl -ne 'if ( m/^s*inet (?:addr:)?([d.]+).*?cast/ ) { print qq($1n); exit 0; }'
- 获取内存大小
# free -m |grep "Mem" | awk '{print $2}'
- 查看CPU核心数
# cat /proc/cpuinfo |grep -c processor
- 查看磁盘使用情况 df
# df -h
- 查看有多少个活动的PHP-cgi进程
# netstat -anp | grep php -cgi | grep ^tcp | [wc](http://man.linuxde.net/wc "wc命令") -l
- 查看硬件制造商
# dmidecode -s system-product-name
网友评论