3620 2018-10-04 2020-06-26

前言:结合网上别人找到的,加上自己的一点点经验,稍稍总结一下。

一、文件管理

1、通用文件操作

  • ls命令

ls,全称list,用法为 ls + 选项 + 目录,列出相关目录下的所有目录和文件。

选项说明
-a列出包括.开头的隐藏文件的所有文件
-A同-a,但不列出隐藏文件(以.和..开头)
-l(小写L)列出文件的详细信息
-c根据ctime排序显示
-t根据文件修改时间排序
ls * man *显示包含man字符的文件
ls *man显示以man结尾的文件
ls man* -l显示以man开头的文件的详细信息
  • mv命令

mv,全称move,用法为mv + 选项 + 源文件或目录 + 目标目录,移动或重命名文件。

选项说明
-b覆盖前做备份(被替换文件后面会增加一个备份标志,如~)
-f如存在不询问,强制覆盖
-i如存在则询问是否覆盖
-u较新才覆盖
  • cp命令

cp,全称copy,用法为cp + 选项 + 源文件或目录 + 目标目录,将源文件复制至目标目录。

选项说明
-r / -R递归复制该目录及其子目录内容
-p连同档案属性一起复制过去
-f如存在不询问,强制覆盖
-s生成快捷方式(复制一个引用)
-a将档案的所有特性都一起复制
  • rm命令

rm,全称remove,用法为rm + 选项 + 文件(默认不能删除文件夹),删除文件。

选项说明
-r删除文件夹
-f删除不提示
-i删除提示
-v详细显示进行步骤
  • touch命令

touch,全称touch,用法为touch + 选项 + 文件,创建空文件或更新文件时间。

选项说明
-a只修改存取时间
-m只修改变动时间
-r-r file1 file2,使file1的时间和file2的时间相同
-t指定时间
  • pwd命令

pwd,全称print name of current/working directory,查看当前所在路径

  • cd命令

cd,全称change directory,改变当前目录。

选项说明
-返回上一个访问目录
..返回上层目录
.返回当前目录
回车返回主目录
/根目录
  • mkdir命令

mkdir,全称make directories,用法为mkdir + 选项 + 目录,创建文件夹。

选项说明
-p递归创建目录,若父目录不存在则依次创建
-m自定义创建目录的权限
-v显示创建目录的详细信息
  • rmdir命令

rmdir,全称remove empty directories,删除空文件夹。

选项
-v显示执行过程
-p若删除后父目录为空,则一并删除父目录

2、scp远程复制

scp,全称secure copy,用法为scp + 选项 + 原路径 + 目标路径,在linux服务器之间复制文件和目录。

选项说明
-v详细显示输出的具体情况
-r递归复制整个目录
# 将本地文件复制到远程服务器上
scp ~/index.html root@120.25.224.135:/home

# 将远程服务器文件复制到本地
scp root@120.25.224.135:/home/index.html ~/logs。

# 登录远程终端
ssh root@10.221.1.11

# 断开ssl连接后,后台依然运行程序
nohup java -jar xxx.jar

# 端口转发80转到8080,操作系统级别的端口转发
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

3、查找文件

  • which命令

which - locate a command,定位命令位置。

选项说明
-a将所有由PATH目录中可以找到的命令均列出,而不只是第一个被找到的命令
  • whereis

whereis - locate the binary, source, and manual page files for a command,定位命令相关文件。Linux系统会将系统内的所有文件记录在一个数据库文件里面,而当使用whereis或locate时,都会以此数据库文件的内容为准。需要注意的是,这个数据库是每天更新一次,这个取决与你的系统版,可以使用updatedb进行手动更新。

选项说明
-b只找二进制格式的文件
-m只找在说明文件manual路径下的文件
-s只找source源文件
-u查找不在上述三个选项当中的其他特殊文件

这里举个例子,以查找mysql/java命令所在目录

