Linux命令汇总
- linux查询进程占用哪些端口:netstat –nlap
- 从尾部将指定内容输出指定文件:tail -n 100000 /data/HaierServerHomeAir/logs/uhome_service_log >> /data/log07181113.txt
- Xxx is not soduers file问题:看看用户是否是root,如果不是,su命令,输入密码,此时切换到了root用户;
- vim进入到编辑模式:1. Ctrl+C;2. :e!;下一步就是保存:1. Ctrl+C;2. :wq!
- Vi进入编辑模式:1. 摁一下i就可以了;保存:1.ctrl + c;2. :wq!,vim是vi的升级版本,vi是linux原生的编辑器
- 查看当前目录路径:pwd(Print Work Directory)
- Linux下面命令有的是单横线,有的是双横线;但是这两种横线其实是有开发的时候定义的,并没有什么硬性规定;
- 压缩文件:
tar -czf uos07311445.tar.gz uos
uos07311445.tar.gz为目标gz文件,ous为要压缩的文件 - 解压缩文件:首先是将路径定位到要解压缩的路径,然后执行:
tar -xzvf uos07311445.tar.gz
文件将直接解压缩到当前路径;-x代表校验释放,-z代表校验是否为zip,-v显式解压缩的文件,-f指定压缩/解压缩的文件后面紧跟着文件路径(如果是当前路径仅需要写出文件名即可); - 删除文件:rm uos07311445.tar.gz(删除文件,目录不行);
- lsof(list open files):罗列系统打开的文件
- 查看各进程占用cpu和内存的百分比(%):top
- 查看文件/etc/sysctl.conf,第一个开头为"/",代表根目录,所以到etc目录可以直接"cd /etc",然后通过
- cat sysctl.conf来查看文章;cat无参指令将会一次性加载文章的所有内容(vi只会加载满屏数据,但是vi具有编辑功能,cat是只读功能);cat –n 用来输出文件指定行数的内容,还可以用来将一个文本的内容输出到另外一个文件 cat file1 > file2(">"代表附加到覆盖,">>"代表追加;顾名思义,>>代表的累加,当前的输出>是基于上次的输出的>>;
- vi sysctl.conf来编辑文本;敲入"i"是进入到编辑模式;敲":q!"来退出文本;
- 查看命令服务器的log文件(看心跳等等信息),
- 1)使用cd /data定位到根目录下面的data文件夹;
- 2)然后dir查看里面的文件夹,敲入cd HaierCommonServer/logs;
- 3)查看uhome_service-XXX最先的log,使用tail –f uhome_service-XXX,通过这种方式来动态查看文件的变化(首先显示的是文件的尾部信息,然后是动态的显示文件的变化信息);
- 查看进程的端口:netstat –anp,展示所有的进程所占用的端口;–anp,展示所有的进程所占用的端口;根据端口查看进程:lsof i:8080;
- 有的log非常的大,不能使用tail -50f XXX之类的方式来查询,比如要全文检索"推送",我们能做的就是vi XXX,回车,返回n行,之后敲"/",这样就会进入到查询模式,敲入"推送",回车,定位到了第一个处,然后"ctrl + N",会定位到下一处,通过上下箭头则可以查看定位出前后的位置的内容。
- 剪切,在linux的意义是移动:mv source_filepath+filename, destination_folder
例如:mv /data/HSJAchievement_Document/AirConditionWash_src.zip /data/AirCondition_Document - 设置共享目录
mkdir /mnt/shared 新建挂载点(mountpoint)
mount -t vboxsf share /mnt/shared 挂载共享文件夹
cd /mnt/shared 进入共享文件夹 - 看linux版本:lsb_release –a
- 测试gcc的安装:
- /root/nginx-1.2.4/configure
- 一定要全路径,这样才会测试到,如果显示为"C compiler gcc is not found"则代表gcc没有安装成功;
- grep是对于文本进行正则表达式过滤,-a代表对于二进制格式文本也看做文本来处理;有的时候会有"Binary file 二进制文件名 matches"的问题,通过在grep后面添加-a命令再加上过滤条件即可避免这个问题;
- Linux删除文件(夹)命令:rm –rf XXX;
- 删除某个文件夹下的所有文件:rm -rf /test/*
- Linux查看文件/文件夹大小:du –sh *
- 全盘搜索:find –name XXX;正则匹配的话, find –name libevent*,之前就是因为直接搜索find –name libevent才导致啥也没有搜到(因为libevent文件都是后缀版本号的);
- 脚本执行,如果是直接执行需要使用./<filename>;如果是全路径,也是需要如此,例如执行/var/jdk1.6.0_33/bin/下面的jstack,就需要敲入:. /var/jdk1.6.0_33/bin/jstack
- 如果想要在任意路径下执行,就需要写执行脚本,并放置在/usr/local/sbin/下面,例如家用的tomcat日志就是放置在./usr/local/sbin/jylog;
- Jstack使用方式:首先是top看看cpu占用率,然后是全盘搜一下jstack,使用上面的命令;然后用命令:jstack -l <PID>查看该进程里面的堆栈。
- 58上面的路径是:./root/jdk1.6.0_33/bin/jstack
- 167上面的路径是:./usr/java/jdk1.6.0_33/bin/jstack
- 正式服务器路径:./var/jdk1.6.0_33/bin/jstack
- 文件过大,尤其是日志文件,可以通过split命令进行分隔;
- wc –l filename :可以获知某个文件共有多少行;分隔是可以通过行/size进行分隔;
- split –l 50000 filename newfilename:按照5万行一个文件进行分隔;分隔到"newFileName"的log文件中。后缀分别为aa~ZZ(最多支持分隔24*24个文件)
- 查看某个端口的的数量:netstat -anp | grep -i 56801 | wc –l;wc的意思是word count,l就是list,netstat命令本质是输出一个文件;其后面的参数是对netstat命令进行直接过滤和筛选;管道符(|)则是代表对文件进行处理;grep就是过滤文件中的关键字;wc同样是对于netstat命令导致的文件进行word count;
- 从尾部将指定内容输出指定文件:tail -n 100000 /data/HaierServerHomeAir/logs/uhome_service_log >> /data/log07181113.txt
- 在Linux执行脚本之所以需要使用./,是因为./的意思是当前目录,但是执行脚本是需要全目录的,windows下面执行exe文件默认的就是当前目录,但是linux出于安全性考虑没有这样处理,只要是执行脚本就要指定全路径,所以需要在前面加上./指定是当前目录下的XX脚本文件;
- 还有一种方式就是写一个脚本,比如Redis就有自己的启动/停止脚本;默认在/etc/rc.d/init.d/下面;把这个脚本拷贝到/usr/local/sbin/下面;但是这个脚本需要修改;他的很多路径有问题;而且还有一点,如果想要使用这个脚本需要让redis运行在"daemonize" 为yes情况下(redis.conf文件下进行配置)
- vi中查找关键字:在命令模式下输入"/",敲回车,然后点击"n"查看下一个(next之意),shift+n,查看上一个;
- linux下面的etc文件夹其实"其他,等等"的意思,但是所有的配置文件都放置在这个路径下面,比如如果想要配置nginx,通过find -name nginx找到了一堆,那么直接选择etc目录下就可以找到配置文件;usr/sbin下面是管理系统用的bin文件,即以root权限操作的可执行文件;
- Linux的vi的wq其实是writequit的意思;
- 查看端口被那些程序占用使用lsof(list open files)命令:lsof -i:80;还可以添加协议限制lsof -i TCP:80;
- 切换用户su,switch user,一般普通用户切换为高级用户使用此命令;sudo则是不需要切换,但是需要管理员在sudousers配置文件中指定那个用户可以做什么事情;
- 看硬盘空进大小df –h,想要看分区格式使用df –T(ext3,ext4等);
- vmstat n(n=1,2,3... ...)n代表的是延迟时间;显示列bi和bo代表block input以及block output;
- 索引,因为iNode很大,所以建立了一个位图索引,这让我想到了昵称生成里面的机制,只是把索引读到内存中,确定昵称也是通过内存昵称进行操作的,避免了数据库复杂的SQL;
- Linux的内存模式是虚拟内存映射到物理内存;
- getconf LONG_BIT 得到系统位数,32/64;
- lsb_relase –a 查看Linux版本lsb:Linux standard base,这是Linux发行版本信息,内核信息使用uname –a或者cat /proc/version来进行查看;
- 看内存信息free,默认是以K为单位,后三位为K,前面三位M,再往前是G,1049880,就是1G49M889K;
- Linux的~代表用户的根目录;比如连接到阿里云之后,默认就是~,使用pwd命令看后,发现时/root,因为登陆的用户就是root,所以用户的根目录就是root;~等价于$home;
- 查看某个程序是否启动,有两种方式:一种是看进程,ps –ef | grep [app name],其中-e代表是所有的进程,-f代表的是full,即进程的详细信息;第二种方式看端口,netstat –npl | grep 873或者lsof –i:873都可以确定程序是否启动;
- 想要查询yum可以安装的软件,yum search [part of application name]
- make是编译过程(使用gcc等编译工具,不同版本操作系统环境不一样,需要基于当前系统进行编译,所以没有编译好的,现成的东西);make.sh install,是执行安装,将程序安装到系统中,注册程序,拷贝文件到bin下面等;
- 对于防火墙iptables,修改完毕后,切记要调用iptables save进行保存,才会重启后仍然生效;
- 打开一个端口:iptables –A INPUT –p tcp --dport 11901 –j Accept
-A, append to INPUT/ OUTPUT chain;
-p, protocal, tcp/upd/icmp
--dport, destinate port, means the outer access the port, relative option is –sport, source port, means the the port packets will be out;
-j, means jump, jump to target: Accept/ Drop
查看iptables内容iptables –L,如果想要删除规则,首先
iptables –L –line-number
显式带有行号的规则列表,然后通过
iptables –D INPUT/OUTPUT num
进行删除,需要制定INPUT以及output是因为这是两张独立的链表(chain),索引行号也是独立的; - 如果想要设置开机启动,最简单的办法就是在/etc/rc.d/rc.local文件中附件上要启动的内容,比如启动FastDFS的tracker,另起一行,输入:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart即可;但是有一点很重要,就是要让r.local文件具有x(执行)权限,所以还需要执行chmod +x /etc/rc.d/rc.local;rc.local文件是Linux系统启动之后做的最后一件启动相关的事情,之前都是把init.d下面以及rc.d下面的rc.0,rc.1...下面的脚本启动执行完毕了(rc.X里面其实引用的是init.d里面的文件),再来执行rc.local;init.d以及rc.d中的d是daemon的意思,这两个文件夹下面的执行的都是守护进程(service)应用
- Linux文件的权限,首先会为三种用户(创建者,创建者所在组的成员,其他用户)各自赋权限,这一点之前已经记录过;每类用户其实都有三种操作权限,r(read,读),w(write,写)以及x(excute,执行),还有一个附加在最前面的文件类型,d(directory,目录)代表是文件夹,l(link,代表是软连接文件),b、c代表区块设备或者外围设备(区块设备?不懂),"-"代表普通文件,这样,表示文件夹权限一共是10位,如果有权限就是用让位显式为对应的字母,没有权限就显示为"-";"drwxr-xr-x"代表这个文件是个目录(文件夹),本目录的所有者拥有读写执行权限,组成员具有执行和读权限,其他用户具有执行权限;-rwxr-...则代表这个文件是普通文件;通过前缀可以知道文件的类型;
- 通过ll看到的内容,有两列是表示用户已经用户组:"-rwxrwxrwx 1 user users 12172 8月 15 23:18 conkyrc.sample";第一个user代表创建用户是user,users代表该用户所在的用户组是users,可以通过"chown user conkyrc.sample"来修改所属用户,以及通过"chown :users conkyrc.sample"来修改用户组;
- SecurityCRT自动断开,很多时候很挠头,可以在CRT上面的"会话选项"中"终端"设定"反空闲",勾选NO-OP,并设定时间,比如一分钟;这样就可以实现终端实时和服务器交互维持回话;或者是在Linux系统中/etc/ssh/sshd_config中进行设定,打开ClientAliveInterval 并设定时间3-5分钟,这样服务器点就会定时和客户端通信;总之前者是客户端维持回话,或者是服务器维持会话(session);
- Linux下面安装jdk,使用yum –search jdk,然后使用yum install进行安装;将会在/usr/lib/jvm下面有一个很长的jdk的文件夹;这个就是JAVA_HOME的位置;然后你需要做的就是在vi /etc/profile,在下面添加上:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
跳出来之后,执行source /etc/profile即可(这一点比windows强多了,还需要重启才能够生效,当然可以通过set方式进行设置,重启前凑合用); - Wget –c url 断点续传;
- 正常情况下,一个链接终端的命令将会伴随着这个终端断开或者Ctrl+C之后而断开,比如wget,终端断开,下载也就终止了;使用了nohug…&指令将会使得运行和终端(shell)链接情况无关,而是在服务器后台运行;
- source 执行脚本语言将不会创建子进程来执行脚本,但是./ 以及sh方式将会导致每一句脚本都是子新建的子进程来跑,对于sh,是不需要chmod +x来赋权限,./的方式则需要;sh这个命令很强悍,传统的./其实和他的作用是一样的,但是需要有权限,使用sh(shell)质量之后,就可以跳过文件权限的判断了;
-
netstat -ao | find "listening"
a,代表显示全部
o,代表显示进程号
|,代表要对结果进行过滤
find是过滤机制,只是支持字符串,但是对于整数的检索也是要添加"";另外这个指令在Linux和Windows下面通用;
- Linux的配置文件都是在/etc/profile文件下面放置的,如果想要添加环境变量(比如JAVA_HOME)需要vi /etc/profile文件,进行export;修改之后要通过source /etc/profile来进行保存生效.
- 单独为应用指定Jdk:
在start.sh文件中
export JAVA_HOME=XXX
export PATH=$JAVA_HOME:$PATH
ezport CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
或者:
JAVA_HOME=/home/gtps/java/jdk1.7.0_79
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
没太明白为啥grep之后的*tcp就没有数据,.*之后就有数据,如果是因为.*组合(*只是代表有一位任意字符数字),那么为什么1*tcp就可用呢?难带1代表全体整数吗(前缀任意一个整数即可)?后来验证觉得应该是这个原因,因为对于11*tcp没有数据,但是11.*tcp则有数据。
另外,grep -c代表的是返回匹配的个数这和参数很有用: 我想要判断某个端口是否打开,就判断符合条数是否大于0即可,但是注意: 不能赋值给变量,只能直接if跟着指令>0 then…fi。我尝试赋值给一个变量,但是变量返回为0。
77.今天看到虚拟机硬盘100%,发现原来是在/root/Documents/VirtualBox Dropped Files目录下(我使用root用户登录)成堆的Drop(拖拽文件)文件,难道虚拟机处理拖拽文件并不删除,而是放到了这个文件夹下面了?
78.网卡设置:/etc/sysconfig/network-script/下面每一个网卡都会有一个 ifcfg-XXX文件,进去编辑
DEVICE=eth0 BOOTPROTO=statics HWADDR=00:0C:29:13:D1:6F ONBOOT=yes TYPE=Ethernet IPADDR=192.168.0.212 NETMASK=255.255.255.0
ONBOOT代表开机启动;
如果是外网,还需要配置网关和DNS,下面是完整的配置信息:
TYPE=Ethernet BOOTPROTO=statics DEFROUTE=yes NAME=ens192 UUID=fdf0493d-4eae-46ae-aa4f-4f58b469b50a DEVICE=ens192 ONBOOT=yes IPADDR=X NETMASK=255.255.255.0 GATEWAY=X DNS1=X DNS2=X
配置完成后需要重启网卡,操作网卡的操作如下:
/etc/rc.d/init.d/network start | stop | restart
或者 service network start | stop | restart
centos高版本 system restart network.service
也可以手工设定网卡信息(临时):ifconfig eth0 192.168.1.222 netmask 255.255.255.0
关闭打开指定网卡:
ifconfig eth0 down
ifconfig eth0 up
ifdown eth0
ifup eth0
注:在linux里面,断开网卡(interface)和拔网线是两个不同的处理,断开网卡,其实数据还是走到网口的只不过不处理而已,可以看到电脑插网线口的灯还是一闪一闪亮着的;
但是如果是拔网线,无论拔下那一头,网口的灯都是灭的;这个也许就是keepalived在拔网线可以正常工作,但是手工断开网口却无法正常工作;如果是虚拟机测试,可以通过切换网络类型来实现断网效果。
stat指令用于返回指定文件的设备信息。对于挂在在不同硬盘下面的路径他的设备号是一样的,通过stat --L可以查看。另外对于设备号小于100的设备,比如/proc,/dev,说明他们是虚拟设备,并不是真实的物理设备。这一点在Fast Data Transfer中曾经使用过这个指令来获取分区信息,同一块设备的文件将会被统一处理;
79.Linux下面修改最大文件数
echo ulimit -n 65535 >>/etc/profile source /etc/profile 即完成了设置。 ulimit -n 查看当前ulimit值。
80.定时获取文件并进行删除
find /apps/M010/revFiles/ -mmin +10 -type f -name *.exe | xargs rm -rf
-mmin,获取修改时间单位为分钟的文件列表;m代表modify,修改时间(通过ll看到文件显示的时间),cmin代表create,创建时间,amin,access,访问时间; +N,代表N分钟之前,-N代表N分钟之内;-mtime N,则是指修改的时间单位为天;
-name,指定了文件模式;
-exec,代表对于查询出来的文件要进行的操作;
定时任务采用的是Linux的cron服务;一般用法是创建当前用户的服务;可以通过man cron来进行详细了解,尤其其中的安全机制;
crontab -l 查看当前用户的定时任务 crontab -e 编辑当前用户定时任务 crontab -r 删除当前用户定时任务
crontab -e 之后将会进入到编辑页面,可以添加定时任务,例如增加一个定时删除文件:
*/10 * * * * find /mzm/cs/revFiles/* -type d -mmin +10 | xargs rm -rf
(记得完事后:wq!)
crontab指令共分为两部分:定时(schedule),以及执行任务(指令)。
定时规则:分 时 日 月 年,*/10代表是每10分钟执行一次,也可以写成0-59/10,以此类推;
根据man上面记载修改完成后即可自动生效;可以通过下面的指令来手工强制生效;我测试的效果是修完成后自动可以生效。
service crond reload
81.根据端口号杀进程
lsof -i:22 | grep IP | awk '{print $2}' | xargs kill -9
通过这个例子可以很经典的解释清楚Linux指令处理;这个指令其实是参考了上面的发现文件进行删除的脚本;
lsof -i:22之后是下面场景
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 18190 root 3u IPv4 299889 0t0 TCP *:ssh (LISTEN) sshd 18190 root 4u IPv6 299891 0t0 TCP *:ssh (LISTEN)
在Linux可以指令里面每个"|"都是代表左半部份的列表(数据)执行右半部分的操作
grep IP:为了获取到PID一列信息,首先是要过滤掉第一行的列名;通过grep IP就是只要包含IP字样的行,这样就把第一行完美过滤掉了;
awk '{print $2}',grep IP之后的过滤的列表就是纯粹的数据了,这部分的含义是现实出第二列内容,即PID一列的数据;
xargs kill -9,有awk过滤之后的(单列)数据,执行操作,如果返回时一个列表,将会取出列表数据逐个执行指令;xargs的用意是将管道符左侧返回的数据按照空格/换行符进行拆解(split),返回数据供后面的指令消费。
82. 为文件夹以及其子文件夹赋权限
chown -R userName:userName folderName
83. 和组以及用户信息相关指令
groups //当前用户所在组; /etc/passwd以及/etc/shadow //里面装有所有的用户; /etc/group //里面是全部的用户组
84. 修改完了DNS之后,需要service network restart才能够好用
85. alternatives
useradd –d /home/username -m usnername
passwd(当前用户,直接敲入passwd即可) passwd hadoop(当前用户是root用户,通过此命令来修改密码))
userdel -r hadoop
hostnamectl set-hostname XXX
92.默认命令行模式/GUI