Linux基础入门

一、. 目录和文件操作

  • 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行开始显示文件

二、重定向、管道

重定向

  1. 重定向标准输出
    使用>可以将本来出现在屏幕的标准输出信息重定向到一个文件中。
    >>可以在实现重定向时不覆盖原有内容,而是在文件末尾追加内容.
  2. 重定向标准错误到文件
    shell中,默认用数字0,1,2分别代表标准输入、标准输出、标准错误
  3. 屏蔽不想看到的信息
    Linux中的特殊文件/dev/null,可以接受输入信息但是什么都不做,屏蔽命令输出消息可以用ls /usr/ > /dev/null
  4. 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 

管道

  1. 将一个程序的标准输出写到一个文件中去,再将这个文件作为另一个程序的输入。管道要解决的就是不需要临时文件就能将两条命令结合在一起。如:
ls /usr/bin | wc -w
  1. |操作符可以将一个命令的输出作为另一个命令的输入,实现复杂的功能
[root@test]#cat ls 
  aaaaaaaaaaaaaaaaaaaaaaaa
  bbbbbbbbbbbbbbbbbbbbbbbb
  aaaaaaaaaaaaaaaaaaaaaaaa
  
[root@test]#cat ls |sort|uniq    #通过uniq命令来排除重复的行,sort可以将文本行排序
  aaaaaaaaaaaaaaaaaaaaaaaa
  bbbbbbbbbbbbbbbbbbbbbbbb
  1. 对uniq加上-d查看重复的行
[root@test]#cat ls |sort|uniq -d
  aaaaaaaaaaaaaaaaaaaaaaaa
  1. 管道可以套管道
[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运维常用命令

  1. linux启动过程
    开启电源 --> BIOS开机自检 --> 引导程序lilo或grub --> 内核的引导(kernel boot)--> 执行init(rc.sysinit、rc)--> mingetty(建立终端) --> Shell

  2. 网卡绑定多ip

# ifconfig eth0:1 192.168.1.99 netmask 255.255.255.0
  1. 设置DNS、网关
# echo "nameserver 202.16.53.68" >> /ect/resolv.conf
# route add default gw 192.168.1.1
  1. 弹出、收回光驱
# eject
# eject -t
  1. 用date查询昨天的日期
# date --date=yesterday
  1. 用grep查询file1里面空行的所在行号,
# grep ^$ file1
  1. 查询file1以abc结尾的行
# grep abc$ file1
  1. 用sed和head打印出file1文件第1到第三行
# sed -n '1,3p' file1
# head -3 file1
  1. 清空文件(cat)
# true > 1.txt
# echo "" > 1.txt
# > 1.txt
# cat /dev/null > 1.txt
  1. 删除所有空目录(find 、type、exec)
# find /data -type d -empty -exec rm -rf {} ;
  1. linux下批量删除空文件(大小等于0的文件)的方法(xargs )
# find /data -type f -size 0c -exec rm -rf {} ;
# find /data -type f -size 0c| xargs rm -f
  1. 删除五天前的文件
#find /data -mtime +5 -type f -exec rm -rf {} ;
  1. 删除两个文件重复的部份,打印其它(sort 、uniq )
# cat 1.txt 3.txt | sort | uniq
  1. 攻取远程服务器主机名 ( ssh 、awk 、hostname)
# echo `ssh $IP cat /etc/sysconfig/network | awk -F = '/hostname/ {print $2}'`
  1. 实时监控网卡流量(安装iftop)
# /usr/local/iftop/sbin/iftop -i eth1 -n
  1. 查看系统版本
# lsb_release -a
  1. 强制踢出登陆用户(pkill 、kill)
#pkill -kill -t pts/1
  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
  1. 将本地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
  1. 在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh (crontab)
# crontab -e
0 6-12/2 * 11 * /usr/bin/httpd.sh
  1. 查看占用端口8080的进程 (netstat 、lsof)
# netstat -tnlp | grep 8080
lsof -i:8080
  1. 在Shell环境下,如何查看远程Linux系统运行了多少时间?(uptime)
# ssh user@被监控主机ip "uptime"
  1. 查看CPU使用情况的命令(vmstat、top )
每5秒刷新一次,最右侧有CPU的占用率的数据
# vmstat 5

然后按Shift+P,按照进程处理器占用率排序
# top
  1. 用free查看内存使用情况的命令
用free命令查看内存使用情况
# free -m

top 然后按Shift+M, 按照进程内存占用率排序
# top
  1. 查看磁盘i/o (iostat)
用iostat查看磁盘/dev/sdc3的磁盘i/o情况,每两秒刷新一次
# iostat -d -x /dev/sdc3 2
  1. 修复文件系统 fsck
# fsck –yt ext3 /
-t 指定文件系统
-y 对发现的问题自动回答[yes](http://man.linuxde.net/yes "yes命令")
  1. read 命令5秒后自动退出
# read -t 5
  1. grep -E -P 是什么意思(perl)
-E, --extended-regexp 采用扩展正规表达式。
-P, --perl-regexp 采用perl正规表达式
  1. 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
  1. linux服务器之间相互复制文件( scp)
copy 本地文件1.sh到远程192.168.9.10服务器的/data/目录下
# scp /etc/1.sh [email protected]:/data/ 

copy远程192.168.9.10服务器/data/2.sh文件到本地/data/目录
# scp [email protected]:/data/2.sh /data/
  1. 使用sed命令把test.txt文件的第23行的TEST换成TSET.
# sed -i '23s/TEST/TSET/' test.txt
# sed -i '23 s/TEST/TSET/' test.txt
  1. 使history命令能显示时间export
# export HISTTIMEFORMAT="%F %T "
  1. 如何查看目标主机192.168.0.1开放那些端口 nmap ps
namp -ps 192.168.0.1
  1. 如何查看网络连接
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  1. 如何查看当前系统使用了那些库文件
# ldconfig -v
  1. 如何查看网卡的驱动版本
# ethtool -i eth0
  1. 使用tcpdump来监视主机192.168.0.1的tcp的80端口 host
# tcpdump tcp port 80 host 192.168.0.1
  1. 如何看其它用户的邮件列表
# mial -u king
  1. 对大文件进行切割 split
按每个文件1000行来分割
# split -l 1000 httperr8007.log httperr

按照每个文件5m来分割
# split -b 5m httperr8007.log httperr

  1. 合并文件
取出两个文件的并集(重复的行只保留一份)
# cat file1 file2 | sort | uniq

取出两个文件的交集(只留下同时存在于两个文件中的文件)
# cat file1 file2 | sort | uniq -d

删除交集,留下其他的行
# cat file1 file2 | sort | uniq –u
  1. 打印文本模式下运行的服务 chkconfig
# chkconfig --list|awk '$5~/on/{print $1,$5}'
  1. 删除0字节文件
# find -type f -size 0 -exec rm -rf {} ;
  1. 查看进程,按内存从大到小排列
# ps -e  -o "%C  : %p : %z : %a"|sort -k5 -nr
  1. 查看http的并发请求数及其TCP连接状态
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  1. 获取IP地址 cut exit
# 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; }'
  1. 获取内存大小
# free -m |grep "Mem" | awk '{print $2}'
  1. 查看CPU核心数
# cat /proc/cpuinfo |grep -c processor
  1. 查看磁盘使用情况 df
# df -h
  1. 查看有多少个活动的PHP-cgi进程
# netstat -anp | grep php -cgi | grep ^tcp | [wc](http://man.linuxde.net/wc "wc命令") -l
  1. 查看硬件制造商
# dmidecode -s system-product-name

你可能感兴趣的:(Linux基础入门)