Zh/SteamCMD

Steam 控制台客户端（SteamCMD）是一个命令行版本的 Steam 客户端。它的主要用途是在一个命令行界面的 Steam 客户端上安装及更新各种可用的专用服务端。它适用于使用 SteamPipe 内容分发系统的游戏。所有游戏已经从旧的 半条命专用服务器更新工具迁移到了 SteamCMD。
== 下载 SteamCMD ==
=== Windows ===
1. 创建一个为 SteamCMD 准备的文件夹。
例如
 C:\steamcmd
2. 下载适用于 Windows 系统的 SteamCMD：https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip
3. 提取 zip 中的文件至文件夹。
=== Linux ===
创建一个名为 steam 的用户帐户以安全地运行 SteamCMD，并将其与操作系统的其余部分隔离。以 root 用户身份登录时请勿运行 steamcmd——这样做会带来安全风险。
1. 以 root 用户身份创建 steam 用户：
 useradd -m steam
2. 进入其主文件夹：
 cd /home/steam
==== 安装来自软件仓库的软件包 ====
1. 建议从您的分发软件仓库安装 SteamCMD 软件包（如果有）：
Ubuntu/Debian
 sudo apt install steamcmd
RedHat/CentOS
 yum install steamcmd
Arch Linux
 git clone https://aur.archlinux.org/steamcmd.git
 cd steamcmd
 makepkg -si
2. 链接 steamcmd 可执行文件：
 ln -s /usr/games/steamcmd steamcmd
==== Docker ====
如果你的服务器正在运行 Docker，您可以简单地使用：
docker run -it --name=steamcmd cm2network/steamcmd bash
steamcmd.sh location: /home/steam/steamcmd
该映像可用作基于Steam的专用服务器的基础映像。
例如：
https://hub.docker.com/r/cm2network/csgo/
您可以在此处找到相关的 Docker Hub 页面：
https://hub.docker.com/r/cm2network/steamcmd/
==== 手动安装 ====
1. 在开始之前，您必须先安装运行 SteamCMD 所需的依赖项：
Ubuntu/Debian 64-Bit
 sudo apt-get install lib32gcc1
RedHat/CentOS
 yum install glibc libstdc++
RedHat/CentOS 64-Bit
 yum install glibc.i686 libstdc++.i686
2. 以 root 用户身份升级至 steam 用户：
 su - steam
如果您不是以 root 用户身份登录，而是使用sudo来行使管理权限，请以如下所示来升级至 steam 用户：
 sudo -iu steam
3. 为 SteamCMD 创建目录并切换至该目录。
 mkdir ~/Steam && cd ~/Steam
4. 下载并解压缩适用于 Linux 的 SteamCMD。
 curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
中国内地用户可使用以下命令以使用内地节点：
 curl -sqL "https://media.st.dl.bscstorage.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
5. 安装tmux 和/或 screen 以简化服务器管理
 sudo apt-get install tmux screen -y;
=== macOS ===
1.打开终端并创建一个为 SteamCMD 准备的目录。
 mkdir ~/steamcmd && cd ~/steamcmd
2. 下载并解压缩适用于 macOS 的 SteamCMD。
 curl -sqL ' https://steamcdn-a.akamaihd.net/client/installer/steamcmd_osx.tar.gz ' | tar zxvf -
中国内地用户可使用以下命令以使用内地节点：
 curl -sqL ' https://media.st.dl.bscstorage.net/client/installer/steamcmd_osx.tar.gz ' | tar zxvf -
== 运行 SteamCMD ==
在第一次运行 SteamCMD 时将自动更新并显示一个Steam>的输入提示。输入help来获取更多信息。
=== Windows ===
打开一个命令行窗口并启动 SteamCMD。
 cd C:\steamcmd
 steamcmd
=== Linux/macOS ===
打开一个终端并启动 SteamCMD.
如果您是通过软件仓库中的软件包安装的：
 cd ~
 steamcmd
如果您是手动安装的：
 cd ~/Steam
 ./steamcmd.sh
== 登录 SteamCMD ==
=== 匿名登录 ===
下载大多数游戏服务端，你可以选择匿名登录。
 login anonymous
