Here's a concise reference guide for using `curl` to retrieve public IP and device information through various online services. This guide also includes some advanced use cases for integrating these commands into broader workflows.

### Basic Commands

#### **Get Public IP Address**
- **Plain IP Address**: 
  - Command: `curl ifconfig.me`
  - Output: Just your public IP address in plain text.
- **Detailed IP and Connection Info**:
  - Command: `curl ipinfo.io/json`
  - Output: JSON-formatted details including IP, location, ISP, and more.

#### **Alternative Services**
- **Icanhazip**:
  - Command: `curl icanhazip.com`
  - Description: Returns the IP address in plain text.
- **Ifconfig.co**:
  - Command: `curl ifconfig.co/json`
  - Description: Provides detailed JSON output similar to ipinfo.io.

### Advanced Use Cases

#### **1. Logging IP Changes**
Track changes in your public IP address over time, useful for dynamic IP users:
```bash
#!/bin/bash
CURRENT_IP=$(curl -s ifconfig.me)
LOG_FILE="ip_change_log.txt"

if [ ! -f $LOG_FILE ]; then
    echo "Starting IP: $CURRENT_IP" > $LOG_FILE
fi

LAST_IP=$(tail -n 1 $LOG_FILE | cut -d ' ' -f 3)

if [ "$CURRENT_IP" != "$LAST_IP" ]; then
    echo "$(date): IP changed to $CURRENT_IP" >> $LOG_FILE
fi
```

#### **2. Conditional Actions Based on IP Location**
Perform actions based on the geographical location of your IP:
```bash
#!/bin/bash
IP_INFO=$(curl -s ipinfo.io/json)
COUNTRY=$(echo $IP_INFO | jq -r '.country')

if [ "$COUNTRY" == "US" ]; then
    echo "Execute tasks specific to US"
    # Add commands here
else
    echo "Outside US: actions taken will differ"
    # Different commands here
fi
```

#### **3. Combining IP Data with Network Diagnostics**
Combine IP information retrieval with local network diagnostics for comprehensive reports:
```bash
#!/bin/bash
echo "Gathering Network Info..."
PUBLIC_IP=$(curl -s ifconfig.me)
PING_RESULT=$(ping -c 4 example.com)

echo "Public IP: $PUBLIC_IP"
echo "Ping Test Results:"
echo "$PING_RESULT"
```

#### **4. Scheduled IP Check with Notifications**
Use `cron` to schedule regular IP checks and send notifications if the IP changes (Linux):
```bash
# Add this script to cron jobs (crontab -e)
* */6 * * * /path/to/ip_check_script.sh
```
The script could use system notifications or email to alert you to changes.

### Considerations

- **Privacy**: Be cautious with how and where you use these services, as you are revealing your IP to them.
- **Rate Limiting**: Frequent requests to these services may be rate-limited. Use responsibly.
- **Dependence on External Services**: These commands depend on external websites, which might change their output format or availability.

This guide should serve as a comprehensive starting point for both basic and advanced usage of `curl` for IP and network-related tasks. Adjust and expand based on your specific requirements and environment.

```bash
curl -I "https://prod-grants-gov-chatbot.s3.amazonaws.com/extracts/GrantsDBExtract$(date +\%Y\%m\%d)v2.zip"
```
```bash
watch -n 1 'ls -l /home/medusa/grants_extracts/; tail -n 5 /home/medusa/cron.log'
```

```bash
# Simulate running at 03:30 CDT (before release):
TZ="$SERVER_TZ" date -d "2025-08-02 03:30" +%H && ./download_grants.sh
# Should fetch yesterday's file

# Simulate 03:45 CDT (after release):
TZ="$SERVER_TZ" date -d "2025-08-02 03:45" +%H && ./download_grants.sh
# Should fetch today's file
```