常用命令
指令 | 用途 |
---|---|
ifconfig | 显示网卡的配置 |
ls -l | 查看目录中的文件的详细信息 |
cd | 切换目录 |
cp file1 file2 | 复制文件 |
cp -r dir1 dir2 | 复制目录 |
pwd | 当前路径 |
mkdir | 新建目录 |
mv | 移动/重命名一个目录或文件 |
rm -f file | 删除文件 |
rm -rf dir | 删除目录 |
rmdir dir | 删除空文件夹 |
vim(vi) | 打开并浏览文件 |
grep str file | 在文件中查找str |
grep ^str file | 在文件中查找以 str 开始的行 |
tar -cvf 目标.tar dir | 把文件夹打包 |
tar -xvf 目标.tar -C /root | 压缩包释放到 /root目录下 |
adduser name | 添加用户 |
passwd name | 设置用户密码 |
kill -9 pid | 杀死进程 |
service iptables start(restart、stop) | 开启(重启、关闭)防火墙 |
reboot | 重启系统 |
init 3(5) | 3:dos界面 5:图形化界面(/etc/inittab修改默认启动方式【id:3:initdefault】) |
chmod 777 dir(file) | 给系统管理员操作权限 |
rpm -qa | grep xxx | 查询已安装的xxx程序 |
source /etc/profile | 使配置立即生效 |
netstat -ntlp | 查看所有的进程信息 |
data -s “2018-03-06 03:03:03” | 手动同步集群各机器时间 |
jps | 列出jvm进程 |
getconf LONG_BIT | 查看linux是32位还是64位 |
df -h | 查看磁盘使用情况 |
free -h | 查看内存使用情况 |
top | 查看进程 |
cat /proc/cpuinfo | 查看cpu信息 |
echo 1 > /proc/sys/vm/drop_caches | 清缓存 |
系统服务管理
指令 | 作用 |
---|---|
service --status-all | 查看系统所有的后台服务进程 |
service sshd status | 查看指定的后台服务进程的状态 |
service sshd stop(restart、start) | 关闭、重启,开启指定的后台服务进程 |
chkconfig httpd on | 让 httpd 服务开机自启 |
chkconfig httpd off | 让 httpd 服务开机不要自启 |
chkconfig --list httpd | 查看httpd服务状态 |
网络管理
指令 | 作用 |
---|---|
hostname | 查看主机名 |
hostname name | 修改主机名(重启后无效) |
vi /ect/sysconfig/network | 修改主机名(重启后永久生效) |
vi /etc/sysconfig/network-scripts/ifcfg-eth0 | 修改配置文件(重启后永久生效) |
service network restart | 重启网络服务 |
/etc/hosts文件 | 域名映射 |
netstat –nlpt | 获取进程名、进程号以及用户 ID |
防火墙打开3306端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables status
时间
指令 | 作用 |
---|---|
date | 查看时间和日期 |
cal | 本月月历 |
date -s 03/06/2018 | 设将系统日期设定成2009年11月3日的命令 |
date -s 14:52:52 | 将系统时间设定成下午2点52分52秒的命令 |
hwclock -w | 将当前时间和日期写入BIOS,避免重启后失效 |
date -R | 查看当前时区 |
tzselect | 设置linux服务器时区 |
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime | 设置中国时区使用亚洲/上海(+8) |
加入crontab
echo "*/20 * * * * /usr/sbin/ntpdate -u ntp.api.bz >/dev/null &" >> /var/spool/cron/root
ntpdate ntp.api.bz
[root@node01 hadoop]# ntpdate ntp.api.bz
17 Feb 21:56:06 ntpdate[13563]: step time server 114.118.7.163 offset 204815.068987 sec
[root@node01 hadoop]# date
Sun Feb 17 21:56:10 CST 2019
可用的NTP服务器地址
Name | IP | Location |
---|---|---|
210.72.145.44 | 210.72.145.44 | 中国(国家授时中心) |
ntp.api.bz | 47.98.146.45 | NTP服务器(上海) |
time.nist.gov | 美国 | |
ntp.fudan.edu.cn | 复旦 | |
time.windows.com | 微软公司授时主机(美国) | |
asia.pool.ntp.org | 台警大授时中心(台湾) | |
133.100.11.8 | 133.100.11.8 | 日本(福冈大学) |
time-a.nist.gov | 129.6.15.28 | NIST,Gaithersburg,Maryland |
time-b.nist.gov | 129.6.15.29 | NIST,Gaithersburg,Maryland |
time-a.timefreq.bldrdoc.gov | 132.163.4.101 | NIST,Boulder,Colorado |
time-b.timefreq.bldrdoc.gov | 132.163.4.102 | NIST,Boulder,Colorado |
time-c.timefreq.bldrdoc.gov | 132.163.4.103 | NIST,Boulder,Colorado |
utcnist.colorado.edu | 128.138.140.44 | UniversityofColorado,Boulder |
time.nist.gov | 192.43.244.18 | NCAR,Boulder,Colorado |
time-nw.nist.gov | 131.107.1.10 | Microsoft,Redmond,Washington |
nist1.symmetricom.com | 69.25.96.13 | Symmetricom,SanJose,California |
nist1-dc.glassey.com | 216.200.93.8 | Abovenet,Virginia |
nist1-ny.glassey.com | 208.184.49.9 | Abovenet,NewYorkCity |
nist1-sj.glassey.com | 207.126.98.204 | Abovenet,SanJose,California |
nist1.aol-ca.truetime.com | 207.200.81.113 | TrueTime,AOLfacility,Sunnyvale,California |
nist1.aol-va.truetime.com | 64.236.96.53 | TrueTime,AOLfacility,Virginia |
使用快捷方式设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date命令的功能是显示和设置系统日期和时间。
该命令的一般格式为: date [选项] 显示时间格式(以+开头,后面接格式)
date 设置时间格式
命令中各选项的含义分别为:
-d datestr, --date datestr 显示由datestr描述的日期
-s datestr, --set datestr 设置datestr 描述的日期
-u, --universal 显示或设置通用时间 时间域
% H 小时(00..23)
% I 小时(01..12)
% k 小时(0..23)
% l 小时(1..12)
% M 分(00..59)
% p 显示出AM或PM
% r 时间(hh:mm:ss AM或PM),12小时
% s 从1970年1月1日00:00:00到目前经历的秒数
% S 秒(00..59)
% T 时间(24小时制)(hh:mm:ss)
% X 显示时间的格式(%H:%M:%S)
% Z 时区 日期域
% a 星期几的简称( Sun..Sat)
% A 星期几的全称( Sunday..Saturday)
% b 月的简称(Jan..Dec)
% B 月的全称(January..December)
% c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
% d 一个月的第几天(01..31)
% D 日期(mm/dd/yy)
% h 和%b选项相同
% j 一年的第几天(001..366)
% m 月(01..12)
% w 一个星期的第几天(0代表星期天)
% W 一年的第几个星期(00..53,星期一为第一天)
% x 显示日期的格式(mm/dd/yy)
% y 年的最后两个数字( 1999则是99)
% Y 年(例如:1970,1996等)
需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。
SSH(安全外壳协议)
简介:Secure Shell 远程连接协议
-
通过输入用户名和密码连接
ssh 用户名@ip地址
-
免密登陆
切换到.ssh目录
cd ~/.ssh
生成ssh免登陆密钥
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id 用户名@ip地址
上传本地文件到服务器
scp /path/filename username@servername:/path/
上传本地目录到服务器
scp -r local_dir(本地目录) /path username@servername:/path/remote_dir/(远程目录)
从服务器上下载文件
scp username@servername:/path/filename /local_dir(本地目录)
从服务器上下载文件
scp -r username@servername:/path/remote_dir/(远程目录) /local_dir(本地目录)
25个必须记住的SSH命令
OpenSSH是SSH连接工具的免费版本。telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃听,连接劫持和其它攻击。此外,OpenSSH提供了安全隧道功能和多种身份验证方法,支持SSH协议的所有版本。
SSH是一个非常伟大的工具,如果你要在互联网上远程连接到服务器,那么SSH无疑是最佳的候选。下面是通过网络投票选出的25个最佳SSH命令,你必须牢记于心。
(注:有些内容较长的命令,在本文中会显示为截断的状态。如果你需要阅读完整的命令,可以把整行复制到您的记事本当中阅读。)
1、复制SSH密钥到目标主机,开启无密码SSH登录
ssh-copy-id user@host
如果还没有密钥,请使用ssh-keygen命令生成。
2、从某主机的80端口开启到本地主机2001端口的隧道
ssh -N -L2001:localhost:80 somemachine
现在你可以直接在浏览器中输入http://localhost:2001访问这个网站。
3、将你的麦克风输出到远程计算机的扬声器
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
这样来自你麦克风端口的声音将在SSH目标计算机的扬声器端口输出,但遗憾的是,声音质量很差,你会听到很多嘶嘶声。
4、比较远程和本地文件
ssh user@host cat /path/to/remotefile | diff /path/to/localfile –
在比较本地文件和远程文件是否有差异时这个命令很管用。
5、通过SSH挂载目录/文件系统
sshfs name@server:/path/to/folder /path/to/mount/point
从http://fuse.sourceforge.net/sshfs.html下载sshfs,它允许你跨网络安全挂载一个目录。
6、通过中间主机建立SSH连接
ssh -t reachable_host ssh unreachable_host
Unreachable_host表示从本地网络无法直接访问的主机,但可以从reachable_host所在网络访问,这个命令通过到reachable_host的“隐藏”连接,创建起到unreachable_host的连接。
7、将你的SSH公钥复制到远程主机,开启无密码登录 – 简单的方法
ssh-copy-id username@hostname
8、直接连接到只能通过主机B连接的主机A
ssh -t hostA ssh hostB
当然,你要能访问主机A才行。
9、创建到目标主机的持久化连接
ssh -MNf <user>@<host>
在后台创建到目标主机的持久化连接,将这个命令和你~/.ssh/config中的配置结合使用:
Host host
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster no
所有到目标主机的SSH连接都将使用持久化SSH套接字,如果你使用SSH定期同步文件(使用rsync/sftp/cvs/svn),这个命令将非常有用,因为每次打开一个SSH连接时不会创建新的套接字。
10、通过SSH连接屏幕
ssh -t remote_host screen –r
直接连接到远程屏幕会话(节省了无用的父bash进程)。
11、端口检测(敲门)
knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000
在一个端口上敲一下打开某个服务的端口(如SSH),再敲一下关闭该端口,需要先安装knockd,下面是一个配置文件示例。
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 3000,4000,5000
seq_timeout = 5
command = /sbin/iptables -A INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 5000,4000,3000
seq_timeout = 5
command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp –dport 22 -j ACCEPT
tcpflags = syn
12、删除文本文件中的一行内容,有用的修复
ssh-keygen -R <the_offending_host>
在这种情况下,最好使用专业的工具。
13、通过SSH运行复杂的远程shell命令
ssh host -l user $(<cmd.txt)
更具移植性的版本:
ssh host -l user “`cat cmd.txt`”
14、通过SSH将MySQL数据库复制到新服务器
mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME | ssh -C user@newhost “mysql -uUSER -pPASS NEW_DB_NAME”
通过压缩的SSH隧道Dump一个MySQL数据库,将其作为输入传递给mysql命令,我认为这是迁移数据库到新服务器最快最好的方法。
15、删除文本文件中的一行,修复“SSH主机密钥更改”的警告
sed -i 8d ~/.ssh/known_hosts
16、从一台没有SSH-COPY-ID命令的主机将你的SSH公钥复制到服务器
cat ~/.ssh/id_rsa.pub | ssh user@machine “mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys”
如果你使用Mac OS X或其它没有ssh-copy-id命令的*nix变种,这个命令可以将你的公钥复制到远程主机,因此你照样可以实现无密码SSH登录。
17、实时SSH网络吞吐量测试
yes | pv | ssh $host “cat > /dev/null”
通过SSH连接到主机,显示实时的传输速度,将所有传输数据指向/dev/null,需要先安装pv。
如果是Debian:
apt-get install pv
如果是Fedora:
yum install pv
(可能需要启用额外的软件仓库)。
18、如果建立一个可以重新连接的远程GNU screen
ssh -t user@some.domain.com /usr/bin/screen –xRR
人们总是喜欢在一个文本终端中打开许多shell,如果会话突然中断,或你按下了“Ctrl-a d”,远程主机上的shell不会受到丝毫影响,你可以重新连接,其它有用的screen命令有“Ctrl-a c”(打开新的shell)和“Ctrl-a a”(在shell之间来回切换),请访问http://aperiodic.net/screen/quick_reference阅读更多关于screen命令的快速参考。
19、继续SCP大文件
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file
它可以恢复失败的rsync命令,当你通过VPN传输大文件,如备份的数据库时这个命令非常有用,需要在两边的主机上安装rsync。
rsync –partial –progress –rsh=ssh $file_source $user@$host:$destination_file local -> remote
或
rsync –partial –progress –rsh=ssh $user@$host:$remote_file $destination_file remote -> local
20、通过SSH W/ WIRESHARK分析流量
ssh root@server.com ‘tshark -f “port !22″ -w -' | wireshark -k -i –
使用tshark捕捉远程主机上的网络通信,通过SSH连接发送原始pcap数据,并在wireshark中显示,按下Ctrl+C将停止捕捉,但也会关闭wireshark窗口,可以传递一个“-c #”参数给tshark,让它只捕捉“#”指定的数据包类型,或通过命名管道重定向数据,而不是直接通过SSH传输给wireshark,我建议你过滤数据包,以节约带宽,tshark可以使用tcpdump替代:
ssh root@example.com tcpdump -w – ‘port !22′ | wireshark -k -i –
21、保持SSH会话永久打开
autossh -M50000 -t server.example.com ‘screen -raAd mysession’
打开一个SSH会话后,让其保持永久打开,对于使用笔记本电脑的用户,如果需要在Wi-Fi热点之间切换,可以保证切换后不会丢失连接。
22、更稳定,更快,更强的SSH客户端
ssh -4 -C -c blowfish-cbc
强制使用IPv4,压缩数据流,使用Blowfish加密。
23、使用cstream控制带宽
tar -cj /backup | cstream -t 777k | ssh host ‘tar -xj -C /backup’
使用bzip压缩文件夹,然后以777k bit/s速率向远程主机传输。Cstream还有更多的功能,请访问http://www.cons.org/cracauer/cstream.html#usage了解详情,例如:
echo w00t, i’m 733+ | cstream -b1 -t2
24、一步将SSH公钥传输到另一台机器
ssh-keygen; ssh-copy-id user@host; ssh user@host
这个命令组合允许你无密码SSH登录,注意,如果在本地机器的~/.ssh目录下已经有一个SSH密钥对,ssh-keygen命令生成的新密钥可能会覆盖它们,ssh-copy-id将密钥复制到远程主机,并追加到远程账号的~/.ssh/authorized_keys文件中,使用SSH连接时,如果你没有使用密钥口令,调用ssh user@host后不久就会显示远程shell。
25、将标准输入(stdin)复制到你的X11缓冲区
ssh user@host cat /path/to/some/file | xclip
你是否使用scp将文件复制到工作用电脑上,以便复制其内容到电子邮件中?xclip可以帮到你,它可以将标准输入复制到X11缓冲区,你需要做的就是点击鼠标中键粘贴缓冲区中的内容。
sudo
sudo 是为所有想使用 root 权限的普通用户设计的。可以让普通用户具有临时使用 root 权限的权利。只需输入自己账户的密码即可。当然这个普通用户必须在/etc/sudoers 文件中有配置项、才具有使用 sudo 的权利。 没有配置权限之前,普通用户无法进行 root 权限操作。
使用 root 用户编辑**/etc/sudoers** 文件,给普通用户授权
命令行输入 visudo,打开**/etc/sudoers** 文件,加入如下的内容,保存。
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
username ALL=(ALL) ALL
这样普通用户就可以使用 sudo 执行 root 权限的命令了
sudo 的工作过程如下:
- 当用户执行 sudo 时,系统会主动寻找/etc/sudoers 文件,判断该用户是否有执行 sudo 的权限
- 确认用户具有可执行 sudo 的权限后,让用户输入用户自己的密码确认
- 若密码输入成功,则开始执行 sudo 后续的命令
如果想要更加精准的控制,就需要理解配置中的含义。
username ALL=(ALL) ALL
第一个 ALL 是指网络中的主机,我们可以指定主机名,这样 username 只可以
在此主机上执行后面的命令。第二个括号里的 ALL 是指目标用户,也就是以谁的
身份去执行命令。最后一个 ALL 是指命令名了。
例如,我们想让 username用户在 host1 主机上以 user1 的身份执行 kill 命
令,就这样编写配置文件:
username host1=(user1) /bin/kill
只允许 username用户以 root 身份在 host1上执行 ls 、cat 命令,并且执行时候免输入密码。
username host1=NOPASSWD: /bin/ls,/bin/cat
挂载(mount)命令
在 linux 操作系统中,挂载是指将一个设备(通常是存储设备)挂接到一个已存在的目录上。要访问存储设备中的文件,通过访问这个挂载目录来访问。
命令格式:mount [-t vfstype] [-o options] device dir
-t vfstype 指定文件系统的类型。mount 会自动选择正确的类型。
常用类型有:光盘镜像 iso9660、linux 文件网络共享 nfs 等等。
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
device 要挂接(mount)的设备
dir 设备在系统上的挂接点(mount point)
案例:挂载光驱
mkdir /mnt/cdrom mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/
将设备/dev/cdrom 挂载到 挂载点/mnt/cdrom 中
案例:挂载光盘镜像文件(.iso)
mkdir /mnt/centos
mount -o loop /root/Centos-6.7.DVD1.iso /mnt/centos
案例:卸载 umount
umount /mnt/cdrom
yum
yum(Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及CentOS 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
yum 机制的强大之处在于 yum 源。yum 源相当是一个目录项,当我们使用 yum机制安装软件时,若需要安装依赖软件,则 yum 机制就会根据在 yum 源中定义好的路径查找依赖软件,并将依赖软件安装好。
yum 源分为网络 yum 源和本地 yum 源。
yum 源配置文件有两个。一是直接配置在/etc/yum.conf 中,其中包含一些主要的配置信息。另外就是/etc/yum.repos.d/下的 xx.repo 后缀文件, 默认都会被加载进来。
案例:使用 CentOS 镜像创建本地 yum 源
1、挂载 iso 镜像,拷贝所有文件至本地 yum 目录
mkdir /dev/centios /mnt/local_yum
mount -o loop /root/CentOS-6.7-x86_64-bin-DVD1.iso /dev/centios
cp -r /dev/centios/* /mnt/local_yum/
2、修改 yum 源配置
cd /etc/yum.repos.d/
rename .repo .repo.bak *.repo
cp CentOS-Base.repo.bak CentOS-Local.repo
vi CentOS-Local.repo
[local_yum]
name=This is a local repo
baseurl=file:///mnt/local_yum
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
3、更新 yum 配置
yum clean all
yum repolist all
通过上面的步骤操作,已经可以使用本地 yum 源了。有需要进行安装的软件
包就可以直接运行”yum install xxx“进行安装了。
还可以参考附件资料,使用 DVD1 和 DVD2 镜像共同制作本地 yum 源。
yum常用命令
yum的命令形式一般是如下:yum [options] [command] [package …]
指令 | 作用 |
---|---|
yum list installed | 查看安装的所有程序 |
yum list installed | grep 程序 | 查看安装的程序(利用管道符) |
yum list | 显示所有已经安装和可以安装的程序包 |
yum remove package | 删除package软件包 |
yum install | 全部安装 |
yum install package | 安装指定的安装包package |
yum groupinsall group | 安装程序组group |
yum update | 全部更新 |
yum update package | 更新指定程序包package |
yum check-update | 检查可更新的程序 |
yum upgrade package | 升级指定程序包package |
yum groupupdate group | 升级程序组group |
yum info package | 显示安装包信息package |
yum常用包
yum install telnet 建立连接传输数据
yum install lrzsz 上传文件 # rz 选择文件上传
yum -y install ntp ntpdate 同步时间
yum安装mysql
1.新开的云服务器,需要检测系统是否自带安装mysql
# yum list installed | grep mysql
2.如果发现有系统自带mysql,果断这么干
# yum -y remove mysql-libs.x86_64
3.随便在你存放文件的目录下执行,这里解释一下,由于这个mysql的yum源服务器在国外,所以下载速度会比较慢,还好mysql5.6只有79M大,而mysql5.7就有182M了,所以这是我不想安装mysql5.7的原因
# wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
4.接着执行这句,解释一下,这个rpm还不是mysql的安装文件,只是两个yum源文件,执行后,在/etc/yum.repos.d/ 这个目录下多出mysql-community-source.repo和mysql-community.repo
# rpm -ivh mysql-community-release-el6-5.noarch.rpm
5.这个时候,可以用yum repolist mysql这个命令查看一下是否已经有mysql可安装文件
#yum repolist all | grep mysql
6.安装mysql 服务器命令(一路yes):
# yum install mysql-community-server
7.安装成功后
# service mysqld start
8.由于mysql刚刚安装完的时候,mysql的root用户的密码默认是空的,所以我们需要及时用mysql的root用户登录(第一次回车键,不用输入密码),并修改密码
# mysql -u root
# use mysql;
# update user set password=PASSWORD("这里输入root用户密码") where User='root';
例如: update user set password=PASSWORD("123456") where User='root';
# flush privileges;
解决编码错误 修改/etc/my.cnf 文件
[mysqld]
character_set_server=utf8
//查看字符编码
show variables like '%char%';
9.查看mysql是否自启动,并且设置开启自启动命令
# chkconfig --list | grep mysqld
# chkconfig mysqld on
在linux中很多软件的端口都被”防火墙”限止,我们需要将防火墙关闭
防火墙打开3306端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
查看防火墙状况
/etc/init.d/iptables status
学习阶段我们也可以直接将防火墙关闭
(服务器别用)service iptables stop;
10.mysql安全设置(系统会一路问你几个问题,看不懂复制之后翻译,基本上一路yes):
# mysql_secure_installation
mysql离线安装
1.上传压缩包
2.解压
3.查看已安装的mysql rpm -qa |grep mysql
4.删除已安装的mysql rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
5.安装我们自己的rpm包 rpm -ivh *.rpm
6.设置mysql的root密码,首先后台启动mysql cd /usr/lib
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
7.进入mysql终端:mysql -u root mysql
8.设置密码: UPDATE user SET Password=PASSWORD(‘admin’) where USER=‘root’ and host=‘root’ or host=‘localhost’;
9.刷新权限:FLUSH PRIVILEGES;
10.退出mysql exit;
11.重启mysql:/etc/init.d/mysql restart
12 重新使用新密码登陆 mysql -uroot -p
- 重新设置一下密码:SET PASSWORD = PASSWORD(‘admin’);
13.开启远程登陆:Grant all privileges on . to ‘root’@’%’ identified by ‘admin’ with grant option;
14.刷新权限列表 :FLUSH PRIVILEGES;
grep
格式:grep [option] pattern [file]
使用实例:
ps -ef | grep sshd 查找指定 ssh 服务进程
ps -ef | grep sshd | grep -v grep 查找指定服务进程,排除 gerp 本身
ps -ef | grep sshd –c 查找指定进程个数
把a.txt中的内容覆盖到b.txt中
cat a.txt > b.txt
把a.txt中的内容追加到b.txt中
cat a.txt >> b.txt
cat a.txt | grep -f b.txt 从文件中读取关键词进行搜索
输出 a.txt 文件中含有从 b.txt 文件中读取出的关键词的内容行
cat a.txt | grep –nf b.txt 从文件中读取关键词进行搜索,显示行号
grep -n 'linux' test.txt 从文件中查找关键词,并显示行号
cat test.txt |grep ^u 找出以 u 开头的行内容
cat test.txt |grep ^[^u] 输出非 u 开头的行内容
cat test.txt |grep hat$ 输出以 hat 结尾的行内容
cat test.txt |grep -E "ed|at" 显示包含 ed 或者 at 字符的内容行
find
使用实例:
find . -name "*.log" -ls 在当前目录查找以.log 结尾的文件,并显示
find /root/ -perm 777 查找/root/目录下权限为 777 的文件
find . -type f -name "*.log" 查找当目录,以.log 结尾的普通文件
find . -type d | sort 查找当前所有目录并排序
find . -size +100M 查找当前目录大于 100M 的文件
locate
使用实例:
locate /etc/sh 搜索 etc 目录下所有以 sh 开头的文件
locate pwd 查找和 pwd 相关的所有文件
Linux 的cp命令
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
参数:
-a 或 --archive 此参数的效果和同时指定"-dpR"参数相同
-b 或 --backup 删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-l 或 --link 对源文件建立硬链接,而非复制文件
-p 或 --preserve 保留源文件或目录的属性,包括所有者、所属组、权限与时间
-P 或 --parents 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经丰在
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive 递归处理,将指定目录下的文件及子目录一并处理
-s 或 --symbolic-link 对源文件建立符号链接,而非复制文件
-S <备份字尾字符串> 或 --suffix=<备份字尾字符串> 用"-b"参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号"~"
-u 或 --update 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件
-v 或 --verbose 显示执行过程
-V <备份方式> 或 --version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种:
1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增
2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定
3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份
-x 或 --one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件
--help 显示在线帮助
--sparse=<使用时机> 设置保存希疏文件的时机
--version 显示版本
示例:
.复制文件,只有源文件较目的文件的修改时间新时,才复制文件
cp -u -v file1 file2
.将文件file1复制成文件file2
cp file1 file2
.采用交互方式将文件file1复制成文件file2
cp -i file1 file2
.将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制的模式
cp -f file1 file2
.将目录dir1复制成目录dir2
cp -R file1 file2
.同时将文件file1、file2、file3与目录dir1复制到dir2
cp -R file1 file2 file3 dir1 dir2
.复制时保留文件属性
cp -p a.txt tmp/
.复制时保留文件的目录结构
cp -P /var/tmp/a.txt ./temp/
.复制时产生备份文件
cp -b a.txt tmp/
.复制时产生备份文件,尾标 ~1~格式
cp -b -V t a.txt /tmp
.指定备份文件尾标
cp -b -S _bak a.txt /tmp
wc
-
命令格式
wc [可选参数] 文件名
-
参数介绍
-l 统计行数
-c 统计字节数
-w 统计单词数
-L 打印最长行的长度
-help 显示帮助的信息
–version 显示版本信息
crontab 定时器配置
crontab 是 Unix 和 Linux 用于设置周期性被执行的指令。通过 crontab 命令,可以在固定间隔时间执行指定的系统指令或 shell 脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。
crontab 安装:
yum install crontabs
服务操作说明:
service crond start ## 启动服务
service crond stop ## 关闭服务
service crond restart ## 重启服务
service crond reload ## 重新载入配置
service crond status ## 查看 crontab 服务状态:
chkconfig crond --list ## 查看 crontab 服务是否已设置为开机启动
chkconfig crond on ## 加入开机自动启动
命令格式
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
参数说明:
-u user:用来设定某个用户的 crontab 服务
file:file 是命令文件的名字,表示将 file 做为 crontab 的任务列表文件并载入 crontab。
-e:编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l:显示某个用户的 crontab 文件内容。如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r:删除定时任务配置,从 /var/spool/cron 目录中删除某个用户的 crontab文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i:在删除用户的 crontab 文件时给确认提示。
命令示例:
crontab file [-u user] ## 用指定的文件替代目前的 crontab。
crontab -l [-u user] ## 列出用户目前的 crontab.
crontab -e [-u user] ## 编辑用户目前的 crontab.
配置说明、实例
* | * | * | * | * | command |
---|---|---|---|---|---|
分 | 时 | 日 | 月 | 周 | 命令 |
-
第 1 列表示分钟 1~59 每分钟用*或者 */1 表示
-
第 2 列表示小时 0~23(0 表示 0 点)
-
第 3 列表示日期 1~31
-
第 4 列表示月份 1~12
-
第 5 列标识号星期 0~6(0 表示星期天)
-
第 6 列要运行的命令
配置实例:
*/1 * * * * date >> /root/date.txt 每分钟执行一次 date 命令 30 21 * * * /usr/local/etc/rc.d/httpd restart 每晚的 21:30 重启 apache。 45 4 1,10,22 * * /usr/local/etc/rc.d/httpd restart 每月 1、10、22 日的 4 : 45 重启 apache。 10 1 * * 6,0 /usr/local/etc/rc.d/httpd restart 每周六、周日的 1 : 10 重启 apache。 0,30 18-23 * * * /usr/local/etc/rc.d/httpd restart 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 apache。 23-7/1 * * * /usr/local/etc/rc.d/httpd restart 晚上 11 点到早上 7 点之间,每隔一小时重启 apache
tail
tail -f
等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
tail -F
等同于--follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
tailf
等同于tail -f -n 10(貌似tail -f或-F默认也是打印最后10行,然后追踪文件),与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电
Shell编程
- Shell 参数传递
脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… $0 表示当前脚本名称。
- 特殊字符
字符 | 作用 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程 ID 号 |
$! | 后台运行的最后一个进程的 ID 号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$? | 显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。 |
- Shell 运算符
((a++))
$[a+b]
流程控制
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
- for
for N in 1 2 3
do
echo $N
done
或 for N in 1 2 3; do echo $N; done
或 for N in {1..3}; do echo $N; done
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done
或 for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done
-
while
while expression do command … done -------------------- i=1 while ((i<=3)) do echo $i let i++ done -------------------- while true do command done
-
case
case 值 in 模式 1) command1 command2 ... commandN ;; 模式 2) command1 command2 ... commandN ;; esac
-
函数
shell脚本是从上往下执行的,所有函数在使用前必须定义,不然会报错(command not found),但会往下执行。
[ function ] funname [()] { action; [return int;] }
find批量删除空文件及空文件夹脚本
linux下批量删除空文件(大小等于0的文件)的方法
find . -name "*" -type f -size 0c | xargs -n 1 rm -f
用这个还可以删除指定大小的文件,只要修改对应的 -size 参数就行,例如:
find . -name "*" -type f -size 1024c | xargs -n 1 rm -f
就是删除1k大小的文件。(但注意不要用 -size 1k,这个得到的是占用空间1k,不是文件大小1k的)。
查询出所有的空文件夹
find -type d -empty
删除文件
列出搜索到的文件
find . -name "shuaige.txt" -exec ls {} ;
批量删除搜索到的文件
find . -name "shuaige.txt" -exec rm -f {} ;
删除前有提示
find . -name "shuaige.txt" -ok rm -rf {} ;
删除当前目录下面所有 test 文件夹下面的文件
find . -name "test" -type d -exec rm -rf {} ;
删除文件夹下面的所有的.svn文件
find . -name '.svn' -exec rm -rf {} ;
注:
1.{}和之间有一个空格
2.find . -name 之间也有空格
3.exec 是一个后续的命令,{}内的内容代表前面查找出来的文件
linux 后台运行和关闭、查看后台任务
-
&
加载一个命令的最后,可以把这个命令放到后台执行
-
ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
-
jobs
查看当前有多少在后台运行的命令
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
-
fg
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
-
bg
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
-
kill
- 法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
- 法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:Ctrl+c
-
nohup
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
防火墙端口
防火墙打开3306端口
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables status
防火墙端口关闭
netstat -anp | grep 3306
centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下:
firewall-cmd --zone=public --add-port=80/tcp --permanent
返回success为成功
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效
重启防火墙:
systemctl restart firewalld.service
关闭防火墙:
systemctl stop firewalld.service
查看监听(Listen)的端口
netstat -lntp
检查端口被哪个进程占用
netstat -lnp|grep 8080
chown
利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符
语法
chown [-cfhvR] [--help] [--version] user[:group] file...
参数
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
- –help : 显示辅助说明
- –version : 显示版本
实例
将文件 file1.txt 的拥有者设为 users 群体的使用者 runoob :
chown runoob:users file1.txt
将目前目录下的所有文件与子目录的拥有者皆设为 users 群体的使用者 lamport :
chown -R lamport:users *
linux的文件权限解析
查看文件权限
[root@localhost logs]# ll
total 16
-rw-r--r--. 1 root root 0 Aug 6 19:12 2018-5-6.log
-rw-r--r--. 1 root root 0 Aug 6 19:13 2018-5-7.log
-rw-r--r--. 1 root root 1 Aug 6 19:13 2018-5-8.log
-rw-r--r--. 1 root root 0 Aug 6 19:15 2018-6-7.log
-rw-r--r--. 1 root root 0 Aug 6 19:17 2018-6-8.log
-rw-r--r--. 1 root root 79 Aug 6 20:39 aa.txt
drwxr-xr-x. 2 root root 4096 Aug 6 21:10 bin
-rwxr--r--. 1 root root 70 Aug 6 19:20 count.sh
[root@localhost logs]#
先解释rwx是什么意思
r:对文件是指可读取内容 对目录是可以ls
w:对文件是指可修改文件内容,对目录 是指可以在其中创建或删除子节点(目录或文件)
x:对文件是指是否可以运行这个文件,对目录是指是否可以cd进入这个目录
再解释-rwxr–r--是什么意思
文件类型 | 属主(user) | 属组(group) | 其他用户 |
---|---|---|---|
d | rwx | r-x | rw- |
普通文件(-)目录(d)符号链接(l) | 7 | 5 | 6 |
- r:读取权
- w:写入权
- x:执行权
- -:无操作权限
数字授权
属主(user) | 属组(group) | 其他用户 | ||||||
---|---|---|---|---|---|---|---|---|
r | w | x | r | w | x | r | w | x |
4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
[root@localhost logs]# ll
total 12
-rw-r--r--. 1 root root 79 Aug 6 20:39 aa.txt
drwxr-xr-x. 2 root root 4096 Aug 6 21:10 bin
-rwxr--r--. 1 root root 70 Aug 6 19:20 count.sh
[root@localhost logs]# chmod u-x count.sh
[root@localhost logs]# ll
total 12
-rw-r--r--. 1 root root 79 Aug 6 20:39 aa.txt
drwxr-xr-x. 2 root root 4096 Aug 6 21:10 bin
-rw-r--r--. 1 root root 70 Aug 6 19:20 count.sh
[root@localhost logs]# chmod u+x count.sh
[root@localhost logs]# ll
total 12
-rw-r--r--. 1 root root 79 Aug 6 20:39 aa.txt
drwxr-xr-x. 2 root root 4096 Aug 6 21:10 bin
-rwxr--r--. 1 root root 70 Aug 6 19:20 count.sh
[root@localhost logs]#
当前用户具备所有的权限,当前用户所属的组拥有可读可执行但是没有写的权限,其他用户可读可写但是没法执行
chmod 756 a.txt
非数字授权
chmod u=rwx,g=rx,o=rx a.txt
chmod g-rw haha.dat 表示将haha.dat对所属组的rw权限取消
chmod o-rw haha.dat 表示将haha.dat对其他人的rw权限取消