=== 使用 Steam 帐户登录 ===
一些服务端需要你使用一个 Steam 帐户来登录。
 login <用户名>
下一步请输入您的密码。
如果 Steam 令牌已经在用户帐户上激活，查看你电子邮箱中的 Steam 令牌验证码并输入它。这仅仅只是第一次登录时需要（以及当你删除了 SteamCMD 用于存储登录信息文件的时候）。
如果你已经成功登录了你的帐户，你应该会看到一条消息。
== 下载一个应用 ==
1. 打开 SteamCMD 并登录它。
2. 设置你的应用安装目录（注意：在 Linux/macOS 下使用正斜杠/，在Windows 下使用反斜杠\）。
 force_install_dir <路径>
例如 一个名叫csgo_ds的在当前目录下的目录：
 force_install_dir ./csgo_ds/
在Windows ： force_install_dir .\csgo_ds\
3. 安装或更新应用使用app_update命令（在这里提供Steam 应用 ID）。 要同时校验应用的话，需添加validate到命令里。要下载测试分支的话，使用-beta <测试名称>选项 – 例如，半条命专用服务器的测试分支名为beta以及起源专用服务器的测试分支名为prerelease。一些测试分支设置了密码；如果要从它那里下载，需同时添加-betapassword <密码>选项。
 app_update <应用ID> [-beta <测试名称>] [-betapassword <密码>] [validate]
半条命专用服务器是一个特例：应用 ID 都是90，必须先选择模组。 这是通过设置配置选项mod来请求变量的。
 app_set_config <应用 ID> <选项名称> <变量选项>
: 例如：安装并校验反恐精英：全球攻势专用服务器：
 app_update 740 validate
: 例如：安装并校验军团要塞专用服务器：
 app_set_config 90 mod tfc
 app_update 90 validate
: 例如：安装并校验测试版本的半条命专用服务器（半条命）：
 app_update 90 -beta beta validate
: 例如：安装并校验测试版本的反恐精英：起源专用服务器：
 app_update 232330 -beta prerelease validate
: 例如：安装并校验私人测试版本的物竞天择2专用服务器（测试名称alpha，测试密码natsel）：
: [测试名称]是私人测试分支的名称
: [测试密码]是私人测试分支的密码
 app_update 4940 -beta alpha -betapassword natsel validate
3. 完成之后，输入quit从而正确地从 Steam 服务器内注销帐户。
 quit
=== 验证 ===
 validate
验证是一个命令以用来检查服务端的所有文件以确保他们符合 SteamCMD 所应该下载到本地的文件。如果你认为文件可能已丢失或已损坏，那么此命令将会非常有用。
建议你只在初次安装时或如果服务端有问题时才使用此命令。
=== 所支持的服务端 ===
已知可使用 SteamCMD 安装的服务端可在专用服务器列表页面查询。需要注意的是额外命令需在 app_update 之前被执行。
== 自动执行 SteamCMD ==
这里有两个方法来自动执行 SteamCMD 。（在Linux/macOS 下使用./steamcmd.sh来替代steamcmd。） 
=== 命令行 ===
在命令行追加命令需要在其前面添加加号，例如：
 steamcmd +login anonymous +force_install_dir ./csgo_ds +app_update 740 +quit
安装半条命的一个特定游戏模组，比如反恐精英：零点行动：
 steamcmd +login anonymous +force_install_dir ./czero +app_set_config 90 mod czero +app_update 90 +quit
安装一个需要登录的游戏，就像杀戮空间：
 steamcmd +login <用户名> <密码> +force_install_dir .\KFServer\ +app_update 215350 +quit
=== 创建脚本 ===
1. 把你的 SteamCMD 命令放置在文本文件中。（你可以添加注释，只需在其前面添加//。）例如：
// 更新反恐精英：全球攻势专用服务器
//
@ShutdownOnFailedCommand 1 //如果一次更新多个服务端请设置为0
@NoPromptForPassword 1
login <username> <password>
//一些服务端并不需要登录
//login anonymous 
force_install_dir ./csgo_ds
app_update 740 validate
quit
2. 带着+runscript选项运行 SteamCMD，指向你之前创建的文件。例如：
 steamcmd +runscript csgo_ds.txt