# 定位mysql
hk-pc@hk-pc:~$ whereis mysql
mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
# 这里的mysql并不是一个软链接,因此这里线索中断
hk-pc@hk-pc:~$ ls -l /usr/bin/mysql
-rwxr-xr-x 1 root root 4093144 2月   2 21:33 /usr/bin/mysql
# 此时which命令并没有什么用
hk-pc@hk-pc:~$ which mysql
/usr/bin/mysql
hk-pc@hk-pc:~$ ls -l /usr/bin/mysql
-rwxr-xr-x 1 root root 4093144 2月   2 21:33 /usr/bin/mysql
# 逐个访问whereis结果
hk-pc@hk-pc:~$ cd /etc/mysql
# 找到配置目录
hk-pc@hk-pc:/etc/mysql$ ls
conf.d  debian.cnf  debian-start  mariadb.cnf  mariadb.conf.d  my.cnf  my.cnf.fallback
# 找到mysql软件目录
hk-pc@hk-pc:/usr/share/mysql$ ls|grep -e mysql -e maria
maria_add_gis_sp_bootstrap.sql
maria_add_gis_sp.sql
mysqld_multi.server
mysql-log-rotate
mysql_performance_tables.sql
mysql.server
mysql_system_tables_data.sql
mysql_system_tables.sql
mysql_test_data_timezone.sql
mysql_test_db.sql
mysql_to_mariadb.sql

# 定位java命令,前面几个都是软链接
hk-pc@hk-pc:~$ which java
/usr/bin/java
hk-pc@hk-pc:~$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 6月  25 11:27 /usr/bin/java -> /etc/alternatives/java
hk-pc@hk-pc:~$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 46 6月  25 11:27 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
hk-pc@hk-pc:~$ ls -l /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
-rwxr-xr-x 1 root root 6456 3月  19  2019 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
  • find

find - search for files in a directory hierarchy,用法为find + 目录 + 选项 + 其他。find是最常用和最强大的查找命令,直接查找硬盘(单个目录),简单直接,但速度很慢。

选项说明
-name根据文件名称查找(严格区分大小写,如果文件名中间有空格,则必须把文件名用双引号引起来)
-iname根据文件名查找(不区分大小写)
-regex"PATTERN" 正则表达式匹配
-user根据文件属主进行查找
-cmin n在过去 n 分钟内被修改过

下面是几个例子

# 如果不指定目录,默认当前目录
# 查找以man结尾的文件
hk@hk-pc:/usr/bin$ find . -name "*man"
./catman
./man
./xman
./pod2man
./dman
hk@hk-pc:/usr/bin$ ls *man -l
-rwxr-xr-x 1 root root  35288 4月   7  2018 catman
-rwxr-xr-x 1 root root     43 11月  9 11:48 dman
-rwxr-xr-x 1 root root 107008 4月   7  2018 man
-rwxr-xr-x 1 root root  15079 5月  20  2018 pod2man
-rwxr-xr-x 1 root root  71584 3月  19  2018 xman

# 必须加-name参数
hk-pc@hk-pc:/usr/bin$ find ~/Gitee -name README.md
/home/hk-pc/Gitee/myBlog/myBlog/README.md
hk-pc@hk-pc:/usr/bin$ find ~/Gitee -name *Java*.md
/home/hk-pc/Gitee/myBlog/myBlog/md/Java容器类/Java容器类:ArrayList详解-3-20180917.md
/home/hk-pc/Gitee/myBlog/myBlog/md/Java容器类/Java容器类:String详解-2-20180915.md
/home/hk-pc/Gitee/myBlog/myBlog/md/Java容器类/Java容器类:HashMap详解*-5-20170925.md
/home/hk-pc/Gitee/myBlog/myBlog/md/Java容器类/Java容器类:容器类概述-1-20170911.md
/home/hk-pc/Gitee/myBlog/myBlog/md/Java容器类/Java容器类:LinkedList详解-4-20170920.md

# 查找root拥有文件
hk@hk-pc:/usr/bin$ find -iname "*man" -user root
./catman
./man
./xman
./pod2man
./dman

二、系统管理

1、基础命令

  • 关机和重启

shutdown - Halt, power-off or reboot the machine。用法为shutdown + 选项 + 时间

选项描述
-t-t后面加秒数,就是过几秒后关机的意思
-k不要真的关机,只是发送警告消息出去
-r在将系统服务停掉之后就重启(常用)
-h在将系统服务停掉之后,立即关机(常用)
-c取消已经在进行的shutdown命令内容

示例如下

# 马上关机
shutdown -h now
# 在今天的20:00关机,若已超过,则隔天才关机
shutdown -h 20:00
# 十分钟后关机
shutdown -h +10
# 再过30分钟系统会重启,并显示后面的消息给所有在线用户
shutdown -r +30 'This system will reboot'
  • users & who & id & groups命令

