Linux 简单命令整理
Linux系统是一种开源高稳定性的操作系统,在服务器领域得到广泛的应用。作为一个Java后台开发工程师经常需要登录Linux服务器部署应用程序,或者是查看程序的运行状态。一般的Linux服务器上是不会安装界面程序的,因此熟练掌握常用的Linux命令对工程师来说非常重要。
本篇日志是我在学习过程的总结,记录了Linux系统常用的命令,适合已经对Linux操作系统有基本概念的开发人员参考学习。如果没有接触过Linux操作系统,可以参考我Linux的其他系列文章。
Linux的命名非常多,我们也没有必要掌握所有的命令。本篇博客先来整理平时常用的,比较基础的命令。后续的博客会陆续介绍网络相关、系统性能相关等命令。
系统相关命令
shutdown
shutdown命令用来关闭系统。Linux大多使用在服务器领域,所以一般情况下是很少需要关机的。我们在关机时一定要谨慎,因为你关机的时候很可能其他用户正在远程登录(推荐使用xshell)这台机器进行某些操作。因此你关机前需要查看下当前系统有哪些用户登录。
# 查看当前登录用户
who
# 同步内存数据到文件系统
sysnc
# 十分钟后重启
shutdown -h now //shutdown -h +10
# 重启
reboot
uname
uname(unix name)用于查看系统相关信息
[root@SHA-L0029026 ~]# uname -a
Linux SHA-L0029026 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 03:43:06 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux
- SHA-L0029026 是主机名;
- 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 03:43:06 PDT 2015 (Linux内核信息)
- x86_64 系统架构
- GNU/Linux Linux发行版本
用户相关命令
adduser
在使用adduser
命令的时候,系统会添加这个用户名,并且还会自动地创建与这个用户名名字一样的用户组作为这个用户的初始用户组。此外,还会自动地在/home目录下面创建一个与用户同名的目录,接着执行cp /etc/skel /home/
用户名"的操作,实现新增用户的主目录的初始化。用adduser这个命令创建的账号是系统账号,可以用来登录到我们的系统(区别于Ftp账号,一般不能通过ssh远程登录到机器)。
# 添加用户
adduser codeer
# 为新添加的用户修改密码
passwd codeer
# 查看当前用户属于哪个用户租(或者 groups codeer)
groups
# 这个用户不想用了,删除
deluser -r codeer
还有一个很相似的命令useradd。这个命令不会自动为我们创建组、创建用户home目录,需要我们手动设置参数去设定。并且useradd这个命令创建的是普通账号,并不能用来登录系统。
useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]
-u 自定义UID
-g 使其属于已经存在的某个GID
-d 自定义用户的家目录
-M 不建立家目录
-s 自定义shell
chgrp
更改用户所属的用户组, 语法:chgrp [组名][文件名1 文件名2...]
# 查看用户属于哪个用户组
groups codeer
# 添加一个新的用户组
groupadd group1
# 添加用户组并指定用户号
groupadd -g 501 group2
# 删除用户组
groupdel group2
# 将dir1文件夹下的文件修改用户组
chgrp -vR group1 ./dir1
chown
更改文件的所有者和用户组,这个命令可以取代chgrp
的功能。
# 将dir文件夹下的文件所有者和用户组修改
chown -Rv own_name:group_name ./dir
chmod
更改文件的属性。
chmod -Rv 755 ./dir
chmod -Rv -u=rwx,g=rx,o=rx ./dir
umask
umask命令用来显现创建文件或者目录时默认的权限。
[root@SZB-L0026548 tmp]# umask
0022
//上面显示0022,我们一般看后3位002,用777-002得755就是默认的权限。
//假如你创建的是目录,owner有rwx权限,用户组有rx权限,其他也有rx权限
//假如创建文件,owner有rw权限,用户组有r全新啊,其他也有读权限
[root@SZB-L0026548 tmp]# umask -S
u=rwx,g=rx,o=rx
chattr/lsattr
修改文件的特殊属性。
chattr +i codeer.txt // i的作用很大。它可以让一个文件“不能被删除、改名、设置连接,也无法写入或新增数据”。对于系统安全性有相当大的帮助。
chattr -i codeer.txt
man
查看帮助文档
文件目录相关命令
ls
ls命令是Linux系统下使用频率很高的一个命令,用来列出文件或目录的详细信息
ls [option] [文件|目录](文件名和目录名支持通配符)
ls //默认列出当前目录下文件的信息,横向排列
ls -al //列出文件的详细信息
ls -alh //显示文件的大小
[root@SHB-L0048478 tmp]# ls -alh
-rw-r--r-- 1 root root 1.2K Nov 30 20:07 chen.txt
ls -alht //时间近的在前面
ls -alhtr //时间远的在前面
ls -alhr //根据文件名字母排序
pwd
查看当前路径
[root@SHB-L0048478 chen]# pwd
/tmp/test/chen
mkdir/rmdir
mkdir用于创建目录,rmdir用来删除目录,这个命令不是很常用,rm命令可以替代其功能。
# 设置目录的访问权限
mkdir -m 755
# 递归循环创建目录
mkdir -p ./test/codeer
# 删除test目录下的codeer目录
rmdir test/codeer
# 联通test目录一起删除
rmdir -p test/codeer
rm
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
# 强制递归删除文件,建议备份
rm -rf file
# 交互式删除文件
rm -i file
cp
cp [选项][ 来源文件 ] [目的文件]
cp -a * /tmp //该选项通常在拷贝目录时使用。它保留链接文件、文件属性,并递归地拷贝目录,其作用等于dpr选项的组合。
cp -d * /tmp //不加这个选项时会把连接文件指向的原文件复制过来,加这个选项就复制连接文件
cp -v * /tmp //显示都复制了哪些文件
# 拷贝整个文件夹到另外一个
cp -r ./src/* ./src_bak
mv
mv [选项] [ 来源文件 ] [目的文件]
# 这个命令有重命名的作用 备份
mv -i file1 file2
ln
建立连接文件
# 给source file建立软连接文件(快捷方式)
ln -s source_file_name link_file_name
修改软链接
ln –snf [新的源文件或目录] [快捷方式]
touch
没有文件就创建文件,有这个文件就修改文件的访问时间
文件查看命令
-
cat:cat经常用来显示文件的内容,适合文件内容较少的文件;(cat -n file_name)
-
tac:和cat一样,只不过是反向显示文件内容;
-
more:一屏一屏的查看文件内容
more -10 file_name //每屏显示10行;
按Space键:显示文本的下一屏内容。
按enter键:显示一行内容 -
less:"J"键向上 "K"建向下;"/"向下搜索,"n"键显示下一个;"?"键向上搜索,"n"键显示下一个,"G":到文件底部;"gg":到文件头部;
-
head:head -10 file_name;显示文件前10行;
-
tail:tail -10 file_name;显示文件后10行; tail -f file_name; 动态显示文件;tail -1000 fileName >>tmp.log(日志文件较大,一次性打开较慢,只取后面几行放入临时日志文件,这个命令很快)
查找命令
which
查找一个可执行命令的绝对路径
which java //输出/usr/bin/java
whereis
通过预先生成的一个文件列表库去查找跟给出的文件名相关的文件。
locate
类似于whereis,也是通过查找预先生成的文件列表库来告诉用户要查找的文件在哪里.有时候你执行这个命令可能没找到想要的文件。这是因为系统还没有生成那个文件列表库。你可以使用updatedb 命令立即生成(更新)这个库。如果你的服务器上正跑着重要的业务,那么你最好不要去运行这个命令,因为一旦运行,服务器的压力会变大。这个数据库默认情况下每周更新一次。所以你用locate命令去搜索一个文件,正好是在两次更新时间段内,那你肯定是得不到结果的。你可以到/etc/updated.conf 去配置这个数据库生成(更新)的规则。locate命令笔者用的也并不多,所以你只要明白有这么一个东西即可。你用到时再去深究其用法吧。
find
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find /home -size +512k查大于512k的文件
find /home -size -512k 查小于512k的文件
find . app* #查找当前目录下以app打头的文件
find . -name "harbor.yml" # 当前目录下全局搜索某个文件
type
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
type命令的使用实例:
$ type cd
系统会提示,cd是shell的自带命令(build-in)。
$ type grep
系统会提示,grep是一个外部命令,并显示该命令的路径。
$ type -p grep
加上-p参数后,就相当于which命令。
磁盘管理相关
df
查看已挂载磁盘的总容量、使用容量、剩余容量等,可以不加任何参数,默认是按k为单位显示的
df -h
du
du 用来查看某个目录所占空间大小
# 查看dir这个目录占用空间的大小
du -sh dir
# 列出dir目录下每个文件占用空间的大小
du -ah dir
# 将wll目录下的文件根据大小排序
du -s /wll/* | sort -nr
压缩相关命令
gzip
gzip一般用于压缩单个文件,不能用来压缩目录,gzip 压缩的文件可以直接使用vim
命令查看。
gzip codeer.txt //压缩文件
gzip -d codeer.txt.gz //解压文件
bzip2
bzip2也是用于压缩一个文件。使用 gzip要比bzip2快,但是bzip2会获得比gzip高的压缩率
bzip2 codeer.txt //压缩单个文件
bzip2 -d codeer.txt.bz2
tar
将几个文件打包成一个文件,不进行压缩。通常打成tar包之后,需要进行gzip。
tar -zcvf test.tar.gz ./* //生成test.tar.gz
tar -zxvf test.tar.gz
zip
zip -r test.zip ./* //将当前目录下的文件压缩
zip test2.zip test2/* //将test2目录打包
unzip test.zip //将文件默认解压到testmulu
unzip test.zip -d /tmp //解压到指定目录