== 跨平台安装 ==
它可以选择下载其他平台里 SteamCMD 所应该下载的文件，即使它不是当前正在运行的平台。 这是使用@sSteamCmdForcePlatformType变量来完成的（是的，在变量名称的开头有两个“s”。）例如：在 Linux 下载 Windows 的反恐精英：全球攻势专用服务器，你可以运行下面的命令：
 ./steamcmd.sh +@sSteamCmdForcePlatformType windows +login anonymous +force_install_dir ../csgo_ds +app_update 740 validate +quit
或者使用下面的脚本：
@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
@sSteamCmdForcePlatformType windows
login anonymous
force_install_dir ../csgo_ds
app_update 740 validate
quit
这个变量支持windows，macos和linux。
== Windows 软件/脚本 ==
=== condenser ===
condenser 是一个用于下载，配置和启动 Steam 专用服务器应用的引导程序。
=== SteamCMD AutoUpdater ===
安装和自动更新任何游戏服务端
GitHub仓库：
https://github.com/C0nw0nk/SteamCMD-AutoUpdate-Any-Gameserver
=== SteamCMD GUI ===
这个工具可以使用户在 Windows 上不通过命令行或批处理文件来使用 SteamCMD。
GitHub 仓库：
https://github.com/DioJoestar/SteamCMD-GUI
===SteamCMD Guardian 1.2===
在这里查看并下载：http://pastebin.com/BRUbsGQh
== Linux 脚本 ==
===Linux Game Server Managers===
right|thumb|370px|Linux Game Server Manager
Linux Game Server Managers 是一个快捷的命令行工具，通过 SteamCMD 来轻松地部署和管理各种游戏专用服务器。 
==== 特点 ====
*安装服务端 (SteamCMD)
*启动/关闭/重启 服务端
*更新服务端 (SteamCMD)
*监控服务端 (包括用电子邮件通知)
*查看服务端的详细信息
*备份服务端
*可以进入服务端控制台
====支持的服务端====
现在支持40多个不同的游戏服务端并且数量还在上升。详情列表请访问网站。
==== 链接 ====
网站： https://gameservermanagers.com
GitHub 仓库： https://github.com/dgibbs64/linuxgsm
===SteamCMD Guardian 1.2===
下面的脚本已在 Debian Wheezy 上测试。
在这里查看并下载：
http://pastebin.com/hcpMpmaZ
安装教程 
为了使这个脚本的工作，我们需要一个工作位置。你最好创建个用户（例如 steam）以及它自己的根目录（/home/steam）并且通过 SSH，tty 且使用 su 来登录它。
# 创建文件 
#: nano updateserver.sh
# 粘贴脚本代码
# 修改脚本代码，在DL_SV*=一行的最后添加一个游戏。
# 使用关闭文件，其次是，最后。
# 给用户执行文件的权限
#: chmod u+x ./updateserver.sh
# 运行文件
#: ./updateserver.sh
这个文件将自动安装，更新 SteamCMD，以及安装所有选定的游戏（最多4个）。再次运行该文件将更新游戏。
== 已知的问题 ==
=== 乱码 ===
如果出现乱码的问题，请尝试更换窗口所调用的字体。
方法
# 右键宽口标题
# 进入属性页面
# 进入字体标签页
# 在字体一栏选择 Consolas 字体或新宋体字体等，只要选择的字体无乱码问题即可，可凭个人偏好选择字体
# 点击确定保存设定
=== ERROR! Failed to install app 'xxxxxx' (No subscription) ===
如果你得到 'No subscription' 的错误，请你尝试在下载之前先登录帐户或者需要你已购买该游戏/服务端。因此你需要使用 Steam 用户名和密码来登录 – 如果这无法帮到你，你可能需要先在 Steam 购买游戏的副本。查看专用服务器列表.
例如
steamcmd +login <用户名> <密码>
=== 在64位Linux 上需使用32位的库 ===
由于 SteamCMD 是一个32位应用，所以需要32位的库。
可能会出现以下错误：
 steamcmd: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决方法取决于你的 Linux 发行版本：