users,显示当前登录系统用户,可以有多个。who,显示登录在本机的用户与来源(tty?)。id,用于显示用户当前UID,gid以及所属群组的组列表。groups + 用户,查看所属用户组及组内成员。

  • 3个重要文件

/etc/passwd 文件记录着用户信息,/etc/shadow 文件记录着用户密码,/etc/group文件记录着所有用户组。

  • Tab

按一次自动命令补全,按两次则显示所有可选项。

  • Ctrl + C

停止当前正在运行的程序。

  • Ctrl + D

这个组合键通常代表键盘输入结束,也可以用来代替exit的输入,直接离开文字界面。

2、用户管理

# 简单添加
useradd hk
passwd hk
# 输入密码即可

# 修改密码
passwd
# 输入原密码后再确认新密码即可 

# 删除用户
useradd test
userdel test

# 添加用户组
groupadd testgroup
groupdel testgroup

3、修改权限

首先通过ls -l查看文件详细信息,例如

hk@hk-pc:~/docker$ ls -l
总用量 15768
-rw-r--r-- 1 hk hk 16140922 7月   8 20:37 app.jar
-rw-r--r-- 1 hk hk      139 7月   8 21:12 Dockerfile

以app.jar为例,上述信息中“ - ”说明这是一个文件,对文件所有者hk权限为rw-,对所属用户组权限为r--,对其他人权限为r--,连接数为1,后面日期是最近修改日期。

# d 表示这是一个目录
# rwx 表示文件所有者test可以在文件中进行读文件、写文件、进入文件夹(对于普通文件,x表示可执行)
# r-x 表示用户组testgroup里面的其他成员可以读文件、进入文件夹、但不能写文件
# r-- 表示其他用户不能进入此文件夹、不能写文件,虽然此时有读文件权限,但由于进不了目录,所以这里的读是无效的
drwxr-xr-- 1 test testgroup 5238 7月   8 20:37 test/
  • chgrp命令

chgrp,全称change group ownership,改变用户所属用户组。用法为chgrp + [-R] + 已存在用户组 + 文件或目录,示例如下

hk@hk-pc:~/docker$ ls -l
总用量 15768
-rw-r--r-- 1 hk hk 16140922 7月   8 20:37 app.jar
-rw-r--r-- 1 hk hk      139 7月   8 21:12 Dockerfile
# 如果需要递归改变目录,则需要加-R参数
hk@hk-pc:~/docker$ chgrp docker app.jar
hk@hk-pc:~/docker$ ls -l
总用量 15768
-rw-r--r-- 1 hk docker 16140922 7月   8 20:37 app.jar
-rw-r--r-- 1 hk hk          139 7月   8 21:12 Dockerfile
  • chown命令

chown,全称change file owner and group,改变文件所有者。用法为chown + [-R] + 已存在用户名 + 文件或目录。除此之外,chown还可以顺便直接改掉用户组名称,示例如下

# 将上面的改回来
hk@hk-pc:~/docker$ chown hk:hk app.jar
hk@hk-pc:~/docker$ ls -l
总用量 15768
-rw-r--r-- 1 hk hk 16140922 7月   8 20:37 app.jar
-rw-r--r-- 1 hk hk      139 7月   8 21:12 Dockerfile
  • chmod命令

chmod,全称change file mode bits,修改权限。权限设置有两种方式,可以使用数字或符号来进行权限修改,用法为chmod + [-R] + xyz + 文件或目录,其中xyz可以为数字,也可以是特定符号,具体示例如下

# 将app.jar变为其他人可读可写
hk@hk-pc:~/docker$ ls -l
总用量 15768
-rw-r--r-- 1 hk hk 16140922 7月   8 20:37 app.jar
-rw-r--r-- 1 hk hk      139 7月   8 21:12 Dockerfile
# 分别对应4 2 1 0
hk@hk-pc:~/docker$ chmod 666 app.jar
hk@hk-pc:~/docker$ ls -l
总用量 15768
-rw-rw-rw- 1 hk hk 16140922 7月   8 20:37 app.jar
-rw-r--r-- 1 hk hk      139 7月   8 21:12 Dockerfile

