初识 linux
~:家目录
root 用户~规定为 /root
[root@localhost ~]$ pwd
/root
普通用户~默认 /home/username
[liqiang@localhost ~]$ pwd
/home/liqiang
pwd 显示当前光标所在路径
~ 与 / 的区别
~ 代表家目录, 对于root用户来讲就是: /root ,
/ 是根目录。/root 只是 / 下的其中一个子文件夹。
[root@localhost /]# ls
bin dev home root etc usr var
切换路径
# windows 也是使用cd切换路径,但win有盘符,切换到c盘只需要
D:\> c: # 简写
D:\> cd /d c: # 也是cd命令,不过要用加上 /d 区别于切换盘符和路径
去到家目录:
cd
cd ~
去到根目录
## 所有用户同一个根目录
cd /
回退到上一次停留目录
cd -
去到上一层、上两层目录
cd ../
cd ../../
./ 是当前目录,相对路径
绝对路径: 以根目录为起始
[root@localhost local]$ cd /usr/local/mysql
相对路径: 以当前目录为起始
[root@localhost local]$ cd mysql
[root@localhost local]$ cd ./mysql
文件
查看当前目录下文件/文件夹
ls
ll –> ls -l 的别名,列出文件/文件夹详细信息
ll -a –> ls -l -a 查看包括隐藏文件在内的所有文件/文件夹
ll -h 查看文件大小 【du -sh 可看文件/文件夹大小,小于4k的文件/夹只会显示4.0k】
ll -rt 按时间并排展示,一般 -rt 一起使用
ls --help 更多命令查看命令帮助
ll -R 查看当前目录和子目录下文件
统计文件/文件夹大小
ll -h (ls -lh)列表输出该目录下文件大小信息。对文件夹不适应。
du -sh 当前目录下文件/夹总量大小,也可指定查单独某个文件/夹 du -sh xxx.txt
统计文件内容
wc -l 统计当前目录下所有文件各自的行数,总行数
也可以指定统计某个文件
统计当前目录下文件(递归子文件夹、过滤掉文件夹)
ls -lR | grep "^-" | wc -l
统计当前目录下文件夹(递归子文件夹、过滤掉文件)
ls -lR | grep "^d" | wc -l
mkdir 创建文件夹
单个创建 mkdir a (相对路径创建在当前目录下)
mkdir /xxx/xxx (绝对路径可以往任意路径创建)
级联创建 mkdir -p 1/2/3
并联创建 mkdir a b c
复制和移动文件
cp /xxx/xx ./xxxx [源文件] [目标文件]
mv /xxx/xx xxxx [源文件] [目标文件]
ln -s mysql-5.6.23 mysql [源文件] [快捷方式] ## 代替mv重命名,便于上线后版本变更,存储位置变更
上传文件
# cd 到使用目录
# rz 从windows资源管理器选中文件上传到linux当前目录 【或使用xftp工具】
# sz filename 将文件下载到windows [yum install -y lrzsz]
解压文件
tar -zxvf file.tar.gz -C ../app 【-C指定解压目录 】
# 其他压缩格式
# unzip file.zip 解压zip [yum install -y unzip]
# tar -xzvf file.tar.gz 解压tar.gz [yum install -y lrzsz]
# tar Jxvf file.tar.xz 解压tar.xz
# tar –xvf file.tar 解压tar
# unrar e file.rar 解压rar **需要安装工具包**
# 压缩文件
zip -r test.zip test.txt
zip -r test.zip ./* 【将当前目录下的所有文件和文件夹,压缩成test.zip,-r表示递归压缩子目录下所有文件】
创建空文件
- touch xxx.xx
- cat /dev/null > xxx.xx
echo "" > xxx.xx (空字符串并不完全空)回显
vi xxx.xx (前提xxx.xx不存在,vi后不编辑,保存退出)
将已有内容的文件清空内容
- cat /dev/null > xxx.xx
echo "" > xxx.xx (空字符串并不完全空)
vi gg dG 【gg 第一行;dG删除光标所在及以后行;更多命令参考一下内容(命令行模式的快捷命令)】
rm -rf 后再 touch
将文件追加至另一个文件
cat wc2.txt >> wc.data
查看文件的内容
- cat / more / less
- cat 一次全部展示 (小文件)
- more 按空格往下翻页,不能往上,按q退出 (大文件)–和cat一样一次加载全部,只是可以分页查看
- less 按上下箭头往上下,按q退出 (大文件)-- 不是一开始加载文件全部
具备查找功能,按/ 然后输入要找的字串,再按 Enter 即可,按 n(next) 会继续找,大写的 N 则是往回(上)找,按 q(quit)或者ZZ离开
《more和less的用法》:https://www.cnblogs.com/aijianshi/p/5750911.html
- cat xxx.xx | grep -C 20 ERROR
【过滤出关键字 ERROR 出现的前20行+后20行的内容】
【管道符:第一个命令的输出为第二个命令的输入】
【grep:按关键字过滤 】
【- A 后20行;-B 前20行;-C 前后20行 -after/-before】- cat xxx.xx | awk ‘{print $1,$2}’
【awk :可以将文本格式化,即按指定的格式输出】
【print $1,$2 : 只会输出 默认以空格分隔的第一和第二列的内容】指定#作为分割符号:cat awk_test.txt | awk -F# ‘{print $1,$2}’
awk更多用法参考:https://cloud.tencent.com/developer/article/1533669
生成到log文件,再用sz命令 下载到windows来查看(一般在download目录下)
cat xxx.xx | grep -C 30 ERROR > error.log 【> 新建/覆盖】 【把过滤出来的文件输出到新的文件】
cat xxx.xx| grep -C 30 ERROR >> error.log 【>> 追加】
- tail -f 【实时查看】
- tail -200f xxx.xx 实时查看文件最新200行【没有-200F的,一般脚本里用F,自己操作时f】
- tail -F xxx.xx 【F = f + retry,文件消失后会不停尝试重新获取文件】
全局搜索一个文件的名称
find / -name ‘*mysql*’ [*:模糊搜索;/ 根路径:全局会很慢,能确定部分目录就用/xxx 替换/]
vi 编辑文件的过程
vi xxx.xx 打开进入命令行模式
i 进入编辑模式
esc 进入命令行模式
shift+: 进入尾行模式
wq 保存退出;q退出;q!不保存;wq!强制保存退出
命令行模式的快捷命令
gg:光标移动至第一行
dd:删除游标所在的一整行(常用)
ndd:n为数字。删除光标所在的向下n行,如20dd则是删除光标所在的向下20行;不是从开始行删除哦;
dG:删除光标所在到最后一行的所有数据
d$:删除光标所在处,到该行的最后一个字符
d1G:删除光标所在到第一行的所有数据
d0:那个是数字0,删除光标所在到该行的最前面的一个字符
x,X:x向后删除一个字符(相当于[del]按键),X向前删除一个字符(相当于[backspace]即退格键)
nx:n为数字,连续向后删除n个字符
:set nu 显示行号
:set nonu 取消显示输入
永久显示行号:vi /etc/virc 在最后一行添加 set nu
:set fileencoding 显示编码格式
:set fileencoding=utf-8 设置编码格式
Window 和 Linux 文件&编码格式
-
在win创建的问题,可能导致linux进程不识别。
在linux上 vi 打开后,文件内容看起来一摸一样,但左下角显示 [dos] 代表是win创建的文件。
~ ~ ["address.txt" [dos] 14L, 214C ]
-
将win文件转unix
$ sudo yum install dos2unix $ dos2unix address.txt dos2unix: converting file address.txt to Unix format ...
再次打开后,就没有 [dos]
-
凡是win创建的文件都留意一下编码格式(是否UTF-8)
$ file address.txt address.txt: UTF-8 Unicode text, with CRLF line terminators
环境变量和PATH
全局环境变量:/etc/profile
个人环境变量: (~自己家目录)~/.bashrc
~/.bash_profile
最好配置在 .bashrc。【切换用户 su 不会执行.bash_profile;su - 才会】可能存在其他不会生效情况
修改配置文件后:刷新、执行配置文件 [source 或 .] (只会在当前会话,其他已经连接的会话也需要source)
source /etc/profile
. .bashrc 【第一个. 与 source同样效果,代表执行】
which java 【检查修改有没有生效】
echo $JAVA_HOME -->能输出 /usr/java/jdk1.8.0_121 是因为在/etc/profile里添加了JAVA_HOME
vi ~/.bashrc 【额外的tips】
PS1=`uname -n`":"'$USER'":"'$PWD'":>"; export PS1
于是得到了:
localhost:mysqladmin:/usr/local/mysql:>
which 和 whereis 的区别
which 是直接查找可执行命令;
whereis 不仅可以查找命令还可以查找文件位置。
别名
[root@localhost ~]# alias jk='pwd' ## 当前会话生效 【注意=前后不能有空格】
如果要永久生效需要配置在 /etc/profile 中
vi /etc/profile
添加一句 :alias jdk='echo $JAVA_HOME' 【注意=前后不能有空格】
source /etc/profile
用户
列出所有用户
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
添加用户
[root@localhost ~]# useradd liqiang
[root@localhost ~]# id liqiang
uid=1002(liqiang) gid=1002(liqiang) groups=1002(liqiang)
【 gid:主组; groups:所在的所有用户组】
查看用户、用户组
id liqiang
如果创建用户时,家目录空文件夹提前存在但没有配置文件,会报错:
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
处理办法(把缺少的文件从 [/etc/skel/.*] 复制一份过来)
[root@localhost ~]# cp /etc/skel/.* /home/liqiang/
设置密码
[root@localhost ~]# passwd liqiang
删除用户
[root@localhost ~]# userdel liqiang
【用户组下唯一用户删除时,用户组也会删】
创建用户组
[root@localhost ~]# group -g 101 dba
[root@localhost ~]# useradd -u 514 -g dba -G root -d /usr/local/mysql mysqladmin
将用户 liqiang 添加到另外一个用户组 bigdata
[root@localhost ~]# usermod -a -G bigdata liqiang
[root@localhost ~]# id liqiang
uid=1002(liqiang) gid=1002(liqiang) groups=1002(liang),1003(bigdata)
修改主组【修改gid后groups也只剩主组这一个,需要添加原来的组到groups】
[root@localhost ~]# usermod --gid bigdata liqiang
[root@localhost ~]# id liqiang
uid=1002(liqiang) gid=1003(bigdata) groups=1003(bigdata)
[root@localhost ~]# usermod -a -G liqiang liqiang
uid=1002(liqiang) gid=1003(bigdata) groups=1003(bigdata),1002(liang)
权限
r4 w2 x1
rwxr-xr-x 代表 755
第一组 rwx代表用户的权限 [读、写、执行]
第二组 r-x代表同用户组下其他用户的权限 [读、执行]
第三组 r-x代表其他用户组的权限 [读、执行]
chown -R 用户:用户组 文件夹/文件路径
chmod -R 777 文件夹/文件路径
[root@localhost ~]# chown -R mysqladmin:dba /usr/local/mysql
[root@localhost ~]# chmod -R 755 /usr/loacl/mysql
[root@localhost ~]# chmod +x /etc/rc.d/init.d/mysql
切换用户
su ruoze 切换到用户,但pwd在切换前的目录(临时)
su - ruoze 切换到该用户的家目录,且执行环境变量文件
.bash_profile su 不会执行;su - 都执行
.bashrc su 执行 ;su - 都执行
配置普通用户获取root的最大权限 [sudo]
[root@localhost ~]# vi /etc/sudoers
liqiang ALL=(ALL) NOPASSWD:ALL
-rw-r–r-- 1 root root 3 Jan 7 21:47 tmpdata.data
[liqiang @localhost ~]# vi /tmp/tmpdata.data 【会发现编辑后无法保存】[liqiang @localhost ~]# sudo vi /tmp/tmpdata.data 【获取root权限打开后就可以保存】
sudo su 一起使用的场景
[liqiang@Gargantua ~]$ su - mysqladmin
su: Authentication failure 【liqiang用户是没有权限去切换到其他普通用户的】
[liqiang@Gargantua ~]$ sudo su - mysqladmin 【需要sudo su - 一起使用】
服务
查看服务进程号,端口号
[root@localhost ~]# ps -ef|grep mysql # jps 查看java进程的pid
[root@localhost ~]# netstat -nlp|grep pid # 查看当前活跃的所有端口 sudo netstat -nlp
防火墙
云主机不需要
// 关闭 和 查看当前状态
service ipstables stop
service ipstables status
检查ip / 端口号通不通
ping ip
telnet ip:端口号 【yum install telnet】
查看系统磁盘,内存的命令
df -h
free -m # 内存剩余大小
free,Top,df的相关命令参考:https://blog.csdn.net/alawaka2018/article/details/80352216
查看机器负载
top 列表显示CPU占用
htop 详细显示CPU核心数占用/内存占用【需要yum install -y htop】
iotop 磁盘读写消耗
iftop 网络传输,网卡消耗
PID USER PR NI VIRI RES SHR %CPU TIME+ COMMAND
进程强制结束
kill -9 [PID]
PS 命令
ps命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等。常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。参考:https://www.cnblogs.com/abc8023/p/5459724.html
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
ps -e 此参数的效果和指定"A"参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。
-
查找僵尸进程
ps -ef | grep defunct # defunct 代表进程成为僵尸进程
-
或 获取stat状态为z/Z的进程。【zombie prosess】
ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' -A 参数列出所有进程 -o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令) # 可以使用 kill -HUP \<pid> 指定杀死僵尸进程,确认kill不掉,则 kill -HUP \<ppid>
-
或top 命令中状态为zombie
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
参考:
https://cloud.tencent.com/developer/article/1804818
https://cloud.tencent.com/developer/article/1114512
netstat命令参考:https://www.runoob.com/linux/linux-comm-netstat.html#
历史命令记录 查看/清空
history ; history -c ;
date 命令
使用“date -s”命令来修改系统时间
date -s 06/10/96 # 系统时间设定成1996年6月10日
date -s 13:12:00 # 将系统时间设定成下午1点12分0秒
快捷键
ctrl + a 将光标移动到当前命令头部
ctrl + e 将光标移动到当前命令末尾
linux的 /tmp 目录超过30天没有访问会自动删除
关于部署服务的任何东西不要配置在/tem下
/tmp 的权限是777,可以放一下需要传送的文件,不用考虑权限问题