==== 基于 Debian 的发行版（Ubuntu，Mint 等。） ====
 sudo apt-get install lib32stdc++6
在 Debian 7 "Wheezy" 你可能会遇到这样的错误：
 The following packages have unmet dependencies: ia32-libs : Depends: ia32-libs-multiarch but it is not installable
 E: Unable to correct problems, you have held broken packages.
要修复这个错误，你需要执行下面的操作：
 dpkg --add-architecture i386
 apt-get update
 apt-get install lib32gcc1
==== 基于Red Hat 的发行版（RHEL，Fedora，CentOS 等。） ====
 yum install glibc.i686 libstdc++.i686
==== Arch Linux ====
首先不要忘记开启 multilib 仓库。
 pacman -S lib32-gcc-libs
=== Login Failure: No Connection ===
在Linux 服务器上，你可能会遇到一个“Login Failure: No Connection”的错误。这或许是因为缺少 iptables 规则。你需要要执行下面几行内容：
iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65355 -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65355 -j ACCEPT
在这里可以找到需要的端口列表：https://support.steampowered.com/kb_article.php?ref=8571-GLVN-8711&l=simplified%20chinese
在Windows 服务器上，你可能会遇到 "SteamUpdater: Error: Download failed: http error 0" 和 "SteamUpdater: Error: Steam needs to be online to update. Please confirm your network connection and try again." 。这通常通过设置 IE(Internet Explorer)的 Internet 选项中连接标签页中的局域网(LAN)设置中的自动配置框中的自动检测设置来修复。 
# 打开Internet Explorer (IE)。
# 点击“工具” → “Internet选项”
# 点击“连接”标签页
# 在底部，你应该可以看到“局域网(LAN)设置”。=
# 选中第一个框（“自动检测设置”）
# 点击确定或应用。再次尝试运行 SteamCMD；如果仍然无法正常工作。尝试降低你的'该区域的允许级别'到中等或更低。你可以在“Internet 选项”中的“安全”标签页发现它。
=== SteamCMD 启动错误 ===
==== Unable to locate a running instance of Steam ====
在开启 Linux 服务端时，你可能会得到以下错误：
 [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam, or a local steamclient.dll.
通过链接steamclient.so到~/.steam/sdk32/steamclient.so目录来解决问题：
 ln -s steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
==== Linux 的 ulimit 启动错误====
当开始运行脚本时一些用户可能会得到ulimit 错误 (没有权限/无法打开文件)。这个错误是因为ulimit的-n参数（文件描述符数目）设置过低造成的。SteamCMD使用标准的命令代替Shell初始脚本来自动修改ulimit，但是一些服务器系统可能在启动后禁止提高ulimit的值（或者通过root来突破上限设置）。
这可以改变并固定ulimit文件描述符数目：
 ulimit -n 2048
如果出现错误(no permission)，你需要登录root来改变这个参数。想要检查当前设置，输入ulimit -a;系统将显示多行内容，你需要找到：
 open files (-n) 1024
在这种情况下，"1024" 是当前值。
root也可以在/etc/security/limits.conf文件修改此限制。
在大多数情况下，你只会得到一个警告消息，但它不会停止运行 SteamCMD 。
=== 只下载了半条命专用服务器引擎 ===
当试图下载一个半条命模组就像是军团要塞时，最初它只是下载半条命专用服务器的引擎文件，而不是模组。这种情况同时发生在普通版和测试版。你可能需要尝试多次直到已下载完所有所需的文件，只要完成了一次，下一次应该就会正常更新。 
在这里有这个问题的解决方法：https://danielgibbs.co.uk/2013/11/hlds-steamcmd-workaround-appid-90/
这只是删除了 appmanifest 文件，替换从第三方下载的版本，这也许可行！ 虽然首先你将会得到一个错误，抱怨说出了问题，但这只是因为那个被删除的文件。
旁注，由于某种原因，CS 总是可以安装完成。
== 也可以看看 ==
* 起源专用服务器
* 半条命专用服务器
* 专用服务器列表
* SteamCMDui
Category:Steam
Category:Steam Applications
Category:Dedicated Server