# 种类分别有u g o a(all)、操作有+ - =、权限还是r w x 
hk@hk-pc:~/docker$ chmod g-w,o-w app.jar
hk@hk-pc:~/docker$ ls -l
总用量 15768
-rw-r--r-- 1 hk hk 16140922 7月   8 20:37 app.jar
-rw-r--r-- 1 hk hk      139 7月   8 21:12 Dockerfile
hk@hk-pc:~/docker$ 
  • 对于几个权限认识的误区

权限对于文件而言:

r:可以读取此文件的实际内容,如读取文本文件的文字内容等。

w:可以编辑、新增或者是修改该文件的内容(但不含删除文件)。

x:该文件具有被可以被系统执行的权限。

权限对于目录而言:

r:具有读取目录结构列表的权限。

w:可以更改该目录结构列表的权限,包括新建、删除、重命名、移动文件或目录。

x:x代表的是用户能否进入该目录成为工作目录的用途,即能否切换到该目录下,所以x是上面两个的前提,没有x权限,上面两个权限等于没有。

四、内存管理

1、进程管理

  • ps命令,全称report a snapshot of the current processes,列出当前进程的快照。
选项说明
a显示所有进程
-a显示同一终端下的所有程序
e显示环境变量
f显示进程间的关系
-H显示树状结构
r显示当前终端的程序
T显示当前终端的所有程序
-au显示更详细的信息
-aux显示所有包含其他使用者的进程
-u指定用户的所有进行
  • kill命令,全称send a signal to a process,删除执行中的程序或工作,用法为kill + 选项 + pid。
选项说明
-l <信息编号>若不加<信息编号>选项,则-l参数会列出全部的信息名称。
-s <信息名称或编号>指定要送出的信息。

还是以实际代码进行讲解吧,如下

# 实例1:先用ps查找进程,然后用kill杀掉
[root@localhost test6]# ps -ef|grep vim 
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
[root@localhost test6]# kill 3268 
[root@localhost test6]# kill 3268 
-bash: kill: (3268) - 没有那个进程

# 实例2:彻底杀死进程
[root@localhost test6]# ps -ef|grep vim 
root      3268  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
[root@localhost test6]# kill –9 3268 
[root@localhost test6]# kill 3268 
-bash: kill: (3268) - 没有那个进程

# 实例3:杀死指定用户所有进程
[root@localhost ~]# kill -9 $(ps -ef | grep peidalinux) 
[root@localhost ~]# kill -u peidalinux

五、软件安装

1、APT

针对于APT(Advanced Packaging Tool),命令如下

命令说明
apt-cache search package搜索包
apt-cache show package获取包的相关信息,如说明、大小、版本等
apt-cache depends package了解使用依赖
apt-cache rdepends package查看该包被哪些包依赖
apt-get source package下载该包的源代码
sudo apt-get install package安装包
sudo apt-get install package=version安装指定版本的包
sudo apt-get install package --reinstall重新安装包
sudo apt-get -f install修复安装, "-f = --fix-missing"
sudo apt-get remove package删除包
sudo apt-get remove package --purge删除包,包括删除配置文件等
sudo apt-get update更新apt软件源信息
sudo apt-get upgrade更新已安装的包
sudo apt-get dist-upgrade升级系统
sudo apt-get clean && sudo apt-get autoclean清理无用的包

下面是实例演示,尽量把数据的范围缩小

# 这会把所有包含git关键字的软件包列出来,不是我们想要的,txt有171kb
apt-cache search git|tee /temp/git.txt
# 这会优先匹配关键字中以git开头的软件包,忽略大小写,txt有10kb
apt-cache search ^git|tee /temp/^git.txt
# 使用grep过滤
apt-cache search git|grep ^git|tee /temp/grep_git.txt

# 趁这个机会,安装一波软件包,哈哈哈
# 这里并不是svn
sudo apt-get install subversion
sudo apt-get install apache2-utils

2、YUM

跟APT大同小异,如下

# 使用grep
yum search git|grep ^git
yum install git.x86_64
git --version
git version 1.8.3.1

# 安装mysql8
yum search mysql8|grep ^mysql8
mysql80-community-release.noarch : MySQL repository configuration for yum

未完待续。

总访问次数: 328次, 一般般帅 创建于 2018-10-04, 最后更新于 2020-06-26

进大厂! 欢迎关注微信公众号,第一时间掌握最